Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 4 Тема- Описание и использование одномерных массивов

Работа добавлена на сайт samzan.net:


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

Тема: Описание и использование одномерных массивов. Решение задач на обработку одномерных массивов.

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

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

    Описание типа линейного массива выглядит так:

Type   <Имя типа>=Array [<Диапазон индексов>] Of <Тип элементов>;

    Теперь возможно описание:

 Var <Переменная-массив>:<Имя типа>;

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

    Описать переменную-массив можно и сразу (без предварительного описания типа) в разделе описания переменных:

   Var <Переменная-массив>:Array [<Диапазон индексов>] Of <Тип элементов>;

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

Var

S, BB: Array [1..40] Of Real;

N: Array ['A'..'Z'] Of Integer;

R: Array [-20..20] Of Word;

T: Array [1..40] Of Real;

    Теперь переменные S, BB и T представляют собой массивы из сорока вещественных чисел; массив N имеет индексы символьного типа и целочисленные элементы; массив R может хранить в себе 41 число типа Word.

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

Const

 m:array[1..7] of real=(4.5,-12,0.23,9.23,-1.54,8,-3);

 f:array[1..10] of char='аеёиоуыэюя';

 

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

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

Для данного примера описания впоследствии допустима следующая запись:    S:=BB;

    Однако, присваивать можно только массивы одинаковых типов. Даже массиву T присвоить массив S нельзя, хотя, казалось бы, их описания совпадают, произведены они в различных записях раздела описания.

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

R[10] - элемент массива R с индексом 10.

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

BB[15] - прямая адресация;

BB[K] - косвенная адресация через переменную K, значение которой будет использовано в качестве индекса элемента массива BB.

  

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

Инициализация линейного массива. Ввод и вывод элементов одномерного массива

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

Методы заполнения одномерного массива:

  1.  по формуле:

For i:= 1 to n do a[i]:= i*i;

  1.  с клавиатуры:

For i:= 1 to n do

begin

 Write('a[',i,']=');Readln(a[i]);

end;

  1.  случайным образом (с помощью генератора случайных чисел)

For i:= 1 to n do

a[i]:=random(50)-25;

 или 

For i:= 1 to n do

a[i]:=100*random;

Random - генерирует значения случайного числа из диапазона от 0 до 0,99. Тип результата -  вещественный.

Random(М) - генерирует значения случайного числа из диапазона от 0 до М-1. Тип результата -  целый.

Чтобы случайные числа были «более случайными», необходимо периодично менять базу генерации. Для этого используется процедура Randomize, которая позволяет при каждом новом запуске программы получать разные случайные числа.

Выражение, дающее целое случайное число в интервале [-50,50] будет выглядеть так:

 Trunc(Random*101)-50

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

1) Вывод линейной таблицы (вектора) данных A состоящей из n целочисленных элементов в строку.

For i:= 1 to n do Write(a[i]:3);

или

For i:= 1 to n do Write(a[i],’ ’);

2) Вывод линейной таблицы (вектора) данных A состоящей из n целочисленных элементов в столбец:

For i:= 1 to n do Writeln(a[i]);

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

Классы задач по обработке массивов.

Перечисленные ниже классы задач относятся как к одномерным, так и к двумерным массивам.

Классы задач:

  1.  Однотипная обработка всех или указанных элементов массива.
  2.  Задачи, в результате решений которых изменяется структура (порядок следования элементов) массива.
  3.  Обработка  нескольких массивов одновременно. Сюда же относятся задачи, когда по-разному обрабатываются подмассивы одного и того же массива.
  4.  Поисковые задачи для массивов.
  5.  Сортировка массивов.

Однотипная обработка всех или указанных элементов массивов.

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

Пример:  Найти сумму положительных элементов массива:

Program example1;

const n=20;

var a: array [1..n] of integer;

   i,S: integer;

begin

 for i:=1 to n do

begin

 a[i]:=random(50)-25;

 Write(a[i]:3);

  end;

 for i:=1 to n do

 if a[i]>0 then S:=S+a[i];

 writeln (‘Сумма положительных элементов равна ‘ ,S)

end.

Пример: Вычислить произведение четных и сумму нечетных элементов целочисленной линейной таблицы состоящей из 10 элементов.

Program Element;

Var

 a:array[1..10] or real;

 i,s:integer;

 p:longint;

Begin

 For i:= 1 to 10 do

 begin

   Write('a[',i,']=');Readln(a[i]);

 end;

 s:=0;p:=1;

 For i:=1 to 10 do

   If odd(a[i]) then s:=s+a[i] else p:=p*a[i];

   {если элемент нечетный находим сумму иначе произведение}

  Writeln('Сумма нечетных      s =',s);

 Writeln('Произведение четных p =',p);

 Readln;

End.

Пример:  Найти максимальное (минимальное) число из таблицы данных, состоящей из 15 элементов.

Блок-схема:

Задачи, в результате решения которых изменяется структура массива.

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

Пример 4: Поменять местами  пары соседних элементов, т.е. первый и второй, третий и четвертый и т.д. (n-1)-ый и  n-ый

i:=2;

while i<n do

begin

r:=a[i];

a[i]:=a[j];

a[j]:=r;

i:=i+2

End.

Сортировка элементов массива

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

Сортировка – это расположение элементов линейной таблицы в порядке возрастания или убывания их значений.

При проведении сортировки элементов таблицы любым из известных способов используются операции сравнения и перестановки двух элементов. Перестановку (обмен элементов местами) можно произвести двумя способами – с использованием дополнительной переменной или без нее.

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

Вначале, согласно схеме, производим сохранение значения переменной A в переменной C (шаг 1). Далее заменяем значение переменной A на значение переменной B (шаг 2). И завершается перестановка присвоением переменной B значения переменной C (шаг 3). Таким образом, обмен производится за 3 шага: C:=A; A:=B; B:=C;

Способ обмена целочисленных данных (переменных величин) без буферной переменной основывается на использовании математических действий, например:

A:=A+B; B:=AB; A:=AB;

  1.  Метод перестановок

При сортировке этим методом производится сравнение двух рядом стоящих элементов, т.е. x[1] и x[2], x[2] и x[3],…, x[n-1] и x[n]. Если в сравниваемой паре значение первого элемента оказывается больше второго, их меняют местами. Таким образом, после первого сравнительного прохода по всем парам наибольший элемент ряда будем установлен на последнее место в таблице. При втором проходе на предпоследнее место в таблице будет поставлен второй максимальный по величине элемент ряда и т.д.

Блок-схема:

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

Program Sort_2;

Var

 a:array[1..50] of integer;

 i,n,k,c,fl:integer;

Begin

 Write('Элементов-');Readln(n);

 For i:= 1 to n do

 begin

   Write('a[',i,']=');

   Readln(a[i]);     

 end; 

Блок-схема:

Большая по сравнению с предыдущим способом сортировки эффективность этой программы обеспечивается использованием флажковой переменной fl, которая принимает только два значения 0 (не произведено ни одной перестановки) и 1 (произведена хотя бы одна перестановка).

Если после очередного прохода значение флага fl остается равным 0, то это означает, что элементы таблицы упорядочены, и сортировка данных прекращается.

Метод работает тем эффективнее, чем «правильнее» расположены элементы исходной таблицы (от этого зависит число проходов).

Программу, написанную для сортировки в порядке возрастания значений, легко переделать в сортировку по убыванию. Для этого достаточно при сравнении значений элементов таблицы a[i] и a[j] изменить знак больше « > » на знак меньше « < ».

  1.  Линейная сортировка

Данный метод сортировки основывается на поиске минимального (максимального) значения среди элементов таблицы.

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

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

Блок-схема:

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

Время сортировки элементов таблицы сокращено, за счет уменьшения количества перестановок – наиболее времяемких операций. Количество перестановок при использовании данного способа сортировки – (n-1).

  1.  Метод вставки

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

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

Задание. Упорядочить элементы линейной таблицы A (4, -7, 6, 3, -2, 5).

  1.  Вначале сохраняем значение второго элемента в буферной переменной r и сравниваем ее значение со значение первого элемента. Так как значение буферной переменной меньше значения первого элемента то будет произведена сдвижка первого элемента на вторую позицию в таблице.

A 4 4 6 3 -2 5  r = -7

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

A -7 4 6 3 -2 5  r = -7

  1.  Далее сохраняем значение третьего элемента в буферной переменной r и сравниваем ее значение со значением второго элемента. Так как значение буферной переменной больше значения второго элемента, то перестановки производиться не будут.

A -7 4 6 3 -2 5  r = 6

  1.  Переходим к четвертому элементу. Сохраняем его значение в буферной переменной r и производим сравнение с третьим элементом массива. Так как значение третьего элемента больше значения r то производится сдвижка третьего элемента на четвертую позицию.

A -7 4 6 6 -2 5  r = 3

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

A -7 4 4 6 -2 5  r = 3

Теперь сравним значение первого элемента и значения буферной переменной. Так как значение r больше значения первого элемента, то сдвижки первого элемента произведено не будет. В результате этих действий найдено место вставки значения буферной переменной (вторая позиция в таблице). Присваиваем второму элементу таблицы значение r.

A -7 3 4 6 -2 5  r = 3

Аналогично производится упорядочение оставшихся элементов таблицы.

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

Program Sort_4;

Var

 a:array[1..50] of integer;

 i,j,n,r,fl:integer;

begin

 Write('Элементов-');Readln(n);

 For i:= 1 to n do

 begin

   Write('a[',i,']=');

   Readln(a[i]);     

 end;  

Блок-схема:

Все выше описанные методы можно использовать и при сортировке таблиц хранящих символьные величины (char, string). В случае сортировки по возрастанию данные таких таблиц будут располагаться согласно алфавиту1.

Обработка нескольких массивов одновременно.

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

Пример: Дан массив целых чисел. Необходимо сформировать второй массив, содержащий только четные элементы первого массива.

const n=30;

var a,b:array [1..n] of integer;

 i,k,n:integer;

begin

write (‘задайте количество элементов массива’);

 readln (n);

 for i: = 1 to n do

 read (a[i]);

k:=0;    {в массиве b нет ещё элементов}

 for i:=1 to n do

 if a[i] mod 2 = 0 then begin

 k:=k+1;

 b[k]:=a[i];

 end;

 for i:=1 to k do

write (b[i], “);

End.

Поисковые задачи для массивов.

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

  •  линейный поиск;
  •  поиск с барьером;
  •  дихотомический поиск.

  

Линейный поиск

Алгоритмом такого поиска был рассмотрен при решении типовых задач на построение циклических алгоритмов. Напомним, что особенностью такого поиска является две причины прекращения поиска:

- элемент найден (это программируется с помощью логической переменной);

- просмотрены все элементы, но заданный элемент так и не нашли  (i > n).

const n=20; {количество элементов в массиве}

var a:array [1..n] of integer;   {исходный массив}

i,x:integer;

f:boolean;

begin

write(‘задайте искомый элемент’);

readln(x);

writeln(‘задайте элементы массива’);

 for i:=1 to n do

 readln(a[i]);

 f:=false;   {элемент ещё не найден}

 i:=1;

 while (i<=n) and not f do

 if a[i]=x then f:=true    {нашли}

 else i:=i+1  {переходим к следующему элементу}

 if f then writeln (‘ нашли элемент с номером‘, i)

 else writeln (‘такого элемента нет’)

End.

Поиск с барьером

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

сonst n=20; {количество элементов в массиве}

var a:array [1..n+1] of integer; {исходный массив}

i,x:integer;

begin

write (‘задайте искомый элемент’);

readln (x);

writeln (‘задайте элементы массива’);

 for i:=1 to n do

 readln (a[i]);

 a[n+1]:=x;  {установлен барьер, равный х, в конце}

 i:=1;              {массива}

 while a[i]<>x do

 i:=i+1;    {переходим к следующему элементу}

 if i<>n+1 then writeln (‘нашли элемент с номером’, i)

 else writeln (‘такого элемента нет’):

End.

Дихотомический поиск (поиск элемента в  упорядоченном массиве)

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

const n=20; {kоличество элементов в массиве}

var a:array [1..n] of integer; {исходный массив}

i,x,k,m:integer;

 left,right,mid:integer; {левая, правая граница и середина}

f:boolean;                     {отрезка}

begin

write (‘задайте искомый элемент’);

 readln (k);

 for i:=1 to n do

 readln(a[i]);

 {упорядочивание массива по возрастанию}

 for i:=1 to n–1 do

 begin

 m:=i;

 for j:= i+1 to  n do

 if a[j]<a[m] then m: =j;

 x:=a[i];

 a[i]:=a[m]; a[m]:=x

 end;

 {поиск элемента}

f:=false;  {элемент не найден}

left:=1; right:=n;

 repeat {поиск элемента в части массива от элемента [left] до

  элемента [rigth]}

mid:=(left + right) div 2;

 if k<a[mid] then right:=mid–1 {элемент в левой части}

 else if k>a[mid] then left:=mid+1 {элемент в правой части}

 else f:=true;  {нашли}

 else f:=true;   {нашли}

 until f or (left>rigth);

 if f then writeln (‘элемент с номером’,mid:2,‘совпадает с

                                    искомым’,k)

 else writeln (‘не нашли’);

End.

Удаление и вставка элементов в массив

Пример. Удалить из массива максимальный элемент, если все элементы разные.

Для того, чтобы решить эту задачу, нужно:

  •  найти номер максимального элемента k;
  •  сдвинуть все элементы, начиная с k-го, на один элемент влево;
  •  последнему элементу присвоить значение 0;
  •  уменьшить количество элементов на единицу.

Примечание. При удалении элемента размерность массива не изменяется.

Program DeleteK;

Const m=30;

Type

Myarray= array[1..m] of integer;

Var

 a:Myarray;

 k:integer;

{процедура инициализации массива}

procedure InputMas(var x:Myarray);

Var

i:integer;

Begin

For i:= 1 to m do

x[i]:=Random(100);

end;

{процедура вывода элементов массива}

procedure PrintMas(x:Myarray; n: integer);

Var

i:integer;

Begin

For i:= 1 to n do

Write(x[i]:3,’’);

Writeln;

end;

{функция нахождения номера наибольшего элемента массива}

function Maximum(x:Myarray; n:integer):integer;

Var

i,max,maxi:integer;

Begin

 max:=-maxint; {начальным значением переменной будет}

             {наименьшее значение данного типа}

 For i:= 1 to n do

if x[i]> max then 

Begin max:= x[i]

maxi:=i;

end;

Maximum:= maxi;

end;

{процедура удаления элемента массива с номером k1}

procedure Delete(var x:Myarray; var n:integer; k1:integer);

Var

i:integer;

Begin

For i:= k1 to n-1 do

x[i]:= x[i+1];

x[n]:=0;

Dec(n);

end; 

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

Begin

writeln (‘Введите элементы массива:’);

InputMas(a);

PrintMas(a,m);

k:= Maximum(a,m);

Delete(a,m,k);

writeln (‘Массив после удаления элемента:’);

PrintMas(a,m-1);

End. 

Вставка одного элемента

 

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

  •  первые k элементов остаются без изменения;
  •  все элементы, начиная с (k+1)-го, необходимо сдвинуть на один назад;
  •  на место (k+1)-го элемента записываем значение х;
  •  увеличить количество элементов в массиве на единицу.

Пример. Вставить введённое число х после элемента с номером k.

Program Vstavka;

Const n=10;

Type

Myarray= array[1..n+1] of integer;

Var

 a:Myarray;

 k,x:integer;

procedure InputMas(var m:Myarray);

Var

i:integer;

Begin

For i:= 1 to n do

m[i]:=Random(100);

end;

procedure PrintMas(m:Myarray; n: integer);

Var

i:integer;

Begin

For i:= 1 to n do

Write(m[i]:3,’’);

Writeln;

end;

procedure Ins(var m:Myarray; var n: integer; Mesto,Element:integer);

Var

i:integer;

Begin

For i:=n downto Mesto+1 do

m[i+1]:= m[i];

m[Mesto+1]:= Element;

Inc(n);

end;

Begin

writeln (‘Введите элементы массива:’);

InputMas(a);

PrintMas(a,n);

Writeln(‘Номер элемента, после которого вставлять: ’);

Readln(k);

Writeln(‘Вставляемое число х: ’);

Readln(х);

Ins(a,n,k,x);

PrintMas(a,n+1);

End. 

Вставка нескольких элементов

Пример. Вставить число х после всех элементов, кратных трём.

Program Vstavka2;

Const n=10;

Type

Myarray= array[1..2*n] of integer;

Var

 a:Myarray;

 k,x,i:integer;

procedure InputMas(var m:Myarray);

-----------

procedure PrintMas(m:Myarray; n: integer);

-----------

procedure InsN(var m:Myarray;var n: integer; Mesto,Element:integer);

Var

i:integer;

Begin

For i:=n downto Mesto+1 do

m[i+1]:= m[i];

m[Mesto+1]:= Element;

Inc(n);

end;

Begin

writeln (‘Введите элементы массива:’);

InputMas(a);

PrintMas(a,n);

Writeln(‘Вставляемое число х: ’);

Readln(х);

k:=0;

For i:=n downto 1 do

If a[i] mod 3=0

then Begin

InsN(a,n,i,x);

k:=k+1;

end;

PrintMas(a,n+k);

End. 

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

Варіанти завдань

Завдання №1

1. У одновимірному масиві А, що складається з N дійсних елементів, обчислити:

a) суму відємних елементів масиву;

b) кількість елементів, що задовольняють умові  і .

2. У одновимірному масиві В, що складається з N дійсних елементів, обчислити:

a) суму додатніх елементів масиву;

b) кількість елементів, що задовольняють умові .

3. У одновимірному масиві С, що складається з N дійсних елементів, обчислити:

a) добуток елементів масиву з парними номерами;

b) кількість елементів, що задовольняють умові .

4. У одновимірному масиві А, що складається з N дійсних елементів, обчислити:

a) добуток елементів масиву з непарними номерами;

b) кількість елементів, що задовольняють умові  або .

5. У одновимірному масиві D, що складається з N цілих елементів, обчислити:

a) максимальний по модулю елемент;

b) кількість елементів, кратних 3.

6. У одновимірному масиві Х, що складається з N цілих елементів, обчислити:

a) мінімальний по модулю елемент;

b) кількість елементів, кратних 5.

7. У одновимірному масиві А, що складається з N цілих елементів, обчислити:

a) номер мінімального по модулю елементу;

b) кількість парних елементів.

8. У одновимірному масиві Y, що складається з N цілих елементів, обчислити:

a) кількість нульових елементів;

b) добуток елементів, кратних 5.

9. У одновимірному масиві В тому, що складається з N цілих елементів, обчислити:

a) кількість елементів, рівних за значенням першому елементу;

b) добуток елементів з проміжку [-8;3].

10. У одновимірному масиві Z, що складається з N цілих елементів, обчислити:

a) добуток від’ємних елементів;

b) кількість елементів з номерами, кратними 3.

11. У одновимірному масиві Х, що складається з N цілих елементів, обчислити:

a) кількість елементів, що задовольняють умові ;

b)  суму елементів, кратних 3.

12. У одновимірному масиві Х, що складається з N дійсних елементів, обчислити:

a) кількість елементів, менших 5;

b)  середнє арифметичне додатніх елементів.

13. У одновимірному масиві Y, що складається з N цілих елементів, обчислити:

a) кількість елементів, рівних останньому елементу масиву;

b) середнє арифметичне елементів, кратних 3.

В отчет предоставить текст программ, результаты решения, блок-схемы!!!!


нач
ало

вывод s, p

s = s + a[i]

i = 1..10

конец

odd(a[i])

да

нет

i = 1..10

ввод a[i]

s = 0, p = 1

p = p · a[i]

Program Max_min;

Var

 d:array[1..15] or real;

 max:real;

 i:integer;

Begin

 For i:=1 to 15 do

 begin

   Write('d[',i,']=');

   Readln(d[i]);

 end;

 max:=d[1];

 For i:=2 to 15 do 

   If d[i]>max

      then max:=d[i]

      else If d[i]<min

              then min:=d[i];

 Writeln('Max=',max:4:2);

 Writeln('Min=',min:4:2);

 Readln;

End.

конец

начало

ывод max

max = d[i]

i = 1..15

ввод d[i]

max=d[1]; min=d[1]

i = 2..15

d[i]>max

нет

да

min = d[i]

d[i]<min

нет

да

вывод min

A

C

B

1

2

3

Program Sort_1;

Var

 a:array[1..50] of integer;

 i,j,n,c:integer;

Begin

 Write('Элементов-');Readln(n);

 For i:= 1 to n do

 begin

   Write('a[',i,']=');

   Readln(a[i]);     

 end;

 {вложенные циклы сортировки}

 For i:=1 to n-1 do

   For j:=i+1 to n do

     If a[i]>a[j] then 

        begin

          c:=a[i];

          a[i]:=a[j];

          a[j]:=c;

        end;

 For i:=1 to n do Write(a[i]:3);

 Readln;

End.

вывод a[i]

начало

i = 1..n

ввод a[i]

a[i]>a[j]

нет

да

ввод n

j = i+1..n

c = a[i]    

a[i] = a[j]    a[j] = c

конец

i = 1..n

i = 1..n-1

 k:=n;

 Repeat

   fl:=0;

   For i:=2 to k do

   If a[i-1]>a[i] then 

   begin

     c:=a[i];

     a[i]:=a[i-1];

     a[i-1]:=c;

     fl:=1;

   end;

   k:=k-1;

 Until fl=0;

 For i:=1 to n do Write(a[i]:3);

 Readln;

End.

вывод a[i]

конец

начало

i = 1..n

ввод a[i]

k = n

a[i-1]>a[i]

нет

да

ввод n

i = 2..k

c = a[i]    

a[i] = a[i-1]    a[i-1] = c

fl = 1

i = 1..n

fl = 0

k = k-1

fl = 0

нет

да

вывод a[i]

конец

начало

i = 1..n

ввод a[i]

m = i

i=1..n-1

a[j]<a[m]

нет

m = j

да

ввод n

j=i+1..n

c = a[i]

a[i] = a[m]

a[m] = c

i = 1..n

Program Sort_3;

Var

 a:array[1..50] of integer;

 i,j,n,m,c:integer;

Begin

 Write('Элементов-');Readln(n);

 For i:= 1 to n do

 begin

   Write('a[',i,']=');

   Readln(a[i]);     

 end;

 For i:=1 to n-1 do

 begin

   m:=i;

   For j:=i+1 to n do

     If a[j]<a[m] then m:=j;

   c:=a[i];

   a[i]:=a[m];

   a[m]:=c;

 end;

 For i:=1 to n do Write(a[i]:3);

 Readln;

End.

 For i:=2 to n do

 begin

   r:=a[i];fl:=0;j:=i-1;

   While (fl=0)and(j>=1) do

   If r<a[j] then 

      begin

        a[j+1]:=a[j];j:=j-1;

      end else fl:=1;

   a[j+1]:=r;

 end;

 For i:=1 to n do Write(a[i]:3);

 readln;

End.

вывод a[i]

начало

i = 1..n

ввод a[i]

i = 2..n

нет

ввод n

конец

i = 1..n

r = a[i]; fl = 0

j = i – 1

fl=0 и j≥1

a[j+1]=a[j]

j = j+1

да

fl = 1

r<a[j]

a[j+1]= r

нет

да

1 При сортировке сравниваются не значения элементов таблиц, а их коды.




1. ХХХ является оптовая торговля
2. способность глаза различать две светящиеся точки раздельно
3. Контрольная работа По дисциплине Криминалистика Вариант ’ 3
4. Учет и контроль расчетов по социальному страхованию и обеспечению
5. Йохан Хейзинга
6. анатомия беременной матки Жан Луи Боделок наружное измерение таза XVIII МаксимовичАмбодик первое русск
7. Проблемы стадии возбуждения уголовного дела
8. Участие общественности в решении проблем охраны природы Международное сотрудничество в охране окружающей среды
9.  2013 г ЗАДАНИЕ По дипломной работе Студенту Лещенко Елене Владимировне 1
10. Основу содержания раздела должен составлять анализ соответствующих нормативных источников и научной литер
11. Секция Б В Дом по ул
12. Ода Рылеев Материал из Викитеки свободной библиотеки Непроверенная Гражданское мужество Ода Кто эт
13. на тему- Регулирование отношений крестьянина и помещика при проведении крестьянской реформы 1861 г
14. Учебник по Html для чайников.
15. Вариант 1 ’1 Решите уравнение.html
16. рефератов ко второй аттестации Абдигазиев Медет Анализ функциональ
17. Тема 13. Создание таможенной службы Российской Федерации 19912000 гг
18. б~л- - ~ажеттіліктерді ~ана~аттандыруды~ м~мкін еместігі - индустриалды~ ж~йені
19. Схема с включением катушки коммутирующего контура последовательно с тиристором Схема одно операционного.html
20. Прагни завжди перемагати скоріше самого себе ніж долю і змінювати скоріше свої бажання ніж порядок у світ