Menu

Petit exercice [Résolu]

ninrin 9 Messages postés jeudi 3 mai 2018Date d'inscription 16 mai 2018 Dernière intervention - 3 mai 2018 à 00:47 - Dernière réponse : ninrin 9 Messages postés jeudi 3 mai 2018Date d'inscription 16 mai 2018 Dernière intervention
- 15 mai 2018 à 01:44
Bonjour, je dois convertir en language C comme suit:
Variables nb, carr en entier
Début
Écrire "Entrez un nombre : "
Lire nb
carr ← nb * nb
Écrire "Son carré est : ", carr
Fin

TRADUCTION:

int main(int nb, int carr)
{
    printf("Entrez un nombre:");
    nb=getchar();
    carr= WTF
    printf("Son carre est: %d", carr);
    return 0;
}

donc comme vous pouvez le voir ma traduction en language C, dans la ligne de déclaration de variable carr, que dois-je mettre exactement à la place de mon "WTF"? D'ailleurs j'ai un sérieux doute concernant la ligne "nb= getchar()" pour "lire nb"? Merci de m'éclairer et me dire mes erreurs ^^, bien à vous!

EXO 2: je dois déclarer 4 variables contenant chacune des fragments de texte. Je dois réussir à aligner les 4 fragments (concaténation) :
int main()
{

char t1[] = "belle Marquise";
char t2[] = "vos beaux yeux";
char t3[] = "me font mourir";
char t4[] = "d'amour";
printf("%s", t1);
return 0;
}

comme vous voyez avec sprinf, je n'ai réussis que à afficher la variable "t1" et je dois afficher t1&t2&t3&t4 en une seul ligne. Avez vous une astuce??
Afficher la suite 

Votre réponse

10 réponses

[Dal] 4699 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 17 août 2018 Dernière intervention - 3 mai 2018 à 10:29
0
Merci
Salut ninrin,

Tu devrais sérieusement revoir ton cours ou ton manuel de C.

Ton prototype pour main est erroné et ne correspond pas aux prototypes standards acceptables en C (
int main(int argc, char **argv)
ou
int main(void)
, vois ton cours ou ton manuel.

Déclare tes variables dans le code de la fonction main, à l'intérieur des accolades.

Prend l'habitude de terminer tes printf avec un retour à la ligne
\n
ou une instruction
fflush(stdout);
si tu ne veux pas faire de retour à la ligne, pour t'assurer que ton texte sera bien affiché.

getchar va retourner sous forme d'entier le code ASCII d'un caractère lu, ce n'est donc pas ce que tu veux, utilise scanf.

Une fois que tu as ton entier, tu le multiplies par lui-même en ligne 5.. je ne vois pas où est ton problème.

Pour ton 2ème code, si ce que tu dois faire c'est juste afficher le contenu des chaînes à la suite, avec printf, tu peux indiquer un nombre variable de spécificateurs et un nombre correspondant d'arguments. Tu peux aussi faire plusieurs printf avec un seul spécificateur et un seul argument correspondant et sans retour à la ligne, sauf pour le dernier, mais c'est un peu bourrin.

Je suppose que tu devras rajouter des espaces pour que la phrase se lise correctement.

Dal
Merci j'ai réussis !
le prochain l'exercice consiste à imbriber plusieurs else if, if etc... avec des opération logique comme suit :
Variables age, perm, acc, assur en entier
Variable situ en caractère
Début
C1 ← age >= 25

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

TRADUCTION C:

int main(void)
{
int age, perm, acc, assur;
char situ;
int C1 = 25;
if (age >=C1);

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)








1er problème, j'ai un doute concernant ma déclaration en C, de ma variable C1 age >= 25, car j'ai pas bien saisis l'algorithme.
2ème problème, l'applicaton me dit qu'il y a erreur sur la ligne else if (!C1 && C2 || C1 && !C2), j'ai dû me tromper quelque part?
3ème, j'ai un doute pour "finsi" de l'algorithme, j'ai juste mis "return;" en C, c'est bon ? Car je vois parfois sur des sites "return 1.0;" par exemple.
4ème, j'ai un doute pour "Sinon
Si acc = 0 alors" de l'algorithme , j'ai mis direct "else if" en C. J'aurais peut-être dû mettre "else { if (acc = 0) }" ???
Voila n'hésitez pas à me faire remarqué les erreurs ^^.
Dalfab 351 Messages postés dimanche 7 février 2016Date d'inscription 7 août 2018 Dernière intervention - 10 mai 2018 à 03:40
Bonjour,
Clairement, il manque des morceaux de l"algorithme, et tu as essayé de le retranscrire en C, et on y retrouve donc ces non sens ajoutés aux erreurs de C. Par exemple on voit apparaître un C2 mais d'où sort-il? Les tests commencent par 'sinon' ce qui n'a pas de sens et se terminent par un 'si' incomplet!

La première ligne après 'début' de l'algo, s'écrit en C :
bool C1 = age >= 25; // oui cette ligne a bien un sens
                     // C1 est un booleen vrai ssi age>= 25

et
else if (!C1 && C2 || C1 && !C2)
est une bonne traduction de l'algorithme (on peut aussi l'abréger en
else if (C1 ^ C2)
qui correspond à des 2 vrais mais pas les 2) mais comme je l'ai déjà écris un 'sinon" ne peut pas être un début!

Le 'finsi' devient souvent en C une accolade fermante que tu as mis. Il ne faut pas de
return
dans ton cas.

si acc = 0, se traduit par
if ( acc == 0 )
en C, les parenthèses et le double égal sont nécessaires.
[Dal] 4699 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 17 août 2018 Dernière intervention - 14 mai 2018 à 11:12
@ninrin,

Comme le dit Dalfab, ton énoncé (l'algorithme que tu traduis) comporte visiblement des choses manquantes, et ta "traduction" en C est, de ce fait également incohérente.

Outre ses remarques, tu aura observé que les lignes où tu assignes tes chaînes produisent des warnings de ce type :

warning: assignment makes integer from pointer without a cast
situ = "orange";

en effet, tu ne peux pas faire :

    char situ;
    situ = "orange";    /* code erroné */

pour plusieurs raisons :

- char est un type entier, qui ne réserve d'espace mémoire que pour un seul caractère
- une chaîne de caractères en C serait un tableau de char terminé par
'\0'
, ou un pointeur sur char vers une zone mémoire allouée contenant des char successifs terminés par
'\0'
... pour stocker "orange", tu as besoin d'un espace mémoire de 7 chars
- la copie de chaînes en C s'effectue avec strcpy() ou strncpy() accessibles par
<string.h>
...

    char situ[7];
    strcpy(situ, "orange");    /* copie chaque char de la chaîne
                                  vers l'espace mémoire alloué dans
                                  le tableau situ */

- "rouge" va être compilé sous la forme d'une chaîne accessible en mémoire par le programme, aussi, une autre façon de faire ton programme en C serait juste de copier le pointeur vers cette chaîne dans une variable pointeur sur char
    char  * situ;
    situ = "orange";    /* code correct, si situ est un pointeur sur char,
                           car on affecte seulement le pointeur vers la chaîne  
                           constante "orange" à la variable pointeur sur
                           char */


Dal
[Dal] 4699 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 17 août 2018 Dernière intervention - 14 mai 2018 à 13:49
aussi, 2 remarques :

Lorsque tu postes du code sur le forum, fais le en utilisant les balises de code <code c> permettant de préserver l'indentation de ton code, de colorer la syntaxe et numéroter tes lignes. Si tu n'as pas vu le bouton de l'éditeur te permettant de poster ton code correctement, il est là :


Si tu postes une question différente de celle qui est l'objet de ton post initial, fais le sur un nouveau fil :-)
ninrin 9 Messages postés jeudi 3 mai 2018Date d'inscription 16 mai 2018 Dernière intervention - 15 mai 2018 à 01:44
ok , je vais crée un autre post pour cet exercice car elle me parait un peu compliqué pour le débutant que je suis. J'y mettrais tout les codes du début jusqu'à la fin pour que cela soit plus clair. Merci pour vos aide et j'espère vous revoir :)
Commenter la réponse de [Dal]