Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с одномерными массивами

Поиск

Пример 5.5 Составить программу сложения двух векторов.

Вектор в программе может быть представлен в виде одномерного массива. Пусть заданы два одномерных массива а и b, состоящие из n элементов. В результате сложения двух векторов получается массив такого же размера, каждый элемент которого равен сi = аi + bi. В программе должны быть организованы циклы для ввода одномерного массива а, для ввода одномерного массива b, для расчета каждого элемента результирующего массива с и для вывода результата расчета.

program slogen; {Сложение 2-х одномерных массивов}

uses crt;

const n = 10;

Var

i,sum: integer;

a,b,c: array [ 1.. n ] of integer;

Begin

clrscr;

gotoxy(3,1);

write('Введите массив а');

for i:= 1 to n do {Ввод массива аi}

Begin

gotoxy(1+5*i,2);

readln(a[i])

end;

gotoxy(3,3);

write('Введите массив b');

for i:= 1 to n do {Ввод массива bi}

Begin

gotoxy(1+5*i,4);

readln(b [i])

end;

for i:= 1 to n do c[i]:= a[i] + b[i]; {Расчет элементов массива сi}

gotoxy(3,9);

writeln('Суммарный вектор');

for i:= 1 to n do {Вывод массива сi}

Begin

gotoxy(1+5*i,10);

write(c[i])

End

End.

Одномерные массивы а, b, с описаны в разделе описания переменных. Для обращения к каждому элементу массива использовался оператор цикла с параметром i, где i - пробегает все значения от 1 до n, определяя тем самым каждый элемент массива. Процедуры clrscr и gotoxy (i,k) описаны, модуле crt, поэтому за заголовком программы следует uses - фраза. Clrscr -процедура гашения экрана. Процедураgotoxy (i,k) перемещает курсор в i-тую позицию k-той строки экрана. Параметры процедуры, i и k- величины типа integer. В этой программе процедура gotoxy (i,k) используется для наглядного ввода и вывода массивов. Элементы массива а и b: а[1], а[2], а[3], а[4],..., а[-0] и b[1], b[2], b[3], b[4],..., b[10], вводятся в позициях 6, 11, 16, 21,..., 51 строк 2 и 3 соответственно. Результат - массив с - выводится в позициях 6, 11, 16, 21,..., 51 строки 10.

Пример 5.6 Составить программу подсчета суммы только тех элементов массива, целая часть которых - нечетная. Ввод и обработка элементов массива производится в одном цикле. Функция trunc (a[ i ]) - выделяют целую часть каждого элемента. Функция odd - вырабатывает значение TRUE - если целая часть элемента массива - нечетное число, и этот элемент попадает в сумму. Оператор writeln (odd (trunc(x)) - выдает на печать: TRUE - если x - нечетное; FALSE - если x - четное.

Program sum;

coust n=100;

var a: array [1..n] of real;

s: real;

n, k, i: integer;

Begin

s: =0; writeln ('введите n 100'); readln (nk);

for i:=1 to nk do

Begin

writeln ('введ.', i, '- й элемент массива');

readln (a[ i ]);

if odd (trunc (a[ i ]) then s: = s + a[ i ];

end;

writeln ('Сумма нечетных элементов = ', s);

End.

 

Пример 5.7 Определить, содержит ли заданный массив число, равное s.

Необходимо разработать программу, которая обеспечит ввод с клавиатуры десяти чисел и сохранит их в некотором одномерном массиве. Затем программа должна запросить у пользователя ввод еще одного числа. После ввода данного числа программа осуществит проверку элементов массива на наличие в них числа, равного введенному, и, если такое есть, выдаст соответствующее сообщение на экран. То есть пользователь получит информацию о том, содержится ли последнее введенное число в массиве.

program poisk; {Последовательный поискв массиве}

const n = 10;

var i,s,r: integer;

a: array [ 1.. n ] of integer;

Begin

for i:= 1 to n do {Ввод одномерного массива а}

Begin

write('Введите ',i,'-й элемент массива ');

readln(a [i])

end;

write(‘Введите число для поиска');

readln(s);

for i:= 1 to n do

Begin

if a[i] = s then

Begin

r:= r + 1;

writeln('Обнаружено ',r,'-e вхождение числа ',s,' в массив а в позиции ',i);

end;

end;

if r <>0 then writeln('Число ',s,' встречается в массиве а ',r,' раз')

Else writeln('Число ',s,' не встречается в массиве а’)

End.

Перед оператором ввода readln(a[i]) выполняется оператор вывода writeln('Введите ',i,'-й элемент массива '), который представляет собой подсказку для пользователя при вводе исходной информации. При i = 1 на экране высветится:

Введите 1-й элемент массива

маркер остановится в конце выведенной строки, ЭВМ приостановит выполнение программы до момента ввода пользователем численной информации.

При i = 2 на экране высветится информация:

Введите 2-й элемент массива

и так далее до конца выполнения цикла.

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

Присвоим переменным min и max значение первого элемента и далее будем перебирать все элементы последовательности от 2 до n, сравнивая аi с max и с min. Если аi окажется больше, чем max, то max присваивается значение аi. Если аi окажется меньше, чем min, то min присваивается значение аi. По окончании цикла max примет значение наибольшего элемента последовательности, a min - наименьшего.

program minmax; {Поиск миним. и максим. элемента}

const n = 10;

Tyре

list= 1..n;

Vаг

i: list;

min, max: integer;

a: array [list] of integer;

Begin

for i:= 1 to n do

Begin

write('Введите ',i,'-й элемент массива ');

readln(a [i])

end;

min:= a[1]; max:= min;

for i:= 2 to n do

Begin

if a[i] > max then max:= a[i];

if a[i] < min then min:= a[i];

end;

write ('Максимальный элемент = ', max, ' Минимальный элемент = ',min)

End.

В программе показано, что заданная в разделе описания типов переменная list может быть использована в качестве граничной пары в описании массива.

Пример 5.9 Все члены последовательности х из 10 элементов сдвинуть на одну позицию вправо.

Каждому последующему элементу хi присваивается значение предыду­щего хi-1. Для хi такого значения не существует, следовательно, х1 = 0.

program sdvig; {Сдвиг массива на одну позицию вправо}

const n = 10;

Type

mass = array [1.. n] of integer; {Определение массивового типа}

Var

i: integer;

x: mass;

Begin

for i:= 1 to n do

Begin

write('Введите ',i,'-й элемент массива ');

readln(x[i])

end;

for i:= n downto 2 do x[i]:= x[i-1]; x[1]:= 0;

writeln('Результат');

for i:= 1 to n do write(x[i]:4);

End.

В программе определен новый тип данных - массивовый, состоящий из десяти компонент целого типа.

Пример 5.10 Даны три массива:a(n), b(m), c(k). Массив a(n)- упорядочен, a[i]<a[i+1]. Из a(n) - удалить m элементов с номерами, хранящимися в b(m),(m<n). Затем в массив a(n) - вставить k элементов, не нарушая упорядоченности из массива c(k). n-m+k 100

Program prim;

label 3;

Type

mas = array [1..100] of integer;

Var

a, b, c: mas;

i, j, p, n, m, k:integer;

Begin

write(' введите n, m, k'); readln(n, m, k);

writeln ('введите массив a);

for i:=1 to n do readln (a[i]);

writeln ('введите массив b');

for i:=1 to m do readln (b[i]);

writeln ('введите массив c');

for i:=1 to k do readln (c[i]);

{ удаление элементов из a }

for i=:1to m do

Begin

for i:=b[i] to n-1 do a[i]:=a[i+1];

n:=n-1;

end;

{ вставка элементов в a }

for j:=1 to k do

Begin

if c[j]>=a[n] then {если c[j] - наибольший - его ставим в конец массива.}

Begin

a[n+1]:=c[j]; n:=n+1;

end;

Else

for i:=1 to n do

if a[i]>c[j] then

Begin

for p: =n down to i do

a[p+1]:=a[p];

a[i]:=c[j];

n:=n+1; go to 3;

end;

3: end;

for i:=1 to n do

writeln (a[i]);

End.

 

Пример 5.11 Составить программу упорядочивания элементов массива х, состоящего из nd элементов, расположив их в порядке возрастания в том же массиве.

1) Упорядочивание элементов массива по возрастанию можно выполнить, используя прием нахождения наименьшего элемента. В исходной последовательности найдем наименьший элемент и запомним его порядковый не мер к. Элемент хi поменяем местами с элементом хk. После этого наименьший элемент окажется на первом месте. Такую же процедуру необходимо проделать с оставшимися элементами от 2 до nd. В этом случае наименьший элемент xk нужно поменять местами со вторым элементом. На втором месте окажется второй по величине элемент. Процедуру поиска наименьшего элемента нужно повторить nd-1 раз. Последний элемент сам с собой можно не сравнивать. В алгоритм поиска минимального элемента вводим блок для запоминания порядкового номера этого элемента. Такой метод упорядочивания элементов массива называют методом перестановок.

program perestan; {Упорядочивание элементов массива методом перестановок}

const nmax = 100;

Type

mass = array [1.. nmax] of real;

Var

i, j, k, nd: integer;

xmin: real;

x: mass;

Begin

read(nd);

for i:= 1 to nd do

Begin

write(' Введите ',i,'-й элемент массива ');

readln(x[i])

end;

for i:= 1 to nd - 1 do

Begin

xmin:= x[i]; k:= i;

for j:= i+1 to nd do

if x[j] < xmin then

Begin

xmin:= x[j];

k:=j

end;

x[k]:= x[i];

x[i]:= xmin

end;

for i:= 1 to nd do

write(x[i]:8:2)

End.

B программе под мас­сив x отводится 100 ячеек памяти. Очевидно, что пере­менная nd не может быть больше 100. Хорошо было бы дополнить программу про­веркой nd при вводе. Если введено значение nd боль­шее 100, дать соответству­ющее сообщение и вернуть­ся на начало ввода.

Пример 5.12 Составить программу упорядочивания элементов массива x, со­стоящего из nd элементов, расположив их в порядке возрастания в том же мас­сиве. Использовать пузырь­ковый метод.

Сортировка множества данных является одной из центральных проблем обра­ботки данных. Задачу упоря­дочивания элементов мас­сива можно решать разными способами. Пузырьковый ме­тод заключается в том, что последовательно сравнива­ются между собой два со­седних элемента и меняют­ся местами, если xj-1 > xj.

program puzirok;

{Упорядочивание элементов массива методом сравнения двух соседних элементов}

const nmax =100;

Type

mass = array [1.. nmax] of real;

var i, j, nd: integer;

у: real;

x: mass;

Begin

read(nd);

for i:= 1 to nd do

Begin

write('Введите ',i,'-й элемент массива ');

readln(x[i])

end;

for i:= 2 to nd do

Begin

for j:= nd downto i do

if x[j - 1] > x[j] then

Begin

у:= x[j - 1];

x[j - 1]:= x[j];

x[j]:= у

end;

end;

for i:= 1 to nd do

write(x[i]:8:2)

End.

При каждом значении i наименьший элемент перемещается к i - 1 позиции в массиве.



Поделиться:


Последнее изменение этой страницы: 2017-02-17; просмотров: 273; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.231.128 (0.008 с.)