Solution aux exercices de prog.
3 participants
ESA NAMUR :: Les cours :: Programmation
Page 1 sur 1
Solution aux exercices de prog.
Bon, j'ai fait un autre post pour eviter que ceux qui en font encore soient tentés de regarder ^^
J'ai essayé de commenter mon code autant que possible...
Je vous conseille vivement de le copier coller dans Turbo Delphi plutot que de le regarder sur le forum, car les mots clés sont pas en couleurs, et les lignes trop longues font de vilain retour a la ligne... Pas si vous copiez-collez le tout dans Turbo Delphi
Exercices :
Exercice 1 :
Une addition.
Demandez à l'utilisateur d'entrer deux nombres, les additionner, et sortir le résultat.
Programme Exercice1.exe
Exercice 2 :
Une multiplication, en utilisant les boucles et les additions.
Demandez à l'utilisateur d'entrer deux nombres positifs, les multiplier en n'utilisant que l'opération d'addition, sortir le résultat.
Programme Exercice2.exe
Exercice 3 :
Tables de multiplication.
Afficher les tables de multiplications, jusqu'a 10, en gardant une certaine mise en page :
1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
1 x 10 = 10
-----------
2 x 1 = 2
2 x 2 = 4
... etc
Remarque, l'opérateur pour les multiplication est *
Programme Exercice3.exe
Exercice 4 :
Un systeme de controle basé sur l'age.
Demandez à l'utilisateur son nom. Demandez lui son âge.
sortir une phrase du type "Bonjour <NOM>, vous pouvez accéder a ce site" si la personne est majeure
Si elle est mineure, sortir "Bonjour <NOM>, vous ne pouvez pas accéder à ce site, revenez dans X an(s)!!!"
Programme Exercice4.exe
Exercice 5 :
Pyramide.
Affichez une petite pyramide de 10 lignes, à l'aide de boucles, un peu comme celle ci :
Exercice 6 :
Division entière.
Demandez a l'utilisateur d'entrer deux nombres positifs. Le programme effectue une division entière, et affiche le quotient et le reste
Exemple : 17 divisé par 3 donne 5 et il reste 2 ( 17=(3x5)+2 )
Programme Exercice6.exe
Exercice 7 :
Suite de Fibonacci.
Affichez la suite de Fibonacci, ou chaque nombre est la somme des deux précédents :
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Afficher une suite de 25 nombres
Programme Exercice7.exe
Exercice 8 :
Minimum et maximum
Demandez a l'utilisateur d'entrer 10 nombres. Lui sortir le plus petit, et le plus grand.
Programme Exercice8.exe
J'ai essayé de commenter mon code autant que possible...
Je vous conseille vivement de le copier coller dans Turbo Delphi plutot que de le regarder sur le forum, car les mots clés sont pas en couleurs, et les lignes trop longues font de vilain retour a la ligne... Pas si vous copiez-collez le tout dans Turbo Delphi
Exercices :
Exercice 1 :
Une addition.
Demandez à l'utilisateur d'entrer deux nombres, les additionner, et sortir le résultat.
Programme Exercice1.exe
- Code:
var
Nbr1, Nbr2 : integer;
begin
write('Entrez le premier nombre : ');
readln(Nbr1);
write('Entrez le deuxieme nombre : ');
readln(Nbr2);
writeln('La somme est ',Nbr1+Nbr2); //pas besoin d'une variable pour la somme
readln;
end.
Exercice 2 :
Une multiplication, en utilisant les boucles et les additions.
Demandez à l'utilisateur d'entrer deux nombres positifs, les multiplier en n'utilisant que l'opération d'addition, sortir le résultat.
Programme Exercice2.exe
- Code:
var
Nbr,Prod,Cpt:longword; // vu que positif, je peux utiliser des variables non-signées
// Cpt pour "compteur", Prod pour "produit"
begin
write('Entrez votre nombre : ');
readln(Nbr);
write('Par combien voulez-vous le mutliplier ? : ');
readln(Cpt);
Prod:=0;
for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr; // j'ajoute a 'Prod' mon nombre initial autant de fois que necessaire
writeln('Le produit est : ',Prod);
readln;
end.
Exercice 3 :
Tables de multiplication.
Afficher les tables de multiplications, jusqu'a 10, en gardant une certaine mise en page :
1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
1 x 10 = 10
-----------
2 x 1 = 2
2 x 2 = 4
... etc
Remarque, l'opérateur pour les multiplication est *
Programme Exercice3.exe
- Code:
var
Nbr1,Nbr2:byte;
begin
for Nbr1:=1 to 10 do // boucle qui permet de passer d'une table a l'autre
begin
for Nbr2:=1 to 10 do //boucle qui génère chaque ligne d'une table
writeln(Nbr1,' X ',Nbr2,' = ',Nbr1*Nbr2);
writeln;
end;
readln;
end.
Exercice 4 :
Un systeme de controle basé sur l'age.
Demandez à l'utilisateur son nom. Demandez lui son âge.
sortir une phrase du type "Bonjour <NOM>, vous pouvez accéder a ce site" si la personne est majeure
Si elle est mineure, sortir "Bonjour <NOM>, vous ne pouvez pas accéder à ce site, revenez dans X an(s)!!!"
Programme Exercice4.exe
- Code:
var
Age:byte;
Nom:shortstring;
begin
write('Veuillez entrer votre nom : ');
readln(Nom);
write('Quel est votre age ? : ');
readln(Age);
if Age>=18 then writeln ('Bonjour ',Nom,', vous pouvez acceder a ce site')
else writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans ',18-Age,' an(s)!!!');
readln;
end.
Exercice 5 :
Pyramide.
Affichez une petite pyramide de 10 lignes, à l'aide de boucles, un peu comme celle ci :
- Code:
*
***
*****
*******
*********
- Code:
var
Nesp,Neto,Nlig:byte; //Pour Nombre d'espaces, Nombres d'etoiles, Nombres de lignes
begin
for Nlig:=1 to 10 do //Cette boucle pour passer d'une ligne a l'autre, et savoir a quel ligne nous sommes
begin // plus on va avancer dans les lignes, moins yaura d'espaces avant les etoiles
for Nesp:=Nlig to 10 do write(' '); // Cette boucle definit le nombres d'espaces en fonction de la ligne actuelle
for Neto:=Nlig*2-1 downto 1 do write('*'); //Cette boucle définit le nombre d'étoiles en fonction de la ligne.. 1,3,5 etc
writeln; //Un retour a la ligne avant de retourner au début du programme
end;
readln;
end.
Exercice 6 :
Division entière.
Demandez a l'utilisateur d'entrer deux nombres positifs. Le programme effectue une division entière, et affiche le quotient et le reste
Exemple : 17 divisé par 3 donne 5 et il reste 2 ( 17=(3x5)+2 )
Programme Exercice6.exe
- Code:
var
Nbr,Divi,Cpt:integer; //Divi pour diviseur, et Cpt pour compteur
begin
write('Entrez le nombre a diviser : ');
readln(Nbr);
write('Entrez le diviseur : ');
readln(Divi);
Cpt:=0;
while Divi<=Nbr do // cette boucle sert a compter le nombre de fois que le diviseur peut etre retiré du nombre
begin
Cpt:=Cpt+1;
Nbr:=Nbr-Divi;
end;
write('Le resultat est ',Cpt,' et le reste est ',Nbr);
readln;
end.
Exercice 7 :
Suite de Fibonacci.
Affichez la suite de Fibonacci, ou chaque nombre est la somme des deux précédents :
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Afficher une suite de 25 nombres
Programme Exercice7.exe
- Code:
var
Nbr1,Nbr2,Interm:longword; //entiers positifs ... Interm=Intermédiaire
Cpt:byte; //apres tout, pas besoin d'une grosse variable pour aller jusqu'a 25 !
begin
Nbr1:=0;
Nbr2:=1;
write(Nbr1); // variables initialisées, et ecriture du premier nombre
for Cpt := 2 to 25 do
begin
Interm:=Nbr2; //je met de coté la valeur de Nbr2
Nbr2:=Nbr2+Nbr1; //Nbr2 deviens la somme de Nbr2+Nbr1
Nbr1:=Interm; //Nbr1 deviens l'ancienne valeur de Nbr2
write(', ',Nbr1);
end;
readln;
end.
Exercice 8 :
Minimum et maximum
Demandez a l'utilisateur d'entrer 10 nombres. Lui sortir le plus petit, et le plus grand.
Programme Exercice8.exe
- Code:
var
Min,Max,Nbr:integer;
Cpt:byte;
begin
write('Entrez un nombre : ');
readln(Nbr);
Min:=Nbr; //j'initialise les variables avec le premier nombre que j'entre
Max:=Nbr;
for Cpt:=2 to 10 do
begin
write('Entrez un nombre : ');
readln(Nbr);
if Nbr>Max then Max:=Nbr; //si le nombre est plus grand que le maximum actuel, je remplace le maximum
if Nbr<Min then Min:=Nbr; //si le nombre est plus petit que le minimum actuel, je remplace le minimum
end;
writeln('Le nombre le plus petit est ',Min);
writeln('Le nombre le plus grand est ',Max);
readln;
end.
Nico- Messages : 43
Date d'inscription : 23/10/2007
Re: Solution aux exercices de prog.
"Perfectionnement"
Les mêmes exercices, avec quelques complications
Exercice 2b :
Meme exercice, mais l'utilisateur peut entrer des nombres négatifs.
Programme Exercice2B.exe
Deux solutions, une ou on vérifie le signe final, on transforme tout en positif et puis on applique le signe final:
Une autre ou on change le mécanisme de la boucle en fonction du signe du multiplicateur :
Exercice 3b:
Meme chose, mais au lieu d'afficher les chiffres, on les affiche en lettres : "cinq multiplié par neuf vaux quarante-cinq"
Programme Exercice3B.exe
Bien plus long que je l'imaginais, c'etait le plus dur de tous ^^
Exercice 4b :
Meme chose, mais cette fois ci, on affiche correctement le mot "an", c'est a dire au pluriel ou au singulier.
Programme Exercice4B.exe
Exercice 5b:
Demandez a l'utilisateur la hauteur souhaitée.
Programme Exercice5B.exe
Exercice 7b :
Meme chose, mais cette fois, on demande a l'utilisateur combien de nombres il souhaite afficher.
Programme Exercice7B.exe
Exercice 8b :
Meme chose, mais cette fois ci, on demande a l'utilisateur combien de nombres il va entrer.
Programme Exercice8B.exe
Exercice 8c :
Meme chose que l'exercice 8, mais le programme ne s'arrete que si l'utilisateur tape 0.
Programme Exercice8C.exe
Les mêmes exercices, avec quelques complications
Exercice 2b :
Meme exercice, mais l'utilisateur peut entrer des nombres négatifs.
Programme Exercice2B.exe
Deux solutions, une ou on vérifie le signe final, on transforme tout en positif et puis on applique le signe final:
- Code:
var
Nbr,Prod,Cpt:integer;
Neg:boolean;
begin
write('Entrez votre nombre : ');
readln(Nbr);
write('Par combien voulez-vous le mutliplier ? : ');
readln(Cpt);
Prod:=0;
if (Cpt<0) XOR (Nbr<0) then Neg:=True else Neg:=False; // XOR = ou exclusif, l'un ou l'autre, mais pas les deux. Si le resultat sera négatif, je met le boolean Neg à 'TRUE'
if (Cpt<0) then Cpt:=-Cpt; //Je transforme tout mes nombres negatifs en positif, afin de ne rien changer a la mecanique de la boucle
if (Nbr<0) then Nbr:=-Nbr;
for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr;
if Neg then Prod:=-Prod; //Si le resultat est négatif, j'applique le signe
writeln('Le produit est : ',Prod);
readln;
end.
Une autre ou on change le mécanisme de la boucle en fonction du signe du multiplicateur :
- Code:
var
Nbr,Prod,Cpt:integer;
begin
write('Entrez votre nombre : ');
readln(Nbr);
write('Par combien voulez-vous le mutliplier ? : ');
readln(Cpt);
Prod:=0;
if (Cpt>=0) then
for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr
else
for Cpt:=Cpt to -1 do Prod:=Prod-Nbr; // si le coef est négatif, je change le fonctionnement de la boucle for
writeln('Le produit est : ',Prod);
readln;
end.
Exercice 3b:
Meme chose, mais au lieu d'afficher les chiffres, on les affiche en lettres : "cinq multiplié par neuf vaux quarante-cinq"
Programme Exercice3B.exe
Bien plus long que je l'imaginais, c'etait le plus dur de tous ^^
- Code:
var
Nbr1,Nbr2,Nbr3:byte;
Nbr1L,Nbr2L,ProdL:shortstring; //L pour la version Lettres ^^
begin
for Nbr1:=1 to 10 do
begin
case Nbr1 of //apres avoir incrémenté Nbr1, je regarde combien il vaux
1 : Nbr1L:='Un'; //et je met le mot correspondant dans Nbr1L
2 : Nbr1L:='Deux';
3 : Nbr1L:='Trois';
4 : Nbr1L:='Quatre';
5 : Nbr1L:='Cinq';
6 : Nbr1L:='Six';
7 : Nbr1L:='Sept';
8 : Nbr1L:='Huit';
9 : Nbr1L:='Neuf';
10 : Nbr1L:='Dix';
end;
for Nbr2:=1 to 10 do
begin
case Nbr2 of //meme chose pour Nbr2
1 : Nbr2L:='un';
2 : Nbr2L:='deux';
3 : Nbr2L:='trois';
4 : Nbr2L:='quatre';
5 : Nbr2L:='cinq';
6 : Nbr2L:='six';
7 : Nbr2L:='sept';
8 : Nbr2L:='huit';
9 : Nbr2L:='neuf';
10 : Nbr2L:='dix';
end;
Nbr3:=Nbr1*Nbr2;
case Nbr3 of
1..16 : ProdL:='petit'; //Je calcule le produit, et je regarde si il s'agit d'un cas particulier
17..19 : begin //Si c'est de 1 a 16, c'est un cas particulier, il ne s'agira pas d'un mot composé
ProdL:='dix';
Nbr3:=Nbr3-10; //Une fois que j'ai définit de quel dizaine il s'agit, j'inscrit le premier mot
end; //Et je soustrait la dizaine correspondante, afin qu'il ne reste que les unités
20..29 : begin
ProdL:='vingt';
Nbr3:=Nbr3-20;
end;
30..39 : begin
ProdL:='trente';
Nbr3:=Nbr3-30;
end;
40..49 : begin
ProdL:='quarante';
Nbr3:=Nbr3-40;
end;
50..59 : begin
ProdL:='cinquante';
Nbr3:=Nbr3-50;
end;
60..69 : begin
ProdL:='soixante';
Nbr3:=Nbr3-60;
end;
70..79 : begin
ProdL:='septante';
Nbr3:=Nbr3-70;
end;
80,82..89 : begin
ProdL:='quatre-vingt';
Nbr3:=Nbr3-80;
end;
81 : begin //Si c'est 81, c'est un cas particulier, car on dit quatre-vingt-un et non pas
ProdL:='quatre-vingt-un'; //quatre-vingt et un, comme pour les autres dizaines ...
Nbr3:=Nbr3-81; //j'enleve 81, afin qu'il ne reste rien dans nombre 3, et qu'il n'ajoute rien au mot
end;
90..99 : begin
ProdL:='nonante';
Nbr3:=Nbr3-90;
end;
100 : begin
ProdL:='cent';
Nbr3:=Nbr3-100;
end;
end;
if ProdL='petit' then // les cas particuliers, je remplace 'petit' par la valeur correspondante
case Nbr3 of
1 : ProdL:='un';
2 : ProdL:='deux';
3 : ProdL:='trois';
4 : ProdL:='quatre';
5 : ProdL:='cinq';
6 : ProdL:='six';
7 : ProdL:='sept';
8 : ProdL:='huit';
9 : ProdL:='neuf';
10 : ProdL:='dix';
11 : ProdL:='onze';
12 : ProdL:='douze';
13 : ProdL:='treize';
14 : ProdL:='quatoze';
15 : ProdL:='quinze';
16 : ProdL:='seize';
end
else //Si ce n'est pas un cas particulier, j'analyse les unités restantes, et
case Nbr3 of //j'ajoute la derniere partie du mot composé (concaténation de strings)
0 : ;
1 : ProdL:=ProdL+' et un';
2 : ProdL:=ProdL+'-deux';
3 : ProdL:=ProdL+'-trois';
4 : ProdL:=ProdL+'-quatre';
5 : ProdL:=ProdL+'-cinq';
6 : ProdL:=ProdL+'-six';
7 : ProdL:=ProdL+'-sept';
8 : ProdL:=ProdL+'-huit';
9 : ProdL:=ProdL+'-neuf';
end;
writeln(Nbr1L,' multiplie par ',Nbr2L,' vaux ',ProdL);
end;
writeln;
end;
readln;
end.
Exercice 4b :
Meme chose, mais cette fois ci, on affiche correctement le mot "an", c'est a dire au pluriel ou au singulier.
Programme Exercice4B.exe
- Code:
var
Age:byte;
Nom:shortstring;
begin
write('Veuillez entrer votre nom : ');
readln(Nom);
write('Quel est votre age ? : ');
readln(Age);
if Age>=18 then writeln ('Bonjour ',Nom,', vous pouvez acceder a ce site')
else if Age=17 then writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans un an!!!')
else writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans ',18-Age,' ans!!!');
readln;
end.
Exercice 5b:
Demandez a l'utilisateur la hauteur souhaitée.
Programme Exercice5B.exe
- Code:
var
Nesp,Neto,Nlig,NligMax:byte;
begin
write('Combien de lignes (40 max) ? : ');
readln(NligMax);
for Nlig:=1 to NligMax do
begin
for Nesp:=Nlig to NligMax do write(' ');
for Neto:=Nlig*2-1 downto 1 do write('*');
writeln;
end;
readln;
end.
Exercice 7b :
Meme chose, mais cette fois, on demande a l'utilisateur combien de nombres il souhaite afficher.
Programme Exercice7B.exe
- Code:
var
Nbr1,Nbr2,Interm:longword;
Cpt,Ntotal:byte;
begin
Nbr1:=0;
Nbr2:=1;
write('Combien de nombres voulez-vous afficher ? ');
readln(Ntotal);
if Ntotal=0 then //si l'utilisateur veux rien afficher, et bien on affichera rien!
else
if Ntotal=1 then write(Nbr1) //si 1, on affiche juste le premier nombre, mais on peux pas rentrer dans la boucle, qui commence a partir de 2
else
begin
write(Nbr1);
for Cpt := 2 to Ntotal do
begin
Interm:=Nbr2;
Nbr2:=Nbr2+Nbr1;
Nbr1:=Interm;
write(', ',Nbr1);
end;
end;
readln;
end.
Exercice 8b :
Meme chose, mais cette fois ci, on demande a l'utilisateur combien de nombres il va entrer.
Programme Exercice8B.exe
- Code:
var
Min,Max,Nbr:integer;
Cpt,Ntotal:byte;
begin
write('Combien de nombre voulez vous entrer ? ');
readln(Ntotal);
write('Entrez un nombre : ');
readln(Nbr);
Min:=Nbr; //j'initialise les variables avec le premier nombre que j'entre
Max:=Nbr;
if Ntotal>=2 then
begin
for Cpt:=2 to Ntotal do
begin
write('Entrez un nombre : ');
readln(Nbr);
if Nbr>Max then Max:=Nbr; //si le nombre est plus grand que le maximum actuel, je remplace le maximum
if Nbr<Min then Min:=Nbr; //si le nombre est plus petit que le minimum actuel, je remplace le minimum
end;
end;
writeln('Le nombre le plus petit est ',Min);
writeln('Le nombre le plus grand est ',Max);
readln;
end.
Exercice 8c :
Meme chose que l'exercice 8, mais le programme ne s'arrete que si l'utilisateur tape 0.
Programme Exercice8C.exe
- Code:
var
Min,Max,Nbr:integer;
Cpt:byte;
begin
write('Entrez un nombre : ');
readln(Nbr);
Min:=Nbr; //j'initialise les variables avec le premier nombre que j'entre
Max:=Nbr;
while Nbr<>0 do
begin
write('Entrez un nombre : ');
readln(Nbr);
if Nbr>Max then Max:=Nbr; //si le nombre est plus grand que le maximum actuel, je remplace le maximum
if Nbr<Min then Min:=Nbr; //si le nombre est plus petit que le minimum actuel, je remplace le minimum
end;
writeln('Le nombre le plus petit est ',Min);
writeln('Le nombre le plus grand est ',Max);
readln;
end.
Nico- Messages : 43
Date d'inscription : 23/10/2007
Re: Solution aux exercices de prog.
Merci a toi pour les exercices , je vais continuer par contre un peu a t'ennuyer et trouver par moi meme avant de looker ^^
Re: Solution aux exercices de prog.
Ya pas de soucis :p
Nico- Messages : 43
Date d'inscription : 23/10/2007
Merci
Merci pour les exercices Nico! J'en suis au 5 et je commence à me creuser un peu la tête... Ca fait du bien de pratiquer un petit peu! Je continuerai demain et j'espère que ça ira...
Par contre, j'ai une question d'ordre pratique (as JC): Comment ça fonctionne exactemment pour le mode 'pas à pas' dans Delphi? Si tu peux m'aider, merci.
à+
Dynamite
Par contre, j'ai une question d'ordre pratique (as JC): Comment ça fonctionne exactemment pour le mode 'pas à pas' dans Delphi? Si tu peux m'aider, merci.
à+
Dynamite
Bernard- Messages : 115
Date d'inscription : 26/10/2007
Age : 51
Localisation : Gembloux
Re: Solution aux exercices de prog.
le mode pas a pas , quand tu l'active (F8) tu a la fenetre ''dos'' ki s'active et a chaque fois que tu clickera sur la touche (f7) tu verra la ligne de commande ' sous delphi' souligner en bleu ki est lue a chaque etape
( pour ma part je doit diminuer la fenetre de delphi pour pouvoir voir la fenetre dos et delphi en meme temp , car la touche f7 ne fonctionne que si tu a la fenetre delphi d'actif )
( pour ma part je doit diminuer la fenetre de delphi pour pouvoir voir la fenetre dos et delphi en meme temp , car la touche f7 ne fonctionne que si tu a la fenetre delphi d'actif )
?
Merci de ta réponse mais je ne comprends toujours pas... suis un peu lourd
J'ai bien des trucs qui se passent dans différentes fenêtres... mais ça m'aide pas à piger ce que le compilateur fait....Peut-être que c'est pas les bonnes fenêtres! Par exemple, j'aimerais voir l'affectation des valeurs aux différentes variables, et ça...ben je le vois pas!
Merci à qui peut m'aider........
J'ai bien des trucs qui se passent dans différentes fenêtres... mais ça m'aide pas à piger ce que le compilateur fait....Peut-être que c'est pas les bonnes fenêtres! Par exemple, j'aimerais voir l'affectation des valeurs aux différentes variables, et ça...ben je le vois pas!
Merci à qui peut m'aider........
Bernard- Messages : 115
Date d'inscription : 26/10/2007
Age : 51
Localisation : Gembloux
Re: Solution aux exercices de prog.
Pareil, je vois pas les valeurs ...
En fait il affiche brievement "processus inacessible"
JC y arrivait pas non plus
En fait il affiche brievement "processus inacessible"
JC y arrivait pas non plus
Nico- Messages : 43
Date d'inscription : 23/10/2007
Re: Solution aux exercices de prog.
avez vous penser a activer les option que le prof avait vaguement montrer ?
Sujets similaires
» Exercices de prog.
» Liens vers les exercices de prog
» [SOLUCE]Exercices de programation
» Syllabus de prog
» Devoir prog
» Liens vers les exercices de prog
» [SOLUCE]Exercices de programation
» Syllabus de prog
» Devoir prog
ESA NAMUR :: Les cours :: Programmation
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|