Results 1 to 7 of 7

Thread:

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User KiLLBiLL's Avatar
    Join Date: Mar:2007
    Location:
    Posts: 369

    ...
    :
    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.

  2. #2
    Registered User
    Join Date: Dec:2007
    Location: Sofia
    Posts: 366
    [CODE] , .

    , . ,
    A[i] = (double*) malloc(n);
    n double, .
    A[i] = (double*) malloc(n*sizeof(double));

  3. #3
    UMTS-CDMA2000's Avatar
    Join Date: Jan:2005
    Location: Sofia
    Posts: 212
    , 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;
    }

  4. #4
    Registered User KiLLBiLL's Avatar
    Join Date: Mar:2007
    Location:
    Posts: 369
    Quote Originally Posted by Pheoman View Post
    [CODE] , .

    , . ,
    A[i] = (double*) malloc(n);
    n double, .
    A[i] = (double*) malloc(n*sizeof(double));
    Quote Originally Posted by UMTS-CDMA2000 View Post
    , 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;
    }
    .
    , ,

  5. #5
    UMTS-CDMA2000's Avatar
    Join Date: Jan:2005
    Location: Sofia
    Posts: 212

  6. #6
    Registered User
    Join Date: Dec:2007
    Location: Sofia
    Posts: 366
    , UMTS-CDMA2000 ? , .

  7. #7
    Registered User KiLLBiLL's Avatar
    Join Date: Mar:2007
    Location:
    Posts: 369
    Quote Originally Posted by Pheoman View Post
    , UMTS-CDMA2000 ? , .
    , !

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 . .
iskamPC.com | mobility.BG | Bloody's Techblog | | 3D Vision Blog |