Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_7_(одномерные массивы).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Процедуры ввода и вывода элементов одномерного массива

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

Задача 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.