Dynamiczna tablica dwuwymiarowa

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

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.

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