Паскаль. Помогите с задачами

VJ-LAFL
Сообщения: 7
Зарегистрирован: 10 янв 2008, 04:16

народ помогите устранить ошибку в коде

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
2.JPG (18.04 КБ) 220 просмотров
Dim...ON
Сообщения: 75
Зарегистрирован: 28 янв 2008, 01:10
Контактная информация:

могу помочь.. но не бескорыстно
первая задача 60, вторая 80 руб и они будут у тебя на почте со всеми прилагающимися комментариями и объяснениями
ICQ: 198-012-696
E-mail: da-ne@ya.ru
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Че-то мне кажется, что, как минимум, строки:

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 вычисляется.
VJ-LAFL
Сообщения: 7
Зарегистрирован: 10 янв 2008, 04:16

Поменял строки ...но всё равно не то, препод сказал что мол выводит всего 2 строки ответов, а там должно быть около 5.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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
Только я не пойму, где в программе ответ на вопрос "Найти минимальное U при U > 2.1 и при каких x,y,z это достигается".
Видимо, надо вывести на экран 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;
Ответить