Ĺadny brzuch
Witam!
Czemu gdy probuje wpisac same zera to wysakuje mi blad runtime error 200? Czy to wina kodu czy moze cos nie tak z kompilatorem?
Jezeli to ta druga opcja to jednak o rzucenie okiem na kod:) Moze jakies błedy wyłapiecie:)
program rowananie_podwojne; uses WinCrt; var a1,b1,c1,a2,b2,c2:real; W,Wx,Wy:real; x,y:real; begin writeln('Program do rozwiazywania ukladu rownan z 2 niewiadomymi'); writeln ('Podaj wspolczynniki a b c , oddzielone spacjami'); write('a1 b1 c1 ='); readln(a1,b1,c1); write('a2 b2 c2 ='); readln(a2,b2,c2); W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; if (W<>0) and (Wx<>0) and (Wy<>0) then x:=Wx/W; y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); if (W=0) and (Wx=0) and (Wy=0) then write ('Uklad jest nieoznaczony'); if (W=0) and (Wx<>0) or (W=0) and (Wy<>0) then write('Uklad jest sprzeczny') else if (a1=0) and (b1=0) and (c1=0) and (a2=0) and (b2=0) and (c2=0) then writeln ('Uklad ma nieskonczenie wiele rozwiazan'); readln; end.
program rowananie_podwojne; uses WinCrt; var a1,b1,c1,a2,b2,c2:real; W,Wx,Wy:real; x,y:real; begin writeln('Program do rozwiazywania ukladu rownan z 2 niewiadomymi'); writeln ('Podaj wspolczynniki a b c , oddzielone spacjami'); write('a1 b1 c1 ='); readln(a1,b1,c1); write('a2 b2 c2 ='); readln(a2,b2,c2); W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; if (W<>0) and (Wx<>0) and (Wy<>0) then begin x:=Wx/W; y:=Wy/w; end; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); if (W=0) and (Wx=0) and (Wy=0) then write ('Uklad jest nieoznaczony'); if (W=0) and (Wx<>0) or (W=0) and (Wy<>0) then write('Uklad jest sprzeczny') else if (a1=0) and (b1=0) and (c1=0) and (a2=0) and (b2=0) and (c2=0) then writeln ('Uklad ma nieskonczenie wiele rozwiazan'); readln; end.
Rozumiesz co zmieniają te nawiasy syntaktyczne ;) ? (zakładam, że po prostu o nich zapomniałeś)
mozesz coś więcej powiedzieć?? :) bo jestem poczatkujacy i nie bardzo wiem o co chodzi:)
po Twojej zmianie działa oczywiscie:)
Tylko wpisujac same zera, program liczy wyznaczniki przez co wychodzi bzdura ( tzn wychodzi ze spełniony jest uklad sprzeczny, nieoznaczony i oznaczony)
Czy da sie jakos zrobić, że w momencie gdy wpisze same zera , liczenie wyznacznika ma byc zastopowane i wyswietlony zostanie tylko odpowiedni komunikat?
Jeśli nie użyjesz nawiasów syntaktycznych; instrukcja warunkowa (IF) będzie odnosiła się tylko do pierwszej linijki piniżej IF'a. Dlatego jeśli warunek IF nie był spełniony; to i tak wykonywała sie linijka [y:=Wy/w ;] :) (wyznacznik główny równy był zero więc dzielił przez zero - a przynajmniej próbował). Stosując nawiasy [begin end;], warunek IF odnosi się do wszystkiego, co zawrzesz między nimi.
Zapomniałeś (a ja nie zauważyłem) jeszcze o jednym (troszkę nawiasów dla zachowania kolejności wykonywania):
if ((W=0) and (Wx<>0)) or ((W=0) and (Wy<>0)) then write('Uklad jest sprzeczny')
if (W<>0) and (Wx<>0) and (Wy<>0) then
begin
x:=Wx/W ;
y:=Wy/w ;
end;
Wróćmu jeszcze tutaj:)
Czyli jeżeli nie użyje begin/end to if bedzie odnosił się tylko do
Tylko do linijki:x:=Wx/W;
jezeli jest mozliwe prosze o skaskowanie poprzedniego postu!!
----
if (W<>0) and (Wx<>0) and (Wy<>0) then
begin
x:=Wx/W ;
y:=Wy/w ;
end;
jeszcze tutaj:)
Czyli jeżeli nie użyje begin/end to if bedzie odnosił się tylko do
(W<>0) and (Wx<>0) and (Wy<>0)
Czyli jak mówiłeś, nawet jezeli wyznanik był rowny zero to i tak program leciał dalej??
Czyli może, jeżeli dam obok każdego if'a te nawiasy to będzie działac poprawnie przy wpisaniu samych zer?
Wersja bez nawiasów:
W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; [b]if (W<>0) and (Wx<>0) and (Wy<>0) then x:=Wx/W;[/b] y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2);
Wersja z nawiasami: W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; [b]if (W<>0) and (Wx<>0) and (Wy<>0) then begin x:=Wx/W; y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); end;[/b](W zasadzie nawias powinien obejmować jeszcze wypisanie danych, więc poprawne jest to co teraz napisąłem)
Nie wiem jak inaczej Ci to wyjaśnić ;) Ty masz pół-graficznie :P :) Warunek decyduje czy wykonać czy nie to co jest zaznaczone na zielono.
aha, już rozumiem:)
Dzięki wielkie za pomoc:)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Czemu gdy probuje wpisac same zera to wysakuje mi blad runtime error 200? Czy to wina kodu czy moze cos nie tak z kompilatorem?
Jezeli to ta druga opcja to jednak o rzucenie okiem na kod:) Moze jakies błedy wyłapiecie:)
program rowananie_podwojne; uses WinCrt; var a1,b1,c1,a2,b2,c2:real; W,Wx,Wy:real; x,y:real; begin writeln('Program do rozwiazywania ukladu rownan z 2 niewiadomymi'); writeln ('Podaj wspolczynniki a b c , oddzielone spacjami'); write('a1 b1 c1 ='); readln(a1,b1,c1); write('a2 b2 c2 ='); readln(a2,b2,c2); W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; if (W<>0) and (Wx<>0) and (Wy<>0) then x:=Wx/W; y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); if (W=0) and (Wx=0) and (Wy=0) then write ('Uklad jest nieoznaczony'); if (W=0) and (Wx<>0) or (W=0) and (Wy<>0) then write('Uklad jest sprzeczny') else if (a1=0) and (b1=0) and (c1=0) and (a2=0) and (b2=0) and (c2=0) then writeln ('Uklad ma nieskonczenie wiele rozwiazan'); readln; end.
program rowananie_podwojne; uses WinCrt; var a1,b1,c1,a2,b2,c2:real; W,Wx,Wy:real; x,y:real; begin writeln('Program do rozwiazywania ukladu rownan z 2 niewiadomymi'); writeln ('Podaj wspolczynniki a b c , oddzielone spacjami'); write('a1 b1 c1 ='); readln(a1,b1,c1); write('a2 b2 c2 ='); readln(a2,b2,c2); W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; if (W<>0) and (Wx<>0) and (Wy<>0) then begin x:=Wx/W; y:=Wy/w; end; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); if (W=0) and (Wx=0) and (Wy=0) then write ('Uklad jest nieoznaczony'); if (W=0) and (Wx<>0) or (W=0) and (Wy<>0) then write('Uklad jest sprzeczny') else if (a1=0) and (b1=0) and (c1=0) and (a2=0) and (b2=0) and (c2=0) then writeln ('Uklad ma nieskonczenie wiele rozwiazan'); readln; end.
Rozumiesz co zmieniają te nawiasy syntaktyczne ;) ? (zakładam, że po prostu o nich zapomniałeś)
mozesz coś więcej powiedzieć?? :) bo jestem poczatkujacy i nie bardzo wiem o co chodzi:)
po Twojej zmianie działa oczywiscie:)
Tylko wpisujac same zera, program liczy wyznaczniki przez co wychodzi bzdura ( tzn wychodzi ze spełniony jest uklad sprzeczny, nieoznaczony i oznaczony)
Czy da sie jakos zrobić, że w momencie gdy wpisze same zera , liczenie wyznacznika ma byc zastopowane i wyswietlony zostanie tylko odpowiedni komunikat?
Jeśli nie użyjesz nawiasów syntaktycznych; instrukcja warunkowa (IF) będzie odnosiła się tylko do pierwszej linijki piniżej IF'a. Dlatego jeśli warunek IF nie był spełniony; to i tak wykonywała sie linijka [y:=Wy/w ;] :) (wyznacznik główny równy był zero więc dzielił przez zero - a przynajmniej próbował). Stosując nawiasy [begin end;], warunek IF odnosi się do wszystkiego, co zawrzesz między nimi.
Zapomniałeś (a ja nie zauważyłem) jeszcze o jednym (troszkę nawiasów dla zachowania kolejności wykonywania):
if ((W=0) and (Wx<>0)) or ((W=0) and (Wy<>0)) then write('Uklad jest sprzeczny')
if (W<>0) and (Wx<>0) and (Wy<>0) then
begin
x:=Wx/W ;
y:=Wy/w ;
end;
Wróćmu jeszcze tutaj:)
Czyli jeżeli nie użyje begin/end to if bedzie odnosił się tylko do
Tylko do linijki:x:=Wx/W;
jezeli jest mozliwe prosze o skaskowanie poprzedniego postu!!
----
if (W<>0) and (Wx<>0) and (Wy<>0) then
begin
x:=Wx/W ;
y:=Wy/w ;
end;
jeszcze tutaj:)
Czyli jeżeli nie użyje begin/end to if bedzie odnosił się tylko do
(W<>0) and (Wx<>0) and (Wy<>0)
Czyli jak mówiłeś, nawet jezeli wyznanik był rowny zero to i tak program leciał dalej??
Czyli może, jeżeli dam obok każdego if'a te nawiasy to będzie działac poprawnie przy wpisaniu samych zer?
Wersja bez nawiasów:
W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; [b]if (W<>0) and (Wx<>0) and (Wy<>0) then x:=Wx/W;[/b] y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2);
Wersja z nawiasami: W:=a1*b2-a2*b1; Wx:=c1*b2-c2*b1; Wy:=a1*c2-a2*c1; [b]if (W<>0) and (Wx<>0) and (Wy<>0) then begin x:=Wx/W; y:=Wy/w; write ('Uklad jest oznaczony, rozwiazaniem jest para licz x=',x:2:2, ' y=',y:2:2); end;[/b](W zasadzie nawias powinien obejmować jeszcze wypisanie danych, więc poprawne jest to co teraz napisąłem)
Nie wiem jak inaczej Ci to wyjaśnić ;) Ty masz pół-graficznie :P :) Warunek decyduje czy wykonać czy nie to co jest zaznaczone na zielono.
aha, już rozumiem:)
Dzięki wielkie za pomoc:)