Προς το περιεχόμενο

Προβλημα με hanoi στην C(δεν μπορω να βρω το λαθος)


Eniac

Προτεινόμενες αναρτήσεις

Προσπαθω να κανω εναν πυργο του ανοι στην c ο οποιος θα δεχετε τον αριθμο των δισκων σαν ορισμα στην μειν ,επειτα θα δεχετε 2 τιμεσ απο τον χρηστη συνεχεια(απο -προς) μεχρι να λυθει ο πυργος του ανοι.Ο πυργος βασιζεται σε αριθμους(πχ 3 ο μεγαλυτερος δισκος 2 ο επομενος, κε κενο=0)

Το θεμα ειναι οτι μου βγαζει οτι νανε το προγραμμα κε ενω σπαω το κεφαλι μου δν μπορω να καταλαβω τι φταιει .Αν μπορει καποιος απο σας εχει τον χρονο και μπορει να με βοηθησει θα του ειμαι ευγνωμων.

(Βασικα τσεκαρα της συναρτησεις χωριστα και αυτη που δεν δουλευει καλα μαλλον ειναι η move)

 

 

 

#include "stdio.h"

#include "stdlib.h"

 

int iswin(int n);

int function(int n);/*χρειαζεται στο iswin*/

void init(int n);/*Δινει αρχικες τιμες*/

int ar;

int hanoi[3][11];

int x,y;

int tops[3];/*ΟΙ θεσεις των πρωτων μηδεν στον πυργο*/

void printh(int n);

void move(int x, int y);/*Η βασικη συναρτηση των ανοι*/

 

 

int main(int argc,char *argv[])

{

int ar;

if(argv[1]!=NULL) ar=atoi(argv[1]);

else ar=0;

if(ar<3||argv[1]==NULL||ar>10)

{

printf("\nWRONG ARGUMENT(must be >=3 and <10)\n");

return 0;

}

else

{

 

init(ar);

printh(ar);

printf("\nEnter from -to\n");

while(iswin(ar)==0)

{

scanf("%d",&x);

scanf("%d",&y);

if((x>=1)&&(x<=3)&&(y>=1)&&(y<=3)) /*[1,3]*/

{

move(x,y);

printh(ar);

}

 

}

 

}

 

return 0;

 

 

 

 

 

}

 

int function(int n)

{

if(n==1) return 1;

else return(function(n-1)+n);

}

 

void init(int n)

{

for(int i=0;i<=n;i++)

{

hanoi[0]=n-i;

hanoi[1]=0;

hanoi[2][0]=0;

}

tops[0]=n+1;

tops[1]=0;

tops[2]=0;

/* Initializes the array */

}

 

int iswin(int n)

{

int sum=0;

for(int i=0;i<=n;i++)

{

sum = hanoi[2] +sum;

}

if(sum==function(n))

{

return 1;

}

else

{

return 0;

}

}

 

 

 

void printh(int n)

{

for(int i=n;i>=0;i--)

{

printf("%d %d %d\n",hanoi[0],hanoi[1],hanoi[1]);

}

}

 

 

void move(int x, int y)

{

int temp;

temp=hanoi[x-1][tops[x-1]-1];

hanoi[x-1][tops[x-1]-1]=0;

hanoi[y-1][tops[y-1]]=temp;

}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η διαχείριση πύργων Ανόι είναι από τα κλασσικά παραείγματα χρήσης στοιβών. Κάτι που το κάνεις κι εσύ, αλλά έμμεσα από ότι μπορώ να διακρίνω στα πεταχτά που κοίταξα τον κώδικά σου (να σου πω την αλήθεια βαριέμαι να τον δω αναλυτικά).

 

Θα σε βοηθήσει όμως να τελειώνεις μια ώρα αρχύτερα αν το κάνεις κανονικά με στοίβες. Μπορείς να ξεκινήσεις από εδώ: http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29#Towers_of_Hanoi

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ευχαριστω για το λινκ.Αλλα γινεται στην c να χρησιμοποιησω στοιβες? η χρειαζονται οι βιβλιοθηκες c++?(η ασκηση θελει μονο εντολες c)

 

Εννοείται πως γίνεται. Στο link που σου έδωσα, λίγο πιο πάνω, σου δίνει κι έτοιμο κώδικα 2 υλοποιήσεων στοιβών σε C. Είτε ως πίνακα είτε ως δυναμική λίστα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...