Ввод и вывод массивов

Implementation

a: array[10] of integer = (0,0,0,0,0,0,0,0,0,0);

Team: array[1..4] of String[10]=

('Шахтёр','Динамо','Спартак', 'Зенит');

Обратите внимание, что количество элементов списка инициализации должно соответствовать размерности массива. Если это будет не так, то компилятор выведет сообщение об ошибке: Number of elements differs from declaration (количество элементов не соответствует указанному в объ­явлении).

При попытке инициализировать локальный массив, компилятор выводит сообщение об ошибке: Cannot initialize local variables (локальная пере­менная не может быть инициализирована).

Под вводом массива понимается процесс получения от пользователя (или из файла) во время работы программы значений элементов массива.

Для ввода и вывода одномерного массива можно использовать компоненты Memo или StringGrid. В следующем примере мы воспользуемся уже знакомым компонентом Memo.

Рассмотрим пример программы обработки массива, заданного неявно (блок-схема алгоритма приведена выше).

 

nom

 


Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)

procedure TForm1.Button_calcClick(Sender: TObject);

type mas=array[1..10] of real;

var

X,Y:mas;

Xn,Xk,dX, max:real;

i,N, nom:integer;

begin

 

Xn:=StrToFloat(Edit_Xn.Text);

Xk:=StrToFloat(Edit_Xk.Text);

dX:=StrToFloat(Edit_dX.Text);

N:=trunc((Xk-Xn+dx/2)/hX)+1;

for i:=1 to N do

begin

X[i]:=Xn+dX*(i-1);

if (cos(X[i]<>-1) then

 

Y[i]:=ln(abs(2+2*cos(X[i])))

Else

Y[i]:=0;

Memo_X.Lines.Add(FormatFloat('000.0',X[i]));

Memo_Y.Lines.Add(FormatFloat('000.0',Y[i]));

if (i=0) then

begin

max:=Y[i];

nom:=i

end

else

if (Y[i]>max) then

begin

max:=Y[i];

nom:=i

end;

end;

Edit_max.Text:=FloatToStr(max);

Edit_nom.Text:=IntToStr(nom);

End;

 

Рассмотрим этот же пример программы обработки массива, если он задан явно (блок-схема алгоритма приведена выше).

 

nom

 

 


Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)

procedure TForm1.Button_calcClick(Sender: TObject);

type mas=array[1..10] of real;

var

X,Y:mas;

Xn,Xk,dX, max:real;

i,N, nom:integer;

begin

 

N:=Memo_X.Lines.Count; // размерность X

 

for i:=1 to N do

begin

X[i]:= StrToFloat(Memo_X.Lines[i-1]);//ввод i-го элемента массива

if (cos(X[i]<>-1) then

 

Y[i]:=ln(abs(2+2*cos(X[i])))

Else

Y[i]:=0;

Memo_Y.Lines.Add(FormatFloat('000.0',Y[i]));

if (i=0) then

begin

max:=Y[i];

nom:=i

end

else

if (Y[i]>max) then

begin

max:=Y[i];

nom:=i

end;

end;

Edit_max.Text:=FloatToStr(max);

Edit_nom.Text:=IntToStr(nom);

End;