Pole i obwod trójkąta w pascalu

Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Pole i obwod trójkąta w pascalu

Post autor: Natasha »

Napisałam taki program, jednak mam 2 błędy i nie wiem, dlaczego. Czy mógłby ktoś poprawić? :)

Kod: Zaznacz cały

program poleiobwodtrojkata;
var a,h,p,o:real;
begin
writeln('Program oblicza pole i obwod trojkata rownobocznego');
writeln('Podaj dlugosc boku trojkata');
readln(a);
if a<0 then writeln('Podaj liczbe dodatnia');
readln(a);
writeln('Podaj dlugosc wysokosci trojkata');
writeln(h);
if h<0 then writeln('Podaj liczbe dodatnia');
readln(h);
p:= a*h/2;
o:=3*a;
writeln('Pole trojkata wynosi  ', a*h/2:0:1);
writeln('Obwod trojkata wynosi   ', 3*a:0:1);
readln;
end.
-- 14 marca 2010, 14:28 --

Jeszcze gdyby mi ktoś napisał/poprawił taki programik, żeby wyliczał np x z drugiego równania i podstawiał do pierwszego itp.
Tutaj również wyskakuje błąd tam, gdzie chce zrobić układ równan, dokładnie w 6. linijce.

Kod: Zaznacz cały

program ukladrownanliniowych;
var
a,b,c,k,l,m:real;
begin
writeln('Rozwiazywanie ukladu rownan liniowych');
\begin{cases} ax+by=c\\kx+ly=m\end{cases}
writeln('Podaj a,b,c,k,l,m');
readln(a,b,c,k,l,m);
writeln('Wylicz x z pierwszego rownania');
readln('x= ',((c-b*y))/a:0:0);
if a=0 then writeln('w pierwszym rownaniu nie wystepuje x')
else
writeln('wartosc x wynosi  ',((c-b*y))/a:0:0);
readln('x=  ',((c-b*y))/a:0:0);
writeln('Podstaw wartosc x do drugiego rownania');
readln('m=  ', (k*(c-b*y))/(a+l*y):0:0);
writeln('Oblicz wartosc y');
readln('y=  ', (m*a-k*c)/(-b*k+a*l):0:0);
writeln('Podaj wartosc x i y');
readln('x=  ', ((c-b*y))/a,'y= ',(k*(c-b*y))/(a+l*y):0:0);
readln;
end.
-- 14 marca 2010, 14:29 --

PS chcę rozwiązać ten układ z zależności od a, b, c, k, l, m

\(\displaystyle{ \begin{cases} ax+by=c\\kx+ly=m\end{cases}}\)
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Pole i obwod trójkąta w pascalu

Post autor: Sokół »

Przecież kompilator w razie wystąpienia błędu informuje co jest nie tak, wystarczy to przeczytać. Wypluwa ostrzeżenie, że zmienna h nie jest inicjowana przed jej użyciem (pod writeln('podaj wysokosc') masz writeln(h)...). I praktycznie zmienna o,p nie jest do niczego potrzebna, przypisujesz do niej wartosc i nie uzywasz tych zmiennych, w takim wypadku kompilator tez moze zwrocic uwage. I ostatnia rzecz, zapisz poprawnie warunek (if'y), bo w każdym przypadku będzie pytał dwa razy o wartość zmiennych.

Jeśli chodzi o drugi program, skorzystaj z metody wyznaczników, będzie czytelniej i łatwiej (?) w implementacji.
Awatar użytkownika
rozkminiacz
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 24 wrz 2008, o 20:12
Płeć: Mężczyzna
Lokalizacja: Krk
Podziękował: 65 razy
Pomógł: 36 razy

Pole i obwod trójkąta w pascalu

Post autor: rozkminiacz »

po else nie ma byc begin i end ktory ogarnia cala ta zagmatwana i nieczytalena ilosc kodu ? nie pisze w pascalu ale o ile pamietam z gimnazjum jesli po else lub if wystepuje wiecej niz jedna instrukcja to maja sie zawierac miedzy begin i endem czy takie tam bzdety : o czemu w ogole piszesz w pascalu, tak kaza ci w szkole czy sama z siebie?

ponadto kolezanko najpierw wyliczasz x z pierwszego a dopiero pozniej sprawdzasz czy a=0, nie lepiej sprawdzic na poczatku czy a=0, mniejsza zlozonosc bedzie
ODPOWIEDZ