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

Problem with stack


derasto

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

Δημοσ.

Γεια σας,ειμαι καινουριος στο site και σχετικα καινουριος στο προγραμματισμο.Εχω ενα προβληματακι με ενα προγραμμα.Θελω να μετατρεπει εναν δεκαδικο σε δυαδικο.Το πηγαιος εδω:

>#include <stdio.h>
#include <stdlib.h>
int head=0;
int a,b,c,num,k,n;
int Array[10];

main ()
{
    int check;
    int push(int ;
    int pop ();
    printf ("Give number");
    scanf("%d",&num);
    while ((num>0) && (num<128))
    c=0;
    a=num/2;
    b=num%2;
    c=a/2;
    push (;
    c=a;
    k=pop ();
    printf ("apotelesma %d",k);
    
    system ("pause");
    }
    /*push*/
    
    void push(int 
     {
         int check;
    
   if(head<10)
   {
              
       head=head+1;
       Array[head]=b;
       check=0;
   }
   else
   check=1;
}

/*pop*/
int pop()
{
   int b,check;
   if(head>0) 
   {
       b=Array[head];
       head=head-1;
       check=0;
       return b;
   }
   else
   check=1;
}    

 

Παρακαλω διορθωστε με.

Ευχαριστω.

Δημοσ.

Το καλύτερο που μπορούσα να κάνω με τον κώδικα σου και χωρίς να γνωρίζω τυχόν περιορισμούς:

 

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

int check=0;
int head=0;
int Array[10];

void push(int ;
int pop();

int main (void)
{
   int a, num, k;

   printf ("Give number between 1 .. 127 :\n");
   scanf("%d",&num);

   if ((num>0) && (num<128))
   {
       for (k=0;k<10;k++)
           Array[k] = 0;

       do
       {
           a=num%2;
           push(a);
           num=num/2; 
       } while (num!=0);

       printf("apotelesma:[");
       k=pop();
       while(check != 1)
       {
           printf ("%d",k);
           k=pop();
       }
       printf("]\n");
   }
   else
       printf("wrong number!\n");

   system ("pause");
   return (0);
}
/* push */
void push(int n)
{
   if(head<10)
   {           
       Array[head]=n;
       head=head+1;
       check=0;
   }
   else
       check=1;
}

/* pop */
int pop()
{
   int n;

   if(head>=0) 
   {
       n=Array[head];
       head=head-1;
       check=0;
       return (n);
   }
   else
   {
     check=1;
     return (0);
   }
}

Δημοσ.

Ευχαριστω πολυ Pinball.

Δηλ. το προβλημα ηταν στο οτι δεν χρισιμοπιουσα τον πινακα που εβαλες ωστε καθε φορα που 8α γινετε το %2 να μπανει το ψηφιο στιν στοιβα?

Δημοσ.

Τα προβλήματα ήταν πολλά, αρκετά από οποία ήταν συντακτικά. Δεν ξέρω ποιόν compiler χρησιμοποιείς αλλά στον DEV-C++ ο κωδικάς σου δεν έκανε compile: π.χ. η συνάρτηση pop ()είναι δηλωμένη οτι επιστρέφει έναν ακέραιο,ενώ στον κώδικα της συνάρτησης έχεις παραβλέψει την εντολή return στη δεύτερη περίπτωση του if.

>
/*pop*/
int pop()
{
   int b,check;
   if(head>0) 
   {
       b=Array[head];
       head=head-1;
       check=0;
       return b;
   }
   else
   check=1;
}

 

Υπήρχαν local μεταβλητές δηλωμένες με το ίδιο όνομα με global μεταβλητές

>
int a,[b]b[/b],c,num,k,n;

...

/*pop*/
int pop()
{
   int [b]b[/b],check;
   if(head>0) 
   {

κ.α.

Τα λογικά λάθη ήταν κατα τη γνώμη μου στον αλγόριθμο υπολογισμού την διαδικής αναπαράστασης του δεκαδικού

>
while ((num>0) && (num<128))
[b]     c=0;
    a=num/2;
    b=num%2;
    c=a/2;
    push (;
    c=a;[/b]

και στην εκτύπωση αυτού

>
[b]k=pop ();
    printf ("apotelesma %d",k);[/b]

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...