Другие языки программирования и технологии

Вопрос про массивы в паскале

Насколько я помню, массивы задаются в блоках var или type. Можно ли задать массив из n-элементов, причем n вводится с клавиатуры readln'ом? var и type не могут стоять после begin, а readln до begin. Никак не получается сделать такой массив( Пытался так сделать: program name; function mas (n:integer); var a:array [1..n] of integer; end; begin readln (n); mas; readln; end. Всё равно не выходит. Помогите, пожалуйста.
"Можно ли задать массив из n-элементов, причем n вводится с клавиатуры readln'ом? "
Да. Легко. Это динамические массивы, они объявляются иначе. Однако в стандартном Pascal это все же нечто "присобаченное" его создателем.
Например,

type Tm=array[1..10000]of integer; var T:^Tm; K:word;
begin
readln(K); getmem(T,K*sizeof(integer));
...
freemem(T,K*sizeof(integer));
end.

При этом обращение к элементу массива будет T^[ i]
Размер 10000 тут - липовый, фактически массив будет состоять из K элементов и занимать соответственно памяти.
Maqsadbe Jobborov
Maqsadbe Jobborov
22 474
Лучший ответ
Дмитрий Иванченко ясно, спасибо, а заполнять его будем таким способом:
for i:=1 to K do begin
readln (T^);
end;
так?
И можете написать для чего служит getmem и freemem?
Дмитрий Иванченко блин, курсив врубился(
for j:=1 to K do begin
readln (T^[j]);
end;
А где Begin в функции. Он должен стоять после слова var bи обьявлять начало программы.
скажу как сам знаю. массив описывается в начале основной программы (не в функции) и нигде больше, при этом желательно знать заранее длину массива... длину массива нельзя ввести с клавиатуры, лучше описать массив максимальной возможной длины, а потом использовать нужное число элементов. описать массив можно разными способами... в разделе type задается тип, можно придумать свой тип. длину массива лучше задавать в разделе const, чтобы потом в программе по сто раз не менять значения, а только один раз.

например массив из целых чисел длины 50.

const n=10;
var a: array[1..n] of integer;

или массив записей

const n=20;
type rec=record
date,month,year:integer
end;
var a: array[1..n] of rec;

или если ты в функции или процедуре используешь какой-то массив, то полность описать его типом, а в описании функции или процедуры просто подставить название типа.

type mas=array[1..n,1..m] of real;
var a:mas;
....

function dfdk(t:mas):boolean;
...

вот так
MS
Maksut Suliyev
1 829
var a:array[1..10000{сюда вводите большое число, например, 10000}] of integer;
n:integer;
begin
writeln('Vvedite kol-vo elementov massiva');
readln(n);
{Дальнейший текст программы}