CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Pascal] Equation de 2ème degres

kragoth
kragoth
Niveau 10
27 octobre 2007 à 15:05:36

Bonjour, pour l´école je doit faire un programme qui resou les équation du type Ax²+Bx+C, mon problème est qu´il a l´air de fonctionner sauf quand A=0, il m´indique que j´effectue une division par 0.

PROGRAM equation2degres;
USES CRT;
VAR A:real; {coeff de x²}
B:real; {coeff de x}
C:real; {terme ind‚pendant}
ro: real; {delta}
rac1: real; {racine1}
rac2: real; {racine2}
rep,recomencer: char;

BEGIN
clrscr;
REPEAT
WRITELN (´calcul des solutions de l equation du type Ax²+Bx+C´);
writeln(´Introduisez la valeur de A´);
readln(A);
writeln(´Introduisez la valeur de B´);
readln(B);
writeln (´Introduisez la valeur de C´);
readln(C);
if A=0
then
begin
rac1:= -C/B;
writeln (´Ceci est une equation du premier degres´);
writeln (´x=´,rac1);
end;

ro:=(sqr(B)-4*A*C);
if ro<0
then
begin
rac1:=(sqrt((-ro))/2*A);
rac2:=(-B/(2*A));
writeln (´la premiere racine est : ´,rac2,´+´,rac1,´i´);
writeln (´la deuxieme racine est : ´,rac2,´-´,rac1,´i´);
end;

if ro=0
then
begin
rac1:=(-B/(2*A));
writeln (´une racine double : ´,rac1);
end;

if ro>0
then
begin
rac1:=(-B+sqrt(ro))/(2*A);
rac2:= (-B-sqrt(ro))/(2*A);
writeln(´la premiere racine est : ´,rac1);
writeln(´la deuxieme racine est : ´,rac2);
end;
writeln(´recommencer ? (o/n) ´);
readln(rep);
until (rep=´n´) or (rep=´N´);
end.

Est ce que vous voyez quelque chose qui ne va pas?

Fvirtman
Fvirtman
Niveau 10
27 octobre 2007 à 15:10:32

oui, je vois ton erreur.
tu testes si a=0
et si a=0, alors tu affiches que c´est du premier degré, etc, mais apres, tu sors du if, et tu continues....
et tu tombes sur les solutions ou tu divises par 2A.

Ce qu´il faut, c´est une fois que tu rentres dans ce if, qui teste si a=0, c´est arreter le programme ensuite, et ne pas continuer sur la suite...

kragoth
kragoth
Niveau 10
27 octobre 2007 à 15:25:07

Merci, je vois ce que tu veux dire mais es ce que tu peux m´expliquer comment je dois arreter le programme?

Fvirtman
Fvirtman
Niveau 10
27 octobre 2007 à 15:34:22

Soit tu mets tout le reste dans un "else"

c´est a dire que tu dis :
si a=0 alors ça
SINON (le else)
alors
begin

..... tout le reste

end

Soit sinon, tu fait stopper le programme a la fin du if : avec un exit (je ne sais plus si exit existe en pascal) ou une fonction équavalente qui arrete tout.

kragoth
kragoth
Niveau 10
27 octobre 2007 à 15:55:52

Ok je ne crois pas que cette fonction existe (en tout cas pas dans mon syllabus) je vais essayer avec un else mais j´ai un exemple d´un programme dans lequel il n´utilise pas de else et ca fonctionne quand A=0

program HERP001;
uses crt;
var A,B,C,RO,rac1,rac2 : real;
recomencer,reponse : char;
begin
repeat
clrscr;
writeln(´Calcule des solutions d´´‚quation du type´);
writeln(´Axý+Bx+C=0´);

writeln(´=========================================
=´);
writeln(´Entrer A:´);
readln(A);
writeln(´Entrer B:´);
readln(B);
writeln(´Entrer C:´);
readln(C);

writeln(´=========================================
=´);
writeln(A:1:2,´xý+´,B:1:2,´x+´,C:1:2,´=0´);
writeln(´ ´);
if A=0
then
begin
rac1 := -C/B;
writeln(´equation du premier degres!´);
writeln(B,´x+´,C,´=0´);
writeln(´x=´,rac1)
end;

(*calcule et affichage des solutions pour une équation du second degrés*)

RO := sqr(B)-4*A*C;
if RO<0
then
begin
writeln(´Solutions complexes:´);
rac1:=sqrt(-(RO))/2*A;
rac2:=abs(-b/(2*A));
writeln(´ ´);
writeln(´premiŠre racine complexe : ´,rac1:10:2,´+´,rac2:1:2,´i´);
writeln(´seconde racine complexe : ´,rac1:10:2,´-´,rac2:1:2,´i´)
end;
if RO=0
then
begin
writeln(´Une racine double :´);
rac1:=(-B/2*A);
writeln(´ ´);
writeln(´racine double = ´,rac1:10:4)
end;
if RO>0
then
begin
writeln(´racines réels :´);
writeln(´ ´);
rac1 := (-B+sqrt(RO))/2*A;
writeln(´premiere racine = ´,rac1:10:4);
rac2 := (-B-sqrt(RO))/2*A;
writeln(´seconde racine = ´,rac2:10:4)
end;

(*fin calcule et affichage des solutions pour une équation du second degrés*)
writeln(´ ´);

writeln(´=========================================
=´);
writeln(´ ´);
writeln(´recomencer le programme? (O/N)´);
readln(reponse);
until (reponse=´N´) or (reponse=´n´)
end.

MongueurGecko
MongueurGecko
Niveau 6
29 octobre 2007 à 12:24:27

halt(0) pour quitter sans signaler d´erreur.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment