Dynamiczna tablica dwuwymiarowa

2012-12-17 13:02
Baraq
0

Witam mam problem w moim programie który ma wypisywać tablice dynamiczna dwuwymairową w ustalony sposób, błąd tkwi gdzieś w implementacji tej tablicy:

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

#define wypelnij
#define wypisz

// wypelnia tablice wartosciami
void wypelnij(int ** tab, int i, int j, int N, int M, int sum, int lvl,int stat, zera) {

    if(i <= lvl && stat==0 && zera==0) { //Wypełnia liczbami wg podanego sposobu
        i=i-1
        tab[i][j] = sum++;
        wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    }
    else{
        stat=1 
        if j=N {
            stat=o lvl=lvl++
            i=N;
        }
    tab[i][j] = sum++;
      i=i-1;
      j=j-1;
    wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    }
    j=2
    if lvl=N && j <= M {
      tab[i][j] = sum++;
      zera=1;
      wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
      j=j++
    }
    else (
    tab[i][j] = sum++;
    j=i+1
    i=+1
    wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    )

    }

// wypisuje tablice
void wypisz(int ** tab, int N, int M) {
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            printf("%d /n",tab[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char ** argv) {
    if( argc < 3 ) return -1; // wczytanie dwoch argumrntów
    int ** tab;
    int N,M;
    int stat, zera;
    N = atoi(argv[1]);
    M = atoi(argv[2]);
    if(N < 1 || M < 1) return -1; // nie poprawny rozmiar tablicy
    tab = (int*)malloc(N*sizeof(int));
    int i;
    for(i = 0; i < N ; i++) {
        tab[i] = (int*)malloc(M*sizeof(int));
    }

    wypelnij(tab,N,0,N,M,1,0,0,0);
    wypisz(tab, N, M);
    for(i = 0; i < N; i++) {   //zwalnianie pamieci
        free(tab[i]);
    }
    free(tab);
    return 0;
} 

Kompilator wyrzuca następujące błędy z którymi nie mogę sobie w rzaden sposób poradzić:
8 line [Error] expected identifier or '(' before 'int'
46 line [Error] expected identifier or '(' before 'int'
In main function:
63 line [Warning] assignment from incompatible pointer type [enabled by default]
Co musiałbym zminić żeby to chodziło?
Wielkie dzięki za pomoc

Pozostało 580 znaków

2012-12-17 13:27
0

Po co te define?
Linijka 8, brakuje typu dla zmiennej 'zera'
Linijka 12, brak średnika
Linijka 17 brak średnika
Co to jest w linijce 19

stat=o lvl=lvl++

To aż boję się pytać. WTF?!
Linijka 18 i 28, warunki dla ifa muszą być w nawiasach, poza tym porównanie to == a nie =
Linijka 32 WTF? Co to ma znaczyć j=j++?
Linijka 34, co to za nawiasty otaczające ciało "else"? Tam maja być brackety!
Linijki 36, 37 brak średników
Linijka 37 jesteś pewien ze chciałeś zrobić i=+1 a nie i+=1 ?
Linijki 48, 49 to ma być C więc nie deklaruj zmiennych wewnatrz for
linijka 63, tab jest int* a przupisujesz mu coś rzutowanego na int. Gdzie tu sens?

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

// wypelnia tablice wartosciami
void wypelnij(int ** tab, int i, int j, int N, int M, int sum, int lvl,int stat, int zera) {
    if(i <= lvl && stat==0 && zera==0) { //Wypełnia liczbami wg podanego sposobu
        i=i-1;
        tab[i][j] = sum++;
        wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    }
    else{
        stat=1;
        if (j==N) {
            stat=0;
            lvl++;
            i=N;
        }
        tab[i][j] = sum++;
        i=i-1;
        j=j-1;
        wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    }
    j=2;
    if (lvl==N && j <= M) {
      tab[i][j] = sum++;
      zera=1;
      wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
      j++;
    }
    else {
        tab[i][j] = sum++;
        j=i+1;
        i++;
        wypelnij(tab,i,j,N,M,sum,lvl,stat,zera);
    } 
}

// wypisuje tablice
void wypisz(int ** tab, int N, int M) {
    int i,j;
    for(i = 0; i < N; i++) {
        for(j = 0; j < M; j++) {
            printf("%d /n",tab[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char ** argv) {
    if( argc < 3 ) return -1; // wczytanie dwoch argumrntów
    int ** tab;
    int N,M;
    int stat, zera;
    N = atoi(argv[1]);
    M = atoi(argv[2]);
    if(N < 1 || M < 1) return -1; // nie poprawny rozmiar tablicy
    tab = (int**)malloc(N*sizeof(int*));
    int i;
    for(i = 0; i < N ; i++) {
        tab[i] = (int*)malloc(M*sizeof(int));
    }
    wypelnij(tab,N,0,N,M,1,0,0,0);
    wypisz(tab, N, M);
    for(i = 0; i < N; i++) {   //zwalnianie pamieci
        free(tab[i]);
    }
    free(tab);
    return 0;
}

To się skompiluje, ale nie działa a nie mam ani czasu ani ochoty zastanawiać się o co chodzi w tym twoim chorym algorytmie. Moja rada: zrezygnuj z programowania.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
W >=C99 można deklarować zmienne gdzie się chce. A te define są super. :-D - Endrju 2012-12-17 13:28

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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