• 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

Object Storage Arubacloud
0 głosów
375 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 169 wizyt
pytanie zadane 27 maja 2023 w C i C++ przez natalia2002. Początkujący (400 p.)
0 głosów
2 odpowiedzi 5,494 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)
0 głosów
2 odpowiedzi 910 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez must Bywalec (2,980 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...