78186

Разработка программ обработки одномерных массивов

Лабораторная работа

Информатика, кибернетика и программирование

В качестве элементов массива можно использовать и любой другой ранее описанный тип поэтому вполне правомерно существование массивов записей массивов указателей массивов строк массивов и т. Элементами массива могут быть данные любого типа включая структурированные. Тип элементов массива называется базовым. Особенностью языка Паскаль является то что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.

Русский

2015-02-07

80.5 KB

21 чел.

Тема: Разработка программ обработки одномерных массивов

Цель работы: сформировать навыки и умения обработки структурированных типов данных, организованных в виде некоторой линейной последовательности.

Время выполнения: 2 часа

Лабораторная работа №5

Порядок выполнения работы:

  1.  Изучить теоретические  сведения.
  2.  Выполнить программы Primer1, Find_Elem и Max_Elem.
  3.  Получить индивидуальное задание  у преподавателя и разработать программу в соответствии с поставленной задачей.
  4.  Отлаженную, работающую программу сдать преподавателю. Работу программы показать с помощью самостоятельно разработанных тестов.

Теоретические сведения

Массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.

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

Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание: array of (массив из).

Формат записи массивов:

Type <имя типа> = array [тип индекса] of  <тип компонента>;

Var <идентификатор,..> : <имя типа>;

Массив может быть описан и без представления типа в разделе описания типов данных:

Var <идентификатор,...> : array [тип индекса] of  <тип компонента>;

Примеры описания одномерных массивов

Если в описании массива задан один индекс, массив называется одномерным, если два индекса - двумерным, если n индексов — n-мерным массивом. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный - понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.

Одномерные массивы обычно используются для представления векторов, а двумерные- для представления матриц.

Одномерные массивы:

Type

Klass = (К1, К2, КЗ, К4) ;

Znak = array [1..255] of char;

Var 

Ml: Znak;          {Тип Znak предварительно описан в разделе типов}

М2: array[1..60] of integer;          {Прямое описание массива М2}

МЗ: array[1..4] of Klass;

Mas: array[1..4] of integer;

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

Элементы массива располагаются в памяти последовательно. Элементы с меньшими значениями индекса хранятся в более низких адресах памяти. 

Контроль правильности значений индексов массива может проводиться с помощью директивы компилятора R. По умолчанию директива R находится в пассивном состоянии {$R-}. Перевод в активное состояние вызывает проверку всех индексных выражений на соответствие их значений диапазону типа индекса.

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

Действия над массивами

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

Например, если массивы А и В описаны как

Var

А, В : array[1..20] of real;

то применение к ним допустимых операций даст следующий результат:

Выражение   Результат

А=В True, если значение каждого элемента массива А равно соответствующему значению элемента массива В

А<>В True, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В

А:=В   Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны.

Действия над элементами массива

После объявления массива каждый его элемент можно обработать, указав идентификатор (имя) массива и индекс элемента в квадратных скобках. Например, запись Mas[2], Vector[10] позволяет обратиться ко 2-му элементу массива Mas и 10-му элементу массива Vector.

Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах for, while, repeat, входить в качестве параметров в операторы Read, Readin, Write, Writeln; им можно присваивать любые значения, соответствующие их типу.

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

Var  A,D     : array[l..4] of real;

I, J, К : integer;

S : real;

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

Инициализация элементов одномерного массива А:

for I := 1 to 4 do

A[I] := 0;

Ввод-вывод элементов массива

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания, как показано в примере инициализации, однако чаще всего они вводятся с экрана с помощью оператора Read или Readln с использованием оператора организации цикла for:

Ввод элементов одномерного массива А:

for I:=l to 4 do Readln(A[I]) ;

Аналогично значения двумерного массива вводятся с помощью вложенного оператора for:

В связи с тем, что использовался оператор Readln, каждое значение будет вводиться с новой строки. Можно ввести и значения отдельных элементов, а не всего массива. Так, операторами:

Read(A[3]);  

вводится значение 3-го элемента вектора А.

Вывод значений элементов массива выполняется аналогичным образом, но используются операторы Write или Writeln:

Вывод элементов одномерного массива А:

for I := I to 4 do Writeln (A[I]);

Копированием массивов называется присваивание значений всех элементов одного массива всем соответствующим элементам другого массива. Копирование можно выполнить одним оператором присваивания, например А:=D; или с помощью оператора for:

for I := 1 to 4 do A[I] := D[I];

В обоих случаях значение элементов массива D не изменяется, а значения элементов массива А становятся равными значениям соответствующих элементов массива D.

Иногда требуется осуществить поиск в массиве каких-либо элементов, удовлетворяющих некоторым известным условиям. Пусть, например, надо выяснить, сколько элементов массива А имеют нулевое значение.

К := 0;

for I := 1 to 4 do

if A[I] = 0 then К := К + 1;

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

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

Например, так запишется фрагмент программы, обменивающий значения 1-го и 5-го элементов массива А:

Vs:= A[5]; {Vs - вспомогательная переменная}

А[5]:= А[1];

А[1]:= Vs;

Пример программы ввода-вывода одномерного массива

program primer1;

uses crt;

var mas:array [1..10] of integer;  {Описание одномерного массива с именем mas, состоящего из 10 элементов типа integer}

n,i:integer;   {n-количество элементов массива, i-счетчик в цикле for}

BEGIN

clrscr;

writeln('Введите количество элементов массива не больше 10: ');

readln(n);

for i:=1 to n do   {ввод элементов массива}

begin

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

readln(mas[i]);

end;   {конец ввода}

writeln('Введенный массив: ');

for i:=1 to n do  {вывод элементов массива}

write(' ',mas[i],' ');

readkey; {конец вывода}

END.

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

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

В разделе описания констант укажем значение константы Count=10. В программе значение этой константы определяет количество элементов массива. Употребление константы в описании размеров массива предпочтительнее, так как в случае изменения размеров массива не нужно будет вносить изменения во весь текст программы, а достаточно только один раз указать в разделе описания констант новое значение константы Count. Тогда раздел описания констант и переменных в программе будет таким: Сonst Count=10;

В связи с этим описание массива зададим так: М : array [1..Count] of Byte;

Введем переменные целого типа: N - значение искомого элемента; А - номер первого элемента массива, значение которого равно N; В - количество таких элементов в массиве; I - переменная, выполняющая функции параметра цикла и одновременно служащая указателем номера очередного элемента массива.

В связи с тем, что ни один подходящий элемент еще не найден, присвоим переменным A и В значение 0. Затем выведем на экран приглашение на ввод значения искомого элемента считаем это значение с клавиатуры. На Паскале это запишется следующим образом:

Write('Введите значение элемента массива для поиска : ');

Readln(N) ;

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

Оператор if M[I] = N then …выполняет сравнение значения очередного элемента массива с заданным значением N. Если условие М[I] = N выполняется, то счетчик числа найденных элементов В увеличивается на единицу. Так как требуется найти номер первого элемента, т. е. при первом выполнении условия М[I] = N запомнить номер данного элемента, то можно записать: if В = 0 then А := I.

Тогда блок поиска нужного элемента можно записать так:

for I := 1 to Count do

if M[I] = N then

begin

if В =0 then A := I;

В:= В+1;

end;

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

if B=0 then 

writeln('Нет таких элементов в массиве')

else

begin   

Writeln('Количество элементов массива, имеющих значение ',N,'  - ', B) ,

Writeln('Первый элемент, совпадающий с заданным ' , А) ;

end ;

Текст программы

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

Сonst Count =10;

Var М : array [1..Count] of byte;

N, A, B, I : Byte;

Begin    {Основная программа}

for I:=1 to Count do   {ввод элементов массива}

begin

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

readln(M[I]);

end;   {конец ввода}

writeln('Введенный массив: ');

for I:=1 to Count do  {вывод элементов массива}

begin

write(' ',M[I],' ');

end;    {конец вывода}

Writeln;

A := 0;   {Нет элемента с таким значением}

В := 0;   {Пока не найдено ни одного элемента}

Write('Введите значение элемента массива для поиска: ');

Readln(N) ;

for I := 1 to Count do  {Поиск элемента, значение которого =N}

if M[I] == N then

begin   

if В = 0 then A := I;{Запомнить номер первого элемента, равного N}  

В:= В + 1;        {Увеличить число найденных элементов на 1}

end;

if B=0 then 

Writeln('Нет таких элементов в массиве')

else 

begin 

Writeln('Количество элементов массива, имеющих значение ',N,' - ',B),

Writeln('Первый элемент, совпадающий с заданным - ', А) ;

end;

end.

Пример программы нахождения в одномерном массиве максимального элемента

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

В разделе описания запишем размер массива Count=20, опишем массив целых чисел М следующим образом: М : array [I..Count] of byte . Используем целые переменные для хранения значений максимального элемента массива - Мах, его индекса - Numer_Max.

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

Это запишется так:

Мах:= М[1];            {Считать 1-й,элемент максимальным}

Numer_Max:=1;      {Запомнить номер максимального элемента}

Повторяющийся просмотр массива с поиском максимального элемента, начиная со второго, выполняется оператором повтора с параметром, который одновременно указывает индекс очередного элемента. Сравнение очередного элемента массива с максимальным осуществляется оператором: If M[I] > Max then…

Если очередной элемент массива больше, чем максимальный, то следует считать его значение максимальным и запомнить его индекс.

Данный фрагмент программы запишется таким образом:

for I := 2 to Count do          {Проверить все элементы, начиная со второго)

begin

        if M[I] > Max then  {Если очередной (I-й) элемент массива больше чем Мах}

begin         

    Max := M[I];      {то считать максимальным 1-й элемент}

    Numer_Max:=I;  {и запомнить его порядковый номер}

end;                 

end;

В заключительной части программы запишем вывод результата поиска максимального элемента массива:

Writeln('Максимальный элемент — ', Мах);

Writeln('Он расположен на ', Numer_Max, ' месте');

Полный текст программы получится таким:

program Max_Elem;    {Поиск максимального элемента массива}

Const

Count =20;

Var

M : array [I..Count] of byte;

Max, I, Numer_Max : byte;

Begin    {Основная программа}

for I:=1 to Count do  {ввод элементов массива}

begin

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

readln(M[I]);

end;   {конец ввода}

writeln('Введенный массив: ');

for I:=1 to Count do {вывод элементов массива}

begin

write(' ',M[I],' ');

end;    {конец вывода}

Writeln;

Max := M[1] ;        {Считать 1-й элемент максимальным}

Numer_Max:=1;  {Запомнить номер максимального элемента}

for I := 2 to Count do                   {Проверить все элементы, начиная со второго}                 

begin

 if M[I] > Max then {Если очередной (I-й) элемент массива больше чем Мах}

begin                                             

Max := M[I];      {то считать максимальным 1-й элемент}

Numer_Max:=I; {и запомнить его порядковый номер} 

end;

end;

Writeln('Максимальный элемент — ', Max);

Writeln('Он расположен на ', Numer_Max, '  месте');

еnd.

Индивидуальные задания:

  1.  В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму отрицательных элементов массива и сравнить с введенным значением С.
  2.  В одномерном массиве, состоящем из n вещественных элементов, вычислить произведение элементов с четными номерами.
  3.  В одномерном массиве, состоящем из n элементов, вычислить максимальный элемент и определить его номер (индекс).
  4.  Преобразовать массив А размером n в два таким образом, чтобы в одном хранились положительные элементы, а во втором – отрицательные.
  5.  В одномерном массиве, состоящем из n вещественных элементов, вычислить произведение минимального и К-ого элементов (К вводится с клавиатуры).
  6.  Все элементы массива К размером n, модуль которых не превышает 1, заменить 0.
  7.  Преобразовать массив К размером n таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы, стоявшие в четных позициях.
  8.  В одномерном массиве, состоящем из n вещественных элементов, вычислить максимальный по модулю элемент.
  9.  Преобразовать массив К размером n таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
  10.  Вычислить сумму модулей элементов массива К размером n, расположенных после минимального элемента.
  11.  В одномерном массиве, состоящем из n вещественных элементов, вычислить количество элементов, равных 0.
  12.  В одномерном массиве, состоящем из n элементов, вычислить количество элементов, больших С.
  13.  В одномерном массиве, состоящем из n вещественных элементов, вычислить произведение элементов массива, расположенных перед максимальным по модулю элементом.
  14.  В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму модулей элементов массива, расположенных перед минимальным по модулю элементом.
  15.  В одномерном массиве, состоящем из n вещественных элементов, вычислить количество элементов, меньших С.
  16.  В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму положительных элементов массива, расположенных до максимального элемента.
  17.  В одномерном массиве, состоящем из n вещественных элементов, вычислить максимальный элемент и поменять местами с первым.
  18.  В одномерном массиве, состоящем из n вещественных элементов, вычислить минимальный элемент и поменять его с последним.
  19.  В одномерном массиве, состоящем из n вещественных элементов, разместить элементы таким образом, чтобы сначала шли элементы, большие шести.
  20.  В одномерном массиве, состоящем из n целых чисел, заменить элементы с четными номерами нулем, а элементы с нечетными номерами  - 1.
  21.  В одномерном массиве, состоящем из n вещественных элементов, вычислить количество элементов, входящих в промежуток М и Р (М и Р вводятся с клавиатуры).
  22.  В одномерном массиве, состоящем из n вещественных элементов, заменить каждый элемент > 0, значением среднего арифметического элементов массива.
  23.  Дан массив из n целых чисел. Посчитать, сколько раз в нем встречается минимальный по модулю элемент.
  24.   Дан массив из к целых чисел. Переменной t присвоить значение true, если в массиве нет нулевых элементов, и false – в противном случае.
  25.  Дан массив размерностью 10 из целых чисел. Сформировать два массива размерностью 5, включив в первый массив элементы с четными индексами, а во второй – с нечетными.
  26.  Задан массив А размером n. Найдите в нем первую пару последовательных элементов, таких, что аi · ai+1 <0.
  27.  Задан массив А размером n. Найдите суммы четных и нечетных элементов этого массива.
  28.  Задан массив А размером n из положительных и отрицательных чисел. Определите число перемен знака при переходе от аi  к ai+1.
  29.  Задан массив А размером n из неравных нулю чисел. Определите знак произведения элементов массива не перемножая их.
  30.  Задан массив А размером n. Поменяйте местами элементы массива, равноудаленные от концов массива, например:  а1  и an, а2  и an-1.

PAGE   \* MERGEFORMAT1


 

А также другие работы, которые могут Вас заинтересовать

41846. Поиск информации на государственных образовательных порталах 144.88 KB
  Поиск информации на государственных образовательных порталах Лит. Листов 8 Тема: Поиск информации на государственных образовательных порталах Цель: изучение информационной технологии организации поиска информации на государственных образовательных порталах. В таких службах используется обычный принцип поиска в неструктурированных документах– по ключевым словам. Поисковая система– это комплекс программ и мощных компьютеров способные принимать анализировать и обслуживать запросы пользователей по...
41847. ИССЛЕДОВАНИЕ ОПЕРАЦИОННЫХ УСИЛИТЕЛЕЙ И СХЕМ НА ЕГО ОСНОВЕ 119.73 KB
  Изучение принципов построения схем сумматора вычитающего устройства дифференцирующего устройства с использованием операционного усилителя. Рисунок 1 Схема электрическая принципиальная усилителя Рисунок 2 – Осциллограмма суммирующего устройства. Uвх t Uвх t Рисунок 3 – Осциллограмма вычитающего устройства. Uвх t Рисунок 4 – Осциллограмма интегрирующего устройства.
41849. Основные характеристики и испытание интегрального цифрового компаратора 195.54 KB
  Для построения компаратора только на элементах ИНЕ запишем её в другой форме воспользовавшись формулой де Моргана Схема реализующая это выражение приведена на рис. Если необходимо чтобы при равенстве кодов на выходе компаратора была логическая 1 то к выходу схемы рис.ms10 или собрать на рабочем поле среды MS10 схему для испытания цифрового компаратора рис.
41850. Создание компьютерных публикаций на основе использования готовых шаблонов 711.14 KB
  Ход работы Publisher упрощает процесс создания публикаций предоставляя сотни профессиональных макетов для начала работы. Документ Publisher называется публикацией расширение в файловой системе . Запуск Publisher осуществляется по команде Пуск Программы Microsoft Office Microsoft Publisher 2007 щелчком мыши. Запустить программу Publisher После запуска приложения на экране появляется следующее окно.
41851. Ознакомление с основными характеристиками и испытание интегральных триггеров RS, D, T и JK 730.66 KB
  При отсутствии входных сигналов состояние триггера не изменяется а в момент подачи сигнала R = 1 триггер переключается в состояние Q = 0 в котором пребывает до поступления нового единичного сигнала на Sвход. Функционирование Ттриггера определяется уравнением Он может быть реализован например на базе двух синхронных RSтриггеров рис. С появлением фронта тактового импульса триггер Т1 первой ступени переключается в состояние противоположное состоянию триггера Т2. Но это не вызывает изменение сигналов на выходах Q и так как за счёт...
41852. Ознакомление с устройством и функционированием регистров и регистровой памяти; испытание интегрального универсального регистра сдвига 327.33 KB
  Если выводы последнего триггера сдвигающего регистра соединить с входами первого то получится кольцевой регистр сдвига называемый кольцевым счётчиком. Синтез регистра сводится к выбору типа триггеров и логических элементов И НЕ ИЛИ для реализации заданных операций.2 1 х1 х2 хп Т R S 1 Т R S 1 Рассмотрим работу параллельного регистра на RSтриггерах рис.
41853. Изучение и анализ конструкций мостов транспортных автомобилей 86.06 KB
  1 – запорное кольцо подшипника; 16 – полуосевая шестерня; 2 – тормозная колодка; 17 – болты крепления к балке заднего моста; 3 – тормозной барабан; 18 – подшипники ведущей шестерни; 4 – шпилька крепления колеса; 19 – сальник ведущей шестерни; 5 – колпак колеса; 20 – фланец; 6 – тормозной цилиндр; 21 – гайка ведущей шестерни; 7 – тормозной щит; 22 – кольцо грязеотражательное; 8 – подшипник полуоси; 23 – распорная втулка; 9 – сальник полуоси; 24 – регулировочное кольцо; 10 – опорная чашка пружины; 25 – ведущая шестерня; 11 –...
41854. Использование систем проверки орфографии и грамматики. Форматирование текста 201.77 KB
  Форматирование текста Цель: научиться использовать системы проверки орфографии и грамматики форматировать текст. Обратите внимание что в раскладке продуктов левый край ровный но текст отодвинут от левого края. Задание: Набрать следующий текст: Тесто рассыпчатое 400 г муки 200 г масла 05 стакана воды Растереть масло добавить муку воду всыпать 05 чайной ложки соли и замесить тесто. Порядок выполнения задания №2: Заголовок выровнять по центру с помощью элемента вкладки Главная шрифт полужирный вкладки Главная разрядка 3 пт Команда:...