Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytywanie tablicy dwuwymiarowej z pliku

Ostatnio zmodyfikowano 2014-01-20 09:36
Autor Wiadomość
Atexor
Temat założony przez niniejszego użytkownika
Wczytywanie tablicy dwuwymiarowej z pliku
» 2014-01-20 01:27:00
Witam,
mam problem z pewnym zadaniem. Otóż muszę w nim stworzyć tablicę kwadratową NxN (N z klawiatury z przedziału od 1 do 30), wylosować liczby i zapisać to w formie "macierzy" do pliku tekstowego. Następnie za pomocą funkcji muszę te liczby wczytać z powrotem z pliku i uzupełnić tablicę w pierwszej kolumnie i w pierwszym wierszu, a brakujące elementy uzupełnić poprzez średnią 2 elementów znajdujących się bezpośrednio nad i po lewej od uzupełnianej komórki.

Chciałbym na razie ogólnie wczytać całą tablicę z pliku, ale jak sprawdzam za pomocą printf to mam same zera. Jak takie coś zrobić? Próbowałem na kilka sposobów, ale w ogóle kompilować się nie dało albo program się bug'ował. Teraz wpadłem na pomysł aby wczytywał kolumnami i gdy dojdzie do końca to za pomocą continue, zerowaniem pozycji kolumny "j" i "i++" przechodzi do następnej iteracji,

Bardzo prosiłbym o szybką pomoc i pozdrawiam  ;)

C/C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef float MAC[ 30 ][ 30 ];

void fun( MAC a, int Nf )
{
    int i = 0, j = 0;
    float liczba;
    MAC tab2;
    FILE * plik;
    plik = fopen( "wyniki3.txt", "rt" );
    while( fscanf( plik, "%f", & liczba ) == 1 )
    {
        tab2[ i ][ j ] = liczba;
        j++;
        if( j == Nf )
        {
            j = 0;
            continue;
        }
    }
    printf( "\n\n" );
    for( i = 0; i < Nf; i++ )
    {
        for( j = 0; j < Nf; j++ )
        {
            printf( "%.3f\t", tab2[ i ][ j ] );
        }
        printf( "\n\n" );
    }
   
    fclose( plik );
}

int main()
{
    //srand(time(NULL);
    int i, j, N;
    FILE * plik;
    do {
        printf( "Podaj N z przedzialu [1,30]\n" );
        scanf( "%d", & N );
    } while( N < 1 || N > 30 );
   
    plik = fopen( "wyniki3.txt", "wt" );
   
    MAC tab;
    for( i = 0; i < N; i++ )
    {
        for( j = 0; j < N; j++ )
        {
            tab[ i ][ j ] = 1 + rand() % N;
            printf( "%.3f\t", tab[ i ][ j ] );
            fprintf( plik, "%.3f\t", tab[ i ][ j ] );
        }
        fprintf( plik, "\n" );
        printf( "\n\n" );
    }
    fun( tab, N );
    fclose( plik );
    system( "PAUSE" );
    return 0;
}
P-102584
Wiesiek
» 2014-01-20 07:05:22
wewnątrz funkcji main fclose należy wykonać przed wywołaniem funkcji fun.
P-102588
Atexor
Temat założony przez niniejszego użytkownika
» 2014-01-20 09:36:32
Dziękuję Ci bardzo, pomogło. Jeszcze tylko musiałem postinkrementację dopisać w warunku if, aby kolejne wiersze z tablicy wczytywało. Jak będę miał jeszcze problem z dokończeniem zadania to się zgłoszę, ale myślę powinno pójść już gładko.

Pozdrawiam
P-102590
« 1 »
  Strona 1 z 1