PDA

Показать полную графическую версию : *Теория* | Числа Фибоначчи


Grub
06-06-2006, 08:10
Ребята помогите выкрутиться!!! Договорился с преподом чтоб он мне зачет поставил, а он мне в ответ на это задание дал. Мол напиши прогу, которая бы находила и отоброжала числа Фибоначчи. А я в программировании вообще не силен. Могу по уже написаному сделать, да кнопки на форму покидать и все. И самое главное, что в задании нет предела. А я так понимаю, что как только число дойдет до конца обьявленного типа, то выдаст ошибку. Вот надо эту ошибку попробовать побороть. Не бросайте в беде человека.... Подскажите или ссылку какую дайте.....

DVDshnik
06-06-2006, 08:23
числа Фибаначи
Фибоначчи числа, емнип.

PS: последнее не что иное как сокращение фразы "если меня память не подводит".

Grub
06-06-2006, 09:26
DVDshnik да не злись ты. :) Если из-за каждой орфографической ошибки так злится, нервное расстройство можно заработать. И спасибо за подсказку

XPEHOMETP
06-06-2006, 10:53
Числа Фибоначчи - похоже, любимая развлекаловка разных преподов, и подлость действительно в том, что они очень быстро выходят за пределы 32-битных чисел. Плюс к тому на них еще любят объяснять рекурсию, поэтому программирование вычисления чисел Фибоначчи есть очень во многих книжках. Например, в Фаронове. Какой хоть язык программирования?

Можно и нагуглить кой-чего.

http://www.kursovik.com/programming/201021.html - сама прога (экзешник) бесплатно, исходник на Паскале - за деньги. Есть и задарма:

http://old.osp.ru/pcworld/2001/07/130t2.htm
http://forum.vingrad.ru/index.php?showtopic=33706&st=0&unread=#entry250663 - обсуждение на форуме с парой вариантов решения

Можно и еще найти.

ЗЫ: Нашел вот на Питоне (язык-то не указан!): http://pythonbook.it-arts.ru/files/start_with_python/start_with_python.html

Hemp
06-06-2006, 11:35
Grub
Вот задание:
___________________________________________________________
Условие.
Последовательность чисел Фибоначчи u0,u1....un образуется по закону u(0)=0;u(1)=1;u(i)=u(i-1)+u(i-2); i=1,2,3....
Дано натуральное число n>1 . Получить u0,u1....u.
____________________________________________________________
вот решение:

Решение.
В программу вводится количество элементов массива в диапазоне 1 <n<46 (т.к. 47 член последовательности превышает допустимое значение для типа данных int). Осуществляется проверка введённых значений. Выделяется оперативная память под массив с помощью функции malloc(). В цикле производим заполнение массива по формуле u(i)=u(i-1)+u(i-2). Затем с помощью функции printf() все элементы массива выводится на экран.


#include <conio.h>;
#include <stdio.h>;
#include <alloc.h>;
void main ()
{
int n,i,*u; //n-количество элементов последовательности, i - счётчик, *u- указатель на массив
do{
printf(" Warning! Max value n<=46 \n Input n="); // "введите кол-во элементов последовательности"
scanf("%d",&n); // вводим n
clrscr();
}while(n>46); //если n>46, то повторяем цикл do-while
u =(int *)malloc(n*sizeof(int)); // выделяем динамически память под массив
u[0]=0; // задаём значение первых двух элементов
u[1]=1;
printf("\n for u0=%d; \n for u1=%d;",u[0],u[1]); //выводим первые два эл-та на экран
for(i=2;i<n;i++)
{
u[i]=u[i-1]+u[i-2];
printf("\n for u%d=%d;",i,u[i]); // и далее в цикле, согласно формуле все остальные эл-ты выводим
}
getch();
free(u); // очищаем отведённую под массив память
}

Grub
06-06-2006, 12:36
Блин, ребята извините. На делфях надо сделать. Задание такое: сделай мне прогу, которая будет выводить строку из чисел Фибоначчи. Предел не указываю, т.к. сам знаю что при достижении "крит.числа" вылетит ошибка. Сделай чтоб ошибка не вылетала.
Я так понял что ему бесконечность подавай. А вообще, для начала хоть что-нибудь бы найти.
XPEHOMETP, Hemp спасибо. Ща буду просматривать.

CyberDaemon
08-06-2006, 12:54
Числа Киббоначи, знакомая штука :)
Чтобы переполения не было - считай столбиком, как на пумашке в школе. Если тип переменной "строка" - то раньше зачот дойдет до конца :)

sandycrazy
11-07-2006, 02:06
на pascal'е


Program Fibonache;
uses crt;
var x,y,z,n,i: longint;
begin;
clrscr;
x:=1; y:=1;
write ('‡*¤*©вҐ Ї®ап¤Є®ўл© *®¬Ґа зЁб«* ”ЁЎЎ***зЁ: ');
readln(n);
for i:=3 to n do begin;
z:=x+y; y:=x; x:=z;
end;
if n<3 then z:=1;
writeln ('зЁб«® ”ЁЎЎ®**зЁ: ',z);
readln;
end.


на pascal'е с помощью процедуры


Program Fibonache;
uses crt;
var x,y,z,n,i: longint;
procedure shet (n:longint; var z:longint);
begin;
if n>=3 then begin; shet (n-1,z);
z:=x+y; y:=x; x:=z;
end else if n=3 then begin x:=1;y:=1;z:=2 end else begin x:=1; y:=1; z:=1; end;
end;
begin;
clrscr;
write ('‡*¤*©вҐ Ї®ап¤Є®ўл© *®¬Ґа зЁб«* ”ЁЎЎ***зЁ: ');
readln(n);
shet (n,z);
writeln ('зЁб«® ”ЁЎЎ®**зЁ: ',z);
readkey;
end.


то что каракули, там чё то по русски, а на дэлфи не долго переделать язык одинаковый

L13
28-07-2006, 14:23
Была похожая задача у меня на дипломе (не Фибоначчи). Основная проблема была быстрое завершение числового диапазона, а препадам хотелось получать числа подлинее, так они одному студенту задание дали на суммирование чисел в символьном формате. Т.е. 123 + 456 были на самом деле '123' + '456'. По идее так можно и до бесконечности, пока размера диска хватит.




© OSzone.net 2001-2012