Programování v pascalu

Od: Datum: 29.10.12 17:19 odpovědí: 2 změna: 29.10.12 19:05

Dobrý den, potřebuju naprogramovat v pascalu rešení kvadratických rovnic i pro diskriminat menší než 0 (řešením jsou komplexní čísla). Podařilo se mi naprogramovat, když je diskriminant větší než 0, ale pro meněší než nula se mi to stále nedaří.

zde je moje řešení pro kladný D

-

Program Kvadr_Rovnice;

uses crt;

var fl,B,C,D,xl,x2:real;

begin

write(’Zadej koef A:’);readln(A);

write(’Zadej koef B:’);readln(B);

write(’Zadej koef C:’);readln(C);
writeln;
D:=B*B-4*A*C;
if D>=0then begin
D:=sqrt(D);
x1:=(-B+D)/2/A;
x2:=(—B—D)/2/A ;
writeln(’x1=’,x1:6:2);
writeln(’x2=’,x2:6:2) end

else writeln(’komplexni koreny’); readln end.

-

poté jsem se pokoušel vytvořit něco takovýho, to ale nefunguje

-

Program Kvadr_Rovnice;

uses crt;

var fl,B,C,D,xl,x2,i:real;

begin

write(’Zadej koef A:’);readln(A);

write(’Zadej koef B:’);readln(B);

write(’Zadej koef C:’);readln(C);
writeln;
D:=B*B-4*A*C;
if D>=0then begin
D:=sqrt(D);
x1:=(-B+D)/2/A;
x2:=(—B—D)/2/A ;
writeln(’x1=’,x1:6:2);
writeln(’x2=’,x2:6:2) end

else begin

i:=-1;

D:=sqrt(D*i);

xl:=(—B—D)/2/A;

x2:=(-B-D)/2/A;

writeln(’xl=’,xl:6:2);

writeln(’x2=’,xl:6:2)

end;

readln

end.

-

Žádám Vás o pomoc, či o radu, jak to tedy naprogramovat tak, aby mi vyšlo správné řešení i pro D<0.

Děkuji Jaroslav Charvát
doplněno 29.10.12 17:21:

Omlouvám se, ale na některých místech se objevili smajlíci a ten text okolo nich nedává smysl, doufám, ale že kdo umí v pascalu pracovat se v tom vyzná, ještě jednou děkuji


avatar
Upozornění
Tato otázka je 4 roky bez odpovědi a proto byla uzavřena.
Máte-li podobnou otázku, a nenašli jste vhodnou odpověď, založte novou otázku.
Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 29.10.12 18:22
 

V Pascalu nedělám, ale snad ve všech běžných jazycích se dá použít tato struktura:

if (podminka)

{

kod

}

else if (druha podminka)

{

druhy kod

}

else

{

kod, kdyz nevyjde ani jedna podminka

}

doplněno 29.10.12 18:27:

Pascal místo { a } používá begin a end

 
Od: petapeta*
Datum: 29.10.12 19:05
 

Vy deklarujete x1, x2 jako reálná čísla. Bude-li diskriminant menší než nula (D<0), tak pak kořeny nejsou reálná čísla, ale dva imaginární komplexně sdružené kořeny

x1 = -b/2a + i (√ |D|)/2a

x2 = -b/2a _ i (√ |D|)/2a

Je tedy nutno výsledek vypsat nějak takto:

writeln('x1 = ',b/(2*a),'+ i',D/(2*a))

writeln('x2 = ',b/(2*a),'_ i',D/(2*a))

kde D je to vaše D≔sqrt(D*i), čili D≔sqrt(D*(-1)).

doplněno 01.11.12 12:17:

Ve výpisu výsledku mi uniklo znaménko _

writeln('x1 = ',_b/(2*a),'+ i',D/(2*a))

writeln('x2 = ',_b/(2*a),'_ i',D/(2*a))

Ohodnoceno: 3x
 

 

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.