структуре – решени задаци

1. Комплексни број представља се у облику структуре која садржи реални и имагинарни део комплексног броја. Пројектовати програмски модул за рад са комплексним бројевима који садржи следеће функције:
– састављање комплексног броја од реалног и имагинарног дела
– израчунавање збира, разлике, производа и количника два комплексна броја
– читање комплексног броја преко главног улаза рачунара
– писање комплексног броја на главни излаз рачунара
Написати главни програм за приказивање могућности горњег модула.

Решење:

/* kompleks.c */
#include<math.h>
#include<stdio.h>

typedef struct {double re, im; } Kompl;

Kompl kompl (double r, double i){
	Kompl c;	
c.re=r; c.im=i;	return c;}

Kompl zbir (Kompl a, Kompl b){
	a.re+=b.re; a.im+=b.im;	return a;}

Kompl razlika (Kompl a, Kompl b){
	a.re-=b.re; a.im-=b.im;	return a;}

Kompl proizvod (Kompl a, Kompl b){
Kompl c; 
c.re=a.re*b.re-a.im*b.im; c.im=a.im*b.re+a.re*b.im; return c;}

Kompl kolicnik (Kompl a, Kompl b){
	Kompl c; 	double d=pow(b.re,2)+pow(b.im,2);
	c.re=(a.re*b.re+a.im*b.im)/d;c.im=(a.im*b.re-a.re*b.im)/d; 	return c;}

Kompl citaj (void){
	Kompl c;	
scanf("%lf%lf",&c.re,&c.im);	return c;}

void pisi(Kompl a){	printf("%.3f%cj%.3f",a.re,(a.im<0?'-':'+'),fabs(a.im));}

/* glavni program */
#include"kompleks.c"

main()
{
	Kompl x,y,z,j={0,1};
	while(1)
	{
		printf("\nprvi broj(re,im)? "); x=citaj();
		printf("\ndrugi broj(re,im)? "); y=citaj();
		if(y.re==0&&y.im==0)break;
		z=zbir(x,y);printf("x+y= ");pisi(z);printf("\n");
		z=razlika(x,y);printf("x-y= ");pisi(z);printf("\n");
		z=proizvod(x,y);printf("x*y= ");pisi(z);printf("\n");
		z=kolicnik(x,y);printf("x/y= ");pisi(z);printf("\n");
	}
	z=proizvod(j,j);printf("\nj^2= ");pisi(z);printf("\n");
}

2. Структура studenti садржи следећа поља: prezime, ime, broj_indeksa и mesto_stanovanja. Написати програм који уноси податке за n студената (n<100), сортира их по пољу prezime и штампа сортиран низ.

Решење:

I – један модул, само главни програм

#include<stdio.h>
#include<string.h>
#define MAX 100

main()
{
	struct studenti
	{
		char prezime[15];
		char ime[15];
		int broj_indeksa;
		char mesto_stanovanja[15];
	};

	struct studenti student[MAX], pom;
	int n, i, j;
	printf("unesi broj studenata: ");scanf("%d", &n);
	printf("\n");
	printf("********************************\n"
			"*     PODACI O STUDENTIMA      *\n"
			"********************************\n");
	for(i=0;i<n;i++)
	{
		printf("R.B.%d\n",i+1);
		printf("Prezime: ");scanf("%s", &student[i].prezime);
		printf("Ime: ");scanf("%s", &student[i].ime);
		printf("Broj indeksa: ");scanf("%d", &student[i].broj_indeksa);
	printf("Mesto stanovanja: ");scanf("%s", &student[i].mesto_stanovanja);
		printf("\n\n");
	}
	for(i=0; i<n-1; i++)
	{
		for(j=i+1; j<n; j++)
		{
			if(strcmp(student[j].prezime,student[i].prezime)<0)
			{
				pom=student[i];
				student[i]=student[j];
				student[j]=pom;
			}
		}
	}
	for(i=0; i<n; i++)
	{
		printf("%15s%15s ",student[i].prezime,student[i].ime);
		printf("%5d%15s\n",student[i].broj_indeksa,student[i].mesto_stanovanja);
	}
}

II – модуларно решење:

/* student.c */
#include<stdio.h>
#include<string.h>
#define MAX 100

typedef struct {
	char prezime[15];
	char ime[15];
	int broj_indeksa;
	char mesto_stanovanja[15]; } Studenti;

void unesi(Studenti student[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("R.B.%d\n",i+1);
		printf("Prezime: ");scanf("%s", &student[i].prezime);
		printf("Ime: ");scanf("%s", &student[i].ime);
		printf("Broj indeksa: ");scanf("%d", &student[i].broj_indeksa);
	printf("Mesto stanovanja: ");scanf("%s", &student[i].mesto_stanovanja);
		printf("\n\n");
	}
}

void sortiraj(Studenti student[],int n)
{
	int i,j; Studenti pom;
	for(i=0; i<n-1; i++)
		for(j=i+1; j<n; j++)
			if(strcmp(student[j].prezime,student[i].prezime)<0){
			pom=student[i];student[i]=student[j];student[j]=pom;}
}

void pisi(Studenti student[],int n)
{
	int i;
	for(i=0; i<n; i++)
	{
		printf("%15s%15s ",student[i].prezime,student[i].ime);
	printf("%5d%15s\n",student[i].broj_indeksa,student[i].mesto_stanovanja);
	}
}
 
/* glavni program */
#include<stdio.h>
#include<string.h>
#include"strukturaStudent.c"
#define MAX 100

main()
{
	Studenti student[MAX];
	int n;
	printf("unesi broj studenata: ");scanf("%d", &n);
	printf("\n");
	printf("********************************\n"
		"*     PODACI O STUDENTIMA      *\n"
		"********************************\n");
	unesi(student,n);
	sortiraj(student,n);
	pisi(student,n);
}

3. Написати програмски модул у коме се описује структура Tacka чија су поља координате тачке, и у коме су описане функције за рад са структуром Tacka:
– формирање податка Tacka од два цела броја
– одређивање растојања између две тачке
– одређивање координата најближе тачке координатном почетку из датог скупа тачака.
У главном програму унети низ тачака и приказати координате најближе тачке.

Решење:

/* tacka.c */
typedef struct {int x,y;} Tacka;

Tacka pravi_tacku (int x, int y)
{
	Tacka t;
	t.x=x;t.y=y;
	return t;
}

#include<math.h>
double rastojanje (Tacka g, Tacka h)
{
	return sqrt(pow(g.x-h.x,2)+pow(g.y-h.y,2));
}

const Tacka NULA={0,0};

Tacka *najbliza (Tacka a[], int n)
{
	Tacka *min=a;
	double r=rastojanje(a[0],NULA);int i;
	for(i=1;i<n;i++)
	{
		double s=rastojanje(a[i],NULA);
		if (s<r) {r=s;min=a+i;}
	}
	return min;
}

/* glavni program */
#include<stdio.h>
#include"tacka.c"

main()
{
	Tacka a[100], r; int i, n;
	printf("unesi n: ");scanf("%d",&n);
	printf("unesi elemente niza:\n");
	for(i=0;i<n;i++)
		{
			printf("%d. x= ",i+1);scanf("%d",&a[i].x);
			printf("y= ");scanf("%d",&a[i].y);
			printf("\n");
		}
	r=*najbliza(a,n);
	printf("koordinate najblize tacke koordinatnom pocetku su: x=%d, y=%d\n",r.x,r.y);
}
Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

w

Повезивање са %s