Odwracanie macierzy wczytanej z pliku

0

Cześć,
mam do wykonania program w C (nie C++) który umożliwi odczyt informacji o macierzy z pliku wejściowego o nazwie WE.TXT, dokona odwrócenia macierzy a następnie wynik (macierz odwróconą) zapisze do pliku WY.TXT. Program powinien obsłużyć ograniczenia: macierz musi być kwadratowa, wyznacznik macierzy musi być >0

Praktycznie gubię się na samym początku.
Otwieram plik, ale nie wiem jak sprawdzić czy w pliku znajduje się macierz kwadratowa.

#include <stdio.h>

int main()
{
    FILE *we;
    we=fopen("we.txt", "r");

   ...

return 0;
}

z góry dziękuję za pomoc.

0

Macierz kwadratowa, czym jest? Tyle samo wierszy ile kolum. To oznacza że musisz sprawdzić ile elementów ma pierwszy wiersz i ile w ogóle wierszy zawiera plik.
https://stackoverflow.com/questions/12733105/c-function-that-counts-lines-in-file
Jak policzyć wyznacznik? Wczytać macierz i policzyć algorytmem, A to przecież będzie tablica dwu wymiarowa :)

0

Zakładam, że format pliku (i macierzy w nim zawartej) ma zawsze taki sam format, załóżmy że:

1 0 0 2
2 5 2 6 
1 0 0 5
2 0 6 8

Czyli mamy macierz 4x4. Teraz, skoro masz otwarty plik, to możesz czytać plik wyłapując kolejne liczby:

for( char matrixCharacter = getc( we ); matrixCharacter != EOF; matrixCharacter = getc( we ) )
{
    if( matrixCharacter == '\n' )
        /* Zlapalismy koniec pierwszego wiersza */
    else if( matrixCharacter == ' ' )
        /* Zlapalismy koniec kolejnego znaku */
    else
        /* Ciagle wczytujemy jeden znak z macierzy - mozna tu uzyc atoi() */
}

To wyżej to taki wstęp pisany totalnie na szybko, możesz podejść do tego na kilka sposobów. Możesz zliczyć kolumny i wiersze i zaalokować pamięć na macierz, albo pokombinować inaczej.
Generalnie fajnie, jakbyś podał więcej informacji o pliku, który próbujesz wczytać i spróbował zrobić coś więcej niż tylko go otworzyć ;)

0

a jak sprawdzić ile elementów ma pierwszy wiersz?
Trzeba przyjąć jakąś zasadę wpisywania. Oddzielone spacją, średnikiem itp. Wtedy policzyć ile jest znaków oddzielających i wynik zwiększyć o jeden (przy założeniu, że na końcu nie będzie znaku).
W teorii wiem jak to zrobić, tylko jak to zaimplementować w C? Nie jestem na tyle biegły w programowaniu aby zastosować najbardziej optymalne rozwiązania i nie znam dobrze języka C, więc nie wiem jakich funkcji użyć.

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