Вычисление индекса массива Delphi

Предыдущая123456789101112Следующая

Индекс массива в Delphi не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.

Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».

Пример программы с ошибкой массива Delphi

Program primer _ error ;
Type
vector=array [1..80] of word;
var
n: integer;
a: vector;
begin
n:=45;
a[n*2]:=25;
end .

Хотя данная программа полностью соответствует синтаксису языка, и транслятор «пропустит» ее, на стадии выполнения произойдет ошибка выхода за пределы массива Delphi. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80.

Будем считать, что хорошая программа должна выдавать предупреждающее сообщение в случае попытки обращения к несуществующим элементам массива. Не лишним будет проверять возможный выход как за правую, так и за левую границы массива, ведь не исключено, что в результате вычисления значения выражения получится число, находящееся левее границы массива Delphi.

Из всего этого следует сделать вывод: программисту надо быть очень аккуратным при работе с индексами массива.

Пример решения задачи с использованием массивов

Задача: даны два n -мерных вектора. Найти сумму этих векторов.

Решение задачи:

· Входными данными в этой задаче будут являться два одномерных массива. Размер этих массивов может быть произвольным, но определенным. Т.е. мы можем описать заведомо большой массив, а в программе определить, сколько элементов реально будет использоваться. Элементы этих массивов могут быть целочисленными. Тогда описание будет выглядеть следующим образом:

var a , b : array [1..100] of integer ;

· Выходными данными будут элементы результирующего массива, назовем его c . Тип результирующего массива также должен быть целочисленным.

· Кроме трех массивов нам потребуется переменная – параметр цикла и индекс массива, назовем ее i , а также переменная n для определения количества элементов в каждом массиве.

Ход решения задачи:

· определим количество элементов (размерность) массивов, введем значение n ;

· введем массив a ;

· введем массив b ;

· в цикле, перебирая значения индекса i от 1 до n , вычислим последовательно значения элементов массива c по формуле:



c [ i ]= a [ i ]+ b [ i ];

· выведем на экран полученный массив.

Текст программы :

Пример программы суммирования векторов

Program summa;

Var
a, b, c: array [1..100] of integer;
I, n: byte;
Begin
Write (‘введите размерность массивов:’);
Readln(n);
For i:=1 to n do
Readln (a[i]); { ввод массива a}
For i:=1 to n do
Readln (b[i]); { ввод массива b}
For i:=1 to n do
C[i]:=a[i]+b[i]; { вычисление суммы массивов }
For i:=1 to n do
write (c[i],’ ‘); { вывод массива с }
end.

Пример

Найти количество элементов одномерного массива, в которых хранится заданный символ, символ задается с клавиатуры.

program Project3;

const m=10;

type m1=array[1..m] of char;

var a:m1; I,s:integer; k:char;

begin

s:=0;

write('k=');

readln(k); // ввод значений массива a

for i:=1 to m do

begin

write('a[',i,']=');

readln(a[i]); // ввод значений массива a

if a[i]=k then s:=s+1; //сравнение символов

end;

write('s=',s); // вывод результата

readln;

end.

Пример 12.4. Найти количество соседних пар элементов массива, в которых хранится заданный символ.

program Project3;

const m=10;

type m1=array[1..m] of char;

var a:m1; i,s:integer; k:char;

begin

s:=0;

write('k=');

readln(k); // ввод искомого символа

for i:=1 to m-1 do

begin

write('a[',i,']=');

readln(a[i]); // ввод значений массива a

//сравнение символов

if (a[i]=k) and (a[i+1]=k) then s:=s+1;

end;

write('s=',s); // вывод результата

readln;

end.

Пример 12.4. Найти количество элементов массива, в которых хранятся заданные символы k1 и k2.

program Project3;

const m=10;

type m1=array[1..m] of char;

var a:m1; i,s1,s2:integer; k1,k2:char;

begin

s:=0;

write('k1=');

readln(k1); // ввод 1 искомого символа

write('k2=');

readln(k2); // ввод 2 искомого символа

for i:=1 to m-1 do

begin

write('a[',i,']=');

readln(a[i]); // ввод значений массива a

//сравнение символов

if a[i]=k1 then s1:=s1+1;

if a[i]=k2 then s2:=s2+1;

end;

writeln('s1=',s1); // вывод результата

writeln('s2=',s2); // вывод результата

readln;

end.


К заданию 2 (варианты 12-29)

Тип string (строка)


4759151548240759.html
4759177367421395.html
    PR.RU™