1

(18 відповідей, залишених у Pascal/Delphi)

koala написав:

Насправді, як подумати - може, і не все так погано... можу припустити, що викладач спочатку дав учням помучитися з goto, щоб потім було зрозуміліше, чому його не радять вживати. Нехай. Але в будь-якому разі програма пишеться для якогось завдання, і можна сказати, що вона працює, тільки тоді, коли це завдання відомо. Ви ж завдання не навели, тому ми нічим вам не можемо допомогти. Ну хіба що дослівно:

var i:integer;
begin
  for i:=1 to 10 do;
  while i>0 do dec(i);
  repeat inc(i) until i>=10;
end.

Тепер програма працює з усіма трьома циклами.

Ну і бажано писати код так, щоб його можна було нормально читати. Наприклад, мітки q,w,e,r,t ні про що не кажуть; але якби t звалося quit, то було б зрозуміло, що це мітка біля виходу, і goto quit виходить з програми.

Завдання:

Обчислити і вивести значення функції при зміні значення аргументу від А до В з кроком С, і визначити мінімальне та максимальне значення функції на відрізку. Використати в одній програмі три різні типи використання простих циклів (IF THEN GOTO, WHILE-DO, REPEAT-UNTIL).

2

(18 відповідей, залишених у Pascal/Delphi)

0xDADA11C7 написав:
repeat
write('X=');
readln(x);
ymax:=100;
ymin:=-100;
y:=(pi+sqrt(sin(x)/exp(x+pi)));
begin
if x<-1 then y:=pi+sqrt(sin(x)/exp(x+pi)) else
if (x>=-1) and (x<1) then y:=sqr(cos(x))+(1.2*exp(ln(10)*(-1/6))) else
y:=sqr(sin(exp(ln(x)*3)))+(x*ln(x+1));
if y>ymax then y:=ymax;
if y<ymin then y:=ymin;
writeln('x=',x:15);
writeln('y=',y:15);
writeln;
x:=x+c;
end;
until (x<b);

ви цю прогаму не писали, у вищенаведеному коді це добре видно

Мабуть якби її писав не я, то я б звернувся з претензіями до того хто написав, а не сюди за допомогою

3

(18 відповідей, залишених у Pascal/Delphi)

0xDADA11C7 написав:
case z of
1: goto w;
2: goto e;
3: goto r;
4: goto t;
end;

не думав, що побачу таке в 2014 році

А найгірше те що це входить в список того що обов'язково мають вивчати студенти-програмісти. В 2014 році.

4

(18 відповідей, залишених у Pascal/Delphi)

koala написав:

А ось це і зветься спагеті-код, і саме тому використання goto вважається поганим тоном.

тоді що зробити щоб програма працювала?

5

(18 відповідей, залишених у Pascal/Delphi)

Треба щоб програма працювала відразу з трьома циклами.
Ось код:

uses crt;
label q,w,e,r,t;
var b,c,x,y,ymax,ymin: real;
    z: byte;
begin
clrscr;
c:=0.2;
q: writeln('Vubratu tup zadachi');
   writeln('1 - while..do..');
   writeln('2 - repeat..until..');
   writeln('3 - if..then..goto');
   writeln('4 - Buxid');
read(z);
case z of
1: goto w;
2: goto e;
3: goto r;
4: goto t;
end;


w:
begin
write('X=');
readln(x);
ymax:=100;
ymin:=-100;
while x<=b do
begin
if x<-1 then y:=pi+sqrt(sin(x)/exp(x+pi)) else
if (x>=-1) and (x<1) then y:=sqr(cos(x))+(1.2*exp(ln(10)*(-1/6))) else
y:=sqr(sin(exp(ln(x)*3)))+(x*ln(x+1));
if y>ymax then y:=ymax;
if y<ymin then y:=ymin;
end;
writeln('x=',x:15,'y=',y:15);
x:=x+c;
end;
begin
writeln('ymax=',ymax:15:5,'ymin=',ymin:15:5);
writeln;
writeln('Їа®Ја ¬  а®Ў®вг § ЄiзЁ« ');
goto q;
end;

e:
repeat
write('X=');
readln(x);
ymax:=100;
ymin:=-100;
y:=(pi+sqrt(sin(x)/exp(x+pi)));
begin
if x<-1 then y:=pi+sqrt(sin(x)/exp(x+pi)) else
if (x>=-1) and (x<1) then y:=sqr(cos(x))+(1.2*exp(ln(10)*(-1/6))) else
y:=sqr(sin(exp(ln(x)*3)))+(x*ln(x+1));
if y>ymax then y:=ymax;
if y<ymin then y:=ymin;
writeln('x=',x:15);
writeln('y=',y:15);
writeln;
x:=x+c;
end;
until (x<b);
begin



writeln('ymax=',ymax:15:5,'ymin=',ymin:15:5);
writeln;
writeln('Їа®Ја ¬  а®Ў®вг § ЄiзЁ« ');
goto q;
end;


r:
write('X=');
readln(x);
ymax:=100;
ymin:=-100;

begin
if x<-1 then y:=pi+sqrt(sin(x)/exp(x+pi));
if (x>=-1) and (x<1) then y:=sqr(cos(x))+(1.2*exp(ln(10)*(-1/6)));
if x>=1 then y:=sqr(sin(exp(ln(x)*3)))+(x*ln(x+1));
if y>ymax then y:=ymax;
if y<ymin then y:=ymin;
writeln('x=',x:15,'y=',y:15);
writeln;
x:=x+c;
end;
begin
writeln('ymax=',ymax:15:5,'ymin=',ymin:15:5);
writeln;
writeln('Їа®Ја ¬  а®Ў®вг § ЄiзЁ« ');
goto q;
end;

t:
end.

Програма працює, але якщо іксу задати початкове значення меньше ніж значення В програма не працює і видає помилку 207.