78186

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

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

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

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

Русский

2015-02-07

80.5 KB

19 чел.

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

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

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


 

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

77460. Понятие и порядок заключения мирового соглашения. Форма и содержание мирового соглашения, утверждение мирового соглашения арбитражным судом 17.3 KB
  Форма и содержание мирового соглашения утверждение мирового соглашения арбитражным судом. Расторжение мирового соглашения. Последствия неисполнения мирового соглашения.
77461. Упрощенные процедуры банкротства: банкротство ликвидируемого и отсутствующего должника 16.9 KB
  Особенности подачи заявления о признании отсутствующего должника банкротом. В случаях если гражданин должник или руководитель должника юридического лица фактически прекратившего свою деятельность отсутствует или установить место их нахождения не представляется возможным заявление о признании отсутствующего должника банкротом может быть подано конкурсным кредитором уполномоченным органом независимо от размера кредиторской задолженности. Заявление о признании отсутствующего должника банкротом подается уполномоченным органом только при...
77462. Особенности банкротства физических лиц, индивидуальных предпринимателей и крестьянского (фермерского) хозяйства 18.16 KB
  Основания для признания крестьянского фермерского хозяйства банкротом неспособность удовлетворить требования кредиторов по денежным обязательствам и или исполнить обязанность по уплате обязательных платежей. Особенности порядка признания индивидуального предпринимателя главы крестьянского фермерского хозяйства банкротом Заявление индивидуального предпринимателя главы крестьянского фермерского хозяйства о признании его банкротом может быть подано в арбитражный суд при наличии согласия в письменной форме всех членов крестьянского...
77463. Оспаривание сделок в деле о банкротстве. Подозрительные сделки и сделки предпочтения 16.94 KB
  Сделки совершенные должником или другими лицами за счет должника могут быть признаны недействительными в соответствии с Гражданским кодексом Российской Федерации а также по основаниям и в порядке которые указаны в настоящем Федеральном законе. Оспаривание подозрительных сделок должника...
77464. Антимонопольное законодательство и иные акты о защите конкуренции. Цель и метод правового регулирования, предусмотренного антимонопольным законодательством 18.32 KB
  Понятие конкуренции недобросовестная конкуренция понятие формы. Принцип: регулирование и контроль монополистической деятельности осуществление монополистической деятельности допускается если это не нарушает свободу конкуренции. При обнаружении факти или угроза нарушения конкуренции монополистическая деятельность признается незаконной.
77465. Монополистическая деятельность: понятие, виды, формы 20.37 KB
  Однако картельное соглашение не касалось производственной и тем более снабженческо-бытовой деятельности предприятия. При этом обычно различают одноотраслевой и комбинированный многоотраслевой трест когда объединение захватывает предприятия другой отрасли. Комбинированный трест объединяющий предприятия разных отраслей получает возможность извлекать дополнительную прибыль вопервых за счет использования побочных продуктов и отходов другой отрасли вовторых за счет организации вертикального комбинирования когда одно предприятие...
77466. Понятие правовой конструкции «доминирующие положения» по антимонопольному законодательству и ее правовое значение 17.51 KB
  Механизм включения хозяйствующих субъектов в реестр хозяйствующих субъектов имеющих долю на рынке определенного товара более 35.5 – это такое положение субъекта группы лиц нескольких хозяйствующих субъектов на рынке определенного товара которое дает им возможность оказывать решающее влияние на условия обращения товара на рынке устранять или затруднять доступ на данный товарный рынок. Предполагается доминирующее положение субъекта если доля его на рынке определенного товара превышает 50.е субъект имеет возможность доказать отсутствие у...
77467. Запрет на ограничивающие конкуренцию акты, действия (бездействия), соглашения, согласованные действия органов власти и местного самоуправления 15.6 KB
  ОГВ и ОМСУ запрещается принимать акты и или осуществлять действия бездействие которые приводят или могут привести к недопущению ограничению устранению конкуренции за исключением предусмотренных федеральными законами случаев принятия актов и или осуществления таких действий бездействия в частности запрещаются:  введение ограничений в отношении создания хозяйствующих субъектов в какой-либо сфере деятельности а также установление запретов или введение ограничений в отношении осуществления отдельных видов деятельности или...
77468. Понятие экономической концентрации по антимонопольному законодательству. Формы государственного контроля за экономической концентрацией 15.74 KB
  Правовые последствия нарушения порядка получения предварительного согласия антимонопольного органа на осуществление сделок и иных действий а также нарушения порядка его уведомления о совершении сделок и иных действий. Государственный контроль за экономической концентрацией подразделяется на два основных типа: Предварительный контроль осуществляется до момента совершения сделок и или процессов выступающих в качестве объектов антимонопольного контроля или обстоятельств которые могут приводить к увеличению экономической концентрации. В данном...