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

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

Ερώτηση

Προσπαθω να κανω εναν πυργο του ανοι στην 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;

}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

3 απαντήσεις σε αυτή την ερώτηση

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

  • 0

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.