Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Проанализируйте код Please!


Автор: navi 9.4.2008, 21:36
всем привет! Проанализируйте код пожалуйста! Училка говорит что прога не корректная мотивируя  это тем что я использую метки! она говорит что метки использовать не грамотно. 
Код

program p1;
uses crt;
const k='Введите значение коэффициента a=';
      k1='Введите значение коэффициента b=';
      k2='Введите значение коэффициента c=';
      k3='Уравнение не имеет корней!';
      k4='Коэффициент a не может быть равен 0 !!!';
      k5='Уравнение имеет один корень.';
      k6='Уравнение имеет два корня.';
label e,p2,mm,av,m1,u,u2,u3,per,f,pop;
var a,b,c,d,x1,x2,z:real;
    n,h,t:char;
begin m1: clrscr;  textcolor(green);writeln;writeln('                            Программа "КВАДРУМ"');
writeln;writeln('                              Главное  меню.');writeln;writeln;
writeln(' 1:Меню программы.');
writeln(' 2:Авторы.');
writeln(' 3:Помощь.');
writeln(' 4:Выход.');n:=readkey;

if n='4' then goto e else if n='2' then goto av else
if n='3' then goto p2 else if n='1' then goto mm else goto m1;


p2: clrscr; writeln; writeln('                      Помощь.');writeln;
writeln(' Программа "КВАДРУМ" предназначена для решения квадратных уравнений');
writeln(' любого вида. Вам только не обходимо ввести его коэффициенты.');
writeln;writeln('     Для выхода в главное меню нажмите [Enter].');readln;goto m1;



av:clrscr; writeln('   Разработчики программы "КВАДРУМ"');writeln; writeln;
writeln('  Программирование ->Лопушнян Иван.');writeln;
writeln('  Графический дизайн ->Мамиев Мекан.');writeln;writeln;
writeln('            Для выхода в главное меню нажмите [Enter].');readln; goto m1;
{--------------------------------------------------------------------------}
mm: clrscr;writeln;writeln('                              Меню программы.');writeln;
writeln('                  Какого вида уравнение вы собираетесь решить?');
writeln;writeln;textcolor(white); writeln(' 1:ax^2+bx+c=0.');writeln(' 2:ax^2+bx=0.');
writeln(' 3:ax^2+c=0.'); writeln;writeln; textcolor(yellow);
writeln('        Для выхода в главное меню нажмите [4]');textcolor(green);
h:=readkey;
if h='1' then goto u else if h='2' then goto u2 else if h='3' then goto u3 else
if h='4' then goto m1 else goto mm;
{--------------------------------u------------------------------------}
u:clrscr; writeln;writeln;writeln('                    AX^2+BX+C=0.');
writeln;writeln;write(' ',k);readln(a);if a=0 then begin writeln; textcolor(red);
writeln(' ',k4,'   Нажмите [Enter]');
readln;textcolor(green); goto u;end;
writeln;write(' ',k1);readln(b);
writeln;write(' ',k2);readln(c);if c=0 then goto per;
d:=b*b-4*a*c; if d<0 then begin writeln;
writeln(' ',k3) end else
if d=0 then begin writeln;writeln(' ',k5); x1:=(-1*b)/2;
writeln;writeln('   x=',x1:3:3) end else if d>0 then begin writeln;
writeln(' ',k6); x1:=((-1*b)-sqrt(d))/(2*a);x2:=((-1*b)+sqrt(d))/(2*a);
writeln;writeln;writeln(' x1=',x1:3:3);writeln;writeln(' x2=',x2:3:3); end;
goto f;
{--------------------------------------u2------------------------------}
u2:clrscr; writeln;writeln('                    AX^2+BX=0.');writeln;writeln;
write(' ',k);readln(a);if a=0 then begin writeln;
writeln(' ',k4,'   Нажмите [Enter]');readln;goto u2;end;
writeln;write(' ',k1);readln(b);per: x1:=0;x2:=(-1*b)/a;
writeln;writeln;writeln(' x=',x1:3:3,' или  x=',x2:3:3); goto f;
{----------------------------------------u3-------------------------------}
u3:clrscr; writeln;writeln('                    AX^2+C=0');
writeln;writeln;write(' ',k);readln(a);if a=0 then begin writeln;
writeln(' ',k4,'   Нажмите [Enter]');readln;goto u3;end;
writeln;write(' ',k2);readln(c); z:=(-1*c)/a; if z<0 then  begin writeln;
writeln(' ',k3) end else if  z=0 then begin  writeln;writeln(' ',k5); writeln;
writeln(' x=0'); end else if z>0 then begin x1:=sqrt(z); x2:=-1*x1;
writeln;writeln(' ',k6);writeln;writeln;writeln(' x1=',x1:3:3);
writeln;writeln(' x2=',x2:3:3);end;goto f;
{-----------------------------finish---------------------------------}
f:writeln;writeln;writeln;writeln(' Для выхода в главное меню нажмите [1].');
writeln;
writeln(' Для выхода в меню программы нажмите [2].');
writeln;writeln(' Для выхода из программы нажмите [3].');
pop:t:=readkey;
if t='1' then goto m1 else  if t='2' then goto mm else
if t='3' then goto e else goto pop;
readln;e:end.

заранее спасибо! и извиняют если тема не в том разделе...

Автор: SneG0K 9.4.2008, 22:23
Возможно она имела ввиду вот это?
Код

label e,p2,mm,av,m1,u,u2,u3,per,f,pop;

Автор: navi 9.4.2008, 22:58
Цитата(SneG0K @  9.4.2008,  22:23 Найти цитируемый пост)
Возможно она имела ввиду вот это?
код Pascal/Delphi
1:

label e,p2,mm,av,m1,u,u2,u3,per,f,pop;

не она сказала что только самые безграмотные программисты использют метки и ими вообще нельзя ползоваться!!! smile 

Автор: SneG0K 9.4.2008, 23:02
Цитата(navi @  9.4.2008,  21:58 Найти цитируемый пост)
не она сказала что только самые безграмотные программисты использют метки и ими вообще нельзя ползоваться!!!

Тю. А я тебе на что указал?

Автор: navi 9.4.2008, 23:04
а чё реально метки история? smile 

Автор: volvo877 9.4.2008, 23:48
navi, чтоб в твоей программе разобраться - надо бродить по меткам, и смотреть куда что ссылается... Во всяком случае, с первого взгляда понять логику работы невозможно. А вот программа, написанная без меток (грамотно написанная, разумеется, не как попало) как раз читается "с листа". Так что мой тебе совет, перепиши программу с использованием других конструкций.

Автор: Данкинг 10.4.2008, 01:41
Цитата(navi @ 9.4.2008,  23:58)
не она сказала что только самые безграмотные программисты использют метки и ими вообще нельзя ползоваться!!! smile

Передай ей, что она сама таковая, раз несёт подобную буйню. smile Пусть сменит профессию и, к примеру, идёт дёргать за вымя больших мычащих животных, ибо ничему хорошему такой некомпетентный педагог не научит. smile 

Автор: volvo877 10.4.2008, 02:15
Данкинг, а может тебе тоже последовать твоему совету? Ты сам-то метки используешь? Или только "бла-бла-бла" горазд, а сам пишешь себе структурированные программы? А если сам пишешь с таким количеством меток, то отвечай в разделе Бейсик. Возможно, там бездумное использование goto или аналогов принято. В Паскале есть достаточно средств чтобы Goto ВООБЩЕ не использовать. НИКОГДА... (Я уже об этом говорил, и очень жаль, что человеку, набравшему полтысячи постов на форуме - хотя, здесь есть где набрать и ни сказав ни слова о программировании) нужно это повторять... Мне, например, за 15 лет интенсивного программирования этот оператор не понадобился НИ РАЗУ!!! 

Я надеюсь, идея понятна? Кто хочет еще поспорить о полезности меток - добро пожаловать во Флейм...

Автор: ILyAHA 10.4.2008, 14:53
Использование меток является плохим тоном в программировании... Так что я согласен и с училкой и с volvo877

Автор: SneG0K 10.4.2008, 18:58
Данкинг извини, но, мне кажется, что тут ты не прав. Метки реально история. Я в дельфи этим не занимался, но один хороший человек пояснил мне, что это почти так же как и в батниках. Лучше уже приклеять новую процедуру иль функцию, чем страдать фигней с метками. Код хоть понятней выглядит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)