IPB

Здравствуйте, гость ( Вход | Регистрация )

> Помогите найти ошибку в задаче..., Лабораторная работа по Паскалю, 1 курс
CrAzY_GeNiYS
сообщение 22.9.2008, 19:44
Сообщение #1


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 22.9.2008
Город: Украина, Краматорск
Учебное заведение: ДГМА
Вы: студент



В приложении я добавил само задание... Текст программы выложу чуть ниже, а сейчас объясню суть проблемы...
Не смотрите что я не сделал для 3 части (IMG:style_emoticons/default/smile.gif), уменя проблема с 1 и 2 частью (IMG:style_emoticons/default/sad.gif)... Не могу понять почему у меня не хочет выполняться первый цмкл, с тем же While... это я проверял так, вывел какуюто надпись перед и после цикла и получилось так, что 1-й цикл не хотит выполняться... вродебы всё удовлетворяет, но почему, я не понимаю (IMG:style_emoticons/default/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.


Прикрепленные файлы
Прикрепленный файл  LR5.doc ( 33 килобайт ) Кол-во скачиваний: 8
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 12)
граф Монте-Кристо
сообщение 22.9.2008, 21:58
Сообщение #2


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



В цикле while всё вроде бы работает нормально,а вот repeat у Вас неправильно написан.Посмотрите,что должно означать условие после until.
Вывод результатов лучше всего писать в самом конце программы - один раз вместо трёх.
К тому же Ваша программа слишком привязана к задаче,стоит немного изменить входные данные - и придётся почти заново её писать.Старайтесь делать её универсальнее.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crazymaster
сообщение 23.9.2008, 6:33
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 240
Регистрация: 9.3.2007
Город: Нефтеюганск
Учебное заведение: ТУСУР
Вы: студент



Цитата(CrAzY_GeNiYS @ 23.9.2008, 1:44) *

Не могу понять почему у меня не хочет выполняться первый цмкл, с тем же While... это я проверял так, вывел какуюто надпись перед и после цикла и получилось так, что 1-й цикл не хотит выполняться... вродебы всё удовлетворяет, но почему, я не понимаю (IMG:style_emoticons/default/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
сообщение 23.9.2008, 6:43
Сообщение #4


Студент
**

Группа: Продвинутые
Сообщений: 240
Регистрация: 9.3.2007
Город: Нефтеюганск
Учебное заведение: ТУСУР
Вы: студент



Сорри, не заметил i глобальная перем. вроде должно работать
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
CrAzY_GeNiYS
сообщение 23.9.2008, 14:52
Сообщение #5


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 22.9.2008
Город: Украина, Краматорск
Учебное заведение: ДГМА
Вы: студент



Цитата(граф Монте-Кристо @ 23.9.2008, 0:58) *

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

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

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

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

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

Может кто ещё что скажет?... я то могу нормально переделать и сделать так как нужно... Но мне аж интересно стало, какого **** оно не работает (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
creer
сообщение 23.9.2008, 17:37
Сообщение #6


Студент
**

Группа: Продвинутые
Сообщений: 121
Регистрация: 28.10.2007
Город: Екатеринбург
Учебное заведение: УГТУ-УПИ
Вы: студент



А почему Вы решили, что что-то не работает?
Код
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
сообщение 23.9.2008, 18:33
Сообщение #7


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 22.9.2008
Город: Украина, Краматорск
Учебное заведение: ДГМА
Вы: студент



Цитата(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
сообщение 23.9.2008, 18:40
Сообщение #8


Студент
**

Группа: Продвинутые
Сообщений: 240
Регистрация: 9.3.2007
Город: Нефтеюганск
Учебное заведение: ТУСУР
Вы: студент



Цитата(CrAzY_GeNiYS @ 24.9.2008, 0:33) *

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

а в первом цикле что то должно выводится на экран?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 23.9.2008, 20:01
Сообщение #9


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



Цитата
.. вот они и вывелись до и после, а междуними ничего...

Так между ними Вы ничего и не выводите на экран (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
creer
сообщение 23.9.2008, 20:21
Сообщение #10


Студент
**

Группа: Продвинутые
Сообщений: 121
Регистрация: 28.10.2007
Город: Екатеринбург
Учебное заведение: УГТУ-УПИ
Вы: студент



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
сообщение 24.9.2008, 12:32
Сообщение #11


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 22.9.2008
Город: Украина, Краматорск
Учебное заведение: ДГМА
Вы: студент



Тьфу я дибил... я ж забыл, что я записую результат в таблицу, а потом уже из таблици вывожу... Всё терь понял какого оно не выводилось (IMG:style_emoticons/default/smile.gif)...
А вот теперь вопрос... Я немного отредактировал код для вывода через Репит, но оно не хочет заполнять последние 3 или 4 параметра (IMG:style_emoticons/default/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;

Мож я чо в Антил не так написал?... ну всмысле в условии (IMG:style_emoticons/default/smile.gif)...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 24.9.2008, 13:27
Сообщение #12


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



В until пишется условие,при выполнении которого цикл завершается,насколько я помню. То есть Вам нужно поменять знаки,ну и некоторые условия можно убрать.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
CrAzY_GeNiYS
сообщение 24.9.2008, 16:00
Сообщение #13


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 22.9.2008
Город: Украина, Краматорск
Учебное заведение: ДГМА
Вы: студент



Цитата(граф Монте-Кристо @ 24.9.2008, 16:27) *

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

Тю... а я думал, что пока выполняется это условие в Until выполняется цикл (IMG:style_emoticons/default/cool.gif) ...
Спасибо всем за помощь (IMG:style_emoticons/default/smile.gif) Пошол делать... Если что ещё раз спрошу (IMG:style_emoticons/default/smile.gif)...
Ещё раз спасибо (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 23:00

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru