Results 1 to 7 of 7
Hybrid View
-
10th May 2010 18:30 #1
...
:
1. , .
2. .
3. .
4. .
5. .
6. , .
.2 .6 , ... , , . , >_<
Code:#include<stdio.h> #include<stdlib.h> #include<string.h> double** setMatr (int m,int n) /* po zadadeni razmeri syzdava matrica ot elementi*/ {int i; double** A; A = (double**) malloc(m); /*zadelq pamet za matricata*/ for (i=0; i<m; i++) { A[i] = (double*) malloc(n); } for (i=0; i<m; i++) /*vyvejda vseki edin element ot matricata*/ { for (int j=0; j<n; j++) { printf("El[%i][%i]= ",i,j); scanf("%d",&A[i][j]); } } return A; } double** multiply (double** A, double** B,int n,int m,int k,int p) /*po zadadeni 2 matrici i tehnite razmernosti izvyr6va umnojenieto*/ { if ((A==NULL)||(B==NULL)) /* ako edna ot 2te matrici e prazna vry6ta NULL i gre6ka */ { printf("Error in input in one of the Matrixes\n"); return NULL; } if (m!=k) /* ako sa nesyvmestimi vry6ta NULL i gre6ka */ { printf("Error: Matrix mismatch, unable to multiply!\n"); return NULL; } int i; double** C=(double**) malloc(n); /*zadelq pamet za novata matrica*/ for (i=0; i<n; i++) { C[i]= (double*) malloc(p); } for (i=0; i<n; i++) /*izvyr6va umnojenieto */ { for (int j=0; j<p; j++) { C[i][j]=0; for (int z=0; z<m; z++) C[i][j]=C[i][j]+(A[i][z]*B[z][j]); } } return C; } int getRow( FILE* file) /* namira broq na redovete vyv fail sys pravilno zadadena matrica*/ { if (file == NULL) {printf("Open Error");return NULL;} /* ako faila ne e otvoren vry6ta NULL i izvejda gre6ka */ int row=1; /* za izbegvane na gre6ki na row se zadava na4alna stoinot 1 */ rewind(file); char ch; while ((ch = fgetc(file))!=EOF) { if (ch == '\n') row++; /*uveli4ava broq na redovete pri sre6tane na \n */ } return row; /* vry6ta broq na kolonite*/ } int getCol (FILE* file) /* namira broq na kolonite vyv fail sys pravilno zadadena matrica*/ { if (file == NULL) {printf("Open Error");return NULL;}/* ako faila ne e otvoren vry6ta NULL i izvejda gre6ka */ int col=1;/* za izbegvane na gre6ki na col se zadava na4alna stoinot 1 */ rewind(file); char ch; while (((ch = fgetc(file))!='\n')&&(ch!=EOF)) { if (ch==' ') col++; /* pri sre6tane na ' ' uveli4ava broq na kolonite */ } return col;/*vry6ta broq na redovete*/ } double** getMatr(const char* filename,int *n,int *m) /* pro4ita fail, i syzdava matrica */ { int c,r; FILE* myFile; myFile = fopen (filename, "r"); /* otvarq faila za 4etene */ if (myFile == NULL) /* proverqva dali fail-a e otvoren, ako ne- vry6ta gre6ka i NULL */ { printf("Eror opening file!\n"); return NULL; } c= getCol(myFile); r= getRow(myFile);/* namira broq na redovete i kolonite */ int i; double** Matr = (double**) malloc (r); /* zadelq pamet za novata matrica */ for (i=0; i<r; i++) { Matr[i] = (double*)malloc (c); } rewind(myFile); for (i =0; i<r; i++) /*zapo4va obhojdaneto na fial-a */ { for (int j=0; j<c; j++) { char ch; char num[20]; int counter=0; /* syzdava vremenen char* koito zapisva 4islata mejdu intervalite*/ while(((ch=fgetc(myFile))!=' ')&&(ch!=EOF)&&(ch!='\n')) { num[counter]=ch; counter++; } num[counter]='\0'; Matr[i][j]=atof(num); /*namereniq char* se prevry6ta vyv double */ } } *n=r; /* zapisva broq na redovete i kolonite vyv promenlivite zadadeni v na4aloto na funkciqta*/ *m=c; fclose(myFile);/*zatvarq fail-a*/ return Matr; /* vry6ta ukazatel kym Matricata kato rezultat */ } void writeFile (char* filename, double** C,int n,int m) /*Zapisva marica vyv fail */ { FILE* myFile; myFile = fopen(filename,"w"); /* otvarq fail-a za 4etene */ for (int i=0; i<n; i++) /* obhojda matricata i q zapisva vyv fail*/ { for (int j=0; j<m; j++) { fprintf(myFile,"%d",C[i][j]); if (j!=m-1) fprintf(myFile," "); } fprintf(myFile,"\n"); } fclose(myFile);/* zatvarq fail-a*/ } int main() /* main */ { double** A=NULL; double** B=NULL; double** C=NULL; /* zadavane na 3te matrici */ int n=0,m=0,k=0,p=0; /* zadavane na defult-ni razmernosti */ int sw; do /* glavniq while na menu-to */ { printf("Chose one of the folowing options: \n 1:Enter Matrix1 \n 2:Enter Matrix2 \n 3:Execute Multipy \n 4:Leave Program \n"); scanf("%i",&sw); int sw2; switch(sw) { case 1: { do /* izbor dali da se vyvede matricata ot fail ili ry4no, i vry6ta gre6ka ako ne se vyvede vqrnoto 4islo dokato ne se vyvede vqrno 4islo */ { printf("1 to enter from file \n 2 to enter manualy \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); }while((sw2!=1)&&(sw2!=2)); switch(sw2) { case 1: { char name[50]; printf("Input filename(including extension): "); scanf("%s",name); /* vyvejdane na imeto na faila ot koito da se kopira matricata */ A=getMatr(name,&n,&m); }break; case 2: {/* vyvejdane na matricata ry4no */ printf("Enter the number of rows: "); scanf("%i",&n); printf("Enter the number of columns: "); scanf("%i",&m); A=setMatr(n,m); }break; } }break; case 2: { do /* izbor dali da se vyvede matricata ot fail ili ry4no, i vry6ta gre6ka ako ne se vyvede vqrnoto 4islo dokato ne se vyvede vqrno 4islo */ { printf("1 to enter from file \n 2 to enter manualy \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); }while((sw2!=1)&&(sw2!=2)); switch(sw2) { case 1: { char name[50]; printf("Input filename(including extension): "); scanf("%s",name); /* vyvejdane na imeto na faila ot koito da se kopira matricata */ B=getMatr(name,&k,&p); }break; case 2: {/* vyvejdane na matricata ry4no */ printf("Enter the number of rows: "); scanf("%i",&k); printf("Enter the number of columns: "); scanf("%i",&p); B=setMatr(k,p); }break; } }break; case 3: { if ((A==NULL)||(B==NULL)) /* ako edna ot 2te matrici ne e vyvedena pravilno vry6ta gre6ka */ { printf("Eror:one or more matrixes aren't correctly entered!\n"); break; } C=multiply(A,B,n,m,k,p); /* izvyr6va se umnojenieto */ if (C==NULL) break; do {/* izbor dali da izvede novata matrica ili da q zapi6e vyv fail, ako ne e vyveden pravilno, vry6ta gre6ka dokato ne e vyveden pravilno */ printf("1: save into a file \n 2: not to save into a file \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); switch (sw2) { case 1: {/*izbira imeto na fail-a v koito da se zapi6e i zapisva vseki element vyv fail-a */ char name[50]; printf("Input filename(including extension): "); scanf("%s",name); writeFile(name,C,n,p); }break; case 2: {/* izvejda matricata na ekran */ for (int i=0; i<n; i++) { for (int j=0; j<p; j++) { printf("C[%i][%i]= %d ",i,j,C[i][j]); } } }break; } }while((sw2!=1)&&(sw2!=2)); }break; } if (sw<1||sw>4) printf("Input Eror"); }while (sw!=4); if (A!=NULL) free (A); if (B!= NULL) free(B); if (C!= NULL) free(C); /* osvobojdava pametta zadelena za matricite */ return 0; }Last edited by KiLLBiLL; 11th May 2010 at 21:55.
-
10th May 2010 20:37 #2Registered User
Join Date: Dec:2007
Location: Sofia
Posts: 366
[CODE] , .
, . ,
A[i] = (double*) malloc(n);
n double, .
A[i] = (double*) malloc(n*sizeof(double));
-
11th May 2010 00:28 #3
, double scanf("%d", &A[i][j]), int. double scanf("%lf", &A[i][j]). printf fprintf, "%lf". fscanf.
. .
, ,
.
( bold). - .
Code:#include<stdio.h> #include<stdlib.h> #include<string.h> /* po zadadeni razmeri syzdava matrica ot elementi*/ double** setMatr (int m, int n) { int i; double** A; A = (double**) malloc(m*sizeof(double)); /*zadelq pamet za matricata*/ for (i=0; i<m; i++) { A[i] = (double*) malloc(n*sizeof(double)); } for (i=0; i<m; i++) /*vyvejda vseki edin element ot matricata*/ { for (int j=0; j<n; j++) { printf("El[%i][%i]= ",i,j); scanf("%lf",&A[i][j]); } } return A; } /*po zadadeni 2 matrici i tehnite razmernosti izvyr6va umnojenieto*/ double** multiply (double** A, double** B, int n, int m, int k, int p) { if ((A==NULL) || (B==NULL)) /* ako edna ot 2te matrici e prazna vry6ta NULL i gre6ka */ { printf("Error in input in one of the Matrixes\n"); return NULL; } if (m != k) /* ako sa nesyvmestimi vry6ta NULL i gre6ka */ { printf("Error: Matrix mismatch, unable to multiply!\n"); return NULL; } int i; double** C = (double**) malloc(n*sizeof(double)); /*zadelq pamet za novata matrica*/ for (i=0; i<n; i++) { C[i]= (double*) malloc(p*sizeof(double)); } for (i=0; i<n; i++) /*izvyr6va umnojenieto */ { for (int j=0; j<p; j++) { C[i][j] = 0; for (int z=0; z<m; z++) C[i][j] = C[i][j] + (A[i][z] * B[z][j]); } } return C; } int getRow( FILE* file) /* namira broq na redovete vyv fail sys pravilno zadadena matrica*/ { if (file == NULL) {printf("Open Error");return NULL;} /* ako faila ne e otvoren vry6ta NULL i izvejda gre6ka */ int row=1; /* za izbegvane na gre6ki na row se zadava na4alna stoinot 1 */ rewind(file); char ch; while ((ch = fgetc(file))!=EOF) { if (ch == '\n') row++; /*uveli4ava broq na redovete pri sre6tane na \n */ } return row; /* vry6ta broq na kolonite*/ } int getCol (FILE* file) /* namira broq na kolonite vyv fail sys pravilno zadadena matrica*/ { if (file == NULL) {printf("Open Error");return NULL;}/* ako faila ne e otvoren vry6ta NULL i izvejda gre6ka */ int col=1;/* za izbegvane na gre6ki na col se zadava na4alna stoinot 1 */ rewind(file); char ch; while (((ch = fgetc(file))!='\n')&&(ch!=EOF)) { if (ch==' ') col++; /* pri sre6tane na ' ' uveli4ava broq na kolonite */ } return col;/*vry6ta broq na redovete*/ } double** getMatr(const char* filename,int *n,int *m) /* pro4ita fail, i syzdava matrica */ { int c,r; FILE* myFile; myFile = fopen (filename, "r"); /* otvarq faila za 4etene */ if (myFile == NULL) /* proverqva dali fail-a e otvoren, ako ne- vry6ta gre6ka i NULL */ { printf("Eror opening file!\n"); return NULL; } c= getCol(myFile); r= getRow(myFile);/* namira broq na redovete i kolonite */ int i; double** Matr = (double**) malloc (r); /* zadelq pamet za novata matrica */ for (i=0; i<r; i++) { Matr[i] = (double*)malloc (c); } rewind(myFile); for (i =0; i<r; i++) /*zapo4va obhojdaneto na fial-a */ { for (int j=0; j<c; j++) { char ch; char num[20]; int counter=0; /* syzdava vremenen char* koito zapisva 4islata mejdu intervalite*/ while(((ch=fgetc(myFile))!=' ')&&(ch!=EOF)&&(ch!='\n')) { num[counter]=ch; counter++; } num[counter]='\0'; Matr[i][j]=atof(num); /*namereniq char* se prevry6ta vyv double */ } } *n=r; /* zapisva broq na redovete i kolonite vyv promenlivite zadadeni v na4aloto na funkciqta*/ *m=c; fclose(myFile);/*zatvarq fail-a*/ return Matr; /* vry6ta ukazatel kym Matricata kato rezultat */ } void writeFile (char* filename, double** C,int n,int m) /*Zapisva marica vyv fail */ { FILE* myFile; myFile = fopen(filename,"w"); /* otvarq fail-a za 4etene */ for (int i=0; i<n; i++) /* obhojda matricata i q zapisva vyv fail*/ { for (int j=0; j<m; j++) { fprintf(myFile,"%d",C[i][j]); if (j!=m-1) fprintf(myFile," "); } fprintf(myFile,"\n"); } fclose(myFile);/* zatvarq fail-a*/ } int main() /* main */ { double** A=NULL; double** B=NULL; double** C=NULL; /* zadavane na 3te matrici */ int n=0,m=0,k=0,p=0; /* zadavane na defult-ni razmernosti */ int sw; do /* glavniq while na menu-to */ { printf("Chose one of the folowing options: \n 1:Enter Matrix1 \n 2:Enter Matrix2 \n 3:Execute Multipy \n 4:Leave Program \n"); scanf("%i",&sw); int sw2; switch(sw) { case 1: { do /* izbor dali da se vyvede matricata ot fail ili ry4no, i vry6ta gre6ka ako ne se vyvede vqrnoto 4islo dokato ne se vyvede vqrno 4islo */ { printf("1 to enter from file \n 2 to enter manualy \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); }while((sw2!=1)&&(sw2!=2)); switch(sw2) { case 1: { char name[50]; printf("Input filename(including extension): "); scanf("%s",name); /* vyvejdane na imeto na faila ot koito da se kopira matricata */ A=getMatr(name,&n,&m); }break; case 2: {/* vyvejdane na matricata ry4no */ printf("Enter the number of rows: "); scanf("%i",&n); printf("Enter the number of columns: "); scanf("%i",&m); A=setMatr(n,m); }break; } }break; case 2: { do /* izbor dali da se vyvede matricata ot fail ili ry4no, i vry6ta gre6ka ako ne se vyvede vqrnoto 4islo dokato ne se vyvede vqrno 4islo */ { printf("1 to enter from file \n 2 to enter manualy \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); }while((sw2!=1)&&(sw2!=2)); switch(sw2) { case 1: { char name[50]; printf("Input filename(including extension): "); scanf("%s",name); /* vyvejdane na imeto na faila ot koito da se kopira matricata */ B=getMatr(name,&k,&p); }break; case 2: {/* vyvejdane na matricata ry4no */ printf("Enter the number of rows: "); scanf("%i",&k); printf("Enter the number of columns: "); scanf("%i",&p); B=setMatr(k,p); }break; } }break; case 3: { if ((A==NULL)||(B==NULL)) /* ako edna ot 2te matrici ne e vyvedena pravilno vry6ta gre6ka */ { printf("Erorne or more matrixes aren't correctly entered!\n"); break; } C=multiply(A,B,n,m,k,p); /* izvyr6va se umnojenieto */ if (C==NULL) break; do {/* izbor dali da izvede novata matrica ili da q zapi6e vyv fail, ako ne e vyveden pravilno, vry6ta gre6ka dokato ne e vyveden pravilno */ printf("1: save into a file \n 2: not to save into a file \n"); scanf("%i",&sw2); if ((sw2!=1)&&(sw2!=2)) printf("Input Eror"); switch (sw2) { case 1: {/*izbira imeto na fail-a v koito da se zapi6e i zapisva vseki element vyv fail-a */ char name[50]; printf("Input filename(including extension): "); scanf("%s",name); writeFile(name,C,n,p); }break; case 2: {/* izvejda matricata na ekran */ for (int i=0; i<n; i++) { for (int j=0; j<p; j++) { printf("%lf ",C[i][j]); } printf("\n"); } }break; } }while((sw2!=1)&&(sw2!=2)); }break; } if (sw<1||sw>4) printf("Input Eror"); }while (sw!=4); if (A!=NULL) free (A); if (B!= NULL) free(B); if (C!= NULL) free(C); /* osvobojdava pametta zadelena za matricite */ return 0; }
-
11th May 2010 21:57 #4
-
11th May 2010 23:25 #5
-
11th May 2010 23:56 #6Registered User
Join Date: Dec:2007
Location: Sofia
Posts: 366
, UMTS-CDMA2000 ? , .
-
12th May 2010 08:15 #7




Reply With Quote

Lenovo ThinkPad 15 IdeaPad 15
5th May 2023, 22:16 in