Petit exercice 2
Résolu
ninrin
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
ninrin Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
ninrin Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je crée ce post suite à un ancien post, voici l'algorithme à traduire en langague C, attention c'est long mais en vrai ont vas juste booser le début vu que c'est assez répétitif vers le milieu :
Variables age, perm, acc, assur en entier
Variable situ en caractère
Début
Écrire "Entrez l’âge : "
Lire age
Écrire "Entrez le nombre d’années de permis : "
Lire perm
Écrire "Entrez le nombre d’accidents : "
Lire acc
Écrire "Entrez le nombre d’années d’assurance : "
Lire assur
C1 ← age >= 25
C2 ← perm >= 2
C3 ← assur > 1
Si Non(C1) et Non(C2) alors
Si acc = 0 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) alors
Si acc = 0 alors
situ ← "Orange"
SinonSi acc = 1 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
Sinon
Si acc = 0 alors
situ ← "Vert"
SinonSi acc = 1 alors
situ ← "Orange"
SinonSi acc = 2 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
FinSi
Si C3 alors
Si situ = "Rouge" alors
situ ← "Orange"
SinonSi situ = "Orange" alors
situ ← "Orange"
SinonSi situ = "Vert" alors
situ ← "Bleu"
FinSi
FinSi
Écrire "Votre situation : ", situ
Fin
TRADUCTION EN C:
Donc mon 1er problème, le logiciel m'indique une erreur sur la ligne 15 du bool avec le message : "error: unknown type name 'bool', je n'arrive pas à comprend pourquoi ? tout m'a l'air bon!
@Dal J'ai remplacé au début par char situ[10] ainsi il y aura assez de place (10 max) pour écrire les chaines.
je crée ce post suite à un ancien post, voici l'algorithme à traduire en langague C, attention c'est long mais en vrai ont vas juste booser le début vu que c'est assez répétitif vers le milieu :
Variables age, perm, acc, assur en entier
Variable situ en caractère
Début
Écrire "Entrez l’âge : "
Lire age
Écrire "Entrez le nombre d’années de permis : "
Lire perm
Écrire "Entrez le nombre d’accidents : "
Lire acc
Écrire "Entrez le nombre d’années d’assurance : "
Lire assur
C1 ← age >= 25
C2 ← perm >= 2
C3 ← assur > 1
Si Non(C1) et Non(C2) alors
Si acc = 0 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) alors
Si acc = 0 alors
situ ← "Orange"
SinonSi acc = 1 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
Sinon
Si acc = 0 alors
situ ← "Vert"
SinonSi acc = 1 alors
situ ← "Orange"
SinonSi acc = 2 alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
FinSi
Si C3 alors
Si situ = "Rouge" alors
situ ← "Orange"
SinonSi situ = "Orange" alors
situ ← "Orange"
SinonSi situ = "Vert" alors
situ ← "Bleu"
FinSi
FinSi
Écrire "Votre situation : ", situ
Fin
TRADUCTION EN C:
#include <stdio.h> #include <stdlib.h> int main(void) { int age, perm, acc, assur; char situ[10]; printf("Entrez l'âge:\n"); scanf("&d", age); printf("Entre le nombre d'années de permis:\n"); scanf("%d", &perm); printf("Entrez le nombre d'accidents:\n"); scanf("%d", &acc); printf("Entrez le nombre d'années d'assurance:\n"); scanf("%d", &assur); bool C1 = age >= 25 ; bool C2 = perm >=2 ; bool C3 = assur > 1; if (!C1 && !C2) { if (acc == 0) { situ = "rouge"; } else { situ = "refusé"; } } return; else if (((!C1) && C2) || (C1 && (!C2))) { if (acc == 0) { situ = "orange"; } else if (acc == 1) { situ = "rouge"; } else { situ = "refusé"; } } return; else if (acc == 0) { situ = "vert"; else if (acc == 1) { situ = "orange"; } else if (acc == 2) { situ = "rouge"; } else { situ = "refusé"; } } return; if (C3) { if (situ == "rouge") { situ = "orange"; } else if (situ == "Orange") { situ = "Orange"; } else if (situ == "vert") { situ = "bleu"; } } return; prinft ("votre situation: %s\n", situ); return 0; }
Donc mon 1er problème, le logiciel m'indique une erreur sur la ligne 15 du bool avec le message : "error: unknown type name 'bool', je n'arrive pas à comprend pourquoi ? tout m'a l'air bon!
@Dal J'ai remplacé au début par char situ[10] ainsi il y aura assez de place (10 max) pour écrire les chaines.
A voir également:
- Petit exercice 2
- Supercopier 2 - Télécharger - Gestion de fichiers
- Petit 1 comme ² ✓ - Forum Windows
- Comment écrire un chiffre en petit caractè ✓ - Forum Bureautique
- Petit 2 clavier iphone ✓ - Forum iPhone
- 2 ecran pc - Guide
4 réponses
Salut ninrin,
En ajoutant le #include <stdbool.h> donnant accès au type bool, et en compilant avec les warnings avec gcc, on obtient ces messages d'avertissements et d'erreurs :
Codeblocks, que tu indiquais utiliser dans ton précédent message, a dû te les signaler. Traite les un par un en commençant par le premier : comprend pourquoi il se manifeste, corrige le, recompile, passe au suivant qui se manifestera en premier.
Les "error" vont empêcher la compilation car ils n'ont pas de sens syntaxiquement en C.
Les "warning" n'empêcheront pas la compilation, mais avertissent d'un code anormal, et dans 90% des cas, c'est un bogue.
Élimine les tous jusqu'à ce que ton programme compile proprement sans erreurs ni avertissements. Tous les bogues ne seront pas détectés par le compilateur, mais tu auras déjà bien progressé.
Quelques rappels ou indications :
Pour affecter une chaîne C à un tableau de char, tu dois utiliser strcpy() ou strncpy(), comme je te l'avais indiqué.
Pour comparer deux chaînes en C, tu dois utiliser strcmp()
Ces dernières fonctions sont accessibles par
Si tu ne connais pas le fonctionnement de ces fonctions, lis leur documentation.
Les liens que je te fournis vers http://www.cplusplus.com/reference/clibrary/ décrivent très précisément la syntaxe et l'usage des fonctions et comportent des exemples de code.
Il y a d'autres sites : https://en.cppreference.com/w/c/header ; les pages de manuel Linux ; ton manuel ; ton cours,... apprend à te servir de ces ressources pour progresser.
Si tu es bloqué sur une erreur ou un avertissement ou l'usage d'une fonction, reposte ton code corrigé et demande de l'aide sur le forum :-)
Dal
En ajoutant le #include <stdbool.h> donnant accès au type bool, et en compilant avec les warnings avec gcc, on obtient ces messages d'avertissements et d'erreurs :
$ gcc -Wall 35364348.c
35364348.c: In function ‘main’:
35364348.c:9:2: warning: too many arguments for format [-Wformat-extra-args]
scanf("&d", age);
^
35364348.c:22:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:26:9: error: assignment to expression with array type
situ = "refusé";
^
35364348.c:29:2: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]
return;
^
35364348.c:31:2: error: ‘else’ without a previous ‘if’
else if (((!C1) && C2) || (C1 && (!C2)))
^
35364348.c:34:9: error: assignment to expression with array type
situ = "orange";
^
35364348.c:38:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:42:9: error: assignment to expression with array type
situ = "refusé";
^
35364348.c:46:2: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type]
return;
^
35364348.c:48:2: error: ‘else’ without a previous ‘if’
else if (acc == 0)
^
35364348.c:50:8: error: assignment to expression with array type
situ = "vert";
^
35364348.c:52:3: error: expected ‘}’ before ‘else’
else if (acc == 1)
^
35364348.c:54:9: error: assignment to expression with array type
situ = "orange";
^
35364348.c:58:9: error: assignment to expression with array type
situ = "rouge";
^
35364348.c:61:10: error: assignment to expression with array type
{ situ = "refusé";
^
35364348.c:18:7: warning: unused variable ‘C3’ [-Wunused-variable]
bool C3 = assur > 1;
^
35364348.c:7:7: warning: variable ‘situ’ set but not used [-Wunused-but-set-variable]
char situ[10];
^
35364348.c: At top level:
35364348.c:66:2: error: expected identifier or ‘(’ before ‘return’
return;
^
35364348.c:68:2: error: expected identifier or ‘(’ before ‘if’
if (C3)
^
35364348.c:85:2: error: expected identifier or ‘(’ before ‘return’
return;
^
35364348.c:87:10: error: expected declaration specifiers or ‘...’ before string constant
prinft ("votre situation: %s\n", situ);
^
35364348.c:87:35: error: unknown type name ‘situ’
prinft ("votre situation: %s\n", situ);
^
35364348.c:91:2: error: expected identifier or ‘(’ before ‘return’
return 0;
^
35364348.c:92:1: error: expected identifier or ‘(’ before ‘}’ token
}
^
Codeblocks, que tu indiquais utiliser dans ton précédent message, a dû te les signaler. Traite les un par un en commençant par le premier : comprend pourquoi il se manifeste, corrige le, recompile, passe au suivant qui se manifestera en premier.
Les "error" vont empêcher la compilation car ils n'ont pas de sens syntaxiquement en C.
Les "warning" n'empêcheront pas la compilation, mais avertissent d'un code anormal, et dans 90% des cas, c'est un bogue.
Élimine les tous jusqu'à ce que ton programme compile proprement sans erreurs ni avertissements. Tous les bogues ne seront pas détectés par le compilateur, mais tu auras déjà bien progressé.
Quelques rappels ou indications :
Pour affecter une chaîne C à un tableau de char, tu dois utiliser strcpy() ou strncpy(), comme je te l'avais indiqué.
Pour comparer deux chaînes en C, tu dois utiliser strcmp()
Ces dernières fonctions sont accessibles par
#include <string.h>
Si tu ne connais pas le fonctionnement de ces fonctions, lis leur documentation.
Les liens que je te fournis vers http://www.cplusplus.com/reference/clibrary/ décrivent très précisément la syntaxe et l'usage des fonctions et comportent des exemples de code.
Il y a d'autres sites : https://en.cppreference.com/w/c/header ; les pages de manuel Linux ; ton manuel ; ton cours,... apprend à te servir de ces ressources pour progresser.
Si tu es bloqué sur une erreur ou un avertissement ou l'usage d'une fonction, reposte ton code corrigé et demande de l'aide sur le forum :-)
Dal
Autre conseil : lorsque tu programmes, n'attends pas d'avoir écrit une centaine de lignes de code pour vérifier que ton programme compile proprement sans erreurs ni warnings et qu'il s'exécute comme tu l'attends.
Dès que tu as quelques lignes testables, compile et débogue en vérifiant que cela fonctionne comme cela le devrait.
Dès que tu as quelques lignes testables, compile et débogue en vérifiant que cela fonctionne comme cela le devrait.
Tes
Si tu cherches juste à terminer le bloc
Cela provoque d'autres erreurs aux lignes qui suivent ces
returnplacés au milieu du code de
main()ne sont pas syntaxiquement incorrects en eux-mêmes (tu as seulement droit à un avertissement car tu ne renvoies pas un
intattendu par
main()), mais leur effet est d'interrompre l'exécution de la fonction (et donc de terminer le programme à cet endroit puisqu'il s'agit de la fonction
main()). Ce n'est certainement pas ce que tu cherches à faire (sauf pour le dernier
return 0).
Si tu cherches juste à terminer le bloc
if, c'est déjà le rôle de l'accolade fermante et tu dois supprimer ces
return(sauf, donc, le dernier
return 0).
Cela provoque d'autres erreurs aux lignes qui suivent ces
return, qui comportent des
else:
error: ‘else’ without a previous ‘if’car tu as interrompu la séquence if / else. Ces messages d'erreurs disparaîtront lorsque tu auras supprimé ces
return.
Petite erreur d'étourderie sur le premier scanf:
devient
Pourtant tu as bien syntaxé les autres
scanf("&d", age);
devient
scanf("%d", &age);
Pourtant tu as bien syntaxé les autres