Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 144
от 24.03.2006, 05:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 156, Экспертов: 40
В номере:Вопросов: 1, Ответов: 2


Вопрос № 37897: Здравствуйте, уважаемые эксперты! Пожалуйста помогите с решением задач: Задача №1 Даны натуральные числа n, a1, a2,..., a[n]. Определить количество членов a[k] последовательности a1,..., a[n], имеющих четные порядковые номера и являющиеся нечетны...

Вопрос № 37.897
Здравствуйте, уважаемые эксперты! Пожалуйста помогите с решением задач:
Задача №1 Даны натуральные числа n, a1, a2,..., a[n]. Определить количество членов a[k] последовательности a1,..., a[n], имеющих четные порядковые номера и являющиеся нечетными числами.
Задача №2 Определить функцию f(n), вычисляемую n-е число Фибонначи и найти первое число Фибонначи больше m (m>1).
Задача №3 Задано натуральное число n. Напечатать его цифры в p-ичной системе счисления.
Отправлен: 19.03.2006, 05:29
Вопрос задал: AntiLamer (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 14)

Отвечает: Полховский Александр Владимирович
Здравствуйте, AntiLamer!
Что касается №1, то она довольно проста. Число будет чётным, если остаток от деления его на 2 будет равен 0. Ну и, соответственно, нечётным - если 1. За остаток отвечает оператор mod. Нужно лишь пройтись по всем числам по-порядку, посчитав для порядкового номера и для самого числа остаток от деления на 2. И сделать необходимый вывод.
Для вывода числа в p-ичной системе счисления нужно для начала заполнить строку (или массив) p знаками, которые мы будем использовать в качестве цифр (для систем с основанием большим, чем 10). Хотя можно воспользоваться и функцией chr. Ну это ладно. Число в p-ичной системе счисления представляется в виде суммы произведений каждого из разрядов на основание, возведённое в степень, равную номеру разряда, начиная с 0. Вот, например, как это представляется для числа 54876 в 10-ной системе счисления:
54876=6*10^0+7*10^1+8*10^2+4*10^3+5*10^4=
6+70+800+4000+50000.
Чтобы получить такую последовательность, нужно найти значение целочисленного деления числа на основание, возведённое в степень, равную номеру разряда, цифру которого мы определяем. Но этого мало. Если мы так сделаем, то для 2-го разряда всё того же числа (54876, то есть восьмёрка, так как нумерация с 0) получим:
№2=54876 div 10^2=54876 div 100=548.
А нас интересует только восьмёрка. А посему, надо ещё найти остаток от деления полученного числа на 10 (то есть основание системы счисления):
№2=548 mod 10.
Итого, конечная формула для i-го разряда числа такова:
№i=(n div p^i) mod p,
где n - заданное число,
p - основание системы счисления. Но для определения всех чисел надо знать сколько будет разрядов. Для этого при завершении очередного цикла (пусть это будет repeat-until) сделаем проверку, которая даст true, если целочисленное деление даст 0, то есть число, на которое мы делим больше данного нам n:
until n div p^i = 0;
В строку символов при подсчёте каждого разряда добавлять символ, соответствующий данной цифре (8 для8, 9 для 9, A для 10 и т.д.):
ch[i]:=chars[(n div p^i) mod p];
где ch - строка. которую и нужно вывести,
chars - строка (или массив символов). содержащий те самые символы для каждой цифры.
Не забудьте только развернуть результирующую строку, мы в неё задом наперёд записывали (не не, писали мы руками. конечно :) ).

Так-с. Числа Фибоннчи - последовательность чисел, каждое из которых (кроме первых двух) равно сумме двух предыдущих. Ищется легко и просто. Задаём два первых числа. А остальные просто тупо в лоб считаем как сумму двух предыдущих. Думаю, с этим уж Вы сами в состоянии справиться.
Учитесь, учитесь и ещё раз учитесь (не в смысле 3-х высших, а в смысле хорошо)
Что-то я с утра разговорчивый. Повезло Вам =)
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 19.03.2006, 06:31

Отвечает: Евгения
Здравствуйте, AntiLamer!
1. ch:=0;
for k:=1 to n do
if (a[k] mod 2=1) {chislo nechetnoe} and (k mod 2=0) {index chetnyj} then
ch:=ch+1;
2. chisla fibonachi
a[1]:=1; a[2]:=1; {a[n]=a[n-2]+a[n-1]}

procedure fibonachi(k: integer;): integer;
var t,fib,one,two: integer;
begin
one:=1; two:=1;
t:=3;
if (k=1) or (k=2) then fib:=1 else
while t<=k do begin
fib:=one+two;
one:=two;
two:=fib;
t:=t+1;
end;
fibonachi:=fib;
end;

begin
fibonachi(k); {vychisljaet k-toe chislo fibonachi}
end;

{dlja togo, chtoby naiti chislo ne k-toe, a najti pervoe chislo fibonachi bol'shee m, to v procedure vyhod budet ne togda, kogda t dostignet k, a kogda fib budet bol'she zadannogo chisla, preobrazujte proceduru sami, v chislah fibonachi kazhdoe posledujush'ee chislo javljaetsja summoj predydush'ih dvuh, pervoe i vtoroe chislo edinica}
{esli est' oshibki sil'no ne beite, ne stoit pascalja... s potolka pisala...}
3. eta zadach svjazana vplotnuju s div i mod, esli znaete kak iz 10-oj sistemy perevodit' v drugie, privedu primer na dvoichnoj sisteme:
46 - chislo v 10-j sis-me
^ 46 mod 2=0; 46 div 2=23;
| 23 mod 2=1; 23 div 2=11;
| 11 mod 2=1; 11 div 2=5;
| 5 mod 2=1; 5 div 2=2;
| 2 mod 2=0;
| 2 div 2=1;
101110 - eto 46 v dvoichnoj - my shli s konca - s poslednego div i po vsem mod... takzhe dlja ljuboj sistemj schistlenjaj, tut zadacha pridumat' kak hranit' chislo, chtob ego potom vybesti s konca, mozhno hranit' v massive i zapominat' kolvo elementov, a potom vyvesti ih v obratnom porjadke...

izvinite, esli chto naputala gde, za vas vse uzh ne budu delat', no dumaju pomogla, ostal'naja rabota za vami - esli est' voprosy, to pishite...
Spasibo...
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 19.03.2006, 06:48


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.20 (beta) от 17.03.2006
Яндекс Rambler's Top100

В избранное