Witam,
zabrałem się za program z wieżą hanoi, użyłem poprawnego sposobu rekurencyjnego, który gdzieś widziałem, program powinien wyrzucać kolejne kroki przemieszczania się krążków, użyłem wskaźników, aby funkcja "zmiana mogła edytować naszą wieże, ale moje przeżycia ze wskaźnikami są na nikłym poziomie, zatem co robie źle ?
Dostaje z termianala następujący komunikat: warning: incompatible pointer types passing 'int [3][n]' to parameter of type 'int **' , kompiluje pod ubuntu -std=c99
#include<stdio.h>
void zamiana(int **tab,int x1,int x2,int w)
{
int i=0;
int k=w;
while(tab[x1][i]==0)
{
i=i+1;
}
while(tab[x2][k]!=0)
{
k=k-1;
}
tab[x2][k]=tab[x1][i];
tab[x1][i]=0;
}
void drukowanie(int **tab,int w)
{
for(int k=0;k<w;k=k+1)
{
printf("%d %d %d\n",tab[0][k],tab[1][k],tab[2][k]);
}
printf("\n");
}
void hanoi (int a0, int a1, int a2, int n, int **tablica,int wielkosc)
{
if(n>0)
{
hanoi(a0, a2, a1, n-1,tablica,wielkosc);
zamiana(tablica,a0,a1,n);// z a0 na a1
drukowanie(tablica,wielkosc); // print tablicy
hanoi(a2, a1, a0, n-1,tablica,wielkosc);
}
}
int main ()
{
int n;
printf ("Witam w programie przedstawiajacym rozwiazanie wiezy hanoi!\n");
printf("Podaj liczbe krazkow:");
scanf("%d", &n);
int tab[3][n];
for(int p=1; p<3;p=p+1)
{
for(int q;q<n;q=q+1)
{
tab[p][q]=0;
}
}
for(int r=0;r<n;r=r+1)
{
tab[0][r]=r+1;
}
drukowanie(tab,n);
hanoi(0, 1, 2, n, tab,n);
return 0;
}