Ну и в чем проблема
Числа Фибоначчи
f1=0 f2=1 f3=1 ...f(n)=f(n-1)+f(n-2)
Определяем какой член последовательности нужен
n:=strtoint(Vvod.text);
В цикле
fib:=текущее число (x1+x2)
подготавливаем следущую итерацию
x1:=x2
x2=fib
Повторяем до получения n-члена
Выводим ответ
res.caption:='Результат: '+ inttostr(fib);
PS только правильнее результат не в цикле выводить а после получения результата
Другие языки программирования и технологии
Помогите разобрать код программы чисел Фибоначчи на Delphi
Это лучше заюзай. Всё что только можно расписал:
type
//Тип функции обратного вызова генератора чисел фибоначчи
TFibonacciCallback = procedure (Number: DWORD);
//Функция генерации чисел фибоначчи
function GetFibonacciNumbers(Count: DWORD; Callback: TFibonacciCallback): BOOL;
var
Number0 : DWORD; //Число фибоначчи с индексом N-1
Number1 : DWORD; //Число фибоначчи с индексом N
NewNumber: DWORD; //Текущее число фибоначчи
begin
//Если кол-во больше двух (первые 2 изначально известны)
//и функция обратного вызова задана
if (Count > 2)and(@Callback <> nil) then
try
Number0 := 0; //Задаём первое число фибоначчи
Number1 := 1; //Задаём второе число фибоначчи
Callback(0); //Возвращаем первое число
Callback(1); //Возвращаем второе число
Dec(Count, 2); //Уменьшаем кол-во чисел, т. к. два уже вернули
repeat //Запускаем цикл вычисления чисел фибоначчи
//Проверка переполнения значения DWORD (переполнение вызовет 49 число)
if ((Number0 + Number1) < Number0) or ((Number0 + Number1) < Number1) then
begin
Result := False; //Возвращаем что выполнено с ошибкой
Exit; //Выходим из функции
end;
//Получаем текущее число фибоначчи путём сложения двух предыдущих
NewNumber := Number0 + Number1;
//Задаём переменной значение следующего за ней числа
Number0 := Number1;
//Задаём переменной значение текущего числа фибоначчи
Number1 := NewNumber;
//Уменьшаем кол-во чисел
Dec(Count);
//Возвращаем текущее число фибоначчи
Callback(NewNumber);
until Count = 0; //Завершаем цикл, если кол-во чисел равно нулю
//Возвращаем что выполнено без ошибок
Result := True;
except
//Возвращаем что выполнено с ошибкой
Result := False;
end
else //Если кол-во меньше или равно двум или функция обратного вызова задана
if (@Callback <> nil) then //Если функция обратного вызова задана
case Count of
1: Callback(0); //Если кол-во 1, то возвращаем первое число
2: //Если кол-во 2, то возвращаем два первых числа
begin
Callback(0);
Callback(1);
end;
else
//Возвращаем что выполнено с ошибкой
Result := False;
end else
//Возвращаем что выполнено с ошибкой
Result := False;
end;
//Функция обратного вызова
procedure FibonacciCallback(Number: DWORD);
begin
//Добавление числа фибоначчи в Memo1
Form1.Memo1.Lines.Add(IntToStr(Number));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Очистка Memo1 для последующего использования
Memo1.Clear;
//Запуск генератора чисел фибоначчи
if not GetFibonacciNumbers(StrToIntDef(Edit1.Text, 0), FibonacciCallback) then
ShowMessage('Ошибка');
end;
type
//Тип функции обратного вызова генератора чисел фибоначчи
TFibonacciCallback = procedure (Number: DWORD);
//Функция генерации чисел фибоначчи
function GetFibonacciNumbers(Count: DWORD; Callback: TFibonacciCallback): BOOL;
var
Number0 : DWORD; //Число фибоначчи с индексом N-1
Number1 : DWORD; //Число фибоначчи с индексом N
NewNumber: DWORD; //Текущее число фибоначчи
begin
//Если кол-во больше двух (первые 2 изначально известны)
//и функция обратного вызова задана
if (Count > 2)and(@Callback <> nil) then
try
Number0 := 0; //Задаём первое число фибоначчи
Number1 := 1; //Задаём второе число фибоначчи
Callback(0); //Возвращаем первое число
Callback(1); //Возвращаем второе число
Dec(Count, 2); //Уменьшаем кол-во чисел, т. к. два уже вернули
repeat //Запускаем цикл вычисления чисел фибоначчи
//Проверка переполнения значения DWORD (переполнение вызовет 49 число)
if ((Number0 + Number1) < Number0) or ((Number0 + Number1) < Number1) then
begin
Result := False; //Возвращаем что выполнено с ошибкой
Exit; //Выходим из функции
end;
//Получаем текущее число фибоначчи путём сложения двух предыдущих
NewNumber := Number0 + Number1;
//Задаём переменной значение следующего за ней числа
Number0 := Number1;
//Задаём переменной значение текущего числа фибоначчи
Number1 := NewNumber;
//Уменьшаем кол-во чисел
Dec(Count);
//Возвращаем текущее число фибоначчи
Callback(NewNumber);
until Count = 0; //Завершаем цикл, если кол-во чисел равно нулю
//Возвращаем что выполнено без ошибок
Result := True;
except
//Возвращаем что выполнено с ошибкой
Result := False;
end
else //Если кол-во меньше или равно двум или функция обратного вызова задана
if (@Callback <> nil) then //Если функция обратного вызова задана
case Count of
1: Callback(0); //Если кол-во 1, то возвращаем первое число
2: //Если кол-во 2, то возвращаем два первых числа
begin
Callback(0);
Callback(1);
end;
else
//Возвращаем что выполнено с ошибкой
Result := False;
end else
//Возвращаем что выполнено с ошибкой
Result := False;
end;
//Функция обратного вызова
procedure FibonacciCallback(Number: DWORD);
begin
//Добавление числа фибоначчи в Memo1
Form1.Memo1.Lines.Add(IntToStr(Number));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Очистка Memo1 для последующего использования
Memo1.Clear;
//Запуск генератора чисел фибоначчи
if not GetFibonacciNumbers(StrToIntDef(Edit1.Text, 0), FibonacciCallback) then
ShowMessage('Ошибка');
end;
Валентин Шопов
О Боже, нихрена себе....))) спасибо конечно, но мне нужно понять именно свой код. У меня итак есть несколько решений задачи, не считая предложенную мной) Однако, в случае необходимости, буду обращаться к вашему коду)) Не пропадать же добру зря, тем более такому подробному))
Отладчиком в ИДЕ прогони, если лень три строчки на листке бумаги написать!
Валентин Шопов
Писать я еще не разучился, вопрос был в "разборе"! Мне не понятен принцип вычисления здесь.
если не понимаешь как ОНО работает то откуда уверенность что нашёл нужное?
да еще и приводишь процедуру а не прогу))
система ни разу не равна своему кусочку))
да еще и приводишь процедуру а не прогу))
система ни разу не равна своему кусочку))
Валентин Шопов
А что мне еще показывать, если больше ничего и нету. Или вам нужно форму показать?? Работает правильно, потому что тестил...
Похожие вопросы
- помогите переделать код программы с++
- помогите переделать код программы с++ пожалуйста
- Помогите изменить код программы(с++)
- Числа Фибоначчи.
- Помогите!!! Надо сделать прогу которая сможет найти 30 первых чисел фибоначчи которые кратны 3!!!
- помогите пожалуйста составить программу на Delphi/
- Помогите с кодом в Delphi, пожалуйста!
- Delphi, переводчик, помогите с кодом!!
- Помогите исправить ошибку в коде программы на паскале.
- Помогите пожалуйста с программой на DELPHI