Πολλαπλασιασμός πινάκων

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
pasxal
Δημοσιεύσεις: 83
Εγγραφή: 16 Απρ 2010 04:39

Πολλαπλασιασμός πινάκων

Δημοσίευση από pasxal » 29 Ιαν 2011 04:18

Έχω τον παρακάτω κώδικα με τον οποίο προσπαθώ να πολλαπλασιάσω δύο πίνακες διαβάζοντας από δύο αρχεία. Το πρόβλημα είναι ότι όλα τα αποτελέσματα είναι σωστά εκτός από τρία και δεν μπορώ να καταλάβω για ποιον λόγο συμβαίνει αυτό.

Τα αρχεία τα επισυνάπτω.

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <malloc.h>
#include <ctype.h>

typedef struct
&#123;
	int lines;
	int rows;
&#125;F_PARAMS;

F_PARAMS get_params&#40;FILE *f&#41;
&#123;
	F_PARAMS file;	
	char c;
	int lines = 0;
	int rows = 0;
	int cpline;

	while&#40;&#40;c = fgetc&#40;f&#41;&#41;!=EOF&#41;
	&#123;
		if&#40;c=='\n'&#41;
		&#123;
			lines++;
		&#125;
		else if&#40;!isspace&#40;c&#41;&#41;
		&#123;
			rows++;
		&#125;
	&#125;
	file.lines = lines;
	file.rows = rows/lines;
	rewind&#40;f&#41;;
	return file;
&#125;

void fill_array&#40;int lines, int rows, float array&#91;lines&#93;&#91;rows&#93;, FILE *f&#41;
&#123;
	int i = 0;
	int j = 0;
	while&#40;!feof&#40;f&#41;&#41;
	&#123;
		if&#40;j==rows&#41;
		&#123;
			i++;
			j=0;
		&#125;
		fscanf&#40;f,"%f",&array&#91;i&#93;&#91;j&#93;&#41;;
		j++;
	&#125;		
&#125;

int main&#40;int argc, char *argv&#91;&#93;&#41;
&#123;
	FILE *f1, *f2;
	int i,j,k;
	f1 = fopen&#40;"arrayA.txt","r"&#41;;
	f2 = fopen&#40;"arrayB.txt","r"&#41;;

	if&#40;f1==NULL || f1==NULL&#41;
	&#123;
		printf&#40;"Error while opening files!\n"&#41;;
	&#125;

	else
	&#123;
		F_PARAMS file1;
		F_PARAMS file2;
	
		/*Getting arrays attrs */
		file1 = get_params&#40;f1&#41;;
		file2 = get_params&#40;f2&#41;;
		
		/*Allocating Memory for arrays */
		float arrayA&#91;file1.lines&#93;&#91;file1.rows&#93;;
		float arrayB&#91;file2.lines&#93;&#91;file2.rows&#93;;
		float c&#91;file1.lines&#93;&#91;file2.rows&#93;;

		printf&#40;"lines&#58;%d rows&#58;%d\n",file1.lines,file1.rows&#41;;
		printf&#40;"lines&#58;%d rows&#58;%d\n",file2.lines,file2.rows&#41;;

		/*filling the arrays */
		fill_array&#40;file1.lines, file1.rows, arrayA, f1&#41;;
		fill_array&#40;file2.lines, file2.rows, arrayB, f2&#41;;

		if&#40;file1.rows == file2.lines&#41;
		&#123;
			for&#40;i=0;i<file1.lines;i++&#41;
			&#123;
				for&#40;j=0;j<file2.rows;j++&#41;
				&#123;
					for&#40;k=0;k<file1.rows;k++&#41;
					&#123;
						c&#91;i&#93;&#91;j&#93; += arrayA&#91;i&#93;&#91;k&#93;*arrayB&#91;k&#93;&#91;j&#93;;
					&#125;
				&#125;
			&#125;
			for&#40;i=0;i<file1.lines;i++&#41;
				for&#40;j=0;j<file2.rows;j++&#41;
					printf&#40;"%f\n",c&#91;i&#93;&#91;j&#93;&#41;;
		&#125;
		else
		&#123;
			printf&#40;"Arrays must be KxL LxM!\n"&#41;;
		&#125;

	&#125;
	return 0;
&#125;

Κώδικας: Επιλογή όλων

40.000000
63.000000
86.000000
95.000000
&#91;color=red&#93;203974416.000000&#91;/color&#93;
199.000000
&#91;color=red&#93;199238048.000000&#91;/color&#93;
67.000000
&#91;color=red&#93;199751488.000000&#91;/color&#93;
35.000027
53.000000
71.000000
65.000000
111.000000
156.999985
Συνημμένα
arrayA.txt
(55 Ψηφιολέξεις) Μεταφορτώθηκε 180 φορές
arrayB.txt
(35 Ψηφιολέξεις) Μεταφορτώθηκε 179 φορές

Άβαταρ μέλους
pasxal
Δημοσιεύσεις: 83
Εγγραφή: 16 Απρ 2010 04:39

Πολλαπλασιασμός πινάκων

Δημοσίευση από pasxal » 29 Ιαν 2011 15:18

Τελικά το πρόβλημα ήταν ότι έπρεπε να αρχικοποιήσω τον πίνακα c.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες