Grâce à un certain nombre d'informateurs plus ou moins fiables, le chef de la police a recueilli des indications qui devraient lui permettre enfin de démasquer cet espion qui lui échappe depuis des semaines. La population de la ville étant relativement importante, il vous demande votre aide afin d'automatiser un peu les choses. Vous devez estimer la probabilité qu'une personne soit un espion.
Ce que doit faire votre programme :
Votre programme doit lire entier : un nombre de personnes à considérer. Ensuite, pour chaque personne, il doit lire son signalement sous la forme de cinq entiers : sa taille en centimètres, son âge en années, son poids en kilogrammes, un entier valant 1 si la personne possède un cheval et 0 sinon, et un entier valant 1 si la personne à les cheveux bruns et 0 sinon.
On veut déterminer pour chaque personne à quel point elle correspond aux 5 critères suivants :
il aurait une taille supérieure ou égale à 178 cm et inférieure ou égale à 182 cm ;
il aurait au moins 34 ans ;
il pèserait strictement moins de 70 kg ;
il n'a pas de cheval ;
il a les cheveux bruns.
Lorsque cela n'est pas précisé explicitement, les inégalités sont au sens large.
Pour chaque personne, vous devez tester tous les critères. S'ils sont vérifiés tous les 5, vous devez afficher « Très probable ». Si seulement 3 ou 4 sont vérifiés, vous devez afficher « Probable ». Si aucun n'est vérifié, vous devez afficher « Impossible », et dans les autres cas, vous devez afficher « Peu probable ».
Exemple
entrée :
1
180
40
65
0
1
sortie :
Très probable
#include <stdio.h>
#define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
#include <stdbool.h>
int nbPersonnes;
int taille;
int age;
int poids;
int Cheval;
int CheveuxBruns;
int piste=0;
int main()
{
scanf("%d", &nbPersonnes);
repeat (nbPersonnes)
{
scanf("%d %d %d %d %d",&taille,&age,&poids,&Cheval,&ChevalBruns);
if(taille>=178 && taille<=182)
{
piste++
}
if(age<=34)
{
piste++;
}
if(poids<70)
{
piste++;
}
if(Cheval==true)
{
piste++;
}
if(ChevalBruns==false)
{
piste++;
}
}
if(piste==5)
{
printf("Très probable");
}
else if(piste==3&& piste==4)
{
printf("Probable");
}
else if(piste==0)
{
printf("Impossible");
}
else{
printf("Peu probable");
}
}
il met une erreur de déclaration sur ChevalBruns ?
Je n'avais pas capté que le switch() était interdit. C'est quoi c'est sites à la con qui imposent leurs règles sous peine de..... de quoi au fait ?
- Edité par edgarjacobs il y a moins de 30s
En fait France IOI ne l'interdit pas. Sur les premiers problèmes pour débutants/apprenants ils y vont doucement, et là ça doit-être la partie conditionnelle juste avant le «mais on peut faire plus simple avec un switch». Il n'y a aucune sanction ou pénalité.
Ou bien le prof veut forcer les gens à se creuser les méninges, ou bien il ne veut pas qu'ils progressent ... Le truc de White Crow est bien. Je l'utilise constamment en Python. Je n'ai pas de prof pour m'emmerder, donc j'aurais préféré le switch. Mais le truc du tableau de messages est sans doute un peu plus rapide (pour ce queça vaut ...)
Le Tout est souvent plus grand que la somme de ses parties.
@White Crow: merci pour l'explication. Mais quand j'ai appris à programmer (il y a longtemps), on ne m'a pas obligé à utiiliser une macro repeat, mais on m'a appris à utiliser un for, un while et un do while....
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
@White Crow: merci pour l'explication. Mais quand j'ai appris à programmer (il y a longtemps), on ne m'a pas obligé à utiiliser une macro repeat, mais on m'a appris à utiliser un for, un while et un do while....
lol pareil, mais bon je ne suis pas pédagogue ; je ne sais pas ce que cette méthode vaut.
Si j'ai bien compris, il ne faut pas utiliser 'switch' parce que cette instruction n'a pas été vue en cours. Bien sûr que la solution de White Crow est mieux, mais est-elle réalisable par quelqu'un qui en est au tout début ? (Mais je ne me plains pas : c'est pour lire ce genre de réponse que je viens ici.)
Moi également, je me suis souvent plaint de la macro repeat(). Il faut donner des exercices en fonction des connaissances déja acquises, pas forcer les étudiants d'aller 3 cours plus loin et revenir pour l'exercice. Je pense que c'est au prof d'être pédagogue, pas à l'étudiant. Et ça vaut même si le prof est France IOI.
Le Tout est souvent plus grand que la somme de ses parties.
Quand je dis qu'initialiser une variable lors de la déclaration, ce n'est pas (souvent) nécessaire. Tu oublies de mettre piste à zéro à la fin du do....while. Tu ferais mieux de ne pas l'initialiser et de lui donner la valeur zéro en ligne 24 (ou 26). Tu peux même en faire une variable locale au do....while
- Edité par edgarjacobs 1 août 2021 à 15:37:15
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
En plus de pistenon remis à zéro. Ton code ne correspond plus à l'énoncé. Les lignes 27 et 31 sont incorrectes alors qu'elles l'étaient dans ton 2nd post.
if(taille>=178 && taille==182) C'est ça inférieur ou égal à 182 ? Au lieu d'une suite de if ... else if ... else pour l'affichage, ici j'aurais utilisé un switch, c'est tout à fait approprié.
Le Tout est souvent plus grand que la somme de ses parties.
Tout à fait d'accord, c'est stupide d'avoir des variables globales dans ce contexte. Un couper-coller est si simple. Je n'aime guère mieux la macro repeat. Pourquoi n'apprend-on pas aux gens à faire des boucles for? Et si ce n'est pas trop pour le PO: Puisque les messages sont groupés 0, 1-2, 3-4, 5, on pourrait faire un tableau de chaînes comme suit: (indentation préservée) - #include <stdio.h> int main(void) { char *message[4] = { "Impossible", "Peu probable", "Probable", "Très probable" }; for(int piste=0; piste<=5; piste++) printf("%s\n", message[(piste+1)/2]); }
Le Tout est souvent plus grand que la somme de ses parties.
l'espion est démasqué! aide france ioi
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.