Разделы презентаций


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

Содержание

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

Слайды и текст этой презентации

Слайд 1Программирование на языке Паскаль Часть II
Тема 1. Массивы

Программирование  на языке Паскаль Часть IIТема 1. Массивы

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

расположенных в памяти рядом.
Особенности:
все элементы имеют один тип
весь массив имеет

одно имя
все элементы расположены в памяти рядом
Примеры:
список учеников в классе
квартиры в доме
школы в городе
данные о температуре воздуха за год
МассивыМассив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.Особенности:все элементы имеют один

Слайд 3Массивы
A
массив
3
15
НОМЕР элемента массива
(ИНДЕКС)
A[1]
A[2]
A[3]
A[4]
A[5]
ЗНАЧЕНИЕ элемента массива
A[2]
НОМЕР (ИНДЕКС) элемента массива: 2
ЗНАЧЕНИЕ элемента

массива: 10

МассивыAмассив315НОМЕР  элемента массива(ИНДЕКС)A[1]A[2]A[3]A[4]A[5]ЗНАЧЕНИЕ элемента массиваA[2]НОМЕР (ИНДЕКС)  элемента массива: 2ЗНАЧЕНИЕ  элемента массива: 10

Слайд 4Объявление массивов
Зачем объявлять?
определить имя массива
определить тип массива
определить число элементов
выделить

место в памяти
Массив целых чисел:


Размер через константу:
имя
начальный индекс
конечный

индекс

тип
элементов


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

const N=5;

N

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

Объявление массивовЗачем объявлять? определить имя массиваопределить тип массиваопределить число элементоввыделить место в памятиМассив целых чисел: Размер через

Слайд 5Объявление массивов
Массивы других типов:
Другой диапазон индексов:
Индексы других типов:
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;

Объявление массивовМассивы других типов: Другой диапазон индексов: Индексы других типов:var X, Y: array [1..10] of real;

Слайд 6Что неправильно?
var a: array[10..1] of integer;
...
A[5] := 4.5;
[1..10]
var a:

array ['z'..'a'] of integer;
...
A['B'] := 15;
A['b']
['a'..'z']
var a: array [0..9]

of integer;
...
A[10] := 'X';
Что неправильно?var a: array[10..1] of integer;... A[5] := 4.5;[1..10]var a: array ['z'..'a'] of integer;... A['B'] := 15;A['b']['a'..'z']var

Слайд 7Заполнение массива
Объявление:



Заполнение одинаковыми числами:
const N = 5;
var A: array[1..N]

of integer;
i: integer;
for i:=1 to N do begin

A[i]:= 8;
end;

i

8

8

8

8

8

A[1]:=8

A[2]:=8

A[3]:=8

A[4]:=8

A[5]:=8

Заполнение массиваОбъявление:Заполнение одинаковыми числами:const N = 5; var A: array[1..N] of integer;  i: integer;for i:=1 to

Слайд 8Заполнение массива
Объявление:



Заполнение последовательными числами:
Z:= 8;
for i:=1 to N do begin

A[i]:= Z;
Z:= Z + 1;
end;
i
8
9
10
11
12
A[1]:=8
A[2]:=9
A[3]:=10
A[4]:=11
A[5]:=12
Z
8
9
10
11
12
13
const N = 5;
var

A: array[1..N] of integer;
i: integer;
Заполнение массиваОбъявление:Заполнение последовательными числами:Z:= 8;for i:=1 to N do begin A[i]:= Z; Z:= Z + 1;end;i89101112A[1]:=8A[2]:=9A[3]:=10A[4]:=11A[5]:=12Z8910111213const N

Слайд 9Заполнение массива
Заполнение последовательными числами:
Z:= 8;
for i:=1 to N do begin

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

begin
A[i]:= i + 7;

Z = i + 7

Заполнение массиваЗаполнение последовательными числами:Z:= 8;for i:=1 to N do begin A[i]:= Z; Z:= Z + 1;end;for i:=1

Слайд 10Массивы
Объявление:
Ввод с клавиатуры:
Поэлементные операции:
Вывод на экран:
const N = 5;
var

a: array[1..N] of integer;
i: integer;
for i:=1 to N

do begin
write('a[', i, ']=');
read ( a[i] );
end;

a[1] =
a[2] =
a[3] =
a[4] =
a[5] =

5
12
34
56
13

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

writeln('Массив A:');
for i:=1 to N do write(a[i]:4);

Массив A:
6 13 35 57 14

МассивыОбъявление:Ввод с клавиатуры:Поэлементные операции:Вывод на экран:const N = 5; var a: array[1..N] of integer;  i: integer;for

Слайд 11Программирование на языке Паскаль Часть II
Тема 2. Максимальный

элемент массива

Программирование  на языке Паскаль  Часть IIТема 2. Максимальный

Слайд 12Максимальный элемент
Задача: найти в массиве максимальный элемент.
Алгоритм:
Псевдокод:
{ считаем, что

первый элемент – максимальный }
for i:=2 to N do

if a[i] > { максимального } then
{ запомнить новый максимальный элемент a[i] }
Максимальный элементЗадача: найти в массиве максимальный элемент.Алгоритм: Псевдокод:{ считаем, что первый элемент – максимальный }for i:=2 to

Слайд 13Максимальный элемент
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]

Максимальный элементmax := a[1]; { считаем, что первый – максимальный }iMax := 1;for i:=2 to N do

Слайд 14Программа
program qq;
const N = 5;
var a: array [1..N] of integer;

i, iMax: integer;
begin
{ здесь нужно ввести массив с

клавиатуры }
iMax := 1; {считаем, что первый – максимальный}
for i:=2 to N do { проверяем все остальные}
if a[i] > a[iMax] then { новый максимальный}
iMax := i; { запомнить i }
writeln; {перейти на новую строку}
writeln('Максимальный элемент a[', iMax, ']=', a[iMax]);
end.

iMax := 1; {считаем, что первый – максимальный}
for i:=2 to N do { проверяем все остальные}
if a[i] > a[iMax] then { новый максимальный}
iMax := i; { запомнить i }

Программаprogram qq;const N = 5;var a: array [1..N] of integer;  i, iMax: integer;begin { здесь нужно

Слайд 15Программирование на языке Паскаль Часть II
Тема 3. Обработка массивов

Программирование  на языке Паскаль  Часть IIТема 3. Обработка массивов

Слайд 16Случайные процессы
Случайно…
встретить друга на улице
разбить тарелку
найти 10 рублей
выиграть в лотерею
Случайный

выбор:
жеребьевка на соревнованиях
выигравшие номера в лотерее
Как получить случайность?

Случайные процессыСлучайно…встретить друга на улицеразбить тарелкунайти 10 рублейвыиграть в лотереюСлучайный выбор:жеребьевка на  соревнованияхвыигравшие номера  в

Слайд 17Случайные числа на компьютере
Электронный генератор
нужно специальное устройство
нельзя воспроизвести результаты
318458191041
564321
209938992481
458191
938992
малый период

(последовательность повторяется через 106 чисел)
Метод середины квадрата (Дж. фон Нейман)
в

квадрате

Псевдослучайные числа – обладают свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле.

Случайные числа на компьютереЭлектронный генераторнужно специальное устройствонельзя воспроизвести результаты318458191041564321209938992481458191938992малый период  (последовательность повторяется через 106 чисел)Метод середины

Слайд 18Распределение случайных чисел
Модель: снежинки падают на отрезок [a,b]
распределение
равномерное
неравномерное

Распределение случайных чиселМодель: снежинки падают на отрезок [a,b]распределениеравномерноенеравномерное

Слайд 19Распределение случайных чисел
Особенности:
распределение – это характеристика всей последовательности, а

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

равномерное распределение
неравномерных – много
любое неравномерное можно получить с помощью равномерного

a

b

a

b

равномерное распределение

неравномерное распределение

Распределение случайных чиселОсобенности: распределение – это характеристика всей последовательности, а не одного числаравномерное распределение одно, компьютерные датчики

Слайд 20Генератор случайных чисел в Паскале
Целые числа в интервале [0,N):

var x: integer;
...
x := random ( 100 );

{ интервал [0,99] }
Вещественные числа в интервале [0,1)
var x: real;
...
x := random; { интервал [0,1) }

Генератор случайных чисел в ПаскалеЦелые числа в интервале [0,N):  var x: integer; ... x := random

Слайд 21Генератор случайных чисел в Паскале
Целые числа на отрезке [a,b]:

var x: integer;
...
x := random ( N );


x := a + random ( N );

[0,N-1]

[a,a+N-1]

b = a + N - 1

N = b – a + 1

x := a + random ( b-a+1 );

Генератор случайных чисел в ПаскалеЦелые числа на отрезке [a,b]:  var x: integer; ... x := random

Слайд 22Заполнение массива случайными числами
const N = 5;
var A: array [1..N]

of integer;
i: integer;
begin
writeln('Исходный массив:');
for i:=1 to

N do begin
A[i] := random(100) + 50;
write(A[i]:4);
end;
...

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

Заполнение массива случайными числамиconst N = 5;var A: array [1..N] of integer;  i: integer;begin writeln('Исходный массив:');

Слайд 23Подсчет элементов
Задача: заполнить массив случайными числами в интервале [-1,1] и

подсчитать количество нулевых элементов.
Идея: используем переменную-счётчик.
Решение:
записать в счётчик ноль
просмотреть все

элементы массива: если очередной элемент = 0, то увеличить счётчик на 1
вывести значение счётчика
Подсчет элементовЗадача: заполнить массив случайными числами в интервале [-1,1] и подсчитать количество нулевых элементов.Идея: используем переменную-счётчик.Решение:записать в

Слайд 24Подсчет элементов
начало
конец
нет
да
нет
да
count:= 0
i:= 1


count:= count + 1


i:= i

+ 1


пока ни одного не нашли
начать с 1-ого
перейти к следующему
нашли

еще 1
Подсчет элементовначалоконецнетданетда count:= 0 i:= 1count:= count + 1i:= i + 1пока ни одного  не нашлиначать

Слайд 25Подсчет элементов
program qq;
const N = 5;
var A: array [1..N] of

integer;
i, count: integer;
begin
{ здесь надо заполнить массив

}
count:= 0;
for i:=1 to N do
if A[i] = 0 then count:= count + 1;
writeln('Нулевых элементов: ', count);
end.

for i:=1 to N do
if A[i] = 0 then count:= count + 1;

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

Подсчет элементовprogram qq;const N = 5;var A: array [1..N] of integer;  i, count: integer;begin { здесь

Слайд 26Сумма выбранных элементов
Задача: заполнить массив случайными числами в интервале [-10,10]

и подсчитать сумму положительных элементов.
Идея: используем переменную S для накопления

суммы.


Решение:
записать в переменную S ноль
просмотреть все элементы массива: если очередной элемент > 0, то добавить к сумме этот элемент
вывести значение суммы

S:=0

S:= A[1]

S:= A[1]+A[2]

S:= A[1]+A[2]+A[3]

S:= A[1]+A[2]+…+A[N]

S:= S+A[i]

Сумма выбранных элементовЗадача: заполнить массив случайными числами в интервале [-10,10] и подсчитать сумму положительных элементов.Идея: используем переменную

Слайд 27Сумма выбранных элементов
начало
конец
нет
да
нет
да
S:= 0
i:= 1


S:= S + A[i]


i:=

i + 1


пока ни одного не нашли
начать с 1-ого
перейти к

следующему

нашли еще 1

Сумма выбранных элементовначалоконецнетданетда S:= 0 i:= 1S:= S + A[i]i:= i + 1пока ни одного  не

Слайд 28Сумма выбранных элементов
program qq;
const N = 5;
var A: array [1..N]

of integer;
i, S: integer;
begin
{ здесь надо заполнить

массив }
S:= 0;
for i:=1 to N do
if A[i] = 0 then count:= count + 1;
writeln('Cумма полож. элементов: ', S);
end.

for i:=1 to N do
if A[i] > 0 then S:= S + A[i];

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

Сумма выбранных элементовprogram qq;const N = 5;var A: array [1..N] of integer;  i, S: integer;begin {

Слайд 29Поиск в массиве
Задача – найти в массиве элемент, равный X,

или установить, что его нет.
Пример: если в классе ученик

с фамилией Пупкин?
Алгоритм:
начать с 1-ого элемента (i:=1)
если очередной элемент (A[i]) равен X, то закончить поиск
иначе перейти к следующему элементу:

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

Слайд 30Поиск элемента, равного X
начало
конец
нет
да
нет
да
i:= 1


i:= i + 1


начать с 1-ого
перейти

к следующему
‘Не нашли’
‘Есть!’

Поиск элемента, равного Xначалоконецнетданетдаi:= 1i:= i + 1начать с 1-огоперейти к следующему‘Не нашли’‘Есть!’

Слайд 31Поиск элемента в массиве
program qq;
const N=5;
var a:array[1..N] of integer;

i, X: integer;
begin
{ здесь надо заполнить массив }

i:=1;
while A[i]<>X do
i:=i+1;
if i <= N then
writeln('A[', i, ']=', X)
else writeln('Не нашли...');
end.

(i<=N) and (A[i]<>X)

do

Поиск элемента в массивеprogram qq;const N=5;var a:array[1..N] of integer;  i, X: integer;begin  { здесь надо

Слайд 32Реверс массива
Задача: переставить элементы массива в обратном порядке.
Алгоритм:
поменять местами A[1]

и A[N], A[2] и A[N-1], …
Псевдокод:
for i:=1 to N do


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

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

N div 2

do

Реверс массиваЗадача: переставить элементы массива в обратном порядке.Алгоритм:поменять местами A[1] и A[N], A[2] и A[N-1], …Псевдокод:for i:=1

Слайд 33Как переставить элементы?
2
3
1
Задача: поменять местами содержимое двух чашек.
Задача: поменять местами

содержимое двух ячеек памяти.
4
6
?
4
6
4
x
y
c
c := x;
x := y;
y := c;
x

:= y;
y := x;

3

2

1

Как переставить элементы?231Задача: поменять местами содержимое двух чашек.Задача: поменять местами содержимое двух ячеек памяти.46?464xycc := x;x :=

Слайд 34Программа
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;

Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, c: integer;begin { заполнить массив }

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

элемент становится на место последнего.
Алгоритм:
A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];
Цикл:
for i:=1 to N-1

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

почему не N?

Циклический сдвигЗадача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.Алгоритм:A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];Цикл:for

Слайд 36Программа
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;

Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, c: integer;begin { заполнить массив }

Слайд 37Выбор нужных элементов
Задача – найти в массиве элементы, удовлетворяющие некоторому

условию (например, отрицательные), и скопировать их в другой массив.
Примитивное

решение:

const N = 5;
var i: integer;
A, B: array[1..N]
of integer;
begin
{ здесь заполнить массив A }
for i:=1 to N do
if (A[i] < 0) then
B[i]:= A[i];
...
end.

A

B

Выбор нужных элементовЗадача – найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в

Слайд 38Выбор нужных элементов
Решение: ввести счетчик найденных элементов count, очередной элемент

ставится на место B[count].
count:=0;
for i:=1 to N do
if (A[i]

< 0) then begin
B[ ]:= A[i];
count:=count+1;
end;

A

B

count

Выбор нужных элементовРешение: ввести счетчик найденных элементов count, очередной элемент ставится на место B[count].count:=0;for i:=1 to N

Слайд 39Как вывести массив B?
Примитивное решение:
writeln('Выбранные элементы:');
for i:=1 to N do

write(B[i], ' ');
Правильное решение:
writeln('Выбранные элементы:');
for i:=1 to

do
write(B[i], ' ');

count

Как вывести массив B?Примитивное решение:writeln('Выбранные элементы:');for i:=1 to N do write(B[i], ' ');Правильное решение:writeln('Выбранные элементы:');for i:=1 to

Слайд 40Программирование на языке Паскаль Часть II
Тема 4. Сортировка массивов

Программирование  на языке Паскаль  Часть IIТема 4. Сортировка массивов

Слайд 41Сортировка
Сортировка – это расстановка элементов массива в заданном порядке (по

возрастанию, убыванию, последней цифре, сумме делителей, …).
Задача: переставить элементы

массива в порядке возрастания.
Алгоритмы:
простые и понятные, но неэффективные для больших массивов
метод пузырька
метод выбора
сложные, но эффективные
«быстрая сортировка» (Quick Sort)
сортировка «кучей» (Heap Sort)
сортировка слиянием
пирамидальная сортировка

сложность O(N2)

СортировкаСортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме делителей, …).

Слайд 42Метод пузырька
Идея – пузырек воздуха в стакане воды поднимается со

дна вверх.
Для массивов – самый маленький («легкий» элемент перемещается

вверх («всплывает»).

начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами
за 1 проход по массиву один элемент (самый маленький) становится на свое место

1-ый проход

2-ой проход

3-ий проход

Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).

Метод пузырькаИдея – пузырек воздуха в стакане воды поднимается со дна вверх. Для массивов – самый маленький

Слайд 43Программа
1-ый проход:
сравниваются пары
A[N-1] и A[N], A[N-2] и A[N-1]


A[1] и A[2]
A[j] и A[j+1]
2-ой проход
for j:=N-1 downto

2 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;

2

for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;

1

i-ый проход

for j:=N-1 downto i do
...

i

Программа1-ый проход:сравниваются пары A[N-1] и A[N],  A[N-2] и A[N-1] … A[1] и A[2] A[j] и A[j+1]2-ой

Слайд 44Программа
program qq;
const N = 10;
var A: array[1..N] of integer;

i, j, c: integer;
begin
{ заполнить массив }
{ вывести

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







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

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;

i

элементы выше A[i] уже поставлены

Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, j, c: integer;begin { заполнить массив

Слайд 45Метод пузырька с флажком
Идея – если при выполнении метода пузырька

не было обменов, массив уже отсортирован и остальные проходы не

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

repeat
flag := False; { сбросить флаг }
for j:=N-1 downto 1 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 }

flag := False;

flag := True;

not flag;

var flag: boolean;

Метод пузырька с флажкомИдея – если при выполнении метода пузырька не было обменов, массив уже отсортирован и

Слайд 46Метод пузырька с флажком
i := 0;
repeat
i := i +

1;
flag := False; { сбросить флаг }
for j:=N-1

downto 1 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 }

i := 0;

i

i := i + 1;

Метод пузырька с флажкомi := 0;repeat i := i + 1; flag := False; { сбросить флаг

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

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


Для правообладателей

Яндекс.Метрика