Matice. Ukazatel jako výstupní argument funkce. Dynamická alokace vektoru.
Podrobně: Vektor a matice (statická alokace), základní aritmetické operace na maticích. Násobení matic. Dynamická alokace pole. Funkce součet vektoru s dynamickou alokací.
Vysvětlené progamy: Načtení čtvercové matice (z klávesnice, ze souboru). Výpis matice na obrazovku. Součet matic. Test symetrická matice. Součin čtvercových matic. Součin matice a vektoru. Dynamická alokace vektoru. Součet dvou vektorů s dynamickou alokaci. |
#include <stdio.h> main() { int n; float A[100][100]; int i,j; printf("Zadej rozmer ctvercove matice n:\n"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("A[%d][%d]=",i,j); scanf("%f",&A[i][j]); } } }Načtení čtvercové matice ze souboru.
#include <stdio.h> main() { int n; float A[100][100]; FILE *fid; int i,j; fid=fopen("matice.txt","r"); if (fid==NULL) { printf("Soubor matice.txt neexistuje.\n"); return 1; } fscanf(fid,"%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { fscanf(fid,"%f",&A[i][j]); } } fclose(fid); }
printf("Matice:\n------------\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%f ",A[i][j]); } printf("\n"); }
main() { float A[100][100],B[100][100],C[100][100]; int n,nB; int i,j; /* nacteni matice A ... DOPLNTE */ /* nacteni matice B ... DOPLNTE */ if (n!=nB) { printf("Matice nelze scitat!\n"); return 1; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { C[i][j]=A[i][j]+B[i][j]; } } /* TISK MATICE C ... DOPLNTE */ }
main() { float A[100][100]; int n; int i,j; int symetricka; /* NACTI MATICI A ... DOPLNIT */ symetricka=1; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if (A[i][j]!=A[j][i]) { symetricka=0; } } } if (symetricka==1) { printf("Matice je symetricka.\n"); } else { printf("Matice neni symetricka.\n"); } }
for(i=0;i<n;i++) { for(j=0;j<n;j++) { sum=0.; for(k=0;k<n;k++) { sum=sum+A[i][k]*B[k][j]; } C[i][j]=sum; } }
int i,j; float sum; for(i=0;i<n;i++) { sum=0.; for(j=0;j<n;j++) { sum=sum+A[i][j]*U[j]; } X[i]=sum; } }
main() { int i,n; float *X; printf("Zadej velikost vektoru:\n"); scanf("%d",&n); X=(float *)malloc(sizeof(float)*n); printf("Zadej vektor:\n"); for(i=0;i<n;i++) { scanf("%f",&X[i]); } printf("Vektor:\n"); for(i=0;i<n;i++) { printf("X[%d]=%f\n",i,X[i]); } free(X); }
float *soucet_vektoru(float *U,float *V,int n) { float *S; int i; S=(float *)malloc(sizeof(float)*n); for(i=0;i<n;i++) { S[i]=U[i]+V[i]; } return S; } main() { float a[3],b[3]; float *soucet; a[0]=1; a[1]=2; a[2]=-1; b[0]=3; b[1]=-3; b[2]=5; soucet=soucet_vektoru(a,b,3); printf("X=(%f %f %f)\n",soucet[0],soucet[1],soucet[2]); free(soucet); }
Úlohy pro 10. cvičení:
Součin obdélníkových matic, součin vektor krát obdélníková matice apod.