народ помогите устранить ошибку в коде
Program Lab_2;
uses Crt;
var x, y, z, xn, U, yn, Umin, zn: real;
begin
xn:=1;
yn:=2;
zn:=0.5;
y:=yn;
z:=zn;
x:=xn;
Umin:=10000000;
WriteLn(' x y z U');
While x<=3 do
begin
While y<=4 do
begin
While z<=1.5 do
begin
if (U>2.1) and (U<Umin) then Umin:=U;
U:=-sqrt(y*y + 4*x*x/3) + ln(y) / abs(x*z);
Write(x:6:2);
Write(y:6:2);
Write(z:6:2);
WriteLn(U:6:2);
z:=z+0.8;
end;
y:=y+1.3;
end;
x:=x+1.3;
end;
end.
Паскаль. Помогите с задачами
- Вложения
-
- 2.JPG (18.04 КБ) 217 просмотров
могу помочь.. но не бескорыстно
первая задача 60, вторая 80 руб и они будут у тебя на почте со всеми прилагающимися комментариями и объяснениями
ICQ: 198-012-696
E-mail: da-ne@ya.ru
первая задача 60, вторая 80 руб и они будут у тебя на почте со всеми прилагающимися комментариями и объяснениями
ICQ: 198-012-696
E-mail: da-ne@ya.ru
Че-то мне кажется, что, как минимум, строки:
if (U>2.1) and (U<Umin) then Umin:=U;
U:=-sqrt(y*y + 4*x*x/3) + ln(y) / abs(x*z);
надо поменять местами. А то сейчас полуается, что сперва проверяется значение переменной U (т.е. при первом заходе в цикл значение вообще не определено), а лишь следующим оператором это самое U вычисляется.
if (U>2.1) and (U<Umin) then Umin:=U;
U:=-sqrt(y*y + 4*x*x/3) + ln(y) / abs(x*z);
надо поменять местами. А то сейчас полуается, что сперва проверяется значение переменной U (т.е. при первом заходе в цикл значение вообще не определено), а лишь следующим оператором это самое U вычисляется.
Поменял строки ...но всё равно не то, препод сказал что мол выводит всего 2 строки ответов, а там должно быть около 5.
Отлично! "Около пять" - это, таки все восемьVJ-LAFL писал(а):... выводит всего 2 строки ответов, а там должно быть около 5.

Устанавливать каждую из трех переменных в начальное значение надо каждый раз перед циклом по этой переменной. А то сейчас получается, что как только перемнная самого внутреннего цикла (z) достигает своего предела, дальнейшие циклы по x и y уже бессмысленны.
Код: Выделить всё
Program Lab_2;
uses OpCrt;
var x, y, z, xn, U, yn, Umin, zn: real;
begin
xn:=1;
yn:=2;
zn:=0.5;
Umin:=10000000;
WriteLn(' x y z U');
x:=xn;
While x<=3 do begin
y:=yn;
While y<=4 do begin
z:=zn;
While z<=1.5 do begin
U:=-sqrt(y*y + 4*x*x/3) + ln(y) / abs(x*z);
if (U>2.1) and (U<Umin) then Umin:=U;
Write(x:6:2, ' ');
Write(y:6:2, ' ');
Write(z:6:2, ' ');
WriteLn(U:6:2);
z:=z+0.8;
end;
y:=y+1.3;
end;
x:=x+1.3;
end;
end.
Код: Выделить всё
x y z U
1.00 2.00 0.50 -0.92
1.00 2.00 1.30 -1.78
1.00 3.30 0.50 -1.11
1.00 3.30 1.30 -2.58
2.30 2.00 0.50 -2.72
2.30 2.00 1.30 -3.09
2.30 3.30 0.50 -3.20
2.30 3.30 1.30 -3.84
Видимо, надо вывести на экран Umin. И ввести еще три переменные, условно xmin, ymin, zmin. И запоминать не только Umin, но и соответсвующие x,y,z:
Код: Выделить всё
if (U>2.1) and (U<Umin) then begin
Umin:=U;
xmin := x;
ymin := y;
zmin := z;
end;