Презентация по информатике "Массивы"

Подписи к слайдам:

Массивы

Программирование на языке Паскаль

<number>

  • Массивы
  • Основные этапы работы с массивами
  • Способы заполнения одномерных массивов
  • Вывод массива на экран
  • Обработка массивов
  • Максимальный элемент массива
  • Обработка одномерных массивов
  • Сортировка массивов
  • Поиск в массиве
Программирование на языке Паскаль

<number>

Тема 1. Массивы Типы данных

Типы данных в ПАСКАЛЕ

Простые

Сложные

Стандартные

Нестандартные

Строка

Массив

Запись

Множество

Файл

Вещественный

Целый

Символьный

Логический

Перечисляемый

Ограниченный

В практической деятельности человека часто используются таблицы и списки.

Например:

  • Список учеников в журнале;
  • Список среднесуточной температуры месяца;
  • Таблица умножения.
  • Иванов
  • Петров
  • Сидоров
  • Кошкин
  • Мышкин
  • 100
  • 120
  • 120
  • 130
  • 140
  • 140
  • 120
  • 150
  • 160
  • 140
  • ...

  • 180

1

2

3

4

5

6

7

8

9

10

1

1

2

3

4

5

6

7

8

9

10

2

2

4

6

8

10

12

14

16

18

20

3

3

6

9

12

15

18

21

24

27

30

4

4

8

12

16

20

24

28

32

36

40

5

5

10

15

20

25

30

35

40

45

50

6

6

12

18

24

30

36

42

48

54

60

Элементы списков и номера строк и столбцов всегда нумеруются

<number>

Массивы

Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.

Особенности:

    • все элементы имеют один тип
    • весь массив имеет одно имя
    • все элементы упорядочены
    • все элементы расположены в памяти рядом
    • Примеры:

    • список учеников в классе
    • квартиры в доме
    • школы в городе
    • данные о температуре воздуха за год

Массив

это упорядоченный по номерам набор значений, объединенных общим типом и именем

Каждое значение в массиве называется элементом. Номер элемента в списке называется индексом.

Тип элемента может быть любым (символьные или числовые), принятым в языке ПАСКАЛЬ, кроме файлового типа.

Тип элемента называется базовым типом.

Элемент массива представляется как переменная с индексом или с индексами: A[5] S[k+1] B[3,5].

Виды массивов

Одномерный

(содержит одну строку или один столбец)

Двумерный (содержит N строк,

M столбцов)

10

12

8

10

9

8

8

Например, температура воздуха за неделю.

1

1

2

4

3

9

4

16

Например, значение функции y=x2

x y

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

Многомерный

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

Шкаф – это массив.

Ящики – это индексы.

Содержимое ящиков – элементы массива.

Доступ к содержимому конкретного ящика (элемента массива) осуществляется после указания шкафа –имени массива – и номера ящика – индекса массива.

1

2

3

4

5

Шкаф

Одномерный массив

<number>

Массивы

5

10

15

20

25

1

2

3

4

5

A

массив

3

15

НОМЕР элемента массива

(ИНДЕКС)

A[1]

A[2]

A[3]

A[4]

A[5]

ЗНАЧЕНИЕ элемента массива

A[2]

НОМЕР (ИНДЕКС) элемента массива: 2

ЗНАЧЕНИЕ элемента массива: 10

Характеристики массива
  • Имя задается правилами задания имен идентификаторов.
  • Индекс (порядковый номер элемента массива) – местоположение элемента в массиве.
  • Размер - количество элементов массива.
  • Размерность - количество индексов массива.
Доступ к элементу

Обращение к любому элементу массива происходит по имени массива и его номеру.

1

2

3

4

T[4]:=4;

5

10

15

20

25

А[2]:=10;

1 2 3 4 5

А

Т

1

2

3

4

Обращение к конкретному элементу массива осуществляется путем указания имени массива и индекса этого элемента в [ ] :

Name[15], Temperature[10], Kino[5,6]

В качестве индексов массивов можно использовать переменные целого типа:

Элементы массивов используются в выражениях также, как и обычные переменные:

Name[15]:= ‘ Иванов ‘;

Sum:=Sum+Temperature[10];

Kino[5,6]:=‘Свободно ‘ ;

Name[i], Temperature[k], Kino[i,j]

Типы массива

Тип таблицы

Целый

Вещественный

Литерный

температура воздуха за месяц

вес учеников класса

список класса

Основные этапы работы с массивами

2. Заполнение массива данными

3. Обработка (преобразование) массива

4. Вывод массива или

отдельных данных на экран

1. Объявление массива

Объявление массивы (I способ)

Для того, чтобы использовать массив в программе, его нужно описать в разделе описаний:

Var имя_массива : array [тип индексов] of тип_элементов;

Имя массива выбираем по основным правилам имен идентификаторов.

Тип индексов: [начальный_индекс . . конечный_индекс ]

Например: [1..5 ] [10..100 ] [-10..10 ]

Например:

Var

Name: array [1..30] of string;

Temperature : array [1..31] of real;

Объявление массивов

Зачем объявлять?

    • определить имя массива
    • определить тип массива
    • определить число элементов
    • выделить место в памяти
    • Массив целых чисел:

      Размер через константу:

имя

начальный индекс

конечный индекс

тип

элементов

var A: array[1.. ] of integer;

const N=5;

N

var A : array[ 1 .. 5 ] of integer ;

Объявление массивов

Массивы других типов:

Другой диапазон индексов:

Индексы других типов:

var X, Y: array [1..10] of real;

C: array [1..20] of char;

var Q: array [0..9] of real;

C: array [-5..13] of char;

var A: array ['A'..'Z'] of real;

B: array [False..True] of integer;

...

A['C'] := 3.14259*A['B'];

B[False] := B[False] + 1;

  • Не обязательно начинается с 0 или с 1.
  • Необходимо, чтобы номер последнего элемента был больше, чем номер первого элемента:
  • var А: array [-5..4] of integer;
  • Нумеровать элемент массива можно не только целыми числами. Нумератором может быть любой порядковый тип данных (перечисляемый, интервальный, символьный, логический), а также произвольный тип, созданный на их основе.

Нумерация элемента массива

Объявление массивы (II способ) В языке Паскаль имеется другая форма описания, состоящая из 2-х этапов.
  • Сначала в разделе описания типов TYPE указывается тип массива.
  • Затем в разделе переменных VAR перечисляются массивы, относящиеся к указанному типу.
  • Форма объявления массива имеет вид: TYPE имя типа = ARRAY[t1] OF t2; VAR имя массива: имя типа; где t1 – тип индекса; t2 – базовый тип элементов массива. Например:

TYPE MAS = ARRAY[1..10] OF REAL;

VAR R:MAS;

<number>

Что неправильно?

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

...

A[5] := 4.5;

[1..10]

var a: array ['z'..'a'] of integer;

...

A['B'] := 15;

A[2]

[1..10]

var a: array [0..9] of integer;

...

A[10] := 'X';

Способы заполнения одномерных массивов
  • Команда присваивания:
  • непосредственное присваивание значений элементам A[1]:=7; A[2]:=77; A[3]:=33; и т. д.;
  • часто требуется обнуление ячеек массива;
  • с помощью формул;
  • генерация (randomize) и присваивание значений с помощью функции A[I]:=random(q-p+1)+p; qp;
  • с помощью CONST;
  • ввод значений элементов с клавиатуры;
Заполнение массива с помощью команды присваивания

10

12

8

10

9

8

8

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

Аксенов

Бобров

Веснин

Гончаров

Давыдов

TEMP: array [1..7] of integer;

SP: array [1..5] of string;

BEGIN TEMP[1]:=10; TEMP[2]:=12; TEMP[3]:=8; TEMP[4]:=10; TEMP[5]:=9; TEMP[6]:=8; TEMP[7]:=8;

BEGIN SP[1]:=‘Аксенов’; SP[2]:=‘Бобров’; SP[3]:=‘Веснин’; SP[4]:=‘Гончаров’; SP[5]:=‘Давыдов’;

Заполнение массивов с помощью команды присваивания

For i:=1 to 6 do begin

a[i]:=i*i;

write(a[i]:4);

end;

For i:=1 to 6 do

begin

a[i]:=0;

write(a[i]:4);

end;

Задание с помощью формул:

Заполнение нулями:

1 4 9 16 25 36

0 0 0 0 0 0

Заполнение массива вводом с клавиатуры

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

for i:=1 to 7 do begin write(‘Введите ‘,i,’температуру ‘); readln(TEMP[i]);

end;

for i:=1 to 5 do begin write(‘Введите ‘,i,’ученика ‘); readln(SP[i]);

end;

for i:=1 to 5 do

begin

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

read (a[i]);

end;

a[1] =

a[2] =

a[3] =

a[4] =

a[5] =

5

12

34

56

13

Заполнение массивов постоянными значениями

Можно задавать постоянный массив в разделе описания констант

const x: array [1..10] of integer=(4,6,3,5,2,1,7,8,9,13);

const y: array [1..8] of char=('a','b','c','d','e','f','g','h');

Заполнение массивов случайными числами

Задание с помощью генератора случайных чисел

Randomize;

i:=1 to n do

begin

a[i]:=random(100);

write(a[i]:4);

end;

Алгоритм состоит из трех пунктов:

  • Перезапустить генератор случайных чисел.
  • Ввести количество элементов n (или сгенерировать случайное значение n).
  • Сгенерировать значения для всех элементов.
  • {1 - перезапускаем генератор случайных чисел} randomize; {2 - генерируем случайное значение n} n:=random(maxN); {3 - генерируем n элементов массива} for i:=1 to n do a[i]:=random(100); {каждый элемент примет значение из интервала 0..99}

for

Информация об используемых стандартных процедурах и функциях:
  • Randomize - инициализирует генератор случайных чисел случайным значением (случайное значение зависит от момента перезапуска, т.е. зависит от времени).
  • Язык Pascal имеют функцию – датчик случайных чисел:
  • Random(N) - возвращает случайное целое число, находящееся в интервале 0 .. (N-1) Random, тип REAL присваивается случайное значение от 0 до 0.99999999.
  • Если N<=0, то Random всегда будет возвращать 0. Чтобы получить значения в интервале, отличном от [0..N-1], необходимо к значению, возвращаемому Random, прибавить смещение начала интервала.
  • Общий случай функции на [p;q]: random(q-p+1)+p; qp;

Пример 1: необходим интервал [-50 .. 50]. Длина интервала 101, смещение начала интервала -50. random(101)-50 Пример 2: необходим интервал [20 .. 30]. Длина интервала - 11, смещение начала интервала 20. random(11)+20

Вывод массива на экран

writeln('Массив A:');

for i:=1 to N do write(a[i]:4);

Массив A:

10 24 68 112 26

writeln('Массив A:');

for i:=1 to N do writeln(a[i]:4);

Массив A:

10

24

68

112

26

Вывод элементов массива построчно (в столбик)

Вывод элементов массива в строку

Program Random_mas;

Var i: integer;

Ran : array [1..10] of integer;

Begin

Randomize;

For i:=1 to 10 do

begin

ran[i]:=random(101);

writeln(ran[i]);

end;

end.

Задача

Заполнить массив случайными числами из интервала [0;100] и вывести его на экран компьютера.

2

56

78

14

47

9

19

35

51

82

ВОПРОСЫ

Как изменить программу, чтобы выводились числа [-20;20]?

Как изменить программу, чтобы выводились числа типа REAL?

Как изменить программу, чтобы выводились элементы массива в строку?

ran[i]:=random(41)-20;

ran[i]:=random;

write(ran[i]:5);

План программы для работы с массивами

Program Task;

const n=….; (количество элементов массива)

var

<имя массива>: array [1..n] of <тип>;

i:integer;………….

BEGIN

writeln(‘Программу составили...');

{заполнение массива одним из способов}

for i:=1 to n do

begin

……

end;

{Печать массива одним из способов}

for i:=1 to n do

begin

…….

end;

Команды обработки массива

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

END.

ПРАКТИЧЕСКАЯ РАБОТА «ЗАПОЛНЕНИЕ И ВЫВОД МАССИВОВ»
  • Заполнить и вывести на экран одномерный массив целых чисел.
  • {******* заполнение массива c случайными числами *******}
  • Заполнить и вывести на экран одномерный массив целых чисел.
  • {******* заполнение массива c клавиатуры *******}
  • Заполнить и вывести на экран одномерный массив символов.
  • {******* заполнение массива c в разделе CONST *******}
Домашнее задание
  • Заполнить массив нулями и вывести значения в строку.
  • Заполнить массив дробными и отрицательными значениями, используя случайные числа. Вывести элементы массива построчно.
  • Заполнить и вывести на экран одномерный массив, содержащий 200 одинаковых элементов.

Итоги урока:

На этом уроке мы узнали:

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

В оглавление

Программирование на языке Паскаль

<number>

Тема 2. Обработка одномерных массивов Вопросы:
      • Что такое массив? Каковы его характеристики?
      • Перечислить способы описания массива?
      • Перечислить способы заполнения массива?
      • Каковы отличие вывода в строку и в столбец?
Основная классификация обработки элементов массива:

задачи заполнения

задачи подсчета

задачи анализа

задачи поиска

задачи перестановки

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

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

Примеры типовые задачи:
  • вычисление суммы и произведения элементов массива (для числовых массивов);
  • вычисление среднего арифметического, геометрического элементов массива;
  • замена элементов массива по условию;
  • подсчет заданных элементов в массиве;
  • нахождение в массиве заданного элемента;
  • поиск в массиве максимального (минимального) элемента;
  • определение индекса максимального (минимального) значения;
  • сортировка элементов массива;
  • перестановка элементов массива по заданному правилу;
  • удаление и вставка элемента.
Поиск элементов массива

If условие поиска then { для поиска элементов} write(a[i]);

{ для поиска номера элементов} k:=i; или write(i:4);

Подсчет заданных элементов в массиве по условию

четные

A[i] mod 2 = 0

нечетные

A[i] mod 2 <> 0

кратные

A[i] mod k = 0

некратные

A[i] mod k <> 0

на четных местах

i mod 2 = 0

на нечетных местах

i mod 2 <> 0

положительные

A[i] > 0

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

A[i] >= 0

в интервале (х1,х2)

(A [i]>x1) and (A [i]<x2)

Условия обработки элементов массива:

Program Poisk_mas;

Var i, x: integer;

A : array [1..20] of integer;

c: string;

Begin

Randomize;

Write ('Zadayte chislo X ');

readln (x);

c:='v massive net chisla x';

For i:=1 to 20 do

begin

a[i]:=random(10);

writeln(A[i]);

if a[i]=x then c:='v massive est chislo x';

end;

writeln (c);

end.

Задача

Определить, содержит ли массив A[1..20] случайных чисел число Х, введенное с клавиатуры.

Нахождение в массиве заданного элемента

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

program vyvod_nomer;

var

mas:array[1..31] of Integer;

i:integer;

Begin

{ блок ввода элементов массива }

For i:=1 to 31 do

begin

if mas[i]<=9 then

writeln(mas[i],’ осадков выпадет',i,' января');

end;

End.

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

Задача

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

Program Sum_mas;

uses Crt;

Var i: integer;

Sum : real;

M : array [1..5] of Real;

begin

Clrscr;

For i:=1 to 5 do

begin

write ('m[',i,']=');

readln(m[i]);

end;

sum:=0;

For i:=1 to 5 do

Sum:=sum+m[i];

Writeln ('Sum=',sum:6:2);

readln;

end.

Начало

i:=1, 5

Ввести m[i]

Sum:=0

i:=1, 5

Sum:=sum+m[i]

Вывести Sum

Конец

Замена элементов

Задача

Заменить в массиве четные элементы на квадраты этих значений.

Program zamena;

var

mas:array[1..10] of Integer;

i:integer;

Begin

{ блок ввода элементов массива }

For i:=1 to 10 do

if mas[i] mod 2=0 then

mas[i]:=sqr(mas[i] );

{ блок вывода элементов получившегося массива }

End.

program sr_geo;

const n = 15; a = – 20; b = 10;

type mas = array [1..n] of integer;

var i: integer; m: mas; sr, p:real;

begin

randomize;

for i:=1 to n do

begin

m[i]:= random(b – a) + a;

write(m[i]:6);

end;

begin

p := 1;

for i:= 1 to n do p := p * m[i];

sg:= exp((1 / n)*ln(abs(p)));

writeln ('среднее геометрическое элементов массива = ', sg:6:2);

readln;

end.

Задача

Вычислить среднее геометрическое 15 чисел, заданных случайным образом.

Подсчет заданных элементов в массиве

нет

k := 0, 9

X[k]:=случ(9)

начало

вывод X[k]

R:=0

k := 0, 9

X[k] = k

R:=R+1

вывод R

конец

да

Program kolichestvo;

var X:array[0..9] of byte;

k, R : byte;

begin

{ввод элементов массива}

{проверка на совпадение}

R:=0;

for k:=0 to 9 do

if X[k]=k then R:=R+1;

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

write('совпали со своими индексами ', R, ' элементов');

end.

Массив из 10 элементов с индексами от 0 до 9 заполняется случайным образом цифрами от 0 до 9. Определить, значения скольких элементов совпадут с индексами этих элементов.

Задача 1.

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

Рекомендуемый вид экрана при работе программы:

Введите температуру воздуха за неделю.

1 день= 2

2 день= 0

3 день= -3

4 день= 1

5 день= 3

6 день= -2

7 день= 0

Средняя температура: 0.00 град.

Задание для практической работы:

Задача 2

Написать программу, которая определяет, сколько раз в массиве случайных чисел A[1..100] встречается число Х, введенное с клавиатуры.

Задания для практической работы:

program my; program my; var i,s:integer; mas:array[1..10] of integer; begin s:=0; for i:=1 to 10 do begin mas[i]:=random(201)-100; writeln(mas[i]); s:=s+mas[i]; end; writeln('summa=',s); i:=1; s:=0; while mas[i]>0 do begin s:=s+mas[i]; end; writeln('summa2=',s); end.

Дополнительная задача:

Напишите программу подсчета суммы всех чисел и суммы положительных чисел до первого отрицательного или равного 0 в массиве из 10 элементов. Массив заполнить случайным образом.

Домашнее задание

Задача 1.

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

Рекомендуемый вид экрана при работе программы:

После ввода каждого числа нажмите <ENTER>

A[1]= 12

A[2]= 0

A[3]= -3

A[4]= 1

A[5]= 0

В массива 3 ненулевых элемента

Задача 2.

Написать программу, которая вычисляет среднее арифметическое ненулевых элементов массива М[1..100], элементы которого вычисляются по формуле:

М[i]=sin(i)*cos(i)

Задача 3.

Написать программу, которая проверяет, образуют ли элементы массива Х[1..10], введенного с клавиатуры неубывающую последовательность.

Домашнее задание

Обработка одномерных массивов (продолжение) Вопросы:
    • Перечислить основные типы задач на обработку массива.
    • Написать формулу нахождения суммы элементов массива (произведения).
    • Написать формулу подсчета количества элементов по условию.
    • Каковы условия поиска элементов?

Значения элементов двух массивов А и В размером 1 х 100 задаются с помощью следующего фрагмента программы:

for i:=1 tо 100 do

A[i] := 50 – i;

for i:=1 tо 100 do

B[i] := A[i] + 49;

Сколько элементов массива В будут иметь отрицательные значения?

1) 1 2) 10 3) 50 4) 100

СУММА ДВУХ ОДИНАКОВЫХ ПО РАЗМЕРУ МАССИВОВ

Заполнить и вывести на экран два одинаковых по размеру массива: А и B.

Найти массив C, каждый элемент которого равен сумме соответствующих элементов массивов

А и В: C[i]=A[i]+B[i].

Задача

Program Summa_Mass;

Type mas= array[1..100] of integer;

var a, b, c: mas;

I, n: integer;

Begin

n:=20;

writeln('Ввoд массива А:);

{ заполнение исходного массива A }

writeln('Ввод массива В:);

{ заполнение исходного массива В }

{ вывод на экран массивов А и B }

{ формирование нового массива С }

for i:=1 to n do c[i]:=a[i]+b[i];

write(' C: ');

for i:=1 to n do write(' ',c[i]);

End.

ОБЪЕДИНЕНИЕ ДВУХ МАССИВОВ С ЧЕРЕДОВАНИЕМ ЭЛЕМЕНТОВ

ЗАДАЧА

Объединить два массива A и B,содержащих по N элементов в один массив С, который будет содержать 2*N элементов, т.е. получить массив C=(а1,b1,a2,b2,..,an,bn).

Program Ob_Mass;

type massiv=array[1..20] of integer;

var a,b,c: massiv;

I, n: integer;

Begin

n:=10;

for i:=1 to n do

begin

write('Элемент [',i,']='); readln(a[i]);

end;

writeln;

for i:=1 to n do

begin

write('Элемент [',i,']='); readln(b[i]);

end;

write('Массив А: ');

for i:=1 to n do

begin

write(a[i]:5);

end;

writeln;

write('Массив B: ');

for i:=1 to n do

begin

write(b[i]:5);

end;

writeln;

for i:=1 to n do

begin

c[2*i-1]:=a[i];

c[2*i]:=b[i]

end;

write('Массив C: ');

for i:=1 to 2*n do

begin

write(c[i]:5);

end;

End.

ФОРМИРОВАНИЕ МАССИВА ИЗ ЭЛЕМЕНТОВ ДРУГОГО МАССИВА, УДОВЛЕТВОРЯЮЩИХ ЗАДАННОМУ УСЛОВИЮ

ЗАДАЧА

Требуется из данного массива А, состоящего из N элементов, выбрать элементы, удовлетворяющие заданному (пусть А(i)>T (с клавиатуры)), и сформировать из них массив B.

Исходный массив А: 4 6 8 2 23 1 9

Условие: A(i)>=8

Новый массив B: 8 23 9

Особенность решения: Индексы элементов массивов A и B не совпадают, так как не все элементы массива A включаются в массив B.

Program Massiv_po_Uslowiu;

{раздел описания}

Begin

{ заполнение исходного массива A }

writeln;

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

{ формирование массива В по условию }

write('Введите параметр условия: ');

readln(t);

k:=0; {k- счетчик найденных элементов }

for i:=1 to n do

if a[i]>=t then

begin

k:=k+1;

b[k]:=a[i];

end;

{ вывод на экран нового массива B }

For i:=1 to k do write (b[i], ‘ ‘);

End.

Программирование на языке Паскаль

<number>

Максимальный элемент массива

<number>

Максимальный элемент

Задача: найти в массиве максимальный элемент.

Алгоритм:

Псевдокод:

{ считаем, что первый элемент – максимальный }

for i:=2 to N do

if a[i] > { максимального } then

{ запомнить новый максимальный элемент a[i] }

Почему цикл от i=2?

?

<number>

Максимальный элемент

max := a[1]; { считаем, что первый – максимальный }

iMax := 1;

for i:=2 to N do { проверяем все остальные }

if a[i] > max then { нашли новый максимальный }

begin

max := a[i]; { запомнить a[i] }

iMax := i; { запомнить i }

end;

Дополнение: как найти номер максимального элемента?

Как упростить?

?

По номеру элемента iMax всегда можно найти его значение a[iMax]. Поэтому везде меняем max на a[iMax] и убираем переменную max.

a[iMax]

<number>

Программа

program qq;

const N = 5;

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

i, iMax: integer;

begin

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

for i:=1 to N do begin

a[i] := random(100) + 50;

write(a[i]:4);

end;

iMax := 1; { считаем, что первый – максимальный }

for i:=2 to N do { проверяем все остальные }

if a[i] > a[iMax] then { новый максимальный }

iMax := i; { запомнить i }

writeln; {перейти на новую строку}

writeln('Максимальный элемент a[', iMax, ']=', a[iMax]);

end.

for i:=1 to N do begin

a[i] := random(100) + 50;

write(a[i]:4);

end;

iMax := 1; { считаем, что первый – максимальный }

for i:=2 to N do { проверяем все остальные }

if a[i] > a[iMax] then { новый максимальный }

iMax := i; { запомнить i }

случайные числа в интервале [50,150)

поиск максимального

Program Max_mas;

Var i:integer;

max: real;

A : array [1..10] of real;

begin

For i:=1 to 10 do

begin

a[i]:=sin(i)*sqr(i);

writeln(A[i]:8:3);

end;

max:=A[1];

For i:=2 to 10 do

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

writeln;

writeln ('max=', max:8:3);

end.

Задача

Заполнить массив значениями, вычисляемыми по формуле:

a[i]:=sin i *i2

Вывести элементы этого массива на экран компьютера и найти максимальное значение среди них.

<number>

Задания

«4»: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива.

Пример:

Введите пять чисел:

4 15 3 10 14

среднее арифметическое 9.200

«5»: Ввести c клавиатуры массив из 5 элементов, найти минимальный из них.

Пример:

Введите пять чисел:

4 15 3 10 14

минимальный элемент 3

При изменении N остальная программа не должна изменяться!

!

<number>

Задания

«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем максимальный и минимальный элементы и их номера.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0

максимальный a[4]=10

минимальный a[8]=-10

«5»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем два максимальных элемента и их номера.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0

максимальные a[4]=10, a[7]=8

Обработка одномерного массива (продолжение)

Задача

Найти минимальную из сумм a1 + an; a2 + an-1; …, где a1,a2, … an – элементы массива.

program min_sum;

const n = 14;

type mas = array [1..n] of integer;

var i: integer; m: mas;

begin

randomize;

for i:=1 to n do

begin

m[i]:= random(100) - 30;

write(m[i]:6);

end;

min:=a[1] + a[n];

for i : = 2 to n div 2 do

if min > a[i] + a[n – i + 1] then min := a[i] + a[n – i + 1];

writeln ('минимальная сумма равна ', min)

end.

<number>

Реверс массива

Задача: переставить элементы массива в обратном порядке.

Алгоритм:

поменять местами A[1] и A[N], A[2] и A[N-1], …

Псевдокод:

3

5

9

7

7

9

5

3

1

2

N-1

N

1

2

N-1

N

for i:=1 to N do

{ поменять местами A[i] и A[N+1-i] }

сумма индексов N+1

Что неверно?

?

N div 2

do

<number>

Как переставить элементы?

2

3

1

Задача: поменять местами содержимое двух чашек.

Задача: поменять местами содержимое двух ячеек памяти.

4

6

?

4

6

4

x

y

c

c := x;

x := y;

y := c;

x := y;

y := x;

3

2

1

Можно ли обойтись без c?

?

<number>

Программа

program qq;

const N = 10;

var A: array[1..N] of integer;

i, c: integer;

begin

{ заполнить массив }

{ вывести исходный массив }

{ вывести полученный массив }

end.

for i:=1 to N div 2 do begin

c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c;

end;

<number>

Циклический сдвиг

Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.

Алгоритм:

A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];

Цикл:

3

5

8

1

9

7

1

2

3

4

N-1

N

5

8

1

9

7

3

for i:=1 to N-1 do

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

Что неверно?

?

почему не N?

<number>

Программа

program qq;

const N = 10;

var A: array[1..N] of integer;

i, c: integer;

begin

{ заполнить массив }

{ вывести исходный массив }

{ вывести полученный массив }

end.

c := A[1];

for i:=1 to N-1 do A[i]:=A[i+1];

A[N] := c;

УДАЛЕНИЕ И ВСТАВКА ЭЛЕМЕНТОВ

Удаление

Вставка

const=10;

var X:array[0..n] of integer;

k : byte;

m: integer;

begin

for k:=0 to n do

begin

X[k]:=random(100)-50;

write(X[k]:4);

end;

Write(‘укажите № удаляемого элемента’);

Readln(m);

for k:=m to n-1 do X[k]=X[k+1];

for k:=1 to n-1 do write(X[k]:4);

end.

const n=9;

var X:array[0..n+1] of integer;

k : byte;

m,p: integer;

begin

for k:=0 to n do

begin

X[k]:=random(100)-50;

write(X[k]:4);

end;

Write(‘укажите № вставляемого элемента’); Readln(m);

for k:=n downto m do X[k+1]=X[k];

Write(‘укажите значение элемента’);

Readln(p);

X[m]:=p;

for k:=1 to n+1 do

write(X[k]:4);

end.

<number>

Задания

«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить инверсию отдельно для 1-ой и 2-ой половин массива.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0

Результат:

-4 10 3 -5 4 0 1 -10 8 -6

«5»: Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить инверсию для каждой трети массива.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0 5 7

Результат:

10 3 -5 4 -10 8 -6 -4 7 5 0 1

<number>

Задания

«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг ВПРАВО.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0

Результат:

0 4 -5 3 10 -4 -6 8 -10 1

«5»: Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента.

Пример:

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

4 -5 3 10 -4 -6 8 -10 1 0 5 7

Результат:

-4 -6 8 -10 1 0 5 7 4 -5 3 10

program perestanovka; program perestanovka; var i,buf,maxi:integer; mas:array[1..10] of integer; begin buf:=0; for i:=1 to 10 do begin mas[i]:=random(21); writeln(mas[i]); end; for i:=1 to 10 do begin if mas[i]>buf then buf:=mas[i]; maxi:=i; end; mas[maxi]:=mas[1]; mas[1]:=buf; for i:=1 to 10 do writeln(mas[i]); еnd.

Задача

Напишите программу, которая поменяет местами первый и наибольший элементы в массиве из 10 целых чисел.

Массив заполнить случайным образом.

Сортировка одномерного массива Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме делителей, …). Алгоритмы: простые и понятные, но неэффективные для больших массивов; метод пузырька метод выбора сложные, но эффективные; «быстрая сортировка» (Quick Sort) сортировка «кучей» (Heap Sort) сортировка слиянием пирамидальная сортировка Метод пузырька Для массивов – самый маленький («легкий» элемент перемещается вверх («всплывает»). Начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами. За 1 проход по массиву один элемент (самый маленький) становится на свое место Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).

program sortirovka_puzyrek;

const N = 10;

var A: array[1..N] of integer;

i, j, c: integer;

begin

{ заполнить массив }

{ вывести исходный массив }

for i:=1 to N-1 do begin

for j:=N-1 downto i do

if A[j] > A[j+1] then begin

с := A[j];

A[j] := A[j+1];

A[j+1] := с;

end;

end;

{ вывести полученный массив }

end.

Метод пузырька с флажком Идея – если при выполнении метода пузырька не было обменов, массив уже отсортирован и остальные проходы не нужны. Реализация: переменная-флаг, показывающая, был ли обмен; если она равна False, то выход.

i := 0;

Repeat

i := i + 1;

flag := False; { сбросить флаг }

for j:=N-1 downto i do

if A[j] > A[j+1] then begin

с := A[j];

A[j] := A[j+1];

A[j+1] := с;

flag := True; { поднять флаг }

end;

until not flag; { выход при flag=False }

Метод выбора Идея: найти минимальный элемент и поставить на первое место (поменять местами с A[1]): из оставшихся найти минимальный элемент и поставить на второе место (поменять местами с A[2]), и т.д.

program sortirovka_vebor;

const N = 10;

var A: array[1..N] of integer;

i, j, c, nMin: integer;

begin

{ заполнить массив }

{ вывести исходный массив }

for i := 1 to N-1 do begin

nMin = i ;

for j:= i+1 to N do

if A[j] < A[nMin] then nMin:=j;

if nMin <> i then begin

c:=A[i];

A[i]:=A[nMin];

A[nMin]:=c;

end;

{ вывести полученный массив }

End.