Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите найти ошибку в задаче... > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
CrAzY_GeNiYS
В приложении я добавил само задание... Текст программы выложу чуть ниже, а сейчас объясню суть проблемы...
Не смотрите что я не сделал для 3 части smile.gif, уменя проблема с 1 и 2 частью sad.gif... Не могу понять почему у меня не хочет выполняться первый цмкл, с тем же While... это я проверял так, вывел какуюто надпись перед и после цикла и получилось так, что 1-й цикл не хотит выполняться... вродебы всё удовлетворяет, но почему, я не понимаю unsure.gif ... Помогите пожалуйста...

П.с.Правда хоть это и первый курс, но я решил выпендриться и решить не так как в условии... дело в том, что мы массивы не изучали... мы изучили только эти цыклы, но ещё и if then else... Вобщем это не важно... найдите ошибку если сможите...

Вот сама программа:

program lab5_var13;
uses crt;
const xn=0.4; xk=2.8; hx=0.4; a=1.7;
var x,y:real; v,i:integer; tab:array[1..7,1..2] of real;
begin
clrscr;
writeln('vubirite sposob reshenija i postavte cifry:');
writeln('1) WHILE');
writeln('2) REPEAT');
writeln('3) FOR');
write('Variant => '); read(v);
if v=1
then
begin
x:=xn;
i:=1;
writeln('nachali...');
while x<=a
do
begin
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
end;
writeln('prodolguli...');
while (x<=xk+hx)and(x>a)
do
begin
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
end;
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;

if v=2
then
begin
x:=xn;
i:=1;
writeln('nachali...');
repeat
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x<a);
writeln('kapec...');
repeat
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x>a);
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;
if v=3
then
begin



end;

readkey
end.
граф Монте-Кристо
В цикле while всё вроде бы работает нормально,а вот repeat у Вас неправильно написан.Посмотрите,что должно означать условие после until.
Вывод результатов лучше всего писать в самом конце программы - один раз вместо трёх.
К тому же Ваша программа слишком привязана к задаче,стоит немного изменить входные данные - и придётся почти заново её писать.Старайтесь делать её универсальнее.
crazymaster
Цитата(CrAzY_GeNiYS @ 23.9.2008, 1:44) *

Не могу понять почему у меня не хочет выполняться первый цмкл, с тем же While... это я проверял так, вывел какуюто надпись перед и после цикла и получилось так, что 1-й цикл не хотит выполняться... вродебы всё удовлетворяет, но почему, я не понимаю unsure.gif ... Помогите пожалуйста...

Потому что во втором цикле while в матрицу на теже места перезаписываются вычисления
while (1)
tab[i,1]:=x;
tab[i,2]:=y;
end
while (2)
tab[i,1]:=x;
tab[i,2]:=y;
end
crazymaster
Сорри, не заметил i глобальная перем. вроде должно работать
CrAzY_GeNiYS
Цитата(граф Монте-Кристо @ 23.9.2008, 0:58) *

В цикле while всё вроде бы работает нормально,а вот repeat у Вас неправильно написан.Посмотрите,что должно означать условие после until.
Вывод результатов лучше всего писать в самом конце программы - один раз вместо трёх.
К тому же Ваша программа слишком привязана к задаче,стоит немного изменить входные данные - и придётся почти заново её писать.Старайтесь делать её универсальнее.

Да пофиг на тот Репит... я его буду делать по образу и подобию Вайл smile.gif... Я просто не пойму какого **** первый цикл Вайла не хочет работать?!... мож я и правда намудрил с i, но вроде оно должно в любом случае, но оно какого-то вобще не хочет делать первый цикл sad.gif...
Ну три раза вместо одного вывод я сделал просто чтобы показать, что каждая часть проги работает отдельно, тоесть это не важно wink.gif...
Цитата
стоит немного изменить входные данные - и придётся почти заново её писать

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

Цитата
Сорри, не заметил i глобальная перем. вроде должно работать

Вот и я о том же... я полностью продумал логику... по идее оно должно в любом случае работать wink.gif... но увы sad.gif...

Может кто ещё что скажет?... я то могу нормально переделать и сделать так как нужно... Но мне аж интересно стало, какого **** оно не работает smile.gif
creer
А почему Вы решили, что что-то не работает?
Код
vubirite sposob reshenija i postavte cifry:
1) WHILE
2) REPEAT
3) FOR
Variant => 1
nachali...
prodolguli...
Pri X= 0.4000000 => Y= 0.9998720
Pri X= 0.8000000 => Y= 0.9994880
Pri X= 1.2000000 => Y= 0.9988482
Pri X= 1.6000000 => Y= 0.9979527
Pri X= 2.0000000 => Y= 3.4641016
Pri X= 2.4000000 => Y= 4.2218479
Pri X= 2.8000000 => Y= 5.0943106

Это цикл while. На мой взгляд, вывелось то, что необходимо.
CrAzY_GeNiYS
Цитата(creer @ 23.9.2008, 20:37) *

А почему Вы решили, что что-то не работает?
Код
vubirite sposob reshenija i postavte cifry:
1) WHILE
2) REPEAT
3) FOR
Variant => 1
nachali...
prodolguli...
Pri X= 0.4000000 => Y= 0.9998720
Pri X= 0.8000000 => Y= 0.9994880
Pri X= 1.2000000 => Y= 0.9988482
Pri X= 1.6000000 => Y= 0.9979527
Pri X= 2.0000000 => Y= 3.4641016
Pri X= 2.4000000 => Y= 4.2218479
Pri X= 2.8000000 => Y= 5.0943106

Это цикл while. На мой взгляд, вывелось то, что необходимо.


Ну ведь я же вывел одну надпись до цикла, а вторую после цикла... вот они и вывелись до и после, а междуними ничего...а то видимо результат второго цикла...
crazymaster
Цитата(CrAzY_GeNiYS @ 24.9.2008, 0:33) *

Ну ведь я же вывел одну надпись до цикла, а вторую после цикла... вот они и вывелись до и после, а междуними ничего...а то видимо результат второго цикла...

а в первом цикле что то должно выводится на экран?
граф Монте-Кристо
Цитата
.. вот они и вывелись до и после, а междуними ничего...

Так между ними Вы ничего и не выводите на экран smile.gif
creer
CrAzY_GeNiYS,
посмотрите как будет выводиться теперь, я дописал несколько строчек.

Код
  if v=1 then
  begin
    x:=xn;
    i:=1;
    writeln('nachali...');
    while x<=a do
    begin
      y:=cos((x)/(25));
      tab[i,1]:=x;
      tab[i,2]:=y;
      writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7); {Это дописал я, возможно станет понятнее}
      x:=x+hx;
      i:=i+1;
    end;
    writeln('prodolguli...');
    while (x<=xk+hx) and (x>a) do
    begin
      y:=sqrt(exp(3*ln(x))+4);
      tab[i,1]:=x;
      tab[i,2]:=y;
      writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7); {Опять я}
      x:=x+hx;
      i:=i+1;
    end;
    writeln('----------'); {Разделил на 2 части :)}
    for i:=1 to 7 do {Это Ваш вывод, правда цифру 7 лучше вычислить;)}
      writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
  end;
CrAzY_GeNiYS
Тьфу я дибил... я ж забыл, что я записую результат в таблицу, а потом уже из таблици вывожу... Всё терь понял какого оно не выводилось smile.gif...
А вот теперь вопрос... Я немного отредактировал код для вывода через Репит, но оно не хочет заполнять последние 3 или 4 параметра sad.gif... опять не пойму чо...
Вот код:
if v=2
then
begin
x:=xn;
i:=1;
repeat
y:=cos((x)/(25));
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x<=a);
repeat
y:=sqrt(exp(3*ln(x))+4);
tab[i,1]:=x;
tab[i,2]:=y;
x:=x+hx;
i:=i+1;
until (x<=xk)and(x>a);
for i:=1 to 7
do writeln('Pri X=', tab[i,1]:10:7, ' => Y=', tab[i,2]:10:7);
end;

Мож я чо в Антил не так написал?... ну всмысле в условии smile.gif...
граф Монте-Кристо
В until пишется условие,при выполнении которого цикл завершается,насколько я помню. То есть Вам нужно поменять знаки,ну и некоторые условия можно убрать.
CrAzY_GeNiYS
Цитата(граф Монте-Кристо @ 24.9.2008, 16:27) *

В until пишется условие,при выполнении которого цикл завершается,насколько я помню. То есть Вам нужно поменять знаки,ну и некоторые условия можно убрать.

Тю... а я думал, что пока выполняется это условие в Until выполняется цикл cool.gif ...
Спасибо всем за помощь smile.gif Пошол делать... Если что ещё раз спрошу smile.gif...
Ещё раз спасибо smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.