9795

Работа с массивами

Контрольная

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

Работа с массивами Постановка задачи Задан массив M=(3,4,5,-6,3,8,1,-5,-4,9). Найти сумму, произведение всех элементов массива количество положительных, отрицательных элементов номер максимального и минимального элементов массива. Алгоритм решения...

Русский

2013-03-17

70.5 KB

0 чел.

Работа с массивами

Постановка задачи

Задан массив M=(3,4,5,-6,3,8,1,-5,-4,9). Найти сумму, произведение всех элементов массива; количество положительных, отрицательных элементов; номер максимального и минимального элементов массива.

Алгоритм решения задачи

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

Program Prog3_4;

USES CRT; {для использования процедуры ClrScr }

Type

   diapason=1..10;

   MyArray=array[diapason] of integer;

const

   m:MyArray=(3,4,5,-6,3,8,1,-5,-4,9);

var

   i : diapason; { индекс для цикла }

   sum,  { Сумма }

   prv : longint; {произведение}

   k_plus, k_minus : integer; { кол-во положительных и

           отрицательных }

   max,min : integer; {номер максимального и

        минимального элементов}

   temp : integer; {временная переменная}

begin

 ClrScr; {очистка экрана}

 {инициализация переменных}

 sum:=0;

 prv:=1;

 k_plus:=0;

 k_minus:=0;

 max:=1;

 min:=1;

 {цикл перебора всех значений массива}

 for i:=1 to 10 do

 begin

   sum:=sum+m[i];

   prv:=prv*m[i];

   if m[i]>0

   then inc(k_plus)

   else inc(k_minus);

   if m[i] > m[max] then max:=i;

   if m[i] < m[min] then min:=i;

 end;

 {вывод результата}

 for temp:=1 to 80 do write('=');

 {вывод исходного массива}

 writeln('Исходный массив M:');

 for i:=1 to 10 do Write('№',i:2,' '); writeln;

 for i:=1 to 10 do Write(m[i]:3,' '); writeln;

 for temp:=1 to 80 do write('-');

 {вывод вычисленных значений}

 Writeln('Сумма элементов массива = ',sum);

 Writeln('Произведение элементов массива = ',prv);

 Writeln('Положительных элементов в массиве: ',k_plus);

 Writeln('Отрицательных элементов в массиве: ',k_minus);

 Writeln('Максимальный элемент m[',max,']=',m[max]);

 Writeln('Минимальный элемент m[',min,']=',m[min]);

 for temp:=1 to 80 do write('=');

 writeln('Нажмите Enter...');

 readln;

end.

Результат работы программы:

==========================================

Исходный массив M:

№ 1 № 2 № 3 № 4 № 5 № 6 № 7 № 8 № 9 №10

 3   4   5  -6   3   8   1  -5  -4   9

------------------------------------------

Сумма элементов массива = 18

Произведение элементов массива = -1555200

Положительных элементов в массиве: 7

Отрицательных элементов в массиве: 3

Максимальный элемент m[10]=9

Минимальный элемент m[4]=-6

==========================================

Нажмите Enter...

Сортировка массивов

Постановка задачи

Задан массив M=(3,4,5,-6,3,8,1,-5,-4,9). Отсортировать элементы массива по возрастанию.

Алгоритм решения задачи (Линейная сортировка)

Найти наименьший элемент массива и поместить его в M[1], выполнив для этого следующие действия. Сравнить каждый элемент ряда с M[1]. Если новый элемент меньше, поменять его с M[1], если нет, ничего не делать. Затем, исключив из рассмотрения элемент в позиции 1, повторить указанный процесс, начиная с позиции 2, т.е. среди оставшихся элементов найти наименьший и поместить его в M[2]. Тоже самое проделать для всех позиций ряда, вплоть до предпоследней.

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

Program LEC3_5;

USES CRT; {для использования процедуры ClrScr }

Type

   diapason=1..10;

   MyArray=array[diapason] of integer;

const

   m:MyArray=(7,4,12,-6,3,8,1,-5,-4,9);

var

   i,j,i_min : diapason; { индекс для цикла }

   temp : integer; {временная переменная}

   k: diapason;

begin

 ClrScr; {очистка экрана}

 {вывод исходного массива}

 writeln('Исходный массив M:');

 for i:=1 to 10 do Write('№',i:2,' '); writeln;

 for i:=1 to 10 do Write(m[i]:3,' '); writeln;

 for temp:=1 to 80 do write('-');

 {=============сортировка=====================}

 for i:=1 to 9 do

 begin

   i_min:=i;

   for j:=i+1 to 10 do

   begin

     if m[j]<m[i_min]

     then i_min:=j;

   end;

   if i<>i_min then

   begin

     temp:=m[i];

     m[i]:=m[i_min];

     m[i_min]:=temp;

   end;

   for k:=1 to 10 do Write(m[k]:3,' '); writeln;

 end;

 for temp:=1 to 80 do write('-');

 writeln('Сортировка завершена! Нажмите Enter...');

 readln;

end.

Результат работы программы:

Исходный массив M:

№ 1 № 2 № 3 № 4 № 5 № 6 № 7 № 8 № 9 №10

 7   4  12  -6   3   8   1  -5  -4   9

----------------------------------------

-6   4  12   7   3   8   1  -5  -4   9

-6  -5  12   7   3   8   1   4  -4   9

-6  -5  -4   7   3   8   1   4  12   9

-6  -5  -4   1   3   8   7   4  12   9

-6  -5  -4   1   3   8   7   4  12   9

-6  -5  -4   1   3   4   7   8  12   9

-6  -5  -4   1   3   4   7   8  12   9

-6  -5  -4   1   3   4   7   8  12   9

-6  -5  -4   1   3   4   7   8   9  12

----------------------------------------

Сортировка завершена! Нажмите Enter...

Недостатки линейной сортировки

Рассмотрим задачу сортировки следующего массива:

M=(1,2,3,...,78,80,79).

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

Если массив уже отсортирован, то алгоритм линейной сортировки затратит также более 3000 операций сравнения.

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

Алгоритм сортировка по методу пузырька

Основная идея этого метода сортировки состоит в следующем:

Если  на некотором этапе M[3]<M[4] и M[4]<M[5], то сравнивать элементы M[3] и M[5] не имеет смысла! Кроме того, если выполняются следующие условия:

M[1]<M[2], M[2]<M[3], M[3]<M[4], ..., M[n-1]<M[n],

то массив является упорядоченным .

Алгоритм

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

Пример:

1-й проход

2-й проход

3-й проход

4-й

14

14

14

14

14

11

11

11

4

4

105

11

11

11

11

14

4

4

11

11

11

105

4

4

4

4

14

14

14

14

4

4

105

21

21

21

21

21

21

21

21

21

21

105

105

105

105

105

105

105

Program Sort2; (* Сортировка методом пузырька *)

USES CRT; {для использования процедуры ClrScr }

const N=5;

Type

   diapason=1..N;

   MyArray=array[diapason] of integer;

const

   m:MyArray=(14,105,11,4,21);

var

   i, k: diapason; { индексы для циклов }

   temp : integer; {временная переменная}

   transposition:boolean; {перестановка была проведена}

begin

 ClrScr; {очистка экрана}

 {вывод исходного массива}

 writeln('Исходный массив M:');

 for i:=1 to N do Write('№',i:2,' '); writeln;

 for i:=1 to N do Write(m[i]:3,' '); writeln;

 for temp:=1 to 80 do write('-');

 {=============сортировка=====================}

 repeat

   transposition:=false;

   for i:=1 to N-1 do

     if m[i]>m[i+1] then

     begin

       temp:=m[i];

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

       m[i+1]:=temp;

       for k:=1 to N do Write(m[k]:3,' '); writeln;

       transposition:=true;

     end;

 until (not transposition);

 {=============конец сортировки================}

 for temp:=1 to 80 do write('-');

 writeln('Сортировка завершена! Нажмите Enter...');

 readln;

end.

{

Исходный массив M:

№ 1 № 2 № 3 № 4 № 5

14 105  11   4  21

--------------------------------------

14  11 105   4  21

14  11   4 105  21

14  11   4  21 105

11  14   4  21 105

11   4  14  21 105

 4  11  14  21 105

--------------------------------------

Сортировка завершена! Нажмите Enter...

}

Метод сортировки пузырьком работает тем эффективнее, чем правильнее расположены элементы ряда в его исходном состоянии. Разумеется, в общем случае было бы наивно рассчитывать на удачное расположение элементов, сложившееся случайно. Однако на практике необходимость сортировать почти упорядоченные ряды – явление довольно типичное. Например, если мы располагаем уже отсортированным рядом и намереваемся добавить к нему два новых элемента, то мы можем поместить их за максимальным элементом, а затем вновь отсортировать весь ряд методом пузырька.

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

Замечание 1

Сортировка в порядке убывания: вместо   if m[i]<m[i]

ставим   if m[i]>m[i]

Замечание 1

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

Сортировка строк

При выполнении операций сравнения (<,<=,>,>=,=,<>) над данными типа string действуют следующее правило:

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

Русские буквы:

код

символ

код

символ

код

символ

код

символ

128

А

160

а

224

р

240

Ё

129

Б

161

б

225

с

241

ё

159

Я

175

п

239

я

var i:byte;

begin

 for i:=32 to 255 do Writeln(i:3,' ',char(i));

end.

Выводы: {сравнение строк}

1) Сравниваемые строки должны быть одной длины.

2) Символы в строках должны быть приведены к одному регистру.

3) Начальные пробелы в строках должны быть удалены.

4) Необходимо учитывать нестандартное положение русских букв Ё и ё.


 

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

78476. Аспирационная пневмония (АП) или синдром Мендельсона: причины возникновения, особенности микробного фона. Группы риска возникновения АП. Клинико-рентгенологические, эндоскопические и лабораторные критерии для диагноза АП 85 KB
  Патогенез: аспирация пищевых масс приводит большей частью к закупорке преимущественно средних бронхиол и возникновению острой гипоксии; аспирация желудочного сока нередко возникающая у больных и натощак означает распространенный химический ожог слизистой оболочки трахеи бронхов и бронхиол и как правило обусловливает крайне тяжелое течение возникающей острой ДН; истинный химический ожог бронхов происходит тогда когда рН аспирируемой жидкости менее 25; наиболее выраженное повреждение легких возникает при рН желудочного сока около...
78477. Легочные и внелегочные осложнения бактериальных пневмоний. Принципы профилактики, диагностики и лечения осложнений 92.5 KB
  Массивное действие токсина на сосудистую стенку приводит к выраженной дилатации венозных сосудов и депонированию крови преимущественно в органах брюшной полости, в результате чего уменьшается приток к правым отделам сердца, падает ударный объем, сердечный выброс и нарушается перфузия периферических органов (развивается гиповолемический шок).
78478. Клинико-этиологические различия атипичных пневмоний (вызванных микоплазмой, хламидиями или легионеллой). Принципы диагностики и выбора эмпирической антимикробной терапии 88 KB
  Характеристика: передается от человека человеку воздушнокапельным путем; пневмонии часто предшествуют воспаление верхних дыхательных путей; вызывает очаговое или сегментарное воспаление легочной ткани; чаще течение не тяжелое; начало постепенное: субфебрильная температура кашель с небольшим отделяемым вязкой мокроты; кашель становится упорным появляются выраженные симптомы интоксикации миалгии артралгии перикардит и др. Характеристика: пневмонии также часто предшествуют воспаление верхних дыхательных путей; сухой кашель...
78479. Вторичные пневмонии: гипостатическая (застойная), инфарктная, эозинофильная, перифокальная, посттравматическая. Этиопатогенетические, клинико-рентгенологические и лабораторные различи 99.5 KB
  В периферической крови отмечаются минимальные изменения лейкоцитоз выражен мало или отсутствует; Лечение: борьба с гипостазами и ликвидация их является основным профилактическим мероприятием для предотвращения развития гипостатической пневмонии; Инфарктная пневмония – локальный воспалительный процесс в легком развивающийся как следствие эмболии тромбоэмболии сосудов легких в результате осложнения основного заболевания или одного из его проявлений.; банки горчичники компрессы на грудную клетку противопоказаны; в случаях когда...
78480. Синдром плеврального выпота (ПВ). Наиболее частые причины ПВ. Тактика ведения больных с плевральным выпотом. Диагностическое и дифференциально-диагностическое значение исследования плеврального пунктата 124.5 KB
  Синдром плеврального выпота (ПВ) - это синдром, характеризующийся скоплением жидкости (воспалительного/невоспалительного характера) в плевральной полости, являясь чаще всего синдромом и осложнением других заболеваний.
78481. Спонтанный пневмоторакс: основные причины его возникновения, принципы диагностики и лечения. Осложнения пневмоторакса 101.5 KB
  Классификация: Спонтанный возникающий без предшествующего травматического воздействия или других явных причин; Травматический вызванный прямой или опосредованной травмой грудной клетки; Ятрогенный пневмоторакс который возникает как непреднамеренное или неизбежное следствие диагностического или терапевтического вмешательства; Спонтанный пневмоторакс: Первичный идиопатический возникают у ранее здоровых лиц в результате разрыва субплевральных эмфизематозных булл обычно расположенных в верхушечных отделах легкого. Вторичный...
78482. Синдром бронхиальной обструкции (БО). Основные причины развития БО. Функциональные характеристики обратимой и необратимой БО 88.5 KB
  Синдром бронхиальной обструкции БОС – это патологическое состояние связанное с нарушением бронхиальной проходимости и последующим увеличением сопротивления потоку воздуха при вентиляции. Причины механизмы развития БОС: Инфекционный ОРВИ бронхит бронхиолит ХОБЛ пневмония туберкулез; Аллергический бронхиальная астма экзогенный аллергический альвеолит бронхолегочный аспергиллез; Обтурационный инородные тела дыхательных путей; Гемодинамический заболевания сердечно-сосудистой системы с развитием сердечной недостаточности;...
78483. Обратимая бронхиальная обструкция: бронхиальная астма (БА). Критерии постановки диагноза и тактика ведения больных при интермиттирующем и персистирующем течении БА 132 KB
  Бронхиальная астма (БА) - хроническое персистирующее воспаление бронхиального дерева с преобладающей ролью эозинофилов и тучных клеток, ведущее к гиперреактивности бронхов с их транзиторным спазмом, отеком слизистой оболочки, гиперсекрецией вязкой мокроты, обструктивными нарушениями
78484. Необратимая бронхиальная обструкция: хроническая обструктивная болезнь легких (ХОБЛ). Основные причины развития ХОБЛ. Критерии постановки диагноза с учетом фенотипических различий ХОБЛ 124.5 KB
  Основные причины развития ХОБЛ. Критерии постановки диагноза с учетом фенотипических различий ХОБЛ синего и розового типа. Хроническая обструктивная болезнь легких ХОБЛ это собирательное понятие объединяющее хронические воспалительные заболевания респираторной системы с преимущественным поражением дистальных отделов дыхательных путей с необратимой или частично обратимой бронхиальной обструкцией которые характеризуются постоянным прогрессированием и нарастающей хронической ДН.