Un tit coup de pouce pour une pile ???

noisette87 Messages postés 2 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 9 octobre 2004 - 9 oct. 2004 à 14:38
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 10 oct. 2004 à 12:34
voici le debut de mon programme :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused
float pile[10]; /* Définition de la pile */
int position=0;

int est_pleine(void)
{ if(position>9)return 1;
return 0;
}

void empiler(float valeur)
{ if(est_pleine()){
printf("La pile est pleine\n");
getchar();
fflush(stdin);
exit(0);
}
pile[position++]=valeur;
}

int est_vide(void)
{ if(position==0) return 1;
return 0;
}

float depiler(void)
{ if(est_vide()){
printf("La pile est vide\n");
getchar();
fflush(stdin);
exit(0);
}
return pile[--position];
}

int main(int argc, char* argv[])
{ float n=3.82;
empiler(n);
printf("** %d %f\n",position,pile[position-1]);
printf(" -- %f --\n",depiler());
printf("\n a position %d valeur dans la pile : %f \n",position,pile[position]);
empiler(4.99);
getchar();
fflush(stdin);
return ;
}
//---------------------------------------------------------------------------

Il s'agit d'un pile comme vous pouvez le constater.
Mais voila mon pb, je dois remplir cette pile avec getchar(), sans scanf !!
comment faire ??

Merci d'avance

6 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
9 oct. 2004 à 16:15
int Result;

while (0)
{
Result = 0;
for (unsigned ind = 1; ; ind *= 10)
{
char c = getchar ();

switch (c)
{
case '\n':
break;
default:
Result += (c - '0') * ind;
}
}
empiler (Result);
if (estpleine()) break;
}

}

jai pas trop regardé ton code, mais a priori ca doit etre qqch ds ce gout que tu attend....jespere que ca taideras, je sais pas si mon code est totalement exact, mais ca devrait te donner une idée de comment procéder
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
9 oct. 2004 à 16:16
au fait, pour ta pile tu devrait faire une struct, ca serait un peu plus propre
noisette87 Messages postés 2 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 9 octobre 2004
9 oct. 2004 à 17:13
merci pour ces premieres reponses.

Mais sous kel aspect tu veux mettre la pile en struct, je ne vois pas du tout ????
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
9 oct. 2004 à 20:54
Une pile en struct ??? Tu veux dire faire une class pour encapsuler la pile non ? car sinon, je ne vois pas trop l'intérêt...
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
10 oct. 2004 à 12:25
vi c'etait ce que je voulais dire, dsl de metre aussi mal exprimé
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
10 oct. 2004 à 12:34
pour t'expliquer ce que j'ai fait:
deja je me suis planté c'est while (1) pour faire un boucle infinie que j'arreterais avec l'instruction break.
ensuite tu scanne tes nombres caractere par caractere, c'est a dire que si tu veux scanner 123
tu scanne le caractere 1 puis le caractere 2 puis la caractere 3.
mais vu que tu as des caracteres et que tu dois les convertir en int, tu fais caracatere C - code ASCII du caractere '0', ainsi si tu avais bien entré un chiffre, tu vas avoir le chiffre correspondant transformé de caractere en int. ensuite, tu dois faire en sorte que ton int soit correct, donc (et la mon algo est encore faux) tu fais: (algo de horner):

je prend mon chiffre, je le met dans mon int, mais avant de le mettre, il faut que je multiplie le reste par 10 pour que ca marche. pour texpliquer mieux, je fais:

je rentre 1
je multiplie par 10 et jajoute 2 jai 12
je multiplie par 10 jajoute 3 jai 123.

jespere' que cest un peu plus clair eet qu'a partir de mon code et de ces precisions tu vas t'en sortir
Rejoignez-nous