78186

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

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

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

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

Русский

2015-02-07

80.5 KB

25 чел.

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

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

Время выполнения: 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


 

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

82487. Мировое хозяйство, понятие и эволюция. Интеграция в мировой экономике 32.42 KB
  Интеграция в мировой экономике Мировое хозяйство совокупность национальногосударственных и негосударственных структур а также их взаимодействий на основе международного разделения труда и политических контактов. В данной трактовке мировое хозяйство представляет собой единое экономическое пространство мегаэкономику в котором субъектами хозяйственных отношений выступают: национальные экономики стран мира; субъекты мирового бизнеса транснациональные корпорации и их альянсы; институты мирового хозяйства международные экономические...
82488. Международная торговля: свобода торговли и протекционизм 33.52 KB
  Сторонники свободной торговли считают что международная торговля должна развиваться на основе рыночных сил спроса и предложения т. Экономические аргументы в защиту протекционистских мер: с помощью импортных пошлин страна может достичь улучшения условий торговли и увеличения экономического выигрыша; поддержка национальной промышленности на этапе ее зарождения и становления; повышение уровня занятости национальных ресурсов; смягчение кризиса в отраслях испытывающих экономические трудности; ограждение национальной экономики от мировых...
82489. Международная валютная система 30.96 KB
  Основной задачей мировой валютной системы МВС является регулирование сферы международных расчетов для обеспечения устойчивого экономического роста и поддержания равновесия во внешнеторговом обмене. Мировая валютная система представляет собой: определенный набор международных платежных средств; режим обмена валют включая валютные курсы; условия конвертируемости механизм обеспечения валютноплатежными средствами международного оборота; регламентацию форм международных расчетов; режим международных рынков валюты и золота; статус...
82490. Объект и предмет экономической теории. Методология экономической науки 35.64 KB
  Методология экономической науки. Первый раздел имеет методологическое фундаментальное значение так как служит основным средством исследования двух следующих разделов микроэкономики и макроэкономики. Это привело к появлению множества методов исследования экономической теории: Метод научной абстракции Отвлечение в процессе познания от внешних явлений не экономических сторон выделение более глубокой сущности предмета или экономического явления Метод функционального анализа Используется зависимость функцияаргумент для проведения...
82491. Основные направления и школы в экономической теории. Экономические законы и категории 34.86 KB
  Экономические законы и категории. Экономические законы и категории. Различают специфические общие и особенные экономические законы. Специфические экономические законы действуют в пределах исторически определенных форм хозяйствования.
82492. Рынок и условия его возникновения: типы рынков, экономические и неэкономические блага, типы хозяйственных систем, виды и формы собственности 36.72 KB
  Рынок это такая экономическая система которая базируется на частной собственности на средства производства и на принципах самостоятельно независимого принятия решений отдельных хозяйствующих субъектов фирмами или частными лицами. экономическая обособленность производителей в форме частной собственности. виды и формы собственности Собственность можно классифицировать различным образом например: 1 По форме присвоения различных форм собственности индивидуальная коллективная и государственная собственность.
82493. Теория собственности: понятие, виды, формы. Права собственности. Приватизация, ее особенности в России 34.53 KB
  Права собственности. Теория собственности: понятие виды формы Собственность это система экономических отношений между людьми выражающаяся во владении пользовании и распоряжении средствами производства и соответствующей им формы присвоения средств и результатов производства. Собственность можно классифицировать различным образом например: 1 По форме присвоения различных форм собственности индивидуальная коллективная и государственная собственность.
82494. Ограниченность ресурсов и кривая производственных возможностей 43.7 KB
  В широком смысле ограничены прежде всего способности человека взять имеющиеся в природе в изобилии свободные материальные ресурсы при том что в перспективном плане строго дефицитными могут быть лишь невоспроизводимые условия время и лучшие естественные ресурсы. Виды экономических ресурсов природные ресурсы земля недра водные лесные и биологические климатические и рекреационные ресурсы сокращенно земля; трудовые ресурсы люди с их способностью производить товары и услуги сокращенно труд; капитал в форме денег и ценных...
82495. Цена, спрос и предложение. Равновесие по Маршаллу и по Вальрасу. Паутинообразная модель 71.61 KB
  Цена́ количество денег в обмен на которые продавец готов передать продать единицу товара. Цена является коэффициентом обмена конкретного товара на деньги. Спрос на какойлибо товар или услугу это желание и возможность потребителя купить определенное количество товара или услуги по определенной цене в определенный период времени. Объем спроса это то количество товара или услуги которое потребители согласны купить по определенной цене в течении определенного периода времени.