Консультация № 176878
24.02.2010, 00:46
0.00 руб.
0 1 1
Вычислить число Фибоначчи Fi по прочитанному из файла input.txt (число 3) целому неотрицательному индексу i. F0 = 0, F1 = 1, ..., Fi + 2 = Fi + Fi + 1. Определить границы i при условии использования в программе переменных целого типа, т.е. для short, int, long, unsigned long). Вывести значение числа Фибоначчи для индекса i на экран и записать в файл output.txt. Вывести на экран граничные значения индексов для типов int, long и unsigned long.

Обсуждение

Неизвестный
24.02.2010, 15:03
общий
это ответ
Здравствуйте, Ананьев Рудольф Олегович.
Программа для стандарта ANSI в приложении.

Приложение:
#include <stdio.h>
#include <math.h>

// функция расчёта максимального индекса. вход: количество бит числа, выход: максимальный индекс
unsigned int getMaxFibbonachi(int m)
{
double fi = 1.6180339887;
unsigned maxi = floor(log((pow(2.0, m) - 1)*sqrt(5.0))/log(fi));
return maxi;
}

int main()
{
unsigned long int i = 0;
unsigned long int Fi;
unsigned long int u, v, k;

FILE* in = fopen("input.txt", "r"); // открытие входного файла
if (in)
{
fscanf(in, "%u", &i);
fclose(in);
}
printf("Index: %u\n", i);
// вывод максимальных индексов (для знаковых чисел отнимаем один бит)
printf("Max index for int: %u\n", getMaxFibbonachi(sizeof(int)*8 - 1));
printf("Max index for long: %u\n", getMaxFibbonachi(sizeof(long)*8 - 1));
printf("Max index for unsigned long: %u\n", getMaxFibbonachi(sizeof(unsigned long)*8));

if (i <= getMaxFibbonachi(sizeof(i)*8))
{
// расчёт i-го числа Фиббоначи
Fi = 1;
u = 1;
v = 1;
for (k = 2; k < i; ++k)
{
u = Fi;
Fi = v;
v = u;
Fi = Fi + u;
}
// вывод рассчитанного значения
printf("F(%u) = %u\n", i, Fi);
FILE* out = fopen("output.txt", "w"); // открытие выходного файла
if (out != 0)
{
fprintf(out, "%u", Fi);
fclose(out);
}
}
return 0;
}
5
Форма ответа