Динамички низови и динамичке матрице – решени задаци

1. Написати програм који сортира динамички низ од најмањег до највећег елемента.

#include<stdio.h>
#include<stdlib.h>
int main()
{
	while (1)
	{
		int n,*a,i,j,p;
		printf("duzina niza? ");scanf("%d", &n);
		if (n<=0) break;
		a=malloc(n*sizeof(int));
		printf("unesi elemente niza");
		for (i=0; i<n;i++)scanf("%d",&a[i]);
		for (i=0; i<n-1; i++)
		{
			for (j=i+1; j<n; j++)
				if (a[j]<a[i]){p=a[i];a[i]=a[j];a[j]=p;}
		}
		printf("uredjeni niz: ");
		for (i=0; i<n; i++)printf("%d\t",a[i]);
		printf("\n");
free(a);
	}
	return 0;
}

2. Написати програм који формира и исписује динамичку матрицу чији је сваки елеменат једнак: aij=100*i*j (водити рачуна у којим границама се крећу индекси код матрица у програмском језику C, како би се избегле колоне са свим елементима једнаким 0).

#include <stdio.h>
#include<stdlib.h>
int main()
 {
      int m,n,i,j,**a,k;
      printf("unesi dimenzije matrice"); scanf("%d%d",&m,&n);
      a=malloc(m*sizeof(int*)); /* matricu definisemo kao niz nizova, zbog toga smo promenljivu a definisali kao pokazivac na pokazivac. najpre dodeljujemo prostor za redove matrice, a to je m nizova. Nakon toga u svakom od tih m nizova definisemo n celih brojeva. Ukoliko dodela memorije po nizovima nije uspela, onda moramo oslobadjati niz po niz, sve do niza kome nije uspesno dodeljena memorija! */
if (a == NULL) {printf("Greska prilikom alokacije memorije!\n");exit(1);}
for (i=0; i<m; i++){
	a[i]=malloc(n*sizeof(int));
	if (a[i] == NULL){printf("Greska prilikom alokacije memorije!\n");
				for(k=0;k<i;k++)
				free(a[k]);
				exit(1);
				}
	for(j=0;j<n;j++)
	{
	a[i][j]=100*(i+1)*(j+1);
      printf("%d\t",a[i][j]);}
	printf("\n");
      }
	free(a);
      return 0;
 }

3. Написати програм у програмском језику C у који уносимо динамичку матрицу димензија mXn, а након тога исписати унету матрицу.

#include <stdio.h>
 #include<stdlib.h>

int main()
 {
      int m,n,i,j,**a,k;
      printf("unesi dimenzije matrice");scanf("%d%d",&m,&n);
      a=malloc(m*sizeof(int*));
if (a == NULL) {printf("Greska prilikom alokacije memorije!\n");exit(1);}
for (i=0; i<m; i++){
	a[i]=malloc(n*sizeof(int));
	if (a[i] == NULL){printf("Greska prilikom alokacije memorije!\n");
				for(k=0;k<i;k++)
				free(a[k]);
				exit(1);
				}}
      printf("unesi elemente matrice");
      for(i=0;i<m;i++)
                 for(j=0;j<n;j++) scanf("%d",&a[i][j]);

      printf("uneta matrica:\n");
      for(i=0;i<m;i++)
      {
           for(j=0;j<n;j++) printf("%d\t",a[i][j]);
           printf("\n");
      }
      free(a);
return 0;
 }

4. Написати програм за транспоновање матрице целих бројева. Матрицу сместити у динамичку зону меморије. Програм треба да обрађује произвољан број матрица.

#include<stdio.h>
#include<stdlib.h>
main()
{
while(1)
{
int **a,**b,m,n,i,j;
printf("broj vrsta i kolona?");
scanf("%d%d",&m,&n);
if(m==0||n==0)break;
a=malloc(m*sizeof(int *));
for(i=0;i<m;i++)
{
a[i]=malloc(n*sizeof(int));
for(j=0;j<n;j++)scanf("%d",&a[i][j]);
}
b=malloc(n*sizeof(int *));
for(i=0;i<n;i++)
{b[i]=malloc(m*sizeof(int));
for(j=0;j<m;j++)b[i][j]=a[j][i];
}
for(i=0;i<m;i++)free(a[i]);free(a);
a=b;i=m;m=n;n=i;
printf("transponovana matrica:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0;i<m;i++)free(a[i]);free(a);
}
}

5. Написати програм за израчунавање задатог степена симетричне матрице целих бројева. Матрицу сместити у динамичку зону меморије. Програм треба да обрађује произвољан број матрица.

#include<stdio.h>
#include<stdlib.h>
main()
{
while(1)
{
long **a,**b,**c,**d;
int m,n,i,j,k,st;

printf("dimenzija matrice?");
scanf("%d",&m);
if(m<=0)break;
a=malloc(m*sizeof(long *));
b=malloc(m*sizeof(long *));
c=malloc(m*sizeof(long *));
for(i=0;i<m;i++)
{
a[i]=malloc((i+1)*sizeof(long));
b[i]=calloc((i+1),sizeof(long));
c[i]=malloc((i+1)*sizeof(long));
for(j=0;j<=i;j++)scanf("%ld",&a[i][j]);
b[i][i]=1;
}
printf("stepen?");scanf("%d",&n);
for(st=1;st<=n;st++)
{
for(i=0;i<m;i++)
for(k=0;k<=i;k++)
for(c[i][k]=j=0;j<m;j++)
c[i][k]+=(i>j?a[i][j]:a[j][i])*(j>k?b[j][k]:b[k][j]);
d=c;c=b;b=d;
}
printf("\n%d. stepen matrice:\n",n);
for(i=0;i<m;i++)
{
for(j=0;j<=i;j++)printf("%ld\t",b[i][j]);
printf("\n");
}
for(i=0;i<m;i++){free(a[i]);free(b[i]);free(c[i]);}free(a);free(b);free(c);
}
}

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

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

WordPress.com лого

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

Google+ photo

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

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

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

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

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

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