Stránka 1 z 1

Kvadratické rovnice

Napsal: 18 dub 2012 14:09
od flushed
Zdravím, mám takovej problém. Pokoušel jsem se v Pascalu vytvořit kalkulačku na počítání kvadratických rovnic. Spočítat rovnici s dvěma kořeny a s jedním jdde v pohodě, ale jak je diskriminant záporný, tak mi to vyhodí chybu a program spadne.

Kód: Vybrat vše

var
  a,b,c,D,x,x1,x2:real;
begin
  write('Zadejte koeficient a: ');
  readln(a);

  write('Zadejte koeficient b: ');
  readln(b);

  write('Zadejte koeficient c: ');
  readln(c);
  writeln;

  D := sqr(b) - 4*a*c;
  x := -b/(2*a);
  x1 := (-b+sqrt(D))/(2*a);
  x2 := (-b-sqrt(D))/(2*a);

  if (D<0) then
    writeln('Tato kvadraticka rovnice nema v oboru realnych cisel reseni')

  else if (D=0) then
    writeln('Rovnice ma prave jeden realny koren: ', x:0:2)

  else
    begin
      writeln ('Tato kvadraticka rovnice ma dva koreny: ', x1:0:2, ' a ', x2:0:2);
    end;
  writeln;
  writeln('Stiknete ENTER pro konec');
  readln;
end.

Re: Kvadratické rovnice

Napsal: 18 dub 2012 14:15
od Žbeky
Tvůj problém je ryze matematický a částěčně i prasácky napsaný kód.
Proč ty kořeny počítáš hned a napřed si neověříš ten diskriminant? Tzn. výpočty kořenů dát až po po splnění podmínky ifu. Jednak je prasácké vypočítat všechno a pak si jen vybírat (tady to ještě jde, co ale až budeš mít rozsáhlý program? I když vybereš situaci, kdy nebudeš muset teoreticky nic počítat, tak ke všem výpočtům dojde...) a za druhé se tímto dostáváš do situace, kdy odmocňuješ záporné číslo. Proto ti to spadne

Skoro nic nedopíšu, jen ti to přehážu

Kód: Vybrat vše

var
  a,b,c,D,x,x1,x2:real;
begin
  write('Zadejte koeficient a: ');
  readln(a);

  write('Zadejte koeficient b: ');
  readln(b);

  write('Zadejte koeficient c: ');
  readln(c);
  writeln;

  D := sqr(b) - 4*a*c;

  if (D<0) then
    writeln('Tato kvadraticka rovnice nema v oboru realnych cisel reseni')

  else if (D=0) then
    begin
    x := -b/(2*a);
    writeln('Rovnice ma prave jeden realny koren: ', x:0:2)
    end

  else
    begin
      x1 := (-b+sqrt(D))/(2*a);
      x2 := (-b-sqrt(D))/(2*a);
      writeln ('Tato kvadraticka rovnice ma dva koreny: ', x1:0:2, ' a ', x2:0:2);
    end;
  writeln;
  writeln('Stiknete ENTER pro konec');
  readln;
end.

Re: Kvadratické rovnice  Vyřešeno

Napsal: 18 dub 2012 14:22
od flushed
Díky moc, už to jde. Omlouvám se za kód, začal jsem před pár dny, doufám že to časem spravím :D.