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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 17:37   #1
Progerr
 
Регистрация: 31.01.2013
Сообщений: 9
Восклицание вычислить произведение в цикле (Pascal)

Ну я как бы не студент,я ученик.И вот на мне на путь такая задача.
Найти (1+0.1)(2+0.2)(3+0.3)...(9+0.9).
Вот что я написал
Код:
uses CRT;
var n,s:real;
begin
Clrscr;
s:=1;
repeat
n:=n+1.1;
s:=n*s;
until n=9.9;
write (s);
readkey;
end.
Выдает ошибку "Вещественное переполнение".Я посмотрел на трассировку и обнаружил что при n=9.9 из цикла все равно не выходит.Думаю что проблема там,но точно не знаю.Прошу помощи.
P.S. подскажите хорошую литературу по Pascal,так как в школе книжка плоховатая как на меня.
P.S.S СПАСИБО ВСЕМ НО МНЕ ХОТЕЛОСЬ БЫ УЗНАТЬ В ЧЕМ ОШИБКА,ЧТОБЫ НЕ ПОВТОРЯТЬ ЕЁ


______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 31.01.2013 в 20:18.
Progerr вне форума Ответить с цитированием
Старый 31.01.2013, 17:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
uses CRT;
var n:integer;s:double;
begin
Clrscr;
s:=1.1;n:=2;
repeat
 s:=(n+n/10)*s;
 inc(n);
until n=9;
write (s);
readkey;
end.
Подходит такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2013, 17:58   #3
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Код:
USES CRT;
var
  s,n:real;
  i:byte;
begin
   s:=0;
   for i:=1 to 9 do
       begin
       n:=i+i+0.1*i;
       s:=s+n;
       end;
   writeln(s);
   readkey;
end;
Я учился по книге Турбо Паскаль 7.0 Самоучитель для школьников, студентов и начинающих.
Рекомендую дополнительно решать задачи из сборника.
Если хочется делать что-то экзотическое (3D-графика, звук не из внутреннего динамика) на Паскале, то можете скачать книгу Turbo Pascal (С.А. Немнюгин)

http://www.programmersclub.ru/книги-про-pascal/
hon вне форума Ответить с цитированием
Старый 31.01.2013, 18:03   #4
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

Код:
uses CRT;
var s:real;
n:integer;
begin
Clrscr;
s:=1;
n:=0;
repeat
n:=n+1;
s:=s*1.1*n;
writeln (s);
until n>=9;
//или
              writeln ('------------');
s:=1;
for n:=1 to 9 do
          s:=s*1.1*n;
writeln (s);
readkey;
end.
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 31.01.2013, 18:54   #5
Progerr
 
Регистрация: 31.01.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от hon Посмотреть сообщение
Код:
USES CRT;
var
  s,n:real;
  i:byte;
begin
   s:=0;
   for i:=1 to 9 do
       begin
       n:=i+i+0.1*i;
       s:=s+n;
       end;
   writeln(s);
   readkey;
end;
Я учился по книге Турбо Паскаль 7.0 Самоучитель для школьников, студентов и начинающих.
Рекомендую дополнительно решать задачи из сборника.
Если хочется делать что-то экзотическое (3D-графика, звук не из внутреннего динамика) на Паскале, то можете скачать книгу Turbo Pascal (С.А. Немнюгин)
И в программе ошибки
1.После последнего "end" "." забыли.
2.Программа не работает
Progerr вне форума Ответить с цитированием
Старый 31.01.2013, 19:41   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Потому что напутано само условие. Вот так надо:

Код:
s:=1;
for i:=1 to 9 do s:=s*(i+i/10);
Или как у Stilet'a - цикл с постусловием.

А вот так - через цикл с предусловием:

Код:
n:=1;
s:=1;
While n<=9 do begin
  s:=s*(n*n/10);
  inc(n);
end;
Кроме того, как справедливо заметил Gaw4 чуть выше, формула s:=s*(n+n/10) вполне преобразуется в s:=s*1.1*n;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 31.01.2013 в 20:04.
Sciv вне форума Ответить с цитированием
Старый 31.01.2013, 20:17   #7
DmitriB
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 12
По умолчанию

Проблема скорее всего в том, что проверка была на равенство к 9.9 - а так как числа с плавающей запятой могут находится в памяти как 9.900000001 например, то поэтому и не выходит из цикла. Так что либо следует выполнять проверку на больше либо равно, либо использовать, как подсказали выше другие виды циклов.
DmitriB вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить произведение iCaesy Помощь студентам 3 28.10.2011 00:57
Как вычислить произведение нечетных чисел StoneGod Паскаль, Turbo Pascal, PascalABC.NET 2 13.09.2011 22:34
[VB] Вычислить произведение ряда N чисел Raikerian Помощь студентам 5 12.06.2011 07:48
Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей NoUserName Помощь студентам 3 01.03.2009 18:10
Как в С++ Вычислить произведение первых N сомножителей? JiLiYa Общие вопросы C/C++ 2 18.02.2009 12:30