Пятница, 10.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Разные операторы цикла - разные ответы
BachlorДата: Воскресенье, 27.07.2008, 22:21 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 35
Статус: Offline
Bachlor, Ты прав, у тебя неправильно организован цикл Repeat.
Измени знак с >= на <= и результаты станут совпадать.
Почему нужно менять знак? Потому что цикл While выполняется, пока условие истинно. А Repeat - пока ложно. (Until - "пока не", а While - "пока").


Поддерживаю также проект сообщество молодых сисадминов
 
BachlorДата: Понедельник, 28.07.2008, 19:50 | Сообщение # 3
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 35
Статус: Offline
Каждый раз нужно задавать начальные значения потому, что в первом цикле меняются переменные.. Вот смотри, перед первым циклом задал ты x := min_x.. Прошел первый цикл, в котором у тебя x:=x+1; И на входе во второй цикл x у тебя будет не min_x, а то значение, на котором закончился первый цикл.. То же самое с суммой и переменной term. Если хочешь получить 2 независимых системы, то входные данные нужно давать одинаковые. Упростить это не получится. Можно конечно сделать функциями, тогда переприсваивать ничего не надо будет. Но это уже другая историяю

Поддерживаю также проект сообщество молодых сисадминов
 
BachlorДата: Понедельник, 28.07.2008, 21:31 | Сообщение # 5
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Сенкс. Доделаю сначала контрольную, потом надо будет подумать про "другую историю".
Пока до функций еще не дошел, 3 день только общаюсь с Pascal:) Благодарю за помощь, Сэр Seqular!
 
SeqularДата: Понедельник, 28.07.2008, 22:27 | Сообщение # 6
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Bachlor, да пустяки! Ждем на нашем форуме wink Успехов

Поддерживаю также проект сообщество молодых сисадминов
 
BachlorДата: Вторник, 29.07.2008, 19:36 | Сообщение # 7
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Ну вот, думал все, ан нет.:) Запутался понимаеш ли с
Code
For To Do

Какк им можно организовать подсчет ума не приложу.

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;

Получается только так. Хотя, здесь я не вижу смысла в
Code
For To Do

В каком напрвлении я заблудился?:)
 
SeqularДата: Вторник, 29.07.2008, 20:47 | Сообщение # 8
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: 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
Репутация: 0
Замечания: 0%
Статус: Offline
Насчет While понятно, криво это.
А вот до Break не додумался...:(
Для простого счета - там все просто. А вот с функцией протупил немного. Не пора ли по таким вопросам FAQ делать?
Ясно, что они простые, но ведь с чего-то начинать надо?:)
Гранд мерси ситуайен Seqular!:)
 
SeqularДата: Вторник, 29.07.2008, 21:18 | Сообщение # 10
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Bachlor, Насчет FAQ - пора.. Да блин, понимаешь, времени че-то не нахожу никак на этот проект! Начинали из чистого энтузиазма.. Бесплатно решали такие задачи, которые везде решают за... блага =) Щас времени поменьше! Дипломироваться будем, работа еще.. Учеба.. Велики, ну лето =) сам понимаешь, надо развлекаться.. Щас я в отпуске, поэтому захожу на сайт! Как-нибудь подниму его =) Помощь нужна будет.. Тебе как, вообще этот проект?

Поддерживаю также проект сообщество молодых сисадминов
 
BachlorДата: Вторник, 29.07.2008, 21:30 | Сообщение # 11
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Нормальный проект. Насчет времени - сам такой. Сегодня отпуск заканчивается и на работу.
Через 3 месяца уже сессия.:) Еще и половины не сделано. Ты как понимаю на заочном? Я на дистанционом. А насчет задач, чтоб голое решение - стоит ли? Подсказать одно, напрвить так скать в нужное русло, а решить... Зачем время терять? Если что помочь - нет проблем. Вот только один вопрос:
морду как нить сменить можно? Уж больно цвет газа режет.
 
SeqularДата: Вторник, 29.07.2008, 21:32 | Сообщение # 12
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Bachlor, Можно без проблем. В ближайшее время выставлю этот вопрос на голосование. Сам понимаешь, не могу я менять дизайн по просьбе одного пользователя.

А учусь я вообще-то на очном. щас на 5-ый курс перешел.


Поддерживаю также проект сообщество молодых сисадминов
 
BachlorДата: Вторник, 29.07.2008, 21:41 | Сообщение # 13
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Ну зачем по просьбе одного, выбор морд можно наверное сделать. Я вот в свое время не сумел отучится, так сейчас наверстываю.:)
Да походу, за личную прееписку модератор плюсанет скоро?:) Сам то откуда?
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;