Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум по информатике

.pdf
Скачиваний:
253
Добавлен:
18.03.2015
Размер:
8.86 Mб
Скачать

Var a: Mas;

i,s: integer;

Begin

s:=0;

for i:=1 to 10 do begin

writeln('Введите элемент массива'); readln(a[i]);

if a[i] mod 2=0 then s:=s+a[i] {Проверка четности элемента и накопление суммы}

end; writeln('Сумма s=', s) End.

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

Пример 2. Задан массив из 6 целых чисел. Найти количество неотрицательных элементов массива.

PROGRAM Kol;

Var А: array[1..10] of integer; i, k: integer;

Begin k:=0;

for i:=1 to 10 do begin

writeln('Введите элемент массива'); readln(a[i]);

if A[i] >=0 then k:=k+1 {Проверка соответствия условию элемента и увеличение счетчика}

end;

writeln('Количество неотрицательных элементов к=', к)

for i:=1 to 6 do

write(A[i], ‗ ‗); {печать одномерного массива в строку, после каждого элемента печатается три пробела}

End.

7.1.3. Преобразование массивов путем замены и перестановки их элементов. Данную задачу можно представить себе так: есть стакан сока и кружка молока, нужно перелить молоко в стакан, а сок – в кружку. Решение данной задачи невозможно без наличия третьей емкости. Аналогично для выполнения преобразования замены-перестановки в массиве необходима дополнительная переменная. Следует также учитывать, что необходимо вывести на печать исходный и преобразованный массивы с соответствующими комментариями для наглядности результатов выполнения программы.

Пример 3. Преобразовать массив, поменяв местами первый и последний элемент исходного массива из 6 элементов.

PROGRAM Zamena;

Var А: array[1..10] of integer; i, c: integer;

Begin k:=0;

for i:=1 to 10 do begin

writeln('Введите элемент массива'); readln(a[i]);

end;

writeln('Исходный массив:'); for i:=1 to 6 do

write(A[i], ‗ ‗); {печать одномерного массива в строку, после каждого элемента печатается три пробела}

c:=a[1]; {дополнительной переменной с присваивается значение первого элемента массива}

a[1]:=a[6]; {значение первого элемента массива заменяется на значение 6-го элемента}

a[6]:=c; {шестому элементу массива присваивается значение 1- го элемента, сохраненное как переменная с}

for i:= 1 to 6 do write (a[i]:5); writeln('Преобразованный массив:');

for i:=1 to 6 do

write(A[i], ‗ ‗); {печать одномерного массива в строку, после каждого элемента печатается три пробела}

End.

7.1.4. Поиск данных в массивах. Поиск информации,

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

Пример 4. Поиск наибольшего элемента в массиве. Задан одномерный массив из 7 действительных элементов. Найти наибольший элемент данного массива.

PROGRAM Max_mas;

Type Mas=array[1..7] of real; Var a: Mas;

max : real; i: integer; Begin

for i:=1 to 7 do begin

writeln(‗Введите элемент а[‗,i,‘]‘); readln(a[i])

end;

max:=a[1];

for i:=2 to 7 do

if max<a[i] then max:=a[i]; writeln(‗max=‘, max)

End.

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

7.1.5. Сортировка одномерных массивов данных.

Сортировкой массива называют упорядочение его элементов в

соответствии с определенными правилами (как правило, по возрастанию или убыванию элементов).

Рассмотрим следующие алгоритмы сортировки массивов данных: линейная сортировка (сортировка отбором) и сортировка методом «пузырька».

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

Пример 5. Линейная сортировка массива по возрастанию. Известны результаты тестирования 9 учащихся. Расположить данные результаты в порядке возрастания баллов.

Программа реализации изложенного выше алгоритма линейной сортировки отбором может иметь следующий вид:

PROGRAM Sort;

TYPE M=array[1..9]of integer; Var a: M;

i,j,m, k, x: integer; Begin

For i:=1 to 9 do begin

writeln('Введите результаты ',i,'-го учащегося'); readln(a[i])

end;

{Для всех элементов массива, кроме последнего, сделать} for j:=1 to 8 do

begin

m := j; {Ищем минимальный элемент (в начале j-й) } for k:=j+1 to 9 do

if a[k]<a[m] then m:=k; { минимальный элемент - k-й}

x:=a[j];

{Обменять минимальный элемент с j-м}

a[j]:=a[m];

 

a[m]:=x

 

end;

writeln('Отсортированные по возрастанию результаты:'); for i:=1 to 9 do write (a[i],' ');

end.

Особенностью сортировки методом «пузырька» является не сравнение каждого элемента со всеми, а сравнение в парах соседних элементов. Данный алгоритм состоит в последовательных просмотрах от начала к концу элементов массива. Если для пары соседних элементов выполняется условие, что элемент справа больше элемента слева, то производится обмен значениями этих элементов, т.е. в процессе выполнения алгоритма постепенно «всплывают» более «легкие» элементы массива.

Фрагмент программы на Паскале выглядит так: for j:=n downto 2 do

{Сравнить все пары соседних элементов от первого до (j-1)-го} for k:=1 to j-1 do

if a[k]>a[k+1] then begin

x:=a[k];

{Обменять k-й элемент с (k+1)-м}

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

 

a[k+1]:=x

 

end;

 

7.2. Решение задач с использованием двумерных массивов

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

— изменение номеров столбцов.

Например, фрагмент ввода элементов двумерного массива А размерностью 5х6 выглядит так:

for i:=1 to 5 do for j:=1 to 6 do begin

writeln('Введите элемент массива');

readln(a[i,j]);

Для заполнения массива случайными числами необходимо воспользоваться процедурой Randomize и функцией Random (N). Функция random(n) служит для задания случайных целых чисел из диапазона 0 ≤ x ≤ n-1.

Например, для задания матрицы А размерности 5х7 необходимо использовать случайные числа из диапазона [-10,10], фрагмент программы будет выглядеть так:

for i:=1 to 5 do for j:=1 to 7 do

a[i,j]:=-10+random(21);

Вывод на экран двумерного массива осуществляется в виде таблицы. Например, печать элементов матрицы А размерности 3х4 должна осуществляться в три строки и четыре столбца:

for i:=1 to 3 do begin

for j:=1 to 4 do write (a[i, j]:5); writeln;

end;

7.2.1. Подсчет количества элементов матрицы, удовлетворяющих определенным условиям.

Пример 1. Найти количество положительных элементов в заданной целочисленной матрице размерности 5х6.

Возможное решение задачи:

PROGRAM Mas_count;

Type Matr=array[1..5,1..6] of integer; Var A: Matr; i, j, k: integer;

Begin k:=0;

for i:=1 to 5 do for j:=1 to 6 do begin

writeln('Введите элемент массива'); readln(a[i,j]);

if a[i,j]>0 then k:=k+1 {Подсчет количества положительных элементов}

end; writeln('k=', k) for i:=1 to 5 do begin

for j:=1 to 6 do write (a[i, j]:5); writeln;

end;

End.

7.2.2. Поиск наибольшего (наименьшего) элемента заданного столбца матрицы.

Пример 2. Найти наибольший элемент в первом столбце заданной действительной матрицы размерности 4х5.

Пример возможного решения задачи:

PROGRAM Mas_max;

Type Matr=array[1..4,1..5] of real; Var A: Matr; i, j: integer; max: real;

Begin

for i:=1 to 4 do for j:=1 to 5 do begin

writeln('Введите элемент массива'); readln(a[i,j])

end;

max:=a[1,1]; for i:=2 to 4 do

if a[i,1]>max then max:=a[i,1]; {Проверка элементов первого столбца}

writeln('max=', max) for i:=1 to 4 do begin

for j:=1 to 5 do write (a[i, j]:5); writeln;

end;

End.

{переход к следующей строке}

7.2.3. Вычисление среднего арифметического для каждой строки матрицы.

Пример 3. Известны экзаменационные оценки 10 студентов по 5 предметам. Вычислить средний балл каждого студента по итогам экзаменационной сессии.

При решении задачи используем матрицу размерности 10х5. Поставим в соответствие первому индексу матрицы порядковый номер студента в списке, а второму индексу — номер предмета, по которому получена оценка.

Матрицу оценок зададим с использованием функции генератора случайных чисел Random.

PROGRAM Obr_mas;

Type Mas=array[1..10,1..5] of byte; Var A: Mas; i,j: integer; s, sr:real; Begin

for i:= 1 to 10 do

for j:= 1 to 5 do A[i, j]:=2+random(4); {генерирование матрицы оценок}

writeln('Матрица оценок ');

for i:= 1 to 10 do {начало вывода матрицы оценок на экран}

begin

for j:= 1 to 5 do write(A[i,j]:3); {вывод в строку оценок i–го студента}

writeln

end;

writeln('Средний балл '); for i:= 1 to 10 do

begin

s:= 0;

for j:= 1 to 5 do S:= S + A[i,j]; {подсчет суммы оценок i–го

студента}

 

 

sr:=s/5;

{подсчет его среднего балла}

writeln(i,' студент - ',sr:4:2)

{вывод на экран результата}

end

End.

Контрольные вопросы

1. Что понимают под массивом данных?

2.Поясните понятия размерности массива, индекса элемента массива.

3.Какой массив называют одномерным? Приведите примеры одномерных массивов.

4.Как создать тип «массив» на языке Pascal?

5.Как осуществляется обращение к отдельному элементу одномерного массива?

6.Каким образом выводятся элементы массива на экран? Приведите пример вывода на экран одномерного массива из 8 действительных чисел.

7.Что понимают под сортировкой массива?

8.Какие методы сортировки массивов известны?

9.Какой массив называют двумерным?

10.Поясните понятие матрицы, размерности матрицы.

11.Какие матрицы называют квадратными?

12.Как описываются двумерные массивы на языке Pascal?

13.Как осуществить обращение к отдельному элементу двумерного массива?

14.Как можно организовать автоматическое заполнение элементов матрицы случайными числами? Приведите пример.

15.Приведите пример фрагмента программы, который выводит на экран двумерный массив в виде матрицы из N строк и M столбцов.

8. Требования к содержанию и оформлению отчета

Отчет к лабораторной работе предоставляется в печатном варианте и должен содержать:

название и цель работы; номер и условие своего варианта;

тексты разработанных программ (в печатном и электронном виде); полученные при расчетах результаты;

анализ полученных результатов; ответы на контрольные вопросы в соответствии с указаниями преподавателя.

9. Критерии результативности лабораторного практикума

Лабораторная работа считается выполненной, если:

задание к лабораторной работе выполнено в полном объеме; студент представил тексты программ и результаты их выполнения;

результаты выполнения программ соответствуют поставленным задачам;

при устном ответе на 2-3 контрольных вопроса по указанию преподавателя студент демонстрирует знание основных операторов и определений изученной темы и умение применить их при решении соответствующих задач; представленный отчет по лабораторной работе соответствует требованиям раздела 8.