Programmation en Turbo Pascal
Résolu/Fermé
cheick-ha
Messages postés
5
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
26 décembre 2008
-
7 déc. 2008 à 20:20
cheick-ha Messages postés 5 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 26 décembre 2008 - 11 déc. 2008 à 19:32
cheick-ha Messages postés 5 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 26 décembre 2008 - 11 déc. 2008 à 19:32
A voir également:
- Programmation en Turbo Pascal
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Application de programmation - Guide
- Dev-pascal - Télécharger - Édition & Programmation
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
11 déc. 2008 à 12:42
11 déc. 2008 à 12:42
Dans tous le code, il est plus clair de mettre write('entrez ...'); readln(...); sur la même ligne
De plus tu n'utilises que des variables globales alors que des locales suffiraient
ligne 2 : uses crt; ne sert que pour clrscr, c'est à dire à rien (l'écran est systématiquement effacé au démarrage)
ligne 3 : tu prends a,b,c,d integer, ça marche très bien avec des real (de toute façon ton résultat est real)
ligne 18 : until (a<>0); soit tu fais les procédures de résolution au degré 1 et 0 soit tu expliques pourquoi tu boucles : writeln('/!\ a=0'); et à la limite tu place ton until a<>0 juste sur le a
ligne 19 : précises que c'est un O que tu veux pour confirmer de plus ton programme est court, ce n'est pas la peine de s'embeter avec une vérification
ligne 28 : utilise plutôt sqr(b) que b*b quand tu peux
ligne 30 : writeln('pas de racines réelles'), on pourrait faire le calcul en complexe
ligne 30 : pas de point virgule avant else
ligne 32 à 34 : il faut encadrer tes instructions par begin end
ligne 32, 33 : n'oublie pas les parenthèses : / (2*a);
ligne 40 : pour l'affichage des réels il vaudrait mieux préciser le nombre de chiffres significatifs : writeln(X:0:5);
En ce qui concerne ton programme principal (ormi l'utilisation des variables globales à revoir), étant donné que ton programme est court il n'est pas nécessaire de faire ce genre de boucle (très lourde), de plus si tu dis au revoir, peut-être faudrait-il dire bonjour...
Ensuite tu pourrais aérer la console pour l'utilisateur avec quelques writeln ici ou là
De plus tu n'utilises que des variables globales alors que des locales suffiraient
ligne 2 : uses crt; ne sert que pour clrscr, c'est à dire à rien (l'écran est systématiquement effacé au démarrage)
ligne 3 : tu prends a,b,c,d integer, ça marche très bien avec des real (de toute façon ton résultat est real)
ligne 18 : until (a<>0); soit tu fais les procédures de résolution au degré 1 et 0 soit tu expliques pourquoi tu boucles : writeln('/!\ a=0'); et à la limite tu place ton until a<>0 juste sur le a
ligne 19 : précises que c'est un O que tu veux pour confirmer de plus ton programme est court, ce n'est pas la peine de s'embeter avec une vérification
ligne 28 : utilise plutôt sqr(b) que b*b quand tu peux
ligne 30 : writeln('pas de racines réelles'), on pourrait faire le calcul en complexe
ligne 30 : pas de point virgule avant else
ligne 32 à 34 : il faut encadrer tes instructions par begin end
ligne 32, 33 : n'oublie pas les parenthèses : / (2*a);
ligne 40 : pour l'affichage des réels il vaudrait mieux préciser le nombre de chiffres significatifs : writeln(X:0:5);
En ce qui concerne ton programme principal (ormi l'utilisation des variables globales à revoir), étant donné que ton programme est court il n'est pas nécessaire de faire ce genre de boucle (très lourde), de plus si tu dis au revoir, peut-être faudrait-il dire bonjour...
Ensuite tu pourrais aérer la console pour l'utilisateur avec quelques writeln ici ou là
program second_d; var a,b,c,d:integer; X1,X2: real; rep1: char; procedure saisie; var rep: char; begin repeat repeat writeln; write('Entrez a : '); readln(a); if a=0 then writeln('/!\ a=0'); until (a<>0); write('Entrez b : '); readln(b); write('Entrez c : '); readln(c); writeln; write('Confirmez-vous ? (O/N) '); readln (rep); until rep in ['O','o']; end; procedure resultat; begin d:= sqr(b)-(4*a*c); if d<0 then writeln('Il n''y a pas de racines reelles') else begin X1:= (-b-sqrt(d))/(2*a); X2:= (-b+sqrt(d))/(2*a); writeln; writeln('X1=',X1:0:5,' et X2=',X2:0:5); end; end; begin writeln('Bonjour, calculons les racines de aX^2+bX+c=0'); repeat saisie; resultat; writeln; writeln('Voulez-vous continuer ? (O/N)'); readln (rep1); until rep1 in ['N','n']; write('Au revoir'); readln; end.Enfin, pour bien comprendre mes remarques sur les variables globales voici ce qu'on pourrait faire :
program second_d; procedure saisie(var a,b,c:integer); begin repeat writeln; write('Entrez a : '); readln(a); if a=0 then writeln('/!\ a=0'); until (a<>0); write('Entrez b : '); readln(b); write('Entrez c : '); readln(c); writeln; end; procedure resultat(a,b,c:integer); var d:integer; begin d:=sqr(b)-(4*a*c); if d<0 then writeln('Il n''y a pas de racines reelles') else begin writeln; writeln('X1 = ',(-b-sqrt(d))/(2*a):0:5, ' et X2 = ',(-b+sqrt(d))/(2*a):0:5); end; end; var a,b,c:integer; begin writeln('Bonjour, calculons les racines de aX^2+bX+c=0'); while true do begin saisie(a,b,c); // l'intéret c'est que les a,b,c ont la même valeur dans resultat(a,b,c);// les procédures mais sans pour autant porté le même nom writeln; end; end.Utiliser des fonctions et procédures avec des paramètres permet de mieux les réutiliser ultérieurement...
11 déc. 2008 à 19:32
je m'éforcerai de faire attention et de suivre les conseils que vous m'avez donner.