Un tit coup de pouce pour une pile ???

Signaler
Messages postés
2
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
9 octobre 2004
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
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

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
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
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
au fait, pour ta pile tu devrait faire une struct, ca serait un peu plus propre
Messages postés
2
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
9 octobre 2004

merci pour ces premieres reponses.

Mais sous kel aspect tu veux mettre la pile en struct, je ne vois pas du tout ????
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
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
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
vi c'etait ce que je voulais dire, dsl de metre aussi mal exprimé
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
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