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) Необходимо учитывать нестандартное положение русских букв Ё и ё.


 

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

33070. Філософія Нового часу 17.08 KB
  Як і більшість мислителів Нового часу він вважав що завдання філософії створити новий метод наукового пізнання переосмислити завдання науки. Він вказував що правильно знати це знати опосередковано причинами і закликав застосовувати такі нові методи пізнання як індукція дедукція експеримент. Такий метод на думку Бекона мало придатний до пізнання. Усяке пізнання і усякий винахід повинні спиратися на досвід тобто повинні рухатися від вивчення поодиноких фактів до загальних положень.
33071. Рене Декарт 13.65 KB
  У теорії пізнання він розвиває раціоналізм тобто вчення згідно з яким розум думка визнаються найвищою цінністю. Метод наукового пізнання який Декарт розглядає в своїх працях Міркування про метод Правила для керівництва розумом називається аналітичним. Цей метод вимагає ясності і чіткості пізнання розчленування об'єкту на складові частини і вивчення їх руху думки від простого до складного. У теорії пізнання Спіноза розвиває раціоналізм.
33072. Просвітництво 13.8 KB
  Класичним філософом французького Просвітництва був Вольтер 16941778 головні ідеї якого викладені у працях: Філософські листи 1734 Метафізичний трактат 1734 Роздуми про людину 1737 Філософський словник 1764 Філософія історії 1765 та ін. Головне завдання своєї філософії Вольтер вбачає в розвінчуванні релігійної догматики що заважає людям будувати щасливе життя культивуючи неуцтво неосвіченість фанатизм брехню. У філософії природи Вольтер послідовник Ньютона. У теорії пізнання Вольтер прагнув поєднати сенсуалістичний...
33073. Класична німецька філософія 14.81 KB
  Німецька класична філософія охоплює порівняно короткий період який обмежений 80ми роками XVIII століття з одного боку і 1831 роком роком смерті Гегеля з іншою або пізнішою антропологічною матеріалістичною філософією Фейєрбаха який проте увійшов до протиріччя з основним характером німецької філософії цього періоду її ідеалізмом. Основними представниками цієї філософії були основоположник її Иммануил Кант його послідовник Фихте Шеллинг супротивник кантіанської філософії Георг Вільгельм Фрідріх Гегель. Що стосується загальної...
33074. Родоначальником німецької класичної філософії є Іммануїл Кант 13.37 KB
  До Канта вважали що пізнання є результатом дій на людину зовнішніх чинників. Кант перевернув це співвідношення: він проголосив що пізнання і знання є результатом людської насамперед розумової активності. Аналогія з коперниканським переворотом тут цілком очевидна: Коперник зрушив Землю яку до того розглядали нерухомим центром Всесвіту а Кант зрушив людину поклавши край її пасивності.
33075. Система і метод філософії Гегеля 13.77 KB
  Вихідним пунктом філософської концепції Гегеля є тотожність буття та мислення. Мислення з точки зору Гегеля є не лише суб'єктною людською діяльністю а й незалежною від людини об'єктивною сутністю першоосновою всього сущого. Мислення стверджує Гегель відчужує своє буття у формі матерії природи яка є інобуттям цього об'єктивно існуючого мислення або абсолютної ідеї. При цьому Гегель розглядає мислення абсолютну ідею не як нерухому незмінну першосутність а як процес неперервного розвитку пізнання як процес сходження від нижчого до...
33076. Глибоким критиком ідеалістичної системи Гегеля став Л. Фейєрбах, його сучасник, учень, який, однак, не став послідовником свого вчителя 13.54 KB
  Великі зміни в історії суспільства вважав філософ пояснюються змінами форм релігії. Будучи глибоким критиком релігії що існувала на той час Фейєрбах намагався створити свою нову релігію в якій замість культу Бога буде панувати культ людини і любові. Фейєрбах запропонував відмінне від традиційного розуміння філософії її минулого та сучасності ролі в суспільстві і ставлення до релігії. Водночас і сама філософія повинна змінитися: вона не має стати простим чи негативним в гегелівському розумінні запереченням релігії.
33077. Загальна характеристика сучасної світової парадигми 14.29 KB
  Характерна ознака цієї філософії безмежна віра в розум. Особливістю класичної філософії також те що розглядаючи людину та історію вона сконцентрувала свою увагу навколо проблеми свободи та інших гуманістичних цінностей і стверджувала необхідність раціонального пізнання загальнолюдських моральних принципів та ідеалів. Для сучасної філософії характерні такі суттєві риси. цей стиль філософствування починає домінувати в західній філософії; філософію мислення замінює філософія життя .
33078. Прагматизм 12.09 KB
  Дьюі 18591952 вважають що філософія повинна займатись не проблемами філософів а “людськими проблемами†тобто цілями та засобами їх вирішення і таким чином повинна бути перетворена в інтересах того що є вигідним для життя людини. Людина повинна діяти у ірраціональному світі та спроби досягнути об’єктивної істини є безглуздими.