Wczytywanie macierzy w funkcji.

0

Witam. Muszę napisać program który będzie mnożył dwie wczytane z pliku .txt macierze. Jak na razie jestem na samym początku zadanie i nie za bardzo wiem jak to ugryźć. Chodzi o to że program musi być podzielony na trzy funkcję:
-wczytującą macierze z plików .txt,
-mnożącą macierze,
-zapisującą wynik mnożenia w pliku .txt.
Moje pytanie brzmi jak przekazać dwie wczytane macierze z pierwszej funkcji do drugiej. Na razie napisałem tylko tyle:

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>

void * wczytajA(int *macierz)
{

	int A;
	int B;
	int i;
	int j;

	FILE *mA;

	//int ** macierz;


	mA = fopen("macierzA.txt", "r");
	if (mA == NULL)
	{
		printf("Nie mozna otworzyc pliku!\n");
		exit(0);
	}
	fscanf(mA, "%d %d\n", &A, &B);

	macierz = (int**)malloc(sizeof(int*)*A);
	for (i = 0; i < A; i++)
		macierz[i] = (int*)malloc(sizeof(int)*B);

	for (i = 0; i < A; i++)
		for (j = 0; j < B; j++)
			fscanf(mA, "%d ", &macierz[i][j]);

	fclose(mA);


}


int main()
{
	int macierzA = 0;
	

	wczytajA(&macierzA);

	system("PAUSE");
	return 0;
}
0

Tak się deklaruje tablice dynamiczną 2d:

    int r=3, c=4;
    int **arr;

    arr  = (int **)malloc(sizeof(int *) * r);
    for(int i = 0; i < r; i++)
        arr[0] = (int *)malloc(sizeof(int) * c * r);

Teraz zobacz gdzie masz błędy.
Podpowiadam:

  • Argument funkcji
  • Alokowanie pamięci macierzy
  • Argument z którym wywołana jest funkcja
0

Czy chodzi o coś takiego?

void ** wczytajA(int **macierz)
{

	int A;
	int B;
	int i;
	int j;

	FILE *mA;

	


	mA = fopen("macierzA.txt", "r");
	if (mA == NULL)
	{
		printf("Nie mozna otworzyc pliku!\n");
		exit(0);
	}
	fscanf(mA, "%d %d\n", &A, &B);

	macierz = (int**)malloc(sizeof(int*)*A);
	for (i = 0; i < A; i++)
		macierz[0] = (int*)malloc(sizeof(int)*B*A);

	for (i = 0; i < A; i++)
		for (j = 0; j < B; j++)
			fscanf(mA, "%d ", &macierz[i][j]);

	fclose(mA);


}


int main()
{
	int macierzA;
	int *A = &macierzA;

	wczytajA(&A);

	system("PAUSE");
	return 0;
}
0
    int macierzA;
    int *A = &macierzA;

    wczytajA(&A);

Jestem trochę słaby z C, ale nie czaję tego zapisu. Nie lepiej zrobić:

int **macierzA;
wczytajA(macierzA);

Z opisu wynika, że będziesz wczytywał dwie macierze, proponowałbym zrobić Twoją funkcje bardziej uniwersalną, czyli w argumencie funkcji podawać nazwę pliku z jakiej ma być wczytywana macierz :).

Edit:
Masz literówke:

macierz[0] = (int*)malloc(sizeof(int)*B*A);

Powinno być:

macierz[i] ...

Edit2:

void ** wczytajA

Biorąc pod uwagę jak przypisujesz macierz, czyli korzystasz z argumentu, zwracanie tego typu wskaźnika nie jest Ci potrzebne.

0

Z opisu wynika, że będziesz wczytywał dwie macierze, proponowałbym zrobić Twoją funkcje bardziej uniwersalną, czyli w argumencie funkcji podawać nazwę pliku z jakiej ma być wczytywana macierz :).

Próbuję to zrobić już drugi dzień i nie mam najmniejszego pojęcia jak przekazać zmienną char jako argument funkcji

0

Przekazujesz jako

const *char

Zobacz:

int main(){
     
    const *char nazwa = "nazwa_pliku.txt";
    plik = fopen(nazwa, "r");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1