Помощь - Поиск - Пользователи - Календарь
Полная версия: на статическую память
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Liba
Помогите решить задачку пожалуйста!!!!!!!!!!!Очень надо плиз ;)

Условие задачи:
Создать в статической памяти однородный массив(word) статической длины,те. кол-во элементов вектора задается с помошью Readln(n).
Кол-во элементов может превышать потребный размер одного сигмента(65521 байт)
и может потребовать всю статическую память или большую ее часть(использовать адречацию сигментов,указатели должны разместиться в статической памяти).
С помошью средств Random(1000) постчитать и выдать на экран сумму элементов массива.Найти число Фибоначи
F0=F1=1
Fn=Fn-2+Fn-1
и создать список,индекс(INDEX),который содердит адреса чисел Фибоначи-это статической массив при первом проходе кол-во различных элементов=> массив этой длины и занести туда адреса этих чисел=>сумма всех чисел Фибоначи,которое встретились в этом массиве



Пожалуйста помогите............. :p2:
volvo
Не совсем понятно (а точнее - совсем не понятно) что именно здесь требуется, но рискну предположить следующее (это ТОЛЬКО определение массивов, не включая вторую часть задания):
type
 pArrType = ^arrType;
 arrType = array[1 .. 2 * maxint div sizeof(word)] of Word;
 pointType = array[1 .. 655360 div (2 * maxint)] of pArrType;

function min(a, b: longint): longint;
begin
 min := a;
 if b < a then min := b;
end;

var
 ptrs: PointType;

function get(ix: longint): word;
begin
 get := ptrs[ix div (2 * maxint)+1]^[ix mod (2 * maxint)+1]
end;

function put(ix: longint; x: word);
begin
 ptrs[ix div (2 * maxint)+1]^[ix mod (2 * maxint)+1] := x
end;

var
 size, sz: longint;
 i, j, summa: longint;
begin
 write('Введите размер массива: '); readln(size);
 if (size < 1) or (size > 655360) then exit; { error }

 { берем память из кучи }
 sz := size; i := 0;
 repeat
   inc(i);
   getmem(ptrs[i], min(sz, 2 * maxint));
   dec(sz, min(sz, 2 * maxint));
 until sz = 0;

 for j := 1 to size do
   put(j, random(1000));

 { считаем сумму элементов массива }
 summa := 0;
 for j := 1 to size do
   inc(summa, get(j));
 writeln('s = ', summa);

 { освобождаем память }
 sz := size; i := 0;
 repeat
   inc(i);
   freemem(ptrs[i], min(sz, 2 * maxint));
   dec(sz, min(sz, 2 * maxint));
 until sz = 0;

end.
Liba
Огромнейшее спасибо тебе за программку :flowers:
Спасибочки :D
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.