- •Структурированный тип данных. Одномерные массивы.
- •Теоретические сведения Понятие массива в языке программирования PascalАвс
- •Ввод элементов одномерного массива с клавиатуры и вывод на экран
- •Задание элементов одномерного массива с помощью функции случайных чисел
- •Процедуры ввода и вывода элементов одномерного массива
- •Задания
- •Контрольные вопросы.
Процедуры ввода и вывода элементов одномерного массива
Поскольку в задачах с использованием массивов всегда нужно вводить элементы массива и выводить этот массив на экран, создадим процедуры ввода элементов массива и вывода на экран. Этими процедурами будем пользоваться во всех остальных программах.
Задача 4. Одномерный массив х, который содержит не более 40 вещественных чисел, задать с помощью функции случайных чисел. Найти максимальный по величине элемент и указать его номер в массиве.
Решение. Решение задачи разобьем на несколько частей:
1. Ввод элементов массива.
2. Вывод элементов массива на экран.
3. Нахождение максимального элемента и вывод его на экран.
Каждую из этих частей можно представить как процедуру пользователя. В основной программе нужно будет записать только обращение к этим процедурам в перечисленном порядке.
Максимальный элемент будем находить следующим образом:
1. Сначала за максимум примем первый элемент массива (зафиксируем это так: max:=a[первый]) и зафиксируем его номер в переменной nom:=1.
2. Затем каждый следующий элемент массива будем сравнивать с тем, который находится в ячейке max. Если элемент массива больше того элемента, который находится в ячейке max, то значение ячейки max меняем на значение большего элемента и значение ячейки nom также меняем на номер этого большего элемента.
3. После просмотра всех элементов массива в ячейке max будет находиться самый большой элемент, а в ячейке nom будет находиться его номер.
Блок-схемы изображаются отдельно для каждой части задачи.
Program a4;
{Раздел объявлений}
Type mas=Array[1..40] of Real;
{Процедура ввода элементов массива}
Procedure Wwod(k:Integer; Var c:mas);
{k – входной формальный параметр, который обозначает количество элементов в массиве, с – выходной формальный параметр, который обозначает массив}
Var i:Integer; {i – локальный параметр}
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Var i:Integer;
Begin
Writeln('Массив :');
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура поиска максимального элемента в массиве}
Procedure Poisk(k:Integer; c:mas);
Var i:Integer; max:Real;
Begin
max:=c[1]; nom:=1;
For i:=1 to k do If max<c[i] Then Begin max:=c[i];nom:=i;End;
Writeln('Максимальный элемент=',c[nom]:6:2,'его номер=',nom:3);
End;
{Основная программа }
Var a:mas;
n:Integer;
{a,n – фактические параметры}
Begin
Writeln(‘Ввести количество элементов массива’);
Readln( n );
Wwod(n,a);
Writeln(‘Исходный массив’);
Wuwod(n,a);
Poisk(n,a);
End.
Задача 5. Дан одномерный массив, который содержит не более 60 символов. Ответить на вопрос, какой символ встречается в данном массиве чаще других.
Решение. Решение задачи будет состоять из следующих частей:
1. Ввод элементов массива.
2. Вывод элементов массива на экран.
3. Подсчет, сколько раз встречается каждый символ в данном массиве и одновременно поиск максимального числа появлений элемента.
Для этого количество появлений элемента в массиве примем за p:=0.
Затем берем первый символ массива и подсчитываем сколько раз он встречается в массиве. Для этого заводим новый счетчик t:=0. В ячейку max отправим первый элемент массива и первый элемент будем сравнивать со всеми остальными элементами массива. Если находится одинаковый с ним символ, то счетчик t:=t+1. После просмотра всех элементов массива сравним p и t, если t>p, то p:=t и max:=c[1].
Теперь переходим ко второму элементу массива и проделываем те же операции со вторым элементом, что и с первым. Перебрав таким образом все элементы массива, получим, что в ячейке p находится максимальное число встреч того элемента, который находится в max..
Все части программы оформим в виде процедур пользователя.
Program a5;
Type mas=array[1..60] of Char;
Procedure Wwod(k:integer; Var c:mas);
Var i:Integer;
Begin
Writeln('Ввести символы массива в виде строки');
For i:=1 to k do Read(c[i]);
End;
Procedure Wiwod(k:Integer; c:mas);
Var i:Integer;
Begin
Writeln('Массив: а');
For i:=1 to k do Write(c[i]:3);
End;
Procedure Poisk(k:Integer; c:mas);
Var i,j,p,t:Integer; max:char;
Begin
p:=0;
For i:=1 to k do
Begin
t:=0;
For j:=1 to k do If c[i]=c[j] Then t:=t+1;
If t>p then begin p:=t; max:=c[i]; end;
end;
Writeln('Чаще других встречается символ--',max);
end;
{Основная программа}
Var n:Integer; a:mas;
Begin
Writeln('ВВести количество элементов');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив');
Wiwod(n,a);
Poisk(n,a);
End.
Задача 6. Дан массив целых чисел. Составить новый массив из простых чисел старого массива.
Решение. Как обычно разобьем решение задачи на следующие подзадачи:
1.Ввод элементов массива с использованием функции случайных чисел.
2.Вывод элементов массива на экран в строку.
3.Создание нового массива.
Для каждой части задачи создадим процедуру пользователя. Ввод и вывод элементов массива встречается в каждой задаче с небольшими изменениями, поэтому в этой задаче блок-схемы для этих частей не приводятся.
Разберем 3 часть задачи.
Сначала отметим, что в исходном массиве не все числа будут простыми. Если в исходном массиве n элементов, то в новом массиве элементов будет m<=n.Значит индексы элементов в новом массиве будут изменяться по-другому, не так как в старом массиве. Чтобы создать новый массив, необходимо просмотреть все элементы старого массива, т.е. организовать цикл For i:=1 to n do Begin ….. End; a[i] – это элемент старого массива стоящий на i-ом месте. Нужно определить, является ли этот элемент простым числом.
Число является простым, если оно имеет только два делителя 1 и само это число. Чтобы определить, является ли число простым, напишем специальную подпрограмму. В приведенном выше цикле каждое число a[i] будем отправлять в подпрограмму и из подпрограммы будем получать ответ, простое это число или нет.
Если число простое, то его нужно отправить в новый массив. Пусть индексы элементов нового массива будут j. Тогда перед циклом по I необходимо присвоить j:=0. Как только из подпрограммы придет сообщение, что число a[i] простое, индекс j:=j+1 и b[j]:=a[i]. Таким образом составится новый массив. В новом массиве будет j элементов. И этот новый массив необходимо вывести на экран, используя ту же процедуру вывода, что и для старого массива.
|
|
Program a6;
Type mas=array[1..50] of Integer;
Procedure wwod(k:Integer; Var c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=Random(100);
End;
Procedure Wiwod(k:Integer; c:mas);
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:4);
Writeln;
End;
Procedure Prost(y:Integer; Var x:Boolean);
Var z,d:Integer;
Begin
z:=0;
For d:=1 to y do If y mod d=0 Then z:=z+1;
If z=2 Then x:=True Else x:=False;
End;
Procedure Now(k:Integer; c:mas; Var j:Integer; Var q:mas);
Var i:Integer; t:boolean;
Begin
j:=0;
For i:=1 to k do
Begin
Prost(c[i],t);
If t=True Then begin j:=j+1; q[j]:=c[i]; end;
End;
End;
{Основная программа}
Var a,b:mas; n,m:Integer;
Begin
Writeln('Ввести количество элементов массива, т.е. размер массива');
Readln(n);
Wwod(n,a);
Writeln('Исходный массив');
Wiwod(n,a);
Now(n,a,m,b);
Writeln('Полученный массив');
Wiwod(m,b);
End.
