Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal]Задача Создать множество из чисел Фибоначи, F(n)=F(n-1)+F(n-2), F(0)=0, F(1)=1 
:(
    Опции темы
Curator
  Дата 9.1.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.1.2007

Репутация: нет
Всего: нет



Паскаль.
Задача Создать множество из чисел Фибоначчи :
F(n)=F(n-1)+F(n-2), F(0)=0, F(1)=1 
Множество должно содержать 100 первых чисел последовательности.

Как говорится нид хелп.
Сказали сделать к пятнице, а я даже не знаю кто такой Фибоначчо(а) ))))
Помогите пожалуйста! 
PM MAIL   Вверх
Igor_St
Дата 9.1.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



Вот один из вариантов реализации данной задачи
 
Код

//кол-во элементов
const N=100;

var Mas:array of integer; // динамический массив для хранения чисел Фиббоначи
      i:integer;

begin

//инициализация массива
SetLength(Mas,N);

Mas[0]:=0;
Mas[1]:=1;

for i:=2 to N-1 do
 Mas[i]:=Mas[i-1]+Mas[i-2];

//очищение массива

SetLength(Mas,0);

end;



 smile  если будут вопросы - спрашивай
PM MAIL   Вверх
Romikgy
Дата 9.1.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



чет сомневаюсь чтобы на паскале были открытые массивы  smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Sunvas
Дата 9.1.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 7
Всего: 89



Цитата(Romikgy @  9.1.2007,  22:21 Найти цитируемый пост)
чет сомневаюсь чтобы на паскале были открытые массивы  

Они называются динамическими. Их надо увеличивать вручную.

Это сообщение отредактировал(а) Sunvas - 10.1.2007, 08:33


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Romikgy
Дата 9.1.2007, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



Цитата(Sunvas @  9.1.2007,  21:35 Найти цитируемый пост)
Их надо увеличивать вручную


Цитата(Igor_St @  9.1.2007,  20:34 Найти цитируемый пост)
SetLength(Mas,N);

smile
Цитата(Sunvas @  9.1.2007,  21:35 Найти цитируемый пост)
Они называются динамическими

а в паскале они есть?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Igor_St
Дата 9.1.2007, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



Честно сказать не помню есть ли в Паскале динамические массивы, но даже конекретно в условиях этой задачи можно сделать и статический, уж они в Паскале точно есть  smile 
PM MAIL   Вверх
Sunvas
Дата 10.1.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 7
Всего: 89



Цитата(Igor_St @  9.1.2007,  23:32 Найти цитируемый пост)
Честно сказать не помню есть ли в Паскале динамические массивы, но даже конекретно в условиях этой задачи можно сделать и статический, уж они в Паскале точно есть 

Цитата(Romikgy @  9.1.2007,  22:50 Найти цитируемый пост)
а в паскале они есть?

В Паскале их нет.. smile Вот сейчас проверил.
Просто все время Делфи, Делфи, Делфи. smile 



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Sunvas
Дата 10.1.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 7
Всего: 89



Хотя во FreePascal-e я уверен что такое дело есть.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Curator
Дата 10.1.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.1.2007

Репутация: нет
Всего: нет



Цитата(Igor_St @  9.1.2007,  21:34 Найти цитируемый пост)
Вот один из вариантов реализации данной задачи
 
Код

//кол-во элементов
const N=100;

var Mas:array of integer; // динамический массив для хранения чисел Фиббоначи
      i:integer;

begin

//инициализация массива
SetLength(Mas,N);

Mas[0]:=0;
Mas[1]:=1;

for i:=2 to N-1 do
 Mas[i]:=Mas[i-1]+Mas[i-2];

//очищение массива

SetLength(Mas,0);

end;



 smile  если будут вопросы - спрашивай
PS: %5BPascal]Задача Создать множество из чисел Фибоначи:F(n)=F(n-1)+F(n-2), F(0)=0, F(1)=1.

Прежде всего, хочу отблагодарить за помошь! Огромное спасибо!
Насчет вопросов - как все таки быть с динамическими массивами? Многие говорят, что их нет в паскале.
И еще одна просьба - в представленном коде есть вставки на русском языке (например "инициализация массива") Нижайше прошу представить эти части тоже в коде, т к сам я не бум бум в програмировании.
(В универе у нас програмирование идет "Общеобразовательным" предметом на ряду с философией.)


Это сообщение отредактировал(а) Curator - 10.1.2007, 09:52
PM MAIL   Вверх
Romikgy
Дата 10.1.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



Цитата(Curator @  10.1.2007,  08:51 Найти цитируемый пост)
в представленном коде есть вставки на русском языке (например "инициализация массива")

это комментарии , а не код! (т.е. что этот , ниже, код делает вообще)
Код

//кол-во элементов
const N=100;
var Mas:array [0..N-1] of integer; //массив для хранения чисел Фиббоначи
      i:integer;
begin
//инициализация массива

Mas[0]:=0;
Mas[1]:=1;
for i:=2 to N-1 do
 Mas[i]:=Mas[i-1]+Mas[i-2];

end;

воть вроде после выполнения этого кода , в массиве должны быть числа нужные тебе smile

Это сообщение отредактировал(а) Romikgy - 10.1.2007, 10:02


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Silent
Дата 11.1.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 6
Всего: 9



А кто-нибудь проверял то, что написал? В паскале уже на i=25, а в делфи на i=48 разрядности не хватает smile. Для таких ограничений (N=100) нужна длинная арифметика.
Я предлагаю такую вещь:
Код

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $10000000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const Base=10000;
      nmax=100000;
type Tlong=longint;
     TLongNumber=array [0..nmax] of Tlong;
     TMatr=array [0..1,0..1] of TLongNumber;

var a,x:TMatr;
    first:array [0..1] of TLongNumber;//(0,1);
    PopX:TMatr;//((0,1),(1,1));
    i:integer;
Function LongNum(x:Tlong):TLongNumber;
  var z:TLongNumber;
  begin
    FillChar(z,SizeOf(z),0);
    z[0]:=1;z[1]:=x;LongNum:=z;
  end;
Function Max(a,b:Tlong):Tlong; begin if a<b then Max:=b else Max:=a; end;
Procedure Prepare;
  begin
    first[0]:=LongNum(1);
    first[1]:=LongNum(1);
    PopX[0,0]:=LongNum(0);
    PopX[0,1]:=LongNum(1);
    PopX[1,0]:=LongNum(1);
    PopX[1,1]:=LongNum(1);
  end;
Function Add(a,b:TLongNumber):TLongNumber;
  var z:TLongNumber;
      i:integer;
  begin
    FillChar(z,SizeOf(z),0);
    for i:=1 to max(a[0],b[0]) do begin
      z[i+1]:=(a[i]+b[i])div Base;
      z[i]:=(a[i]+b[i])mod Base;
    end;
    z[0]:=max(a[0],b[0]);
    if z[z[0]+1]<>0 then inc(z[0]);
    Add:=z;
  end;
Function Mul(a,b:TLongNumber):TLongNumber;
  var z:TLongNumber;
      i,j:integer;
  begin
    FillChar(z,SizeOf(z),0);
    z[0]:=a[0];
    for i:=1 to a[0] do
      for j:=1 to b[0] do begin
        z[i+j-1]:=(a[i]*b[j]+z[i+j-1]);
        z[i+j]:=z[i+j]+(a[i]*b[j])div Base;
        z[i+j-1]:=z[i+j-1] mod Base;
        if z[i+j]<>0 then z[0]:=i+j;
      end;
    Mul:=z;
  end;
Function MulMatr(x,y:TMatr):TMatr;
  var z:TMatr;
  begin
    z[0][0]:=Add(Mul(y[0,0],x[0,0]),Mul(y[0,1],x[1,0]));//y[0][0]*x[0][0]+y[0][1]*x[1][0];
    z[0][1]:=Add(Mul(y[0,0],x[1,0]),Mul(y[0,1],x[1,1]));//y[0][0]*x[1][0]+y[0][1]*x[1][1];
    z[1][0]:=Add(Mul(y[1,0],x[0,0]),Mul(y[1,1],x[1,0]));//y[1][0]*x[0][0]+y[1][1]*x[1][0];
    z[1][1]:=Add(Mul(y[1,0],x[0,1]),Mul(y[1,1],x[1,1]));//y[1][0]*x[0][1]+y[1][1]*x[1][1];
    MulMatr:=z;
  end;
Function LongNumToString(x:TLongNumber):String;
  var i:integer;
      s,k:string;
  begin
    s:='';
    for i:=1 to x[0]-1 do begin
      k:='';
      while length(k+IntToStr(x[i]))<4 do k:=k+'0';
      s:=k+IntToStr(x[i])+s;
    end;
    s:=IntToStr(x[x[0]])+s;
    LongNumToString:=s;
  end;
Function Fib(n:integer):string;
  begin
    if n<2 then Fib:='1'
    else begin
      dec(n,2);
      a:=x;
      while (n<>0) do begin
        if n and 1 = 1 then a:=MulMatr(x,a);
        x:=MulMatr(x,x);
        n:=n shr 1;
      end;
      Fib:=LongNumToString(Add(Mul(a[1,0],first[0]),Mul(a[1,1],first[1])));
    end;
  end;
begin
Prepare;
x:=popX;
for i:=0 to 100 do begin
  x:=popX;
  Write(Fib(i),' ');
end;
readln;
end.

Хотя данный код - для вычисления N-го числа Фибоначчи (N - достаточно большое) БЕЗ получения предыдущих значений (F(N-1) и F(N-2)).
Код основан на такой вещи:
F(N)=A^N*First, где A - матрица 2х2 ((0,1),(1,1)) в степени N; First - матрица 2х1 (0,1) - первые два члена последовательности.


M
Alexeis
Модератор: выбирайте тип подсветки http://forum.vingrad.ru/index.php?showtopic=126445


Это сообщение отредактировал(а) Alexeis - 11.1.2007, 18:41
PM MAIL   Вверх
Romikgy
Дата 11.1.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



Воть 100% работает, считает до 255 знаков, конечно если до более чем 100 значений считать smile


Присоединённый файл ( Кол-во скачиваний: 31 )
Присоединённый файл  Finabochi.zip_ 30,58 Kb


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Igor_St
Дата 11.1.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



Идея конечно интересная что у одного и у второго...  
smile  а что если завести например какой нть файл прямого доступа, в котором будут храниться строки, ну конечно выбрать размер строки необходимый, а потом значения целых чисел хранить в этих строках, и написать одну небольшую функцию которая просто напросто будет уметь суммировать поразрядно информацию представленную в двух строках s1,s2, независимо от длины этих строк и результат помещать сразу в строку, то есть строки суммируются с конца  smile  мне кажется программа будет не сильно большой 
PM MAIL   Вверх
Romikgy
Дата 11.1.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



Igor_St, имхо в моем примере и суммируются строки smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Igor_St
Дата 12.1.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.9.2006

Репутация: нет
Всего: нет



да...  smile  ну тогда все круто, я просто не смотрел 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1094 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.