Показать сообщение отдельно
Старый 29.09.2011, 15:30   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070