IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> задача с геометрической прогрессией
Bankir
сообщение 28.05.2005 17:37
Сообщение #1


Гость






Помогите плз решить такую задачу в Паскале через проседуры
Условие:
По одной легенде шах предложил мудрецу любой подарок какой тот захочет. Мудрец сказал чтобы на первую кетку шахматной доски положили одно зерно, на 2 - 2 зерна, на 3 - 4 зерна, на 4 - 16 зёрен и.т.д. ( геометрическая прогрессия)
Составить программу, с помощью которой модно вычислить на какой клетке суммарное кол-во зёрен превысит N шт. ( на шахматной доске 64 клетки)

Заранее спасибо.
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2005 17:48
Сообщение #2


Гость






В чем проблема? На чем застопорились?
Не знаем, как оформить геометрическую прогрессию?
 К началу страницы 
+ Ответить 
klem4
сообщение 29.05.2005 9:25
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


проблема в том ,что cкоро члены ряда перестанут умещаться в
LongInt
;)

Bankir, тебе Сюда

Сообщение отредактировано: klem4 - 29.05.2005 9:27


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.05.2005 10:31
Сообщение #4


Гость






Цитата(klem4 @ 29.05.05 9:25)
проблема в том ,что cкоро члены ряда перестанут умещаться в LongInt ;)

А Comp на что?
С его помощью можно попробовать обойтись без длинной арифметики...
 К началу страницы 
+ Ответить 
klem4
сообщение 29.05.2005 10:50
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Можт я чего-то не понимаю, но
хмм.. 8-й член = 4294967296*4294967269, так что я даже и не знаю, как тут Comp'ом обойтись
сплошные error'ы ;)

Сообщение отредактировано: klem4 - 29.05.2005 10:51


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.05.2005 11:15
Сообщение #6


Гость






Цитата(Bankir @ 28.05.05 17:37)
По одной легенде шах предложил мудрецу любой подарок какой тот захочет. Мудрец сказал чтобы на первую кетку шахматной доски положили одно зерно, на 2 - 2 зерна, на 3 - 4 зерна, на 4 - 16 зёрен и.т.д. ( геометрическая прогрессия)

Давай уточним условие:
если у тебя прогрессия геометрическая, то на 2-ю клетку должны были положить в 2 раза больше чем на первую, на 3-ю - в 2 раза больше чем на вторую, и т. д. Из чего:
1 - 1
2 - 2 (1 * 2)
3 - 4 (2 * 2)
4 - 8 (4 * 2) У тебя 16... Откуда? Или это гипергеометрическая прогрессия? Уточни...
 К началу страницы 
+ Ответить 
Bankir
сообщение 29.05.2005 11:58
Сообщение #7


Гость






Да... с 16-ю я ошибся
А застопорился я на том что не могу понять как записать формулу геометрической прогресии - какие переменные куда подставлять и.т.д. и как оформить цыкл
 К началу страницы 
+ Ответить 
volvo
сообщение 29.05.2005 12:01
Сообщение #8


Гость






Вот тебе пример:
{$n+}
var
n, count, sum: comp;
i: byte;

begin
Write('n = '); readln(n);
i := 1; count := 1; sum := 1;
while sum < n do begin
count := count*2;
sum := sum + count;
inc(i)
end;
writeln('На клетке №', i)
end.

Это будет работать почти всегда...
 К началу страницы 
+ Ответить 
Bankir
сообщение 29.05.2005 18:00
Сообщение #9


Гость






С типом переменных comp ни чего не работало
показывалась ошибка на строчке "readln(n);" -
error 116: Must be in 8087 mode to compile this.
Но с переменой типа на Integer всё заработало.
Спосиба большое.
P.S. а че за переменная comp в школе нам не рассказывали про неё?
 К началу страницы 
+ Ответить 
klem4
сообщение 29.05.2005 18:01
Сообщение #10


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


хех, поставь первой строкой в рограмме

{$n+}


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.05.2005 18:05
Сообщение #11


Гость






Так в том-то и дело, что с Integer ты можешь работать только до 16-ой клетки, а сумма - вообще до 15-ой, так как размер Integer - 16 бит. Если же брать Comp (длинное "целое"), то его размер - 8 байт (64 бита), следовательно ты сможешь работать до 64 клетки...

P.S. Программу подправил...
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 22.06.2024 4:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"