k_mishima
02-06-2007, 18:35
Ciao devo simulare lo stack in c con allocazione statica e dinamica, statica l'ho fatto, dinamica mi da 1 errore che non riesco a risolvere.
#include <stdio.h>
#include <stdlib.h>
void pushs(int *, int **, int *);
void pops(int *);
main()
{
int *x,*scelta,*a,*temp;
short i;
x=(int *)malloc(sizeof(int));
scelta=(int *)malloc(sizeof(int));
temp=(int *)malloc(sizeof(int));
puts("Simulazione di una Pila (Stack)");
puts("Inserire il numero di elementi della pila (max 30)");
scanf("%d", x);
a=(int *)calloc(*x,sizeof(int));
puts("Inserire gli elementi della pila");
for(i=0;i<*x;i++)
{
printf("%d-esimo elemento:",i);
scanf("%d", a+i);
}
puts("\nPila:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
puts("\n\nPossibili operazioni:\n");
do
{
puts("\n[1] Inserire un nuovo elemento");
puts("[2] Cancella un vecchio elemento");
puts("[3] Terminare programma");
scanf("%d", scelta);
if(*scelta == 1)
{
//Inserimento di un elemento in una pila(Stack)
puts("Quale elemento vuoi inserire?");
scanf("%d", temp);
pushs(temp, &a, x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
}
else if(*scelta == 2)
{
//Eliminazione di un elemento dalla pila(stack)
pops(x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
}
while (*scelta!=3);
free(a);
free(scelta);
free(x);
free(temp);
system("pause");
}
void pushs(int *elem, int **a, int *n)
{
(*a)=(int *)realloc((*a),sizeof(int));
(*a)[n]=elem;
n+=1;
}
void pops(int *n)
{
(*n)--;
}
L'errore è array subscript is not an integer, nel codice la riga è segnata in nero.
La parte sul pop funziona.
P.s. ma non ci sono function già fatte per le pile?
#include <stdio.h>
#include <stdlib.h>
void pushs(int *, int **, int *);
void pops(int *);
main()
{
int *x,*scelta,*a,*temp;
short i;
x=(int *)malloc(sizeof(int));
scelta=(int *)malloc(sizeof(int));
temp=(int *)malloc(sizeof(int));
puts("Simulazione di una Pila (Stack)");
puts("Inserire il numero di elementi della pila (max 30)");
scanf("%d", x);
a=(int *)calloc(*x,sizeof(int));
puts("Inserire gli elementi della pila");
for(i=0;i<*x;i++)
{
printf("%d-esimo elemento:",i);
scanf("%d", a+i);
}
puts("\nPila:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
puts("\n\nPossibili operazioni:\n");
do
{
puts("\n[1] Inserire un nuovo elemento");
puts("[2] Cancella un vecchio elemento");
puts("[3] Terminare programma");
scanf("%d", scelta);
if(*scelta == 1)
{
//Inserimento di un elemento in una pila(Stack)
puts("Quale elemento vuoi inserire?");
scanf("%d", temp);
pushs(temp, &a, x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
}
else if(*scelta == 2)
{
//Eliminazione di un elemento dalla pila(stack)
pops(x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
}
while (*scelta!=3);
free(a);
free(scelta);
free(x);
free(temp);
system("pause");
}
void pushs(int *elem, int **a, int *n)
{
(*a)=(int *)realloc((*a),sizeof(int));
(*a)[n]=elem;
n+=1;
}
void pops(int *n)
{
(*n)--;
}
L'errore è array subscript is not an integer, nel codice la riga è segnata in nero.
La parte sul pop funziona.
P.s. ma non ci sono function già fatte per le pile?