Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ массивы и желательно не очень размерные

Автор: Airon 16.02.2005 20:28

Люди, люди, человеки!!! расскожите как задовать массив [1..k].
тоесть с неопределённым верхним пределом??!

Автор: volvo 16.02.2005 20:34

Так что именно?

Цитата(Airon @ 16.02.05 15:28)
как задовать массив [1..k]

или все-таки с
Цитата(Airon @ 16.02.05 15:28)
неопределённым верхним пределом?


Это совершенно разные вещи. Массив [1 .. k] задается элементарно:
Код
const k = 10;
Var
 a: array[1 .. k] of integer;

А вот динамические массивы встроенными средствами Турбо Паскаля не создать... Хотя можно воспользоваться тем, что написано в ФАКе: http://forum.pascal.net.ru/index.php?showtopic=2694&view=findpost&p=26715

Автор: hiv 16.02.2005 20:36

Есть два способа:
1. TList - список;
2. M: array of integer; массив неопределенного размера
setlength(M,128) - установить (выделить памяти для массива) размер массива 128 элементов.

Автор: volvo 16.02.2005 20:39

hiv
Во избежании откликов типа "у меня не работает", все-таки надо бы уточнять, что

Цитата
2. M: array of integer; массив неопределенного размера
setlength(M,128) - установить (выделить памяти для массива) размер массива 128 элементов.

имеет место только в Delphi...

Автор: hiv 16.02.2005 20:43

Приношу свои извенения volvo!
Тогда остается только список.

Автор: Altair 16.02.2005 20:44

списков тоже нет в турбо паскале ...

Автор: Romtek 17.02.2005 16:26

Нет в стандартных средствах, но реализовать просто.

Смотрите FAQ

Автор: Altair 17.02.2005 20:52

Динамические массивы тоже не сложно реализовать ;) смотрите FAQ. smile.gif
Дело именно в наличии их как стандартных..

Автор: Digitalator 19.02.2005 0:05

Если длина массива изменяется относительно редко(или вообще не изменяется) и ненакладно при каждом изминении копировать весь массив, то целесообразно использовать такую конструкцию

Код

var i,size:byte;
type TMyArray=array [0..0] of ArrayType;
var  MyArray:^TMyArray;
begin
size:=5;
getmem(MyArray, size*sizeof(integer));

MyArray^[0]:=1;
MyArray^[size-1]:=2;
for i:=0 to size-1 do writeln(MyArray^[i]);
freemem(MyArray, size*sizeof(ArrayType) );
end.


недостаток - воизбежание ошибок неообходимо в качестве индекса массива брать только переменные.

Автор: volvo 19.02.2005 0:14

Ну хорошо, может еще кто-нибудь предложит этот же алгоритм? Я ссылки для красоты по-Вашему даю? Ходить по ним не пробовали никогда? Иногда это бывает полезно...

Автор: Digitalator 19.02.2005 0:34

Вы сцылку на фак имеете ввиду? право признюсь - дествительно фак никогда не читал за ненадобностью. Однако сейчас посмотрел, вот только кроме списков и афигенных модулей ничего там не заметил... я слепой?

Автор: Altair 19.02.2005 0:56

Цитата
кроме списков и афигенных модулей ничего там не заметил... я слепой?

да.

Автор: Digitalator 19.02.2005 21:04

Цитата(Oleg_Z @ 19.02.05 4:56)
да.


Если не трудно ткните носом smile.gif не вижу (наверно все-таки слепой) там ни одной конструкции хоть издали похожей на это:

Код

var i,size:byte;
type TMyArray=array [0..0] of ArrayType;
var  MyArray:^TMyArray;
begin
size:=5;
getmem(MyArray, size*sizeof(integer));

MyArray^[0]:=1;
MyArray^[size-1]:=2;
for i:=0 to size-1 do writeln(MyArray^[i]);
freemem(MyArray, size*sizeof(ArrayType) );
end.