Skocz do zawartości
Forum komputerowe PC Centre
LuZiK

Problem z programem

Rekomendowane odpowiedzi

Witam. Pisze program na zaliczenie mam proglem. Chce zeby w moim programie mozna bylo przejsc z jednego menu do drugiego. Np. wybrac rownanie kwadratowe i pozniej wybrac jeden z punktow np. punkt b (jeszcze nie napisalem tego w programie). Gdy chcialem to napisac pisalem IF wybor='b' THEN BEGIN

WRITELN('a-Rownanie kwadratowe z liczba dodatnia');

WRITELN('b-Rownanie kwadratowe z liczb ujemna);

dalej pisalem wzor i zakonczylem wszystko END;

Na koniec oczywiscie READLN; i END. po kompilacji wystepowal mi blad z enedem na koncu ze jest postawiony zly znak. wedlugo programu powinno byc napisane END; ale to tez nie dziala. prosze o pomoc jak zrobic taka rzecz ktora ja bym chcial umiescic w moim programie .

 

Moj program

 

PROGRAM OBLICZENIA;
USES CRT;
VAR a,b,c,d,P,Ob,r,h,l:real;
x,y,k,wynik,odp:integer;
wybor:char;

BEGIN
WRITELN('Witam w programie OBLICZENIA');
WRITELN('Program pomoze ci w niektorych obliczeniach');
WRITELN('a- GEOMETRIA');
WRITELN('b- ROWNANIA KWADRATOWE');
WRITELN('c- TEST');
READLN(wybor);

IF wybor='a' THEN BEGIN
WRITELN('1-pole kwadratu');
WRITELN('2-pole prostokata');
WRITELN('3-pole trojkata');
WRITELN('4-pole trapezu');
WRITELN('5-pole kola');
WRITELN('6-pole szescianu');
WRITELN('7-pole prostopadloscianu');
WRITELN('8-pole walca');
WRITELN('9-pole stozka');
READLN(wybor);
END;
IF wybor='1' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
P:=a*a;
WRITELN('Pole kwadratu wynosi ',P:0:2);
END;
IF wybor='2' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
WRITELN('Wpisz dlugosc krawedzi b');
READLN(;
P:=a*b;
WRITELN('Pole prostokata wynosi ',P:0:2);
END;
IF wybor='3' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
WRITELN('Wpisz dlugosc wysokosci h');
READLN(h);
P:=0.5*a*h;
WRITELN('Pole trojkata wynosi ',P:0:2);
END;
IF wybor='4' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
WRITELN('Wpisz dlugosc krawedzi b');
READLN(;
WRITELN('Wpisz dlugosc wysokosci h');
READLN(h);
P:=0.5*a+0.5*b;
P:=P*h;
WRITELN('Pole trapezu wynosi ',P:0:2);
END;
IF wybor='5' THEN BEGIN
WRITELN('Wpisz dlugosc promienia r');
READLN®;
Ob:=2*3.14*r;
WRITELN('Obwod kola wynosi ',Ob:0:2);
END;
IF wybor='6' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
P:=a*a*a*a*a*a;
WRITELN('Pole szescianu wynosi ',P:0:2);
END;
IF wybor='7' THEN BEGIN
WRITELN('Wpisz dlugosc krawedzi a');
READLN(a);
WRITELN('Wpisz dlugosc krawedzi b');
READLN(;
WRITELN('Wpisz dlugosc wysokosci h');
READLN(h);
P:=2*a*b+2*a*h+2*a*h;
WRITELN('Pole calkowite prostopadloscianu wynosi ',P:0:2);
END;
IF wybor='8' THEN BEGIN
WRITELN('Wpisz dlugosc promienia r');
READLN®;
WRITELN('Wpisz dlugosc wysokosci h');
READLN(h);
P:=3.14*r*r+3.14*r*r+2*3.14*r*h;
WRITELN('Pole calkowite walca wynosi ',P:0:2);
END;
IF wybor='9' THEN BEGIN
WRITELN('Wpisz dlugosc promienia r');
READLN(r);
WRITELN('Wpisz dlugosc l');
READLN(l);
P:=3.14*r*r+3.14*r*l;
WRITELN('Pole calkowite stozka wynosi ',P:0:2);
END;

READLN;
END. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hmm, w końcu program się kompiluje i nie działa, czy się nie kompiluje?

No i napisz go z wcięciami w znacznikach code (lub załącz jako plik), bo całość jest masakrycznie nieczytelna.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Program sie kompiluje do samego konca. Po ostatnim punkcie chce zaczac pisac rozwiniecie do punktu b czyli rownan kwadratowych. Zaczynam program od IF wybor='b' THEN BEGIN

tutaj pisze zawartosc

END;

wystepuje blad z ostatnim ENDem na koncu czyli z END. Tak jakby byl on zle zapisany. Pisze ze ma byc za nim ;.

 

Nie wiem jak zaczac pisac rozwiniecie do tych rownan kwadratowych i do punktu c.

 

 PROGRAM OBLICZENIA;
USES CRT;
VAR a,b,c,d,P,Ob,r,h,l:real;
    x,y,k,wynik,odp:integer;
   wybor:char;

BEGIN
WRITELN('Witam w programie OBLICZENIA');
WRITELN('Program pomoze ci w niektorych obliczeniach');
WRITELN('a- GEOMETRIA');
WRITELN('b- ROWNANIA KWADRATOWE');
WRITELN('c- TEST');
READLN(wybor);

IF wybor='a' THEN BEGIN
            WRITELN('1-pole kwadratu');
            WRITELN('2-pole prostokata');
            WRITELN('3-pole trojkata');
            WRITELN('4-pole trapezu');
            WRITELN('5-pole kola');
            WRITELN('6-pole szescianu');
            WRITELN('7-pole prostopadloscianu');
            WRITELN('8-pole walca');
            WRITELN('9-pole stozka');
            READLN(wybor);
            END;
IF wybor='1' THEN BEGIN
            WRITELN('Wpisz dlugosc krawedzi a');
            READLN(a);
            P:=a*a;
            WRITELN('Pole kwadratu wynosi ',P:0:2);
            END;
IF wybor='2' THEN BEGIN
             WRITELN('Wpisz dlugosc krawedzi a');
             READLN(a);
             WRITELN('Wpisz dlugosc krawedzi b');
             READLN(;
             P:=a*b;
             WRITELN('Pole prostokata wynosi ',P:0:2);
             END;
IF wybor='3' THEN BEGIN
             WRITELN('Wpisz dlugosc krawedzi a');
             READLN(a);
             WRITELN('Wpisz dlugosc wysokosci h');
             READLN(h);
             P:=0.5*a*h;
             WRITELN('Pole trojkata wynosi ',P:0:2);
             END;
IF wybor='4' THEN BEGIN
             WRITELN('Wpisz dlugosc krawedzi a');
             READLN(a);
             WRITELN('Wpisz dlugosc krawedzi b');
             READLN(;
             WRITELN('Wpisz dlugosc wysokosci h');
             READLN(h);
             P:=0.5*a+0.5*b;
             P:=P*h;
             WRITELN('Pole trapezu wynosi ',P:0:2);
             END;
IF wybor='5' THEN BEGIN
            WRITELN('Wpisz dlugosc promienia r');
            READLN(r);
            Ob:=2*3.14*r;
            WRITELN('Obwod kola wynosi ',Ob:0:2);
            END;
IF wybor='6' THEN BEGIN
            WRITELN('Wpisz dlugosc krawedzi a');
            READLN(a);
            P:=a*a*a*a*a*a;
            WRITELN('Pole szescianu wynosi ',P:0:2);
            END;
IF wybor='7' THEN BEGIN
            WRITELN('Wpisz dlugosc krawedzi a');
            READLN(a);
            WRITELN('Wpisz dlugosc krawedzi b');
            READLN(;
            WRITELN('Wpisz dlugosc wysokosci h');
            READLN(h);
            P:=2*a*b+2*a*h+2*a*h;
            WRITELN('Pole calkowite prostopadloscianu wynosi ',P:0:2);
            END;
IF wybor='8' THEN BEGIN
            WRITELN('Wpisz dlugosc promienia r');
            READLN(r);
            WRITELN('Wpisz dlugosc wysokosci h');
            READLN(h);
            P:=3.14*r*r+3.14*r*r+2*3.14*r*h;
            WRITELN('Pole calkowite walca wynosi ',P:0:2);
            END;
IF wybor='9' THEN BEGIN
            WRITELN('Wpisz dlugosc promienia r');
            READLN(r);
            WRITELN('Wpisz dlugosc l');
            READLN(l);
            P:=3.14*r*r+3.14*r*l;
            WRITELN('Pole calkowite stozka wynosi ',P:0:2);
            END;

READLN;
END. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po pierwsze: nie pobieraj dwa razy wciskanego klawisza do wybor. Użyj 2 różnych zmiennych.

 

Po drugie, szkielet programu powinien wyglądać mniej-więcej tak:

 

if wybor = 'a' then
begin
 //GEOMETRIA
 ReadLn(wybor2);
 if wybor2 = '1' then
 begin
   //kod
 end
 else if wybor2 = '2' then
 begin 
   //kod
 end
 //resztę uzupelnij sam
end
else if wybor = 'b' then
begin
 //ROWNANIA KWADRATOWE
end
else if wybor = 'c' then
begin
 //TEST
end;

Tak w ogóle to całość powinna być napisana na case ... of, a nie na if ... then.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

×
×
  • Dodaj nową pozycję...