• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mnożenie macierzy przy wykorzystaniu pliku tekstowego

VPS Starter Arubacloud
0 głosów
399 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {

	int m, n, k, i, j, l;
	int **A;
	int **B;
	int **C;
    FILE *plik;
    plik=fopen("macierze.txt","w");

	// pobieranie rozmiaru macierzy

	printf("Wymiary macierzy: \n");
	printf("m: "); scanf("%d", &m);
	
	printf("n: "); scanf("%d", &n);
	
	printf("k: "); scanf("%d", &k);
	

	// generowanie macierzy

	A = (int**)malloc(m*sizeof(int *));
	B = (int**)malloc(n*sizeof(int *));
	C = (int**)malloc(m*sizeof(int *));

	for (i = 0; i<m; i++) {
		A[i] = (int*)malloc(n*sizeof(int));
		C[i] = (int*)malloc(k*sizeof(int));
	}

	for (i = 0; i<n; i++) {
		B[i] = (int*)malloc(k*sizeof(int));
	}

	// wprowadzanie wartoœci macierzy

	printf("Podaj wartoœci macierzy A: \n");
	for(i=0; i<m; i++) {
		for(j=0; j<n; j++) {
			scanf("%d", &A[i][j]);
		}
	}

	printf("Podaj wartoœci macierzy B: \n");
	for(i=0; i<n; i++) {
		for(j=0; j<k; j++) {
			scanf("%d", &B[i][j]);
		}
	}

	// wyœwietlanie wprowadzonych danych

	printf("\n Wprowadzona macierz A: \n");
	for(i=0; i<m; i++) {
		for(j=0; j<n; j++) {
			printf("%d ", A[i][j]);
		}
		printf("\n");
	}

	printf("\n Wprowadzona macierz B: \n");
	for(i=0; i<n; i++) {
		for(j=0; j<k; j++) {
			printf("%d ", B[i][j]);
		}
		printf("\n");
	}

	// zerowanie macierzy wynikowej

	for(i=0; i<m; i++) {
		for(j=0; j<k; j++) {
			C[i][j] = 0;
		}
	}

	// mno¿enie AxB = C

	for(l=0; l<m; l++) {
		for(j=0; j<k; j++) {
			for(i=0; i<n; i++) {
				C[l][j] += (A[l][i] * B[i][j]);
			}
		}
	}

	// wyœwietlanie wyniku

	printf("Macierz wynikowa: C= \n");
	for(i=0; i<m; i++) {
		for(j=0; j<k; j++) {
			printf("%d ", C[i][j]);
		}
		printf("\n");
	}

	// zwalnianie pamiêci

	for (i = 0; i<m; i++) {
		free(A[i]);
		free(C[i]);
	}

	for (i = 0; i<n; i++) {
		free(B[i]);
	}

	free(A);
	free(B);
	free(C);

	return 0;
}

Napisałem taki program do mnożenia macierzy o wymiarach pierwsza MxN i druga NxK. Teraz chciałbym zmodyfikować go aby wymiary macierzy oraz wartości komórek macierzy wczytywał z pliku tekstowego macierze.txt. Wymiary oraz wartości będą sztywno określone przez to co zawiera plik, a wynik mnożenia ma być zapisany do pliku wynik.txt. Mam plik w którym mam wymiary macierzy zapisane w sposób 

2

3

2

I tak samo będą wpisane wartości komórek. Tworzę sobie uchwyt do pliku:

FILE *plik;
plik = fopen("macierze.txt", "r");

Problem mam w odczytaniu wartości do zmiennych - nie wiem jak po odczytaniu jednej zmiennej przejść do kolejnej linii w pliku i odczytać ją do drugiej. 

Czy niezbędne jest użycie fseek? Jak jej do tego użyć? Ustawić pozycję na początek i iterować? Czy może jest inny sposób? Ogółem prosiłbym o podpowiedź bardziej w formie opisowej niż fragment kodu, chciałbym sam wykombinować jak to zakodować

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2018 przez Patrycjerz Mędrzec (192,320 p.)

Użyj funkcji fscanf. Sama zatroszczy się o przechodzenie do nowej linii, gdyż ignoruje białe znaki i odczytuje dane o podanym formacie do odpowiednich zmiennych.

Podobne pytania

0 głosów
0 odpowiedzi 209 wizyt
pytanie zadane 27 maja 2023 w C i C++ przez natalia2002. Początkujący (400 p.)
0 głosów
2 odpowiedzi 5,728 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)
0 głosów
2 odpowiedzi 1,197 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez must Bywalec (2,980 p.)

93,012 zapytań

141,977 odpowiedzi

321,266 komentarzy

62,354 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...