Нахождение максимального элемента массива
Задача 2.
Задан одномерный массив из N чисел. Найти максимальный элемент массива.
Решение:
Program Mass2;
Const X=100;
Var A:Array[1..10] of Integer;
I,N,Max:Integer;
Begin
Writeln(’Введите число элементов массива (N<=10)’);
Readln(N);
Randomize;
For I:=1 to N do A[I]:=Random(X);{заполнение массива случайными числами}
Max:=A[1];
For I:=1 to N do
If Max>A[I] Then A[I]:=Max;
For I:=1 to N do Writeln(’A[’,I,’]=’,A[I]);
Writeln(’Max=’,Max);
End.
Задачи:
1. Задан одномерный массив из N чисел. Найти минимальный элемент массива.
2. Задан одномерный массив из N чисел. Найти разницу между наибольшим и наименьшим элементами массива.
3. Задан одномерный массив из N чисел. Проверить, есть ли в массиве отрицательные элементы и если есть, то найти среди них наименьший.
Сортировка одномерного массива
Задача 3.
Задан одномерный массив из N чисел. Отсортировать все элементы массива по возрастанию.
Решение:
Program Mass3;
Var A:Array[1..10] of Integer;
I,P,N:Integer;
F:boolean;
Begin
Writeln(’Введите число элементов массива (N<=10)’);
Readln(N);
For I:=1 to N do Readln(A[I]);
F:=False;
While F=False do
Begin
F:=True;
For I:=1 to N-1 do
If A[I]>A[I+1] Then
Begin
P:=A[I];
A[I]:=A[I+1];
A[I+1]:=P;
F:=False;
End;
End;
For I:=1 to N do Writeln(’A[’,I,’]=’,A[I]);
End.
Задачи:
1. Задан одномерный массив из N строк, имеющих вид фамилий. Отсортировать все элементы массива по алфавиту.
2. В массиве каждый элемент равен 0, 1 или 2. Переставить элементы массива так, чтобы вначале массива расположились все нули, затем все единицы и, наконец все двойки.
3. Задан одномерный массив из N чисел. Переставить элементы массива так, чтобы отрицательные элементы предшествовали всем неотрицательным.
4. Задан одномерный массив из N чисел и число В. Упорядочить массив по возрастанию и поместить переменную В в соответствующее место массива.
Решение задач, используя одномерные массивы.
1. Задан одномерный массив из N чисел. Составить новый массив, состоящий из тех же чисел, но идущий в обратном порядке.
2. Задан одномерный массив из N чисел и число К. Напечатать «Да», если К совпадает хотя бы с одним из элементов массива и «Нет» в противном случае.
3. Задан одномерный массив из N чисел. Найти количество элементов массива, больших среднего арифметического всех его элементов.
4. Задан одномерный массив из N чисел Определить в массиве число соседств из двух чисел одного знака.
5. Задан одномерный массив из N чисел Найти сумму произведений всех троек соседних чисел.
6. Задан одномерный массив из N чисел. Подсчитать наибольшее число одинаковых элементов, идущих в массиве подряд.
7. Задан одномерный массив из N чисел. Заменить все элементы массива на сумму предыдущего и последующего их значений.
8. Задан одномерный массив из N чисел. Подсчитать количество неповторяющихся элементов массива.
9. Задан одномерный массив из N чисел. Составить массив У, где Y[I]:=Min(X[1],X[2],…,X[N]).
Двумерные массивы
Рассмотрим работу с двумерными массивами (в алгебре они называются матрицами):
Дадим таблице имя - Tab
-1 | ||||
Каждое число в таблице имеет тип Integer. Это - тип злементов (M).
Индексы данной таблицы изменяются от 1 до 8 . У двумерных массивов два списка (B1,B2).
Таким образом, описание этого массива (в разделе Var) выглядит так : Tab:Array[1..3,1..4] of Integer;
Задав конкретные значения индексов, можно выбрать определенный элемент массива. Например оператор:
N:=A[1,3];
Присвоит переменной N значение элемента массива, имеющего индекс строки 1, индекс столбца 3, т.е. число 15.
Задача 4.
Задан массив из целых чисел, размерностьюN*M (N-строки, M-столбцы). Вывести на экран:
а) N-ю строку; б) M-й столбец; в) весь массив.
Решение:
Program Mass4;
Var Tab:Array[1..10,1..10] of Integer;
N,M,X,Y:Integer;
Begin
Writeln(’Введите количество строк массива (N<=10)’);
Readln(N);
Writeln(’Введите количество столбцов массива (M<=10)’);
Readln(M);
For X:=1 to N do
For Y:=1 to M do Readln(Tab[X,Y]);
Writeln(’Вывод ’,N,’ строки’);
For X:=1 to M do Write(’Tab[’,N,’,’,X,’]=’,Tab[N,X],’ ’:2);
Writeln;
Writeln(’Вывод ’,M,’ столбца’);
For X:=1 to N do Writeln(’Tab[’,X,’,’,M,’]=’,Tab[X,M]);
Writeln(’Вывод массива’);
For X:=1 to N do
Begin
For Y:=1 to M do Write(’Tab[’,X,’,’,Y,’]=’,Tab[X,Y],’ ’:2);
Writeln;
End;
Задача 5.
Задан массив из строк, размерностьюN*M (N-строки, M-столбцы). Отсортировать все элементы массива по возрастанию.
Решение:
Program Mass5;
Var A:Array[1..10,1..10] of String;
I,N,M,X,Y:Integer;
P:String;
F:boolean;
Begin
{Ввести двумерный массив}
F:=False;
While F=False do
Begin
F:=True;
For X:=1 to N do
For Y:=1 to M-1 do
Begin
If A[X,Y]>A[X,Y+1] Then
Begin
{Поменять местами 2 соседних элемента строки}
End;
If (X<N)and(Y=(M-1))and(A[X,Y+1]>A[X+1,1])Then
Begin
P:=A[X,Y+1];
A[X,Y+1]:=A[X+1,1];
A[X+1,1]:=P;
F:=False;
End;
End;
End;
{Вывести отсортированный массив}
End.
Подпрограммы.
При решении многих задач возникает необходимость проведения одних и тех же вычислений на различных этапах решения задачи и при различных значениях исходных данных.
1. T1 2.
РР РР
Т2
Т1
РР Т2
Т3 Т3
Т4
РР
Т4
При составлении программы по первому алгоритму приходится задавать одну и ту же группу операторов (РР) для каждого из повторяющихся фрагментов.
Для сокращения текста программы в Паскале введено понятие подпрограммы, при этом повторяющаяся группа операторов записывается отдельно (второй алгоритм) один раз по отношению к некоторым формальным параметрам, а в соответствующих местах программы помещается лишь обращение к подпрограмме с указанием нужных в данный момент фактических параметров.
Использование подпрограмм позволяет применять принципы структурного программирования, когда исходная задача разбивается на группы простых подзадач, каждая подзадача программируется отдельно, а программа исходной задачи составляется только из обращений к программам подзадач. Кроме того, использование подзадач позволяет вводить в новую программу, программы составленные ранее.
В Паскале подпрограммы реализуются 2-х видов - процедуры и функции. И те, и другие вводятся в программу с помощью описания. Для этого существует специальный раздел программы
Описание процедур
Структура описания процедур аналогична самой программе. Она состоит из заголовка процедуры и блока процедуры. Блок процедуры включает в себя те же 6 разделов, что и блок программы.
Заголовок процедуры:
Procedure Xxx[(P1:T1;P2:T2;…Pn:Tm)];
Xxx - имя процедуры (любой идентификатор);
P1,P2,…,Pn - формальные параметры;
T1,T2,…,Tm – типы формальных параметров
Формальные параметры – это перечень имен для обозначения исходных данных и результатов работы процедуры. Формальные параметры нужны для того, чтобы указать, куда должны быть подставлены фактические параметры при обращении к процедуре. Формальные параметры в программе не описываются.
Формальные параметры могут отсутствовать и, в этом случае, процедура описывается без параметров.
Обращение к процедуре:
Чтобы исполнить процедуру, в нужном месте программы записывается оператор обращения к ней, который имеет вид:
Xxx[(B1,B2,…,Bn)];
B1,B2,…,Bn – список фактических параметров. Он отсутствует, если процедура описывалась без параметров.
При вызове процедуры устанавливается взаимное однозначное соответствие между фактическими и формальными параметрами, а затем управление передается процедуре.
Соответствие между фактическими и формальными параметрами:
1. Число фактических параметров должно быть равно числу формальных параметров;
2. Соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.