Разные операторы цикла - разные ответы
|
|
Bachlor | Дата: Воскресенье, 27.07.2008, 22:21 | Сообщение # 1 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| По условию задачи,нужно вычислить сумму значений функции, четырьмя разными циклами. Code Program qwe2 ;
Const
min_x=2 ;
max_x=16 ;
min_term=0.20 ;
Var
sum, term : real;
x : integer ;
Begin
sum:=0 ;
x:=min_x ;
term:=(arctan((1)/(x-1)));
while term>=min_term Do Begin
sum:=sum+term ;
x:=x+1 ;
term:=(arctan((1)/(x-1))) ;
End;
WriteLn (Sum) ;
Begin
Sum:=0 ;
x:=min_x ;
term:=(ArcTan((1)/(x-1))) ;
Repeat
sum:=sum+term ;
x:=x+1 ;
term:=(ArcTan((1)/(x-1))) ;
Until
term>=min_term ;
End;
WriteLn (Sum ) ;
End. Пока сделал While и Repeat...Until. Получаю такие рез-ты: 1.8157749899E+00 7.8539816340E-01 Какой из результатов верен? Или у меня не правильно организован цикл Repeat?
|
|
| |
Seqular | Дата: Понедельник, 28.07.2008, 12:41 | Сообщение # 2 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Bachlor, Ты прав, у тебя неправильно организован цикл Repeat. Измени знак с >= на <= и результаты станут совпадать. Почему нужно менять знак? Потому что цикл While выполняется, пока условие истинно. А Repeat - пока ложно. (Until - "пока не", а While - "пока").
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Понедельник, 28.07.2008, 19:50 | Сообщение # 3 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Спасибо.:) Еще вопрос: [/code] Const min_x=2 ; max_x=16 ; min_term=0.20 ; Var sum, term : real; x : integer ; Begin sum:=0 ; x:=min_x ; term:=(arctan((1)/(x-1))); [/code] Почему каждый раз в новом составном операторе , необходимо задавать начальные значения? Ведь, под первым Begin задано, и по идее должно распространятся на все тело оператора? А вот не получается так. Есть ли возможность облегчить код?
|
|
| |
Seqular | Дата: Понедельник, 28.07.2008, 19:58 | Сообщение # 4 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Каждый раз нужно задавать начальные значения потому, что в первом цикле меняются переменные.. Вот смотри, перед первым циклом задал ты x := min_x.. Прошел первый цикл, в котором у тебя x:=x+1; И на входе во второй цикл x у тебя будет не min_x, а то значение, на котором закончился первый цикл.. То же самое с суммой и переменной term. Если хочешь получить 2 независимых системы, то входные данные нужно давать одинаковые. Упростить это не получится. Можно конечно сделать функциями, тогда переприсваивать ничего не надо будет. Но это уже другая историяю
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Понедельник, 28.07.2008, 21:31 | Сообщение # 5 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Сенкс. Доделаю сначала контрольную, потом надо будет подумать про "другую историю". Пока до функций еще не дошел, 3 день только общаюсь с Pascal:) Благодарю за помощь, Сэр Seqular!
|
|
| |
Seqular | Дата: Понедельник, 28.07.2008, 22:27 | Сообщение # 6 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Bachlor, да пустяки! Ждем на нашем форуме Успехов
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Вторник, 29.07.2008, 19:36 | Сообщение # 7 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Ну вот, думал все, ан нет.:) Запутался понимаеш ли с Какк им можно организовать подсчет ума не приложу. Code Begin sum:=0 ; x:=min_x;
term:=(ArcTan((1)/(x-1))) ;
for x:=2 To 16 Do Begin
While term>=min_term do Begin
sum:=sum+term ;
x:=x+1 ;
term:=(Arctan((1)/(x-1))) ;
end;
Получается только так. Хотя, здесь я не вижу смысла в В каком напрвлении я заблудился?:)
|
|
| |
Seqular | Дата: Вторник, 29.07.2008, 20:47 | Сообщение # 8 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Bachlor, Ну тут получается, что ты 15 раз прогоняешь цикл While. Это не нужно делать. Цикл For применяется в тех случаях, если тебе известно, сколько раз нужно повторить то или иное действие. Например: Code for x:=2 To 16 Do Begin If (term < min_term) then Break; sum:=sum+term ; x:=x+1 ; term:=(Arctan((1)/(x-1))) ; end; В этом случае ты пробежишь 15 раз по циклу вычисляя значение, если в какой-то момент term окажется меньше min_term, то ты цикл покидаешь досрочно. Код я не проверял, так как не знаю, что тебе нужно получить.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Вторник, 29.07.2008, 21:13 | Сообщение # 9 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Насчет While понятно, криво это. А вот до Break не додумался...:( Для простого счета - там все просто. А вот с функцией протупил немного. Не пора ли по таким вопросам FAQ делать? Ясно, что они простые, но ведь с чего-то начинать надо?:) Гранд мерси ситуайен Seqular!:)
|
|
| |
Seqular | Дата: Вторник, 29.07.2008, 21:18 | Сообщение # 10 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Bachlor, Насчет FAQ - пора.. Да блин, понимаешь, времени че-то не нахожу никак на этот проект! Начинали из чистого энтузиазма.. Бесплатно решали такие задачи, которые везде решают за... блага =) Щас времени поменьше! Дипломироваться будем, работа еще.. Учеба.. Велики, ну лето =) сам понимаешь, надо развлекаться.. Щас я в отпуске, поэтому захожу на сайт! Как-нибудь подниму его =) Помощь нужна будет.. Тебе как, вообще этот проект?
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Вторник, 29.07.2008, 21:30 | Сообщение # 11 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Нормальный проект. Насчет времени - сам такой. Сегодня отпуск заканчивается и на работу. Через 3 месяца уже сессия.:) Еще и половины не сделано. Ты как понимаю на заочном? Я на дистанционом. А насчет задач, чтоб голое решение - стоит ли? Подсказать одно, напрвить так скать в нужное русло, а решить... Зачем время терять? Если что помочь - нет проблем. Вот только один вопрос: морду как нить сменить можно? Уж больно цвет газа режет.
|
|
| |
Seqular | Дата: Вторник, 29.07.2008, 21:32 | Сообщение # 12 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Bachlor, Можно без проблем. В ближайшее время выставлю этот вопрос на голосование. Сам понимаешь, не могу я менять дизайн по просьбе одного пользователя. А учусь я вообще-то на очном. щас на 5-ый курс перешел.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Bachlor | Дата: Вторник, 29.07.2008, 21:41 | Сообщение # 13 |
Новичок
Группа: Пользователи
Сообщений: 7
Статус: Offline
| Ну зачем по просьбе одного, выбор морд можно наверное сделать. Я вот в свое время не сумел отучится, так сейчас наверстываю.:) Да походу, за личную прееписку модератор плюсанет скоро?:) Сам то откуда?
|
|
| |