Langage C

Résolu/Fermé
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 31 oct. 2008 à 12:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 nov. 2008 à 08:38
Bonjour, je suis un débutant en algo et en C je suis e 1ère année de bts et pendant les vacances notre prof nous a laissé des feuilles avec des algo et il faut les retranscrire en C a l'aide d'un livre et la en ce moment quand j'exécute mon programme il ne fait pas ce que je veux donc je voulais savoir si vous pouvieez m'aider je sais que mes fautes se situent vers la fin du code au niveau des printf et du dernier scanf et peut etre de la boucle répéter jusqu'a merci d'avance je vous laisse ce que j'ai fait :

#include<stdio.h>
#include<stdlib.h>
int main (void)
{
int duree,age;
float forfhor,rem,tariftot;
char rep;
do
{
printf("\nSaisir l'âge du client ainsi que la durée choisie");
scanf("%d",&duree);
scanf("%d",&age);
switch (duree) {
case 30:forfhor=7,5;
case 60:forfhor=12,5;
case 120:forfhor=21,5;
}
if (age<15)
{
rem=forfhor*0,4;
}
else if (age<18)
{
rem=forfhor*0,3;
}
else if (age<26)
{
rem=forfhor*0,2;
}
else
{
rem=0;
}
tariftot=forfhor-rem;
printf("\nVotre client doit payer %f : %f",tariftot,"Euros");
printf("\nSouhaitez-vous calculer le prix pour un autre client (O/N)?");
scanf("%c",&rep);
} while (rep='o');
}

8 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 oct. 2008 à 13:48
Salut,
Tu as fait plein de petites erreurs.
Je t'ai corrigé ton programme. Compare bien les différences entre les versions et n'hésite pas à poser des questions si tu ne comprends pas.
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
    int duree,age;
    float forfhor,rem,tariftot;
    char rep[3];
    do
    {
        printf("\nSaisir l'âge du client : ");
        scanf("%d",&age);
        printf("\nSaisir la durée : ");
        scanf("%d",&duree);
        switch (duree) {
            case 30:
                forfhor=7.5;
                break;
            case 60:
                forfhor=12.5;
                break;
            case 120:
                forfhor=21.5;
                break;
            default:
                forfhor=0;
        }
        if (age<15)
        {
            rem=forfhor*0.4;
        }
        else if (age<18)
        {
            rem=forfhor*0.3;
        }
        else if (age<26)
        {
            rem=forfhor*0.2;
        }
        else
        {
            rem=0;
        }
        tariftot=forfhor-rem;
        printf("\nVotre client doit payer %f : Euros",tariftot);
        printf("\nSouhaitez-vous calculer le prix pour un autre client (O/N)?");
        while(getchar()!='\n');
        fgets(rep,sizeof(rep),stdin);
    } while (rep[0]=='o');
    return 0;
}

Cdlt
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 15:01
Merci pour ton aide, j'ai remarquée deux grosse différence par rapport au mien, la première concerne le swtich et j'ai tout compris car je viens de lire dans mon livre de langage C les explications pour cette instruction par contre je ne comprend pas du tout la fin de ton code donc si tu pouvais m'expliquer cela serait très gentil merci par avance et encore merci de m'avoir déjà aidé.
A partir de là je ne comprend plus :

while(getchar()!='\n');
fgets(rep,sizeof(rep),stdin);
} while (rep[0]=='o');
return 0;
}

je ne comprend pas aussi quand tu déclare le caractère rep pourquoi tu fais : char rep[3]; ?

Merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 oct. 2008 à 15:19
while(getchar()!='\n');
Lorsque tu appuies sur la touche entrée, les caractère '\n' a tendant à se mettre dans le buffer clavier.
Et lorsque tu utilises ton scanf("%c"), le '\n' sort du buffer pour se répondre au scanf. Du coup l'astuce consiste à vider le buffer clavier. Normalement while(c=getchar()!='\n' && c!=EOF); mais dans ce cas l'EOF n'est pas très très utile.

fgets(rep,sizeof(rep),stdin);
Même problème encore, le '\n' se mettra dans le buffer, donc je préconise l'utilisation d'un tableau avec fgets de trois cases (une case pour le caractère O ou N, une deuxième pour le '\n' et le troisième pour '\0' (fin de chaîne), (obligatoire pour éviter les débordement en lecture).
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 15:28
oki je vois ce que tu veux dire merci bien, par contre aurait tu une solution sans passer par là car nous l'avons pas encore vu ? Si tu n'en a pas ce n'est pas grave, encore merci pour ton aide !!!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 oct. 2008 à 15:43
Bon si tu débutes, je te conseille alors d'éviter l'utilisation de scanf("%c").
Tu peux à la place utiliser printf("taper 1 pour continuer "); Avec des chiffres, t'auras pas de souci.
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 15:53
merci bien c'est très sympa de ta part.
je vais peut etre t'énervé mais je dois faire pas mal de faute de débutant là j'ai un autre programme a compiler et enfaite il affiche pas du tout ce que je voudrais, je crois que mon gros souci est sur l'affichage donc si tu peux encore m'aider si tu ne peux pas tant pis et je te le dit tout de suite après celui là j'en ai encore deux je voudrais arriver a tout trouver tout seul mais si je n'y arrive pas est ce que je pourrais te recontacte ?
je te laisse celui qui a un petit problème d'affichage :

#include<stdio.h>
int main(void)
{
int note, min, max, cptmin,cptmax;
printf("\nDonnez une note (-1 pour finir)");
if (note != 1)
{
min = note;
max = note;
cptmin = 0;
cptmax = 0;
while (note != -1)
{
if (note < min)
{
min = note;
cptmin = 1;
}
else if (note = min)
{
cptmin = cptmin++;
}
if (note > max)
{
max = note;
cptmax = 1;
}
else if (note = max)
{
cptmax = cptmax++;
}
printf("\nDonnez une note (-1 pour finir)");
scanf("%d",¬e);
}
printf("\nNote maximale %d : attribuée %d fois",max,cptmax);
printf("\nNote minimale %d : attribuée %d fois",min,cptmin);
printf("\nPas de note saisie !");
}
0

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

Posez votre question
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 16:03
Comment il faut faire pour traduire en C :
si suite mod 2 =0 alors ....?

Merci d'avance !!!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 oct. 2008 à 16:14
A priori tu n'as pas regardé attentivement mon programme. Sinon t'aurais évité quelques fautes.
Quand on compare en C, c'est == et non =.
Le simple = sert à initialiser une variable.
Donc, on fait if(a==1) par exemple.

Ensuite : on ne fait pas cptmax=cptmax++ mais un simple cptmax++;
cptmax++; est l'équivalent de cptmax+=1; ou encore cptmax=cptmax+1;

Tu fais un int main(void), n'oublie donc pas de faire return 0; à la fin.

Sinon pour répondre à ta question, si suite mod 2 =0 alors ....?
Tu fais if(suite%2==0) { ... }
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 16:29
j'ai suivi tout tes conseil et tout marche bien pour le programme précédent mais celui avec le modulo il me marque erreur de segmentation une fois que j'ai saisi ma valeur qu'est ce que cela veut dire ?

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int bit, suite, cpt;
suite = 0;
for(cpt=1; cpt<=7; cpt++)
{
printf("\nSaisir une valeur binaire");
scanf("%d",bit);
while(bit < 0 || bit > 1)
{
printf("\nBit saisi invalide");
scanf("%d",bit);
}
suite++;
}
if (suite%2==0)
{
printf("\nSuite saisie paire, bit de parité égal à 0");
}
else
{
printf("\nSuite saisie impaire, bit de parité égal à 1");
}
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 oct. 2008 à 16:58
Salut
Lorsque tu fais un scanf, il ne faut pas oublier de passer l'adresse de la variable.
int bit;
scanf("%d",&bit);
Si t'oublies, l'esperluette, la variable ne sera pas modifiée.
0
cool-roots Messages postés 22 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 1 novembre 2008 15 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
1 nov. 2008 à 03:15
bonjours j ai aussi besoin de ton aide et de ta gentilesse
voila ca compilation ok mais ne fonctione pas sur le pc (probleme compabilite ou ereur de programation)
dev-c++ vista

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

int main(int argc, char *argv[])
{
long age=0;
printf("quel age as tu ?\n");
scanf("%ld",age);
if(age>=18)
{
printf("tu est majeur\n");
}
else
{
printf("tu nes pas majeur\n");
}
system("PAUSE");
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836 > cool-roots Messages postés 22 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 1 novembre 2008
1 nov. 2008 à 08:38
Tu réponds à mon message 10, qui contient la réponse !
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
31 oct. 2008 à 17:21
merci pour ton aide tout au long de l'aprem maintenant tous les algo que j'avais à mettre en C marche merci bien bonne continuation !!!
0