Implementazione stack-----errori(AIUTO)

di il
3 risposte

Implementazione stack-----errori(AIUTO)

Ciao ragazzi.......ho un problema su questo esercizio,il dev c++ mi da alcuni errori che non riesco a capire,potreste darci un occhiata?Forse ho implementato male il main?
Grazie..............

#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int main()
{
void push(int S[],int valore);
int pop(int S[]);
void new_stack(int S[]);
void stampa(int S[]);
int empty_stack(int S[]);
int full_stack(int S[]);
int S[MAX+1],scelta,valore;
do
{
printf("\n scelta: 0-Crea, 1-Stampa, 2-Pop, 3-Push, 4-Uscita: ");
scanf("%d",&scelta);
switch (scelta)
{
caso0:
new_stack(S); break;
caso1:
stampa(S); break;
caso2:
if (!empty_stack(S))
printf("\n Top dello stack %d", pop(S));
else
printf("\n spiacente, stack vuoto");
break;
caso3:
if (!full_stack(S)){
printf("\n valore da inserire nello stack: ");
scanf("%d",&valore);
push(S,valore);
}
else
printf("\n spiacente, stack pieno");
}
while(scelta==0||scelta==1||scelta==2||scelta==3);
}

void push(int S[],int valore)
{
S[0]=S[0]+1;
S[S[0]]=valore;
}

int pop(int S[])
{
int val=0;
{
S[0]=S[0]-1;
val=S[S[0]+1];
}
return val;
}

void new_stack(int S[])
{
int num_elementi,valore;
printf("\n Quanti elementi (max%d elementi):",MAX);
scanf("%d"&num_elementi);
while (num_elementi>MAX){
printf("\n max %d elementi: ",MAX);
scanf("%d",&num_elementi);
}
while (num_elementi) {
printf("\n Inserire un valore:");
scanf("%d",&valore);
push(S,valore);
--num_elementi;
}
}
void stampa(int S[])
{
int valore;
while (!empty_stack)
{
valore=pop(S);
printf("%d",valore;
stampa(S);}
push(S,valore);
}

int empty_stack(int S[])
{
return S[0]==0;
}

int full_stack(int S[])
{
return S[0]==MAX;
}

3 Risposte

  • Re: Implementazione stack-----errori(AIUTO)

    Ciao, nel codice ci sono diversi errori di distrazione. Comunque ho visto che hai sbagliato un po la sintassi delle condizioni multiple, lo switch. La sintassi è

    switch(variabile)
    {
    case 0:
    /*codice*/


    case 1:
    /*codice*/

    case 2:
    /*codice*/

    case 3:
    /*codice*/

    }

    poi i prototipi delle funzioni non vanno messi nella funzione main() ma in generale sotto gli include o le define.
    ti posto il codice completo:



    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 20

    /* prototipi */
    int empty_stack(int S[]);
    int full_stack(int S[]);
    void push(int S[],int valore);
    int pop(int S[]);
    void stampa(int S[]);
    void new_stack(int S[]);

    int main()
    {
    void push(int S[],int valore);
    int pop(int S[]);
    void new_stack(int S[]);
    void stampa(int S[]);
    int empty_stack(int S[]);
    int full_stack(int S[]);
    int S[MAX+1],scelta,valore;
    do
    {
    printf("\n scelta: 0-Crea, 1-Stampa, 2-Pop, 3-Push, 4-Uscita: ");
    scanf("%d",&scelta);
    switch (scelta)
    {
    case 0:
    new_stack(S); break;
    case 1:
    stampa(S); break;
    case 2:
    if (!empty_stack(S))
    printf("\n Top dello stack %d", pop(S));
    else
    printf("\n spiacente, stack vuoto");
    break;
    case 3:
    if (!full_stack(S))
    {
    printf("\n valore da inserire nello stack: ");
    scanf("%d",&valore);
    push(S,valore);
    }
    else
    printf("\n spiacente, stack pieno");
    }
    }
    while(scelta!=4);
    }

    void push(int S[],int valore)
    {
    S[0]=S[0]+1;
    S[S[0]]=valore;
    }

    int pop(int S[])
    {
    int val=0;
    {
    S[0]=S[0]-1;
    val=S[S[0]+1];
    }
    return val;
    }

    void new_stack(int S[])
    {
    int num_elementi,valore;
    printf("\n Quanti elementi (max%d elementi):",MAX);
    scanf("%d",&num_elementi);
    while (num_elementi>MAX){
    printf("\n max %d elementi: ",MAX);
    scanf("%d",&num_elementi);
    }
    while (num_elementi) {
    printf("\n Inserire un valore:");
    scanf("%d",&valore);
    push(S,valore);
    --num_elementi;
    }
    }
    void stampa(int S[])
    {
    int valore;
    while (!empty_stack(S))
    {
    valore=pop(S);
    printf("%d",valore);
    stampa(S);}
    push(S,valore);
    }

    int empty_stack(int S[])
    {
    return S[0]==0;
    }

    int full_stack(int S[])
    {
    return S[0]==MAX;
    }


    cosi dovrebbe andare.

    P.S.: non ho tolto solo gli errori, ma non ho visto l'efficienza del codice(se funziona il prog)
  • Re: Implementazione stack-----errori(AIUTO)

    Grazie.-------------------
    alla fine poi ci sono riuscito....................
    ci sto sbattendo la testa da giorni su queste cose...................
    è l'ultimo esame...............

    speriamo che dio me la mandi buona
    grazie ancora
  • Re: Implementazione stack-----errori(AIUTO)

    Prego...
    eh.. buona fortuna ancora con l'esame!
Devi accedere o registrarti per scrivere nel forum
3 risposte