Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a programban?

Mi a hiba a programban?

Figyelt kérdés

Kezdőként próbáltam írni egy kódot a másodfokú egyenletre(tudom,ez még csak a fele a megoldásoknak) Pascalban,de nem akarja a végén osztani 2 a-val.A válaszokért előre is köszi.A programkód:

Program megoldokeplet;

var a,b,c:integer;

Begin

writeln('masodfoku megoldokeplet') ;

readln (a);

readln (b);

readln (c);

writeln((-b+sqrt(b*b-4*a*c))/(2*a));

readln;

end.



2018. márc. 3. 19:03
 1/5 sharkxxx ***** válasza:
16%

program megoldokeplet;

var a,b,c: Integer;

var D: Double;

begin

  Writeln('Masodfoku megoldokeplet');

  Writeln('a*x*x + b*x + c = 0');

  Write('a = '); Readln(a);

  Write('b = '); Readln(b);

  Write('c = '); Readln(c);

  Writeln(a,'*x*x + (',b,')*x + (',c,') = 0');

  if (a <> 0) then {Osztásnál az osztó nem lehet nulla.}

  begin

    D := b*b - 4*a*c; {diszkrimináns}

    if (D >= 0) then {Gyökvonálsnál az operandus nem lehet negatív.}

    begin

      Writeln('x = ',((-b + Sqrt(D))/(2*a)):0:6);

      Writeln('x = ',((-b - Sqrt(D))/(2*a)):0:6);

    end

    else

      Writeln('Nincs megoldasa.');

  end

  else

  begin

    if (b <> 0) then {Osztásnál az osztó nem lehet nulla.}

      Writeln('x = ',(-c/b):0:6)

    else

    begin

      if (c = 0) then

        Writeln('x = 0')

      else

        Writeln(c,' nem egyenlo 0-val.');

    end ;

  end ;

  Readln;

end.

2018. márc. 3. 19:54
Hasznos számodra ez a válasz?
 2/5 tabaki ***** válasza:
Félretéve a sharkxxx által nagyon is helyénvalóan beillesztett korlátozásokat, nemigen értem, hogy miről van szó. Miből szűrted le, hogy „nem akarja a végén osztani 2a-val”? Én úgy látom, hogy (illendően megválasztott értékek esetén) helyes eredményt ad.
2018. márc. 3. 23:26
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
Úgy, hogy kipróbáltam,és kiadott érték mindig csak a -b+sqrt(b*b-4*a*c) volt.Egyébként a telefononos pascalba is beütöttem a kódot és ott hibátlanul működik.
2018. márc. 4. 17:07
 4/5 anonim ***** válasza:

Mit használsz? Lazarus? FreePascal?

Próbáld ki különféle paraméterekkel, hátha rájössz, hogy mi az adott fordítóprogram speciális problémája!

2018. márc. 4. 18:22
Hasznos számodra ez a válasz?
 5/5 tabaki ***** válasza:

#3:

Nem kételkedem a becsszavadban, de én nem tudom reprodukálni a problémát, így a megoldására sem tudok tippeket keresni. Maga a jelenség bizonyára megszüntethető azzal, ha X-et nem közvetlenül a művelet eredményeként íratod ki, hanem mondjuk beolvasod -b + sqrt(b*b - 4*a*c) értékét egy alkalmas (pl. double) változóba, és utólag osztod, valahogy így:


var x : double;

...

x := -b + sqrt(b*b - 4*a*c);

x := x / 2;

WriteLn(x);


...aminek legalább annyi haszna lenne, hogy az osztást elkülönítve vizsgálhatod. Ettől függetlenül nem látom, hogy az eredeti próbálkozásodba hogyan csúszhat be ez a hiba.

2018. márc. 6. 13:17
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!