Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 08:29   #1
gennadii
Пользователь
 
Регистрация: 12.01.2011
Сообщений: 37
По умолчанию Цикл While

Здравствуйте, подскажите пожалуйста, почему у меня цикл не работает, что не так? Спасибо.
Код:
Uses crt;
Var
  t:integer;
  a,s:real;
Begin
  clrscr;
  a:=10;
  s:=a;
  t:=1;
    While s<40  do begin
    a:=a*0.1;
    s:=s+a;
    t:=t+1;
    end;
  Writeln('t=',t);
  Readkey;
End.
gennadii вне форума Ответить с цитированием
Старый 20.12.2012, 08:48   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Он у Вас не то, что-бы не работает, он зациклен. Проверяем первое вхождение: s=10. Второе s=1, третье s=0.1....
Код:
    While s<40  do begin
    a:=a*0.1;// a * 0.1 = 1, 0.1, 0.01...
    s:=s+a;
    t:=t+1;// зачем здесь t?
    end;
Может нужно так?
Код:
    While t<40  do begin
    a:=a*0.1;
    s:=s+a;
    t:=t+1;
    end;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.12.2012, 08:55   #3
gennadii
Пользователь
 
Регистрация: 12.01.2011
Сообщений: 37
По умолчанию

Вот само задание:

переменные t целого типа; а, s вещественного типа
начало
а присвоить 10
s присвоить а
t присвоить 1
пока s<40 повторять
нц
а увеличить в 0,1 раз
s увеличить на а
t увеличить на 1
кц
вывод t
конец

Может я что-то не понял?
gennadii вне форума Ответить с цитированием
Старый 20.12.2012, 11:20   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Геннадий, если Вам дали такое условие, совсем не значит, что оно имеет математическое решение.

попробуйте такой код для начала:
Код:
  While (s<40) and (a>0)  do begin
      a:=a*0.1;
      s:=s+a;
      t:=t+1;
  end;
  Writeln('t=',t, ' s =', s:0:17,' a=', a:0:17 );
и Вы легко убедитесь, что через 326 циклом a окончательно становится нулевым. и дальше прибавление его к s ничего не даёт. s не станет увеличиваться, хоть сто миллиардов раз прокрутите цикл. Вот поэтому программа и зацикливается...

Что с этим делать? Уточнять задание. Если в нём нет ошибок/опечаток, то задача решения не имеет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.12.2012, 12:30   #5
gennadii
Пользователь
 
Регистрация: 12.01.2011
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Что с этим делать? Уточнять задание. Если в нём нет ошибок/опечаток, то задача решения не имеет.
Скорее всего вы правы, тем более в задаче точно опечаток нету! Спасибо!
gennadii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цикл while holi Помощь студентам 5 12.05.2011 14:07
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34