Цитата:
Сообщение от AlexZir
Поведению вашего преподавателя я не удивляюсь, в настолько плохо структурированной программе с обилием меток никто копаться не станет, время - деньги и достаточно дорого.
|
Да ладно, кое-кто сегодня добрый, так что станет.
К вышесказанному ПОЛНОСТЬЮ присоединяюсь - настоятельно рекомендую о метках забыть. Переходы по меткам - это крайне дурной стиль программирования, и применять их нужно только в каких-то самых экзотических конструкциях.
Кроме того:
1. Ошибка работы программы связана с некорректным использованием CRT-шного оператора Keypressed; после него обязательно нужно обнулить буфер символа командой Readkey. Впрочем, можно обойтись только ею, причем допускается использование ее не только как функции, но и как процедуры. То есть не обязательно
Chrrr:=Readkey;
можно просто
Readkey;
2. Ну зачем, скажите на милость, в качестве параметра оператора Case брать символы '1', '2' и т.д., в операторе if использовать множество, если можно обойтись числами 1, 2, ...? Абсолютно неоправданное усложнение.
В общем, посмотрите мой вариант с учетом вышесказанного. По-моему, лучше так:
Код:
Uses CRT;
const {Zadaem logicheskie konstanti:}
log1=false;
log2=false;
log3=false;
log4=true;
{Zadaem strokovie konstanti: }
slovo1='Par';
slovo3='Voz';
slovo2='i';
var {Zadaem tip dannix}
Otvet:char; {simvolnii}
B1:Byte; {0..255}
a,b,c,l,m,v,j,i:integer; {celii}
x,y,D,k,Z,p,n:real; {vecestvennii}
log5,log6,log7,log8,log9,log10,
F,bul:boolean; {logicheskii}
fraza: string[40]; {strokovii}
pervaya_strochka: string[50];
vtoraya_strochka: string[50];
name:string;
{Nachinaem telo programmi}
begin
Clrscr; {Znakomstvo s polzovatelem}
writeln('Salut! What is you name?');
readln(name);
writeln('Priyatno poznakomitsya, ', name);
Readkey;
{Perechislenie vozmognix deistvii}
REPEAT
Clrscr;
bul:=true;
writeln;
writeln('Segodnya na vibor:');
writeln('1)Rabota s peremennimi celogo tipa.');
writeln('2)Rabota s peremennimi vecestvennogo tipa.');
writeln('3)Rabota s peremennimi logicheskogo tipa.');
writeln('4)Vichislenie logicheskogo virageniya.');
writeln('5)Rabota so strokovimi peremennimi. Konkotenaciya.');
writeln('6)Rabota s operaciyami otnosheniya.');
writeln('7)Opredelenie mashinnogo predstavleniya chisla.');
writeln('8)Nichego ne delat. Vixod.');
readln(B1); {Vibor deistviya}
if B1<9 then
case B1 of
1: begin
Clrscr; {Pri vibore 1 vipolnyaetsya:}
writeln('Rabota s peremennimi celogo tipa.');
writeln('Vvedite tri celix cisla cherez probel.');
readln(a,b,c);
writeln('Schitaem primer:');
writeln('Z=k+l-m');
writeln('gde k=a*a/b');
writeln('l=c div a');
writeln('m=k mod l');
writeln(' i a,b,c - vvedenie chisla.');
writeln;
k:=a*a/b;
l:=c div a;
m:=b mod l;
Z:=k+l+m;
writeln;
writeln('Pechataem rezultat:');
writeln('k= ',k:13);
writeln('l= ',l:13);
writeln('m= ',m:13);
writeln('Z= ',Z:13);
end;
2: begin
Clrscr; {Pri vibore 2 vipolnyaetsya:}
writeln('Rabota s peremennimi vecestvennogo tipa.');
writeln('Vvedite dva chisla cherez probel/enter. Zatem nagmite Enter.');
readln(y,x);
writeln('Rechaem primer: ');
writeln('D=(y*y*y-x)/2.16E3-4.3+(exp(3*ln(y+x))))+(exp(2*(sin(x-y)/cos(x-y))))');
writeln('gde d,f,g - vvedennie chisla.');
D:=(y*y*y-x)/2.16E3-4.3+(exp(3*ln(y+x)))+(exp(2*(sin(x-y)/cos(x-y))));
writeln('Rezultat: D= ',D);
end;
3: begin
Clrscr; {Pri vibore 3 vipolnyaetsya}
writeln('Rabota s peremennimi logicheskogo tipa.');
writeln('Dani isxodnie dannie:');
writeln('log1= ',log1);
writeln('log2= ',log2);
writeln('log3= ',log3);
writeln('log4= ',log4);
log5:=log1 or log2;
log6:= not log3;
log7:=log4 xor log1;
log8:=log2 and log3;
writeln('Logicheskoe slogenie (log1 и log2)= ',log5);
writeln('Logicheskoe otricanie (log3)= ',log6);
writeln('Slogenie po modulu 2 (log4 и log1)= ',log7);
writeln('Logicheskoe umnogenie (log12 и log3)= ',log8);
end;
4: begin {Pri vibore 4 vipolnyaetsya:}
Clrscr;
writeln('Vichislenie logicheskogo virageniya.');
writeln('Isxodnie dannie:');
writeln('log1= ',log1);
writeln('log2= ',log2);
writeln('log3= ',log3);
writeln('log4= ',log4);
writeln('Dano viragenie:');
writeln('F=(log1 xor log2) or (log2 or (not log3)) and log4 and (log1 or (not log3))');
writeln('Proizvodim vichislenie.');
F:=(log1 xor log2) or (log2 or (not log3)) and log4 and (log1 or (not log3));
writeln('Rezultat virageniya: F= ', F);
end;
5: begin {Pri vibore 5 vipolnyaetsya:}
Clrscr;
writeln('Rabota so strokovimi peremennimi. Konkotenaciya.');
writeln('Isxodnie dannie:');
writeln ( 'slovo1= ',slovo1);
writeln ( 'slovo2= ',slovo2);
writeln ('slovo3= ',slovo3);
fraza:= slovo1 + ' '+ slovo2 + ' '+ slovo3 + ' = '+ 'Parovoz';
writeln('Rezultat: ', 'fraza= ', fraza);
end;
6: begin {Pri vibore 6 vipolnyaetsya:}
Clrscr;
writeln('Rabota s operaciyami otnosheniya');
writeln('Vvedite dva celix chisla cherez probel/enter.');
readln(p,n);
writeln('p= ',p);
writeln('n= ',n);
log9:=p>n;
writeln('Rezultat p>n: log9= ',log9);
writeln;
writeln('Sravnim dve stroki.');
writeln('Vvedite dve stroki cherez enter.');
readln(pervaya_strochka);
readln(vtoraya_strochka);
writeln('pervaya strochka= ',pervaya_strochka);
writeln('vtoraya strochka= ',vtoraya_strochka);
log10:=pervaya_strochka = vtoraya_strochka;
writeln(' log10: pervaya strochka ravna vtoroi?',log10);
end;
7: begin {Pri vibore 7 vipolnyaetsya:}
Clrscr;
writeln('Opredelenie mashinnogo predstavleniya chisla');
v:=1;
while v<181 do
begin
v:=v+18;
j:=256;
write('v= ',v:2, ' =');
for i:=8 downto 0 do
begin
if v and j=j then write('1')
else write ('0');
j:=j shr 1;
end;
writeln;
end;
end;
8: {Pri vibore 8 vipolnyaetsya:}
bul:=false;
end;
If bul then
begin
writeln;
write('Xotite prodolgit? (Y/N) ');
readln(otvet);
end;
UNTIL (Not(bul)) or (Otvet='N') or (Otvet='n');
writeln('Udachnogo dnya!');
Readkey;
end.