Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

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

Содержание

Программирование на языке Паскаль Часть IIТема 1. Массивы
Программирование  на языке Паскаль Часть IIМассивыМаксимальный элемент массиваОбработка массивовСортировка массивовДвоичный поискСимвольные строкиРекурсивный переборМатрицыФайлы Программирование  на языке Паскаль Часть IIТема 1. Массивы МассивыМассив – это группа однотипных элементов, имеющих общее имя и расположенных в МассивыAмассив315НОМЕР  элемента массива(ИНДЕКС)A[1]A[2]A[3]A[4]A[5]ЗНАЧЕНИЕ элемента массиваA[2]НОМЕР (ИНДЕКС)  элемента массива: 2ЗНАЧЕНИЕ  элемента массива: 10 Объявление массивовЗачем объявлять? определить имя массиваопределить тип массиваопределить число элементоввыделить место в Объявление массивовМассивы других типов: Другой диапазон индексов: Индексы других типов:var X, Y: Что неправильно?var a: array[10..1] of integer;... A[5] := 4.5;[1..10]var a: array ['z'..'a'] Заполнение массиваОбъявление:Заполнение одинаковыми числами:const N = 5; var A: array[1..N] of integer; Заполнение массиваОбъявление:Заполнение последовательными числами:Z:= 8;for i:=1 to N do begin A[i]:= Z; Заполнение массиваЗаполнение последовательными числами:Z:= 8;for i:=1 to N do begin A[i]:= Z; Практикум: заполнение массива«3»: 1. Заполните массив A нулями.	2. Заполните массив A первыми МассивыОбъявление:Ввод с клавиатуры:Поэлементные операции:Вывод на экран:const N = 5; var a: array[1..N] Задания«3»: Ввести c клавиатуры массив из 5 элементов, умножить их на 2 Задания«5»: Ввести c клавиатуры массив из 5 элементов, найти минимальный из них. Практикум: изменение элементов массива«3»: 	1. Увеличить все элементы массива A на 1.	2. Программирование  на языке Паскаль  Часть IIТема 2. Максимальный Максимальный элементЗадача: найти в массиве максимальный элемент.Алгоритм: Псевдокод:{ считаем, что первый элемент Максимальный элементmax := a[1]; { считаем, что первый – максимальный }iMax := Программаprogram qq;const N = 5;var a: array [1..N] of integer;  i, Задания«3»: Ввести с клавиатуры массив из 5 элементов, найти в нем минимальный Задания«5»: Ввести с клавиатуры массив из 5 элементов, найти в нем два Практикум: максимум/минимум«3»: 	1. Найти максимальное значение среди всех элементов массива.	2. Найти минимальное Программирование  на языке Паскаль  Часть IIТема 3. Обработка массивов Случайные процессыСлучайно…встретить друга на улицеразбить тарелкунайти 10 рублейвыиграть в лотереюСлучайный выбор:жеребьевка на Случайные числа на компьютереЭлектронный генераторнужно специальное устройствонельзя воспроизвести результаты318458191041564321209938992481458191938992малый период  (последовательность Распределение случайных чиселМодель: снежинки падают на отрезок [a,b]распределениеравномерноенеравномерное Распределение случайных чиселОсобенности: распределение – это характеристика всей последовательности, а не одного Генератор случайных чисел в ПаскалеЦелые числа в интервале [0,N):  var x: Генератор случайных чисел в ПаскалеЦелые числа на отрезке [a,b]:  var x: Заполнение массива случайными числамиconst N = 5;var A: array [1..N] of integer; Подсчет элементовЗадача: заполнить массив случайными числами в интервале [-1,1] и подсчитать количество Подсчет элементовначалоконецнетданетда count:= 0 i:= 1count:= count + 1i:= i + 1пока Подсчет элементовprogram qq;const N = 5;var A: array [1..N] of integer; Задания«3»: Заполнить массив случайными числами в интервале [-2,2] и подсчитать количество положительных Практикум: подсчёт элементов массива«3»: 	1. Определите, сколько элементов массива A равны 1.	2. Сумма выбранных элементовЗадача: заполнить массив случайными числами в интервале [-10,10] и подсчитать Сумма выбранных элементовначалоконецнетданетда S:= 0 i:= 1S:= S + A[i]i:= i + Сумма выбранных элементовprogram qq;const N = 5;var A: array [1..N] of integer; Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [-10,10] и Практикум: суммы, прозведения…«3»: 1. Вычислить сумму всех элементов массива A.	2. Вычислить сумму Поиск в массивеЗадача – найти в массиве элемент, равный X, или установить, Поиск элемента, равного Xначалоконецнетданетдаi:= 1i:= i + 1начать с 1-огоперейти к следующему‘Не нашли’‘Есть!’ Поиск элемента в массивеprogram qq;const N=5;var a:array[1..N] of integer;  i, X: Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [10..20] и Задания«5»: Заполнить массив из 10 элементов случайными числами в интервале [0..4]и определить, Практикум: суммы, прозведения…«3»: 1. Определите в массиве A номер первого элемента, равного Реверс массиваЗадача: переставить элементы массива в обратном порядке.Алгоритм:поменять местами A[1] и A[N], Как переставить элементы?231Задача: поменять местами содержимое двух чашек.Задача: поменять местами содержимое двух Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, c: Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и Задания«5»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и Циклический сдвигЗадача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, c: Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и Задания«5»: Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и Выбор нужных элементовЗадача – найти в массиве элементы, удовлетворяющие некоторому условию (например, Выбор нужных элементовРешение: ввести счетчик найденных элементов count, очередной элемент ставится на Как вывести массив B?Примитивное решение:writeln('Выбранные элементы:');for i:=1 to N do write(B[i], ' Задания«3»: Заполнить массив случайными числами в интервале  [-10,10] и записать в Задания«5»: Заполнить массив случайными числами и выделить в другой массив все числа, Программирование  на языке Паскаль  Часть IIТема 4. Сортировка массивов СортировкаСортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, Метод пузырькаИдея – пузырек воздуха в стакане воды поднимается со дна вверх. Программа1-ый проход:сравниваются пары A[N-1] и A[N],  A[N-2] и A[N-1] … A[1] Программаprogram qq;const N = 10;var A: array[1..N] of integer;  i, j, Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и Задания«5»: Заполнить массив из 10 элементов случайными числами в интервале [0..100] и Метод пузырька с флажкомИдея – если при выполнении метода пузырька не было Метод пузырька с флажкомi := 0;repeat i := i + 1; flag Метод выбораИдея:найти минимальный элемент и поставить на первое место (поменять местами с Метод выбораfor i := 1 to N-1 do begin nMin:= i ; Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [0..99] и Задания«5»: Заполнить массив из 10 элементов случайными числами в интервале [0..100] и «Быстрая сортировка» (Quick Sort)Идея – более эффективно переставлять элементы, расположенные дальше друг «Быстрая сортировка» (Quick Sort)Медиана – такое значение X, что слева и справа «Быстрая сортировка» (Quick Sort) «Быстрая сортировка» (Quick Sort)procedure QSort ( first, last: integer);var L, R, c, «Быстрая сортировка» (Quick Sort)program qq;const N = 10;var A: array[1..N] of integer;begin Количество перестановок(случайные данные) Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [-50..50] и Программирование  на языке Паскаль  Часть IIТема 5. Двоичный поиск Поиск в массивеЗадача – найти в массиве элемент, равный X, или установить, Двоичный поискX = 7X < 884X > 46X > 6Выбрать средний элемент Двоичный поиск nX := 0; L := 1; R := N; {границы: Сравнение методов поиска Задания«3»: Написать программу, которая сортирует массив по возрастанию и ищет в нем Программирование  на языке Паскаль  Часть IIТема 6. Символьные строки Чем плох массив символов?var B: array[1..N] of char;Это массив символов:каждый символ – Символьные строкидлина строкирабочая частьs[1]s[2]s[3]s[4]var s: string;var s: string[20];Длина строки:n := length ( s );var n: integer; Символьные строкиЗадача: ввести строку с клавиатуры и заменить все буквы «а» на Задания«3»: Ввести символьную строку и заменить все буквы «а» на буквы «б», Задания«5»: Ввести символьную строку и проверить, является ли она палиндромом (палиндром читается Операции со строкамиОбъединение: добавить одну строку в конец другой.Запись нового значения:var s, Удаление и вставкаУдаление части строки:Вставка в строку:s := '123456789';Delete ( s, 3, Поиск в строкеПоиск в строке:s := 'Здесь был Вася.';n := Pos ( Примерыs := 'Вася Петя Митя';n := Pos ( 'Петя', s );Delete ( Пример решения задачиЗадача: Ввести имя, отчество и фамилию. Преобразовать их к формату Программаprogram qq;var s, name, otch: string;  n: integer;begin  writeln('Введите имя, Задания«3»: Ввести в одну строку фамилию, имя и отчество, разделив их пробелом. Задания«5»: Ввести путь к файлу и «разобрать» его, выводя каждую вложенную папку Задачи на обработку строкЗадача: с клавиатуры вводится символьная строка, представляющая собой сумму Преобразования «строка»-«число»Из строки в число:s := '123';Val ( s, N, r ); Программаprogram qq;var s, s1, s2: string;  r, n, n1, n2, sum: Задания«3»: Ввести арифметическое выражение: разность двух чисел. Вычислить эту разность.  Пример: Задания«5»: Ввести арифметическое выражение c тремя числами, в котором можно использовать сложение Задания«6»: Ввести арифметическое выражение c тремя числами, в котором можно использовать сложение, Посимвольный вводЗадача: с клавиатуры вводится число N, обозначающее количество футболистов команды «Шайба», Посимвольный вводПропуск фамилии:repeat read(c);until c = ' '; { пока не встретим Программаprogram qq;var c: char;  i, N, count, Year, Gol: integer;begin writeln('Количество Посимвольный вводЕсли фамилия нужна:fam := ''; { пустая строка }repeat  read(c); Посимвольный вводЕсли нужно хранить все фамилии:const MAX = 100;var fam: array[1..MAX] of Задания«3»: Вывести фамилии и имена всех футболистов, которые забили больше двух голов. Задания«5»: Вывести в алфавитном порядке фамилии и имена всех футболистов, которые забили Программирование  на языке Паскаль  Часть IIТема 7. Рекурсивный перебор Рекурсивный переборЗадача: Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ Рекурсивный перебор1KРекурсия: Решения задачи для слов из К букв сводится к 4-м Процедураprocedure Rec(p: integer);begin if p > K then begin  writeln(s); Процедура procedure Rec(p: integer); const letters = 'ЫЦЩО'; var i: integer; begin Программаprogram qq;var s: string;  K, i, count: integer;begin writeln('Введите длину слов:'); ЗаданияАлфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и О. Программирование  на языке Паскаль  Часть IIТема 8. Матрицы МатрицыЗадача: запомнить положение фигур на шахматной доске.123456c6A[6,3] МатрицыМатрица – это прямоугольная таблица чисел (или других элементов одного типа).Матрица – МатрицыОбъявление:const N = 3;   M = 4;var A: array[1..N,1..M] of МатрицыЗаполнение случайными числамиfor i:=1 to N do for j:=1 to M do Обработка всех элементов матрицыЗадача: заполнить матрицу из 3 строк и 4 столбцов ЗаданияЗаполнить матрицу из 8 строк и 5 столбцов случайными числами в интервале Операции с матрицамиЗадача 1. Вывести на экран главную диагональ квадратной матрицы из Операции с матрицамиЗадача 3. Найти сумму элементов, стоящих на главной диагонали и Операции с матрицамиЗадача 4. Перестановка строк или столбцов. В матрице из N ЗаданияЗаполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале Программирование  на языке Паскаль  Часть IIТема 9. Файлы ФайлыФайл – это область на диске, имеющая имя.Файлытолько текст без оформления, не Принцип сэндвичаI этап. открыть файл :связать переменную f с файломоткрыть файл (сделать Работа с файламиОсобенности:имя файла упоминается только в команде assign, обращение к файлу Последовательный доступпри открытии файла курсор устанавливается в началочтение выполняется с той позиции, Последовательный доступчтение до конца строкикак вернуться назад?close ( f ); reset ( ПримерЗадача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Программаprogram qq;var s, x: integer;  f: text; begin  assign(f, 'input.txt'); ЗаданияВ файле data.txt записаны числа, сколько их – неизвестно. «3»: Найти сумму Обработка массивовЗадача: в файле input.txt записаны числа (в столбик), сколько их – Чтение данных в массивvar A: array[1..100] of integer;  f: text; function Программаprogram qq;var A: array[1..100] of integer;  f: text; ЗаданияВ файле input.txt записаны числа (в столбик), известно, что их не более Обработка текстовых данныхЗадача: в файле input.txt записаны строки, в которых есть слово-паразит Обработка текстовых данныхАлгоритм: Прочитать строку из файла (readln). Удалить все сочетания Работа с двумя файлами одновременноprogram qq; var s: string;   i: Полный цикл обработки файла while not eof(fIn) do begin   readln(fIn, ЗаданияВ файле input.txt записаны строки, сколько их – неизвестно. «3»: Заменить все Сортировка списковЗадача: в файле list.txt записаны фамилии и имена пользователей сайта (не Сортировка списковАлгоритм: прочитать строки из файла в массив строк, подсчитать их в Сортировка списковВвод массива строк из файла: assign(f, 'list.txt');reset(f);N:= 0;while not eof(f) do Сортировка списковСортировка первых N элементов массива: for i:=1 to N-1 do begin Сортировка списковВывод первых N строк массива в файл: assign(f, 'sort.txt');rewrite(f);for i:=1 to Сортировка списковКак сравниваются строки: ||||||||?s1s2Кодовая таблица: WinUNICODE245226код('х') > код('в')'х' > 'в''Пароход' > 'Паровоз' Сортировка списковКак сравниваются строки: ||||||?s1s2'х' > ¤'Пароход' > 'Пар' Сортировка списковРабота с отдельной строкой массива: var s: array[1..MAX] of string; Задания«3»: Добавить к списку нумерацию:  1) Анисимов Никита  2) Иванов Списки с числовыми даннымиЗадача: в файле marks.txt записаны фамилии и имена школьников Работа с двумя файлами одновременноvar fIn, fOut: Text;...  assign(fIn, 'marks.txt');reset(fIn);assign(fOut, 'best.txt');rewrite(fOut);while Цикл обработки файлаvar ball: integer;...while not eof(fIn) do begin readln(fIn, s); Преобразования «строка»-«число»Из строки в число:s := '123';Val ( s, N, r ); Обработка строкиn:= Pos(' ', s);   { n:= 7; }fam:= Copy(s,1,n-1); Задания«3»: Добавить к списку нумерацию:  1) Федоров Иван 78	2) Анисимов Никита Конец фильмаПОЛЯКОВ Константин Юрьевичд.т.н., учитель информатики высшей категории,ГОУ СОШ № 163, г. Санкт-Петербургkpolyakov@mail.ru
Слайды презентации

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

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

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

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

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

тип
весь массив имеет одно имя
все элементы расположены в памяти рядом
Примеры:
список учеников в классе
квартиры в доме
школы в городе
данные о температуре воздуха за год

Слайд 4 Массивы

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

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

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



Слайд 5 Объявление массивов

Зачем объявлять?
определить имя массива
определить тип массива
определить

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

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


Размер через

константу:

имя

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

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

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


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

const N=5;

N





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


Слайд 6 Объявление массивов
Массивы других типов:
Другой диапазон индексов:
Индексы

Объявление массивовМассивы других типов: Другой диапазон индексов: Индексы других типов:var X,

других типов:
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;


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

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

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';

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



Заполнение одинаковыми числами:
const N = 5;
var

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

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


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



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

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

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;

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

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

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

to N do begin
A[i]:= i + 7;

Z = i + 7














Слайд 11 Практикум: заполнение массива

«3»: 1. Заполните массив A нулями.
2.

Практикум: заполнение массива«3»: 1. Заполните массив A нулями.	2. Заполните массив A

Заполните массив A первыми N натуральными числами, начиная с

1.
3. Заполните массив A первыми N натуральными числами, начиная с X (ввести X с клавиатуры).
«4»: 4. Заполните массив A первыми N натуральными числами, начиная с X (ввести X с клавиатуры) в обратном порядке (начиная с конца массива).
5. Заполнить массив A первыми N числами Фибоначчи. Первые два числа Фибоначчи равны единице, а каждое последующее число Фибоначчи вычисляется как сумма двух предыдущих.
«5»: 6. Заполните массив степенями числа 2, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего. Например: 32 16 8 4 2 1
7. Заполните массив целыми числами, так чтобы средний элемент массива был равен X, слева от него элементы стоят по возрастанию, а справа – по убыванию (ввести X с клавиатуры). Соседние элементы отличаются на единицу. Например: 1 2 3 2 1.

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

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

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


Слайд 13 Задания

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

Задания«3»: Ввести c клавиатуры массив из 5 элементов, умножить их на

умножить их на 2 и вывести на экран.

Пример:
Введите пять чисел:
4 15 3 10 14
Результат: 8 30 6 20 28
«4»: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива.
Пример:
Введите пять чисел:
4 15 3 10 14
среднее арифметическое 9.200

Слайд 14 Задания

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

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

найти минимальный из них.
Пример:
Введите пять чисел:

4 15 3 10 14
минимальный элемент 3

Слайд 15 Практикум: изменение элементов массива

«3»:
1. Увеличить все элементы

Практикум: изменение элементов массива«3»: 	1. Увеличить все элементы массива A на

массива A на 1.
2. Умножить все элементы массива A

на 2.
3. Возвести в квадрат все элементы массива A.
«4»:
4. Увеличить на 4 все элементы в первой половине массива A (считать, что в массиве чётное число элементов).
5. Разделить на 2 все элементы массива A, кроме первого и последнего (считать, что в массиве есть, по крайней мере, два элемента и все элементы чётные).
«5»:
6. Умножить на 3 все элементы во второй половине массива A (считать, что в массиве чётное число элементов).
7. Найти среднее арифметическое всех элементов массива A.

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

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

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

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




Псевдокод:
{

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

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

N do
if a[i] > { максимального } then
{ запомнить новый максимальный элемент a[i] }

Слайд 18 Максимальный элемент
max := a[1]; { считаем, что первый

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

– максимальный }
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]


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

Программаprogram qq;const N = 5;var a: array [1..N] of integer; i,

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 }


Слайд 20 Задания

«3»: Ввести с клавиатуры массив из 5 элементов,

Задания«3»: Ввести с клавиатуры массив из 5 элементов, найти в нем

найти в нем минимальный элемент и его номер.

Пример:
Исходный массив:
4 -5 10 -10 5
мимимальный A[4]=-10
«4»: Ввести с клавиатуры массив из 5 элементов, найти в нем максимальный и минимальный элементы и их номера.
Пример:
Исходный массив:
4 -5 10 -10 5
максимальный A[3]=10
минимальный A[4]=-10

Слайд 21 Задания

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

Задания«5»: Ввести с клавиатуры массив из 5 элементов, найти в нем

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


Пример:
Исходный массив:
4 -5 10 -10 5
максимальные A[3]=10, A[5]=5

Слайд 22 Практикум: максимум/минимум

«3»:
1. Найти максимальное значение среди всех

Практикум: максимум/минимум«3»: 	1. Найти максимальное значение среди всех элементов массива.	2. Найти

элементов массива.
2. Найти минимальное значение среди всех элементов массива.


3. Найти минимальное и максимальное значения среди всех элементов массива.
«4»:
4. Найти номер минимального элемента массива.
5. Найти номера минимального и максимального элементов массива.
«5»:
6. Найти два максимальных элемента массива.
7. Найти номера двух минимальных элементов массива.

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

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

массивов


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

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

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

случайность?

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

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

результаты

318458191041
564321
209938992481
458191
938992
малый период (последовательность повторяется через 106 чисел)
Метод середины квадрата

(Дж. фон Нейман)

в квадрате

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


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

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

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

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

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

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


a

b

a

b

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

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


Слайд 28 Генератор случайных чисел в Паскале
Целые числа в интервале

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

[0,N):
var x: integer;
...
x := random

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


Слайд 29 Генератор случайных чисел в Паскале
Целые числа на отрезке

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

[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 );


Слайд 30 Заполнение массива случайными числами
const N = 5;
var A:

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

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)


Слайд 31 Подсчет элементов
Задача: заполнить массив случайными числами в интервале

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

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

счётчик ноль
просмотреть все элементы массива: если очередной элемент = 0, то увеличить счётчик на 1
вывести значение счётчика

Слайд 32 Подсчет элементов
начало
конец

нет
да
нет
да
count:= 0
i:= 1


count:= count +

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

1


i:= i + 1


пока ни одного не нашли
начать с

1-ого

перейти к следующему

нашли еще 1


Слайд 33 Подсчет элементов
program qq;
const N = 5;
var A: array

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

[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;

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


Слайд 34 Задания

«3»: Заполнить массив случайными числами в интервале [-2,2]

Задания«3»: Заполнить массив случайными числами в интервале [-2,2] и подсчитать количество

и подсчитать количество положительных элементов.
«4»: Заполнить массив случайными числами

в интервале [20,100] и подсчитать отдельно число чётных и нечётных элементов.
«5»: Заполнить массив случайными числами в интервале [1000,2000] и подсчитать число элементов, у которых вторая с конца цифра – четная.

Слайд 35 Практикум: подсчёт элементов массива

«3»:
1. Определите, сколько элементов

Практикум: подсчёт элементов массива«3»: 	1. Определите, сколько элементов массива A равны

массива A равны 1.
2. Определите, сколько элементов массива A

равны заданному значению X.
3. Определите количество положительных элементов массива А.
«4»:
4. Определите количество чётных и нечётных элементов массива А.
5. Определите, количество чётных положительных элементов массива А.
«5»:
6. Найти количество элементов массива, в десятичной записи которых предпоследняя цифра (число десятков) – 5.
7. Найти количество элементов массива, в десятичной записи которых последняя и предпоследняя цифры одинаковые.

Слайд 36 Сумма выбранных элементов
Задача: заполнить массив случайными числами в

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

интервале [-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]


Слайд 37 Сумма выбранных элементов
начало
конец

нет
да
нет
да
S:= 0
i:= 1


S:= S

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

+ A[i]


i:= i + 1


пока ни одного не нашли
начать

с 1-ого

перейти к следующему

нашли еще 1


Слайд 38 Сумма выбранных элементов
program qq;
const N = 5;
var A:

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

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];

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


Слайд 39 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [-10,10] и подсчитать сумму всех отрицательных элементов.
«4»:

Заполнить массив из 10 элементов случайными числами в интервале [0,100] и подсчитать среднее значение всех элементов, которые <50.
«5»: Заполнить массив из 10 элементов случайными числами в интервале [10,12] и найти длину самой длинной последовательности стоящих рядом одинаковых элементов.

Пример:
Исходный массив:
10 10 11 12 12 12 10 11 11 12
Длина последовательности: 3



Слайд 40 Практикум: суммы, прозведения…

«3»: 1. Вычислить сумму всех элементов

Практикум: суммы, прозведения…«3»: 1. Вычислить сумму всех элементов массива A.	2. Вычислить

массива A.
2. Вычислить сумму отрицательных элементов массива A.
3.

Вычислить сумму всех элементов массива A, которые делятся на 3.
«4»: 4. Вычислить среднее арифметическое всех элементов массива A, которые меньше, чем 50.
5. Вычислить произведение всех чётных положительных элементов массива A.
«5»:
6. Найти сумму всех элементов массива A, у которых число десятков (вторая с конца цифра десятичной записи) больше, чем число единиц.
7. Все элементы массива A - трёхзначные числа. Найти сумму всех элементов массива A, в десятичной записи которых все цифры одинаковые.

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

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

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

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


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


i:= i + 1


начать

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

с 1-ого
перейти к следующему
‘Не нашли’
‘Есть!’


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

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

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


Слайд 44 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [10..20] и найти элемент, равный X.

Пример:
Исходный массив:
13 10 18 12 20 11 13 14 15 20
Что ищем? 20
A[5] = 20
«4»: Заполнить массив из 10 элементов случайными числами в интервале [0..4] и вывести номера всех элементов, равных X.
Пример:
Исходный массив:
4 0 1 2 0 1 3 4 1 0
Что ищем? 0
A[2], A[5], A[10]

Слайд 45 Задания

«5»: Заполнить массив из 10 элементов случайными числами

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

в интервале [0..4]и определить, есть ли в нем одинаковые

соседние элементы.
Пример:
Исходный массив:
4 0 1 2 0 1 3 1 1 0
Ответ: есть



Слайд 46 Практикум: суммы, прозведения…

«3»: 1. Определите в массиве A

Практикум: суммы, прозведения…«3»: 1. Определите в массиве A номер первого элемента,

номер первого элемента, равного X.
2. Определите номер первого элемента,

равного X, в первой половине массива A (массив имеет чётное число элементов).
3. Определите номер первого элемента, равного X, во второй половине массива A (массив имеет чётное число элементов).
«4»: 4. Определите номер последнего элемента, равного X, во второй половине массива A (массив имеет чётное число элементов).
5. Определите, сколько есть элементов, равных X, в первой половине массива A (массив имеет чётное число элементов).
«5»:
6. Определите, сколько в массиве A пар соседних элементов, значения которых одинаковы и равны заданному X.
7. Горка – это три стоящих подряд элемента массива A, из которых средний ("вершина") имеет наибольшее значение, а два крайних - меньше него. Найти количество "горок" в массиве A, в которых значение среднего элемента равно X..

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

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

местами 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




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

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

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

y;
y := c;

x := y;
y := x;


3

2

1


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

Программаprogram qq;const N = 10;var A: array[1..N] of integer; i, c:

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;


Слайд 50 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [-10..10] и сделать реверс всех элементов, кроме

последнего.
Пример:
Исходный массив:
-5 3 10 -4 -6 8 -10 1 0 4
Результат:
0 1 -10 8 -6 -4 10 3 -5 4
«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс всех элементов, кроме первого.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0
Результат:
4 0 1 -10 8 -6 -4 10 3 -5

Слайд 51 Задания

«5»: Заполнить массив из 10 элементов случайными числами

Задания«5»: Заполнить массив из 10 элементов случайными числами в интервале [-10..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
«6»: Заполнить массив из 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

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

Циклический сдвигЗадача: сдвинуть элементы массива влево на 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?


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

Программаprogram qq;const N = 10;var A: array[1..N] of integer; i, c:

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

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



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

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


Слайд 54 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [-10..10] и выполнить циклический сдвиг влево без

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

Слайд 55 Задания

«5»: Заполнить массив из 12 элементов случайными числами

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

в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на

4 элемента.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0 5 7
Результат:
1 0 5 7 4 -5 3 10 -4 -6 8 -10

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

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

удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в

другой массив.

Примитивное решение:

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




Слайд 57 Выбор нужных элементов

Решение: ввести счетчик найденных элементов count,

Выбор нужных элементовРешение: ввести счетчик найденных элементов 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


Слайд 58 Как вывести массив B?

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

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

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

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

count


Слайд 59 Задания

«3»: Заполнить массив случайными числами в интервале [-10,10]

Задания«3»: Заполнить массив случайными числами в интервале [-10,10] и записать в

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

Пример:
Исходный массив:
0 -5 3 7 -8
Положительные числа:
3 7
«4»: Заполнить массив случайными числами в интервале [20,100] и записать в другой массив все числа, которые оканчиваются на 0.
Пример:
Исходный массив:
40 57 30 71 84
Заканчиваются на 0:
40 30

Слайд 60 Задания

«5»: Заполнить массив случайными числами и выделить в

Задания«5»: Заполнить массив случайными числами и выделить в другой массив все

другой массив все числа, которые встречаются более одного раза.

Пример:
Исходный массив:
4 1 2 1 11 2 34
Результат:
1 2

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

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

массивов


Слайд 62 Сортировка
Сортировка – это расстановка элементов массива в заданном

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

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


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

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



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

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

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

(«легкий» элемент перемещается вверх («всплывает»).




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



1-ый проход

2-ой проход

3-ий проход


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


Слайд 64 Программа
1-ый проход:


сравниваются пары
A[N-1] и A[N], A[N-2]

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

и 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



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

Программаprogram qq;const N = 10;var A: array[1..N] of integer; i, j,

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] уже поставлены


Слайд 66 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [-10..10] и отсортировать его по убыванию.

Пример:
Исходный массив:
4 5 -8 3 -7 -5 3 1 0 9
Результат:
9 5 4 3 3 1 0 -5 -7 -8
«4»: Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать его по последней цифре.
Пример:
Исходный массив:
14 25 13 30 76 58 32 11 41 97
Результат:
30 11 41 32 13 14 25 76 97 58

Слайд 67 Задания

«5»: Заполнить массив из 10 элементов случайными числами

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

в интервале [0..100] и отсортировать первую половину по возрастанию,

а вторую – по убыванию.
Пример:
Исходный массив:
14 25 13 30 76 58 32 11 41 97
Результат:
13 14 25 30 76 97 58 41 32 11

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

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

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

остальные проходы не нужны.
Реализация: переменная-флаг, показывающая, был ли обмен; если она равна 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;



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

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

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;


Слайд 70 Метод выбора
Идея:
найти минимальный элемент и поставить на первое

Метод выбораИдея:найти минимальный элемент и поставить на первое место (поменять местами

место (поменять местами с A[1])
из оставшихся найти минимальный элемент

и поставить на второе место (поменять местами с A[2]), и т.д.








Слайд 71 Метод выбора



for i := 1 to N-1 do

Метод выбораfor i := 1 to N-1 do begin nMin:= i

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;

N-1

N

нужно N-1 проходов

поиск минимального от A[i] до A[N]

если нужно, переставляем

i+1

i


Слайд 72 Задания

«3»: Заполнить массив из 10 элементов случайными числами

Задания«3»: Заполнить массив из 10 элементов случайными числами в интервале [0..99]

в интервале [0..99] и отсортировать его по убыванию последней

цифры.
Пример:
Исходный массив:
14 25 13 12 76 58 21 87 10 98
Результат:
98 58 87 76 25 14 13 12 21 10
«4»: Заполнить массив из 10 элементов случайными числами в интервале [0..99] и отсортировать его по возрастанию суммы цифр (подсказка: их всего две).
Пример:
Исходный массив:
14 25 13 12 76 58 21 87 10 98
Результат:
10 21 12 13 14 25 76 58 87 98

Слайд 73 Задания

«5»: Заполнить массив из 10 элементов случайными числами

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

в интервале [0..100] и отсортировать первую половину по возрастанию,

а вторую – по убыванию.
Пример:
Исходный массив:
14 25 13 30 76 58 32 11 41 97
Результат:
13 14 25 30 76 97 58 41 32 11

Слайд 74 «Быстрая сортировка» (Quick Sort)
Идея – более эффективно переставлять

«Быстрая сортировка» (Quick Sort)Идея – более эффективно переставлять элементы, расположенные дальше

элементы, расположенные дальше друг от друга.
N div 2
2

шаг: переставить элементы так:

при сортировке элементы не покидают « свою область»!

1 шаг: выбрать некоторый элемент массива X

3 шаг: так же отсортировать две получившиеся области

Разделяй и властвуй (англ. divide and conquer)



Слайд 75 «Быстрая сортировка» (Quick Sort)
Медиана – такое значение X,

«Быстрая сортировка» (Quick Sort)Медиана – такое значение X, что слева и

что слева и справа от него в отсортированном массиве

стоит одинаковое число элементов (для этого надо отсортировать массив…).

Разделение:
выбрать средний элемент массива (X=67)


установить L:=1, R:=N
увеличивая L, найти первый элемент A[L], который >= X (должен стоять справа)
уменьшая R, найти первый элемент A[R], который <= X (должен стоять слева)
если L<=R, поменять местами A[L] и A[R] и перейти к п. 3


Слайд 76 «Быстрая сортировка» (Quick Sort)




«Быстрая сортировка» (Quick Sort)

Слайд 77 «Быстрая сортировка» (Quick Sort)
procedure QSort ( first, last:

«Быстрая сортировка» (Quick Sort)procedure QSort ( first, last: integer);var L, R,

integer);
var L, R, c, X: integer;
begin
if first

last then begin
X:= A[(first + last) div 2];
L:= first; R:= last;








QSort(first, R); QSort(L, last);
end;
end.

ограничение рекурсии

while L <= R do begin
while A[L] < X do L:= L + 1;
while A[R] > X do R:= R - 1;
if L <= R then begin
c:= A[L]; A[L]:= A[R]; A[R]:= c;
L:= L + 1; R:= R - 1;
end;
end;

разделение

обмен

двигаемся дальше

сортируем две части


Слайд 78 «Быстрая сортировка» (Quick Sort)
program qq;
const N = 10;
var

«Быстрая сортировка» (Quick Sort)program qq;const N = 10;var A: array[1..N] of

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


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

вывести исходный массив на экран }
Qsort ( 1, N ); { сортировка }
{ вывести результат }
end.

procedure QSort ( first, last: integer);
...


Слайд 79 Количество перестановок
(случайные данные)

Количество перестановок(случайные данные)

Слайд 80 Задания

«3»: Заполнить массив из 10 элементов случайными числами

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

в интервале [-50..50] и отсортировать его с помощью алгоритма

быстрой сортировки.
«4»: Заполнить массив из 10 элементов случайными числами в интервале [-50..50] и отсортировать его по убыванию с помощью алгоритма быстрой сортировки.
«5»: Заполнить массив из 500 элементов случайными числами в интервале [0..100]. Отсортировать его по возрастанию двумя способами – методом «пузырька» и методом «быстрой сортировки» . Вывести на экран число перестановок элементов массива в том и в другом случае. Массив выводить на экран не нужно.

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

Программирование на языке Паскаль Часть IIТема 5. Двоичный поиск

поиск


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

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

равный X, или установить, что его нет.
Решение: для

произвольного массива: линейный поиск (перебор)
недостаток: низкая скорость
Как ускорить? – заранее подготовить массив для поиска
как именно подготовить?
как использовать «подготовленный массив»?

Слайд 83 Двоичный поиск



X = 7
X < 8

8
4
X > 4

6

X

Двоичный поискX = 7X < 884X > 46X > 6Выбрать средний

> 6
Выбрать средний элемент A[c] и сравнить с X.
Если

X = A[c], нашли (выход).
Если X < A[c], искать дальше в первой половине.
Если X > A[c], искать дальше во второй половине.

Слайд 84 Двоичный поиск
nX := 0;
L :=

Двоичный поиск nX := 0; L := 1; R := N;

1; R := N; {границы: ищем от A[1] до

A[N] }









if nX < 1 then writeln('Не нашли...')
else writeln('A[', nX, ']=', X);

while R >= L do begin
c := (R + L) div 2;




if X < A[c] then R := c - 1;
if X > A[c] then L := c + 1;
end;

номер среднего элемента

if X = A[c] then begin
nX := c;
R := L - 1; { break; }
end;

нашли

выйти из цикла

сдвигаем границы


Слайд 85 Сравнение методов поиска

Сравнение методов поиска

Слайд 86 Задания

«3»: Написать программу, которая сортирует массив по возрастанию

Задания«3»: Написать программу, которая сортирует массив по возрастанию и ищет в

и ищет в нем элемент, равный X (это число

вводится с клавиатуры). Использовать двоичный поиск.
«4»: Написать программу, которая сортирует массив ПО УБЫВАНИЮ и ищет в нем элемент, равный X (это число вводится с клавиатуры). Использовать двоичный поиск.
«5»: Написать программу, которая считает среднее число шагов в двоичном поиске для массива из 32 элементов в интервале [0,100]. Для поиска использовать 1000 случайных чисел в этом же интервале.

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

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

строки


Слайд 88 Чем плох массив символов?
var B: array[1..N] of char;
Это

Чем плох массив символов?var B: array[1..N] of char;Это массив символов:каждый символ

массив символов:
каждый символ – отдельный объект;
массив имеет длину N,

которая задана при объявлении

Что нужно:
обрабатывать последовательность символов как единое целое
строка должна иметь переменную длину


Слайд 89 Символьные строки
длина строки
рабочая часть
s[1]
s[2]
s[3]
s[4]
var s: string;
var s: string[20];
Длина

Символьные строкидлина строкирабочая частьs[1]s[2]s[3]s[4]var s: string;var s: string[20];Длина строки:n := length ( s );var n: integer;

строки:
n := length ( s );
var n: integer;


Слайд 90 Символьные строки
Задача: ввести строку с клавиатуры и заменить

Символьные строкиЗадача: ввести строку с клавиатуры и заменить все буквы «а»

все буквы «а» на буквы «б».
program qq;
var s: string;

i: integer;
begin
writeln('Введите строку');
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.

readln(s);

writeln(s);

Length(s)

ввод строки

длина строки

вывод строки


Слайд 91 Задания

«3»: Ввести символьную строку и заменить все буквы

Задания«3»: Ввести символьную строку и заменить все буквы «а» на буквы

«а» на буквы «б», как заглавные, так и строчные.

Пример:
Введите строку:
ааббссААББСС
Результат:
ббббссББББСС
«4»: Ввести символьную строку и заменить все буквы «а» на буквы «б» и наоборот, как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббаассББААСС

Слайд 92 Задания

«5»: Ввести символьную строку и проверить, является ли

Задания«5»: Ввести символьную строку и проверить, является ли она палиндромом (палиндром

она палиндромом (палиндром читается одинаково в обоих направлениях).

Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не палиндром. Палиндром.

Слайд 93 Операции со строками
Объединение: добавить одну строку в конец

Операции со строкамиОбъединение: добавить одну строку в конец другой.Запись нового значения:var

другой.
Запись нового значения:
var s, s1, s2: string;
s := 'Вася';
s1

:= 'Привет';
s2 := 'Вася';
s := s1 + ', ' + s2 + '!';

'Привет, Вася!'

Подстрока: выделить часть строки в другую строку.

s := '123456789';

s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );

'345678'

'456'

с 3-его символа

6 штук


Слайд 94 Удаление и вставка
Удаление части строки:
Вставка в строку:
s :=

Удаление и вставкаУдаление части строки:Вставка в строку:s := '123456789';Delete ( s,

'123456789';
Delete ( s, 3, 6 );
с 3-его символа
6

штук

строка
меняется!

'123456789'

'129'

s := '123456789';
Insert ( 'ABC', s, 3 );
Insert ( 'Q', s, 5 );

куда вставляем

что вставляем

начиная с 3-его символа

'12ABC3456789'

'12ABQC3456789'


Слайд 95 Поиск в строке
Поиск в строке:
s := 'Здесь был

Поиск в строкеПоиск в строке:s := 'Здесь был Вася.';n := Pos

Вася.';
n := Pos ( 'е', s );
if n >

0 then
writeln('Буква е – это s[', n, ']')
else writeln('Не нашли');
n := Pos ( 'Вася', s );
s1 := Copy ( s, n, 4 );

s[3]

3

n = 11

Особенности:
функция возвращает номер символа, с которого начинается образец в строке
если слова нет, возвращается 0
поиск с начала (находится первое слово)

var n: integer;


Слайд 96 Примеры
s := 'Вася Петя Митя';
n := Pos (

Примерыs := 'Вася Петя Митя';n := Pos ( 'Петя', s );Delete

'Петя', s );
Delete ( s, n, 4 );
Insert (

'Лена', s, n );

'Вася Лена Митя'

s := 'Вася Петя Митя';
n := length ( s );
s1 := Copy ( s, 1, 4 );
s2 := Copy ( s, 11, 4 );
s3 := Copy ( s, 6, 4 );
s := s3 + s1 + s2;
n := length ( s );

'Вася Митя'

14

'Вася'

'Митя'

'Петя'

'ПетяВасяМитя'

12

6


Слайд 97 Пример решения задачи
Задача: Ввести имя, отчество и фамилию.

Пример решения задачиЗадача: Ввести имя, отчество и фамилию. Преобразовать их к

Преобразовать их к формату «фамилия-инициалы».
Пример:
Введите имя,

фамилию и отчество:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.

Алгоритм:
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
«сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…


Слайд 98 Программа
program qq;
var s, name, otch: string;
n:

Программаprogram qq;var s, name, otch: string; n: integer;begin writeln('Введите имя, отчество

integer;
begin
writeln('Введите имя, отчество и фамилию');
readln(s);

n := Pos(' ', s);
name := Copy(s, 1, n-1); { вырезать имя }
Delete(s, 1, n);
n := Pos(' ', s);
otch := Copy(s, 1, n-1); { вырезать отчество }
Delete(s, 1, n); { осталась фамилия }
s := s + ' ' + name[1] + '.' + otch[1] + '.';
writeln(s);
end.

Слайд 99 Задания

«3»: Ввести в одну строку фамилию, имя и

Задания«3»: Ввести в одну строку фамилию, имя и отчество, разделив их

отчество, разделив их пробелом. Вывести инициалы и фамилию.

Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
Результат:
П.С. Иванов
«4»: Ввести имя файла (возможно, без расширения) и изменить его расширение на «.exe».
Пример:
Введите имя файла: Введите имя файла:
qqq qqq.com
Результат: Результат:
qqq.exe qqq.exe

Слайд 100 Задания

«5»: Ввести путь к файлу и «разобрать» его,

Задания«5»: Ввести путь к файлу и «разобрать» его, выводя каждую вложенную

выводя каждую вложенную папку с новой строки
Пример:


Введите путь к файлу:
C:\Мои документы\10-Б\Вася\qq.exe
Результат:
C:
Мои документы
10-Б
Вася
qq.exe

Слайд 101 Задачи на обработку строк
Задача: с клавиатуры вводится символьная

Задачи на обработку строкЗадача: с клавиатуры вводится символьная строка, представляющая собой

строка, представляющая собой сумму двух целых чисел, например:
12+35
Вычислить эту

сумму:
12+35=47

Алгоритм:
найти знак «+»
выделить числа слева и справа в отдельные строки
перевести строки в числа
сложить
вывести результат


Слайд 102 Преобразования «строка»-«число»
Из строки в число:
s := '123';
Val (

Преобразования «строка»-«число»Из строки в число:s := '123';Val ( s, N, r

s, N, r ); { N = 123 }

{ r = 0, если ошибки не было
r – номер ошибочного символа}
s := '123.456';
Val ( s, X, r ); { X = 123.456 }

Из числа в строку:

N := 123;
Str ( N, s ); { '123' }
X := 123.456;
Str ( X, s ); { '1.234560E+002' }
Str ( X:10:3, s ); { ' 123.456' }

var N, r: integer;
X: real;
s: string;



Слайд 103 Программа
program qq;
var s, s1, s2: string;
r,

Программаprogram qq;var s, s1, s2: string; r, n, n1, n2, sum:

n, n1, n2, sum: integer;
begin
writeln('Введите выражение (сумму чисел):');

readln(s);
n:= Pos('+', s);
s1:= Copy(s, 1, n-1);
s2:= Copy(s, n+1, Length(s)-n);
Val(s1, n1, r);
Val(s2, n2, r);
sum:= n1 + n2;
writeln(n1, '+', n2, '=', sum);
end.

слагаемые-строки

слагаемые-числа

сумма

слагаемые-строки

слагаемые-числа


Слайд 104 Задания

«3»: Ввести арифметическое выражение: разность двух чисел. Вычислить

Задания«3»: Ввести арифметическое выражение: разность двух чисел. Вычислить эту разность. Пример:

эту разность.
Пример:
25-12
Ответ: 13
«4»: Ввести арифметическое

выражение: сумму трёх чисел. Вычислить эту сумму.
Пример:
25+12+34
Ответ: 71

Слайд 105 Задания

«5»: Ввести арифметическое выражение c тремя числами, в

Задания«5»: Ввести арифметическое выражение c тремя числами, в котором можно использовать

котором можно использовать сложение и вычитание. Вычислить это выражение.

Пример: Пример:
25+12+34 25+12-34
Ответ: 71 Ответ: 3
Пример: Пример:
25-12+34 25-12-34
Ответ: 47 Ответ: -21

Слайд 106 Задания

«6»: Ввести арифметическое выражение c тремя числами, в

Задания«6»: Ввести арифметическое выражение c тремя числами, в котором можно использовать

котором можно использовать сложение, вычитание и умножение. Вычислить это

выражение.
Пример: Пример:
25+12*3 25*2-34
Ответ: 61 Ответ: 16
Пример: Пример:
25-12+34 25*2*3
Ответ: 47 Ответ: 150

Слайд 107 Посимвольный ввод
Задача: с клавиатуры вводится число N, обозначающее

Посимвольный вводЗадача: с клавиатуры вводится число N, обозначающее количество футболистов команды

количество футболистов команды «Шайба», а затем – N строк,

в каждой из которых – информация об одном футболисте таком формате:
<Фамилия> <Имя> <год рождения> <голы>
Все данные разделяются одним пробелом. Нужно подсчитать, сколько футболистов, родившихся в период с 1988 по1990 год, не забили мячей вообще.

Алгоритм:

for i:=1 to N do begin
{ пропускаем фамилию и имя }
{ читаем год рождения Year и число голов Gol }
if (1988 <= Year) and (Year <=1990) and
(Gol = 0) then { увеличиваем счетчик }
end;


Слайд 108 Посимвольный ввод
Пропуск фамилии:
repeat
read(c);
until c = ' ';

Посимвольный вводПропуск фамилии:repeat read(c);until c = ' '; { пока не

{ пока не встретим пробел }
var c: char;
Пропуск имени:
repeat

read(c); until c = ' ';

Ввод года рождения:

read(Year); { из той же введенной строки }

var Year: integer;

Ввод числа голов и переход к следующей строке:

readln(Gol); { читать все до конца строки }

var Gol: integer;


Слайд 109 Программа
program qq;
var c: char;
i, N, count,

Программаprogram qq;var c: char; i, N, count, Year, Gol: integer;begin writeln('Количество

Year, Gol: integer;
begin
writeln('Количество футболистов');
readln(N);
count := 0;

for i:=1 to N do begin
repeat read(c); until c = ' ';
repeat read(c); until c = ' ';
read(Year);
readln(Gol);
if (1988 <= Year) and (year <= 1990) and
(Gol = 0) then count := count + 1;
end;
writeln(count);
end.

repeat read(c); until c = ' ';
repeat read(c); until c = ' ';
read(Year);
readln(Gol);


Слайд 110 Посимвольный ввод
Если фамилия нужна:
fam := ''; { пустая

Посимвольный вводЕсли фамилия нужна:fam := ''; { пустая строка }repeat read(c);

строка }
repeat
read(c); {

прочитать символ }
fam := fam + c; { прицепить к фамилии }
until c = ' ';

Вместо read(Year):

s := ''; { пустая строка }
repeat
read(c); { прочитать символ }
s := s + c; { прицепить к году }
until c = ' ';
Val(s, Year, r); { строку – в число }

var fam: string;

var s: string;


Слайд 111 Посимвольный ввод
Если нужно хранить все фамилии:
const MAX =

Посимвольный вводЕсли нужно хранить все фамилии:const MAX = 100;var fam: array[1..MAX]

100;
var fam: array[1..MAX] of string;
...
fam[i] := ''; { пустая

строка }
repeat
read(c); { прочитать символ }
fam[i] := fam[i] + c;
until c = ' ';

массив символьных строк


Слайд 112 Задания

«3»: Вывести фамилии и имена всех футболистов, которые

Задания«3»: Вывести фамилии и имена всех футболистов, которые забили больше двух

забили больше двух голов.
Пример:
Иванов Василий
Семёнов

Кузьма
«4»: Вывести фамилию и имя футболиста, забившего наибольшее число голов, и количество забитых им голов.
Пример:
Иванов Василий 25

Информация о футболистах вводится так же, как и для приведенной задачи (сначала N, потом N строк с данными).


Слайд 113 Задания

«5»: Вывести в алфавитном порядке фамилии и имена

Задания«5»: Вывести в алфавитном порядке фамилии и имена всех футболистов, которые

всех футболистов, которые забили хотя бы один гол. В

списке не более 100 футболистов.
Пример:
Васильев Иван
Иванов Василий
Кутузов Михаил
Пупкин Василий

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

Программирование на языке Паскаль Часть IIТема 7. Рекурсивный перебор

перебор


Слайд 115 Рекурсивный перебор
Задача: Алфавит языка племени «тумба-юмба» состоит из

Рекурсивный переборЗадача: Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц,

букв Ы, Ц, Щ и О. Вывести на экран

все слова из К букв, которые можно составить в этом языке, и подсчитать их количество. Число K вводится с клавиатуры.

1

K

в каждой ячейке может быть любая из 4-х букв

4 варианта

4 варианта

4 варианта

4 варианта

Количество вариантов:


Слайд 116 Рекурсивный перебор
1
K
Рекурсия: Решения задачи для слов из К

Рекурсивный перебор1KРекурсия: Решения задачи для слов из К букв сводится к

букв сводится к 4-м задачам для слов из K-1

букв.

1

K

1

K

1

K


перебрать все варианты


перебрать все варианты


перебрать все варианты


перебрать все варианты


Слайд 117 Процедура



procedure Rec(p: integer);
begin
if p > K then

Процедураprocedure Rec(p: integer);begin if p > K then begin writeln(s); count

begin
writeln(s);
count := count+1;
end
else

begin
s[p]:='Ы'; Rec ( p+1 );
s[p]:='Ц'; Rec ( p+1 );
s[p]:='Щ'; Rec ( p+1 );
s[p]:='О'; Rec ( p+1 );
end;
end;

1

K

p

s

p+1

рекурсивные вызовы

окончание рекурсии

Глобальные переменные:
var s: string;
count, K: integer;


Слайд 118 Процедура
procedure Rec(p: integer);
const letters = 'ЫЦЩО';

Процедура procedure Rec(p: integer); const letters = 'ЫЦЩО'; var i: integer;

var i: integer;
begin
if p > k

then begin
writeln(s);
count := count+1;
end
else begin
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
end;
end;

const letters = 'ЫЦЩО';

for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;

все буквы

цикл по всем буквам

локальная переменная


Слайд 119 Программа
program qq;
var s: string;
K, i, count:

Программаprogram qq;var s: string; K, i, count: integer;begin writeln('Введите длину слов:');

integer;
begin
writeln('Введите длину слов:');
read ( K );
s

:= '';
for i:=1 to K do s := s + ' ';
count := 0;
Rec ( 1 );
writeln('Всего ', count, ' слов');
end.

procedure Rec(p: integer);
...
end;

процедура

s := '';
for i:=1 to K do s := s + ' ';

строка из K пробелов

глобальные переменные


Слайд 120 Задания

Алфавит языка племени «тумба-юмба» состоит из букв Ы,

ЗаданияАлфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и

Ц, Щ и О. Число K вводится с клавиатуры.
«3»:

Вывести на экран все слова из К букв, в которых первая буква – Ы, и подсчитать их количество.
«4»: Вывести на экран все слова из К букв, в которых буква Ы встречается более 1 раза, и подсчитать их количество.
«5»: Вывести на экран все слова из К букв, в которых есть одинаковые буквы, стоящие рядом (например, ЫЩЩО), и подсчитать их количество.

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

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

Слайд 122 Матрицы
Задача: запомнить положение фигур на шахматной доске.
1
2
3
4
5
6

c6
A[6,3]

МатрицыЗадача: запомнить положение фигур на шахматной доске.123456c6A[6,3]

Слайд 123 Матрицы
Матрица – это прямоугольная таблица чисел (или других

МатрицыМатрица – это прямоугольная таблица чисел (или других элементов одного типа).Матрица

элементов одного типа).
Матрица – это массив, в котором каждый

элемент имеет два индекса (номер строки и номер столбца).

A

строка 2

столбец 3

ячейка A[3,4]


Слайд 124 Матрицы
Объявление:
const N = 3;
M =

МатрицыОбъявление:const N = 3;  M = 4;var A: array[1..N,1..M] of

4;
var A: array[1..N,1..M] of integer;
B: array[-3..0,-8..M] of

integer;
Q: array['a'..'d',False..True] of real;

Ввод с клавиатуры:

for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,']=');
read ( A[i,j] );
end;

A[1,1]=

25

A[1,2]=

14

A[1,3]=

14

...

A[3,4]=

54

i

j

for j:=1 to M do
for i:=1 to N do begin


Слайд 125 Матрицы
Заполнение случайными числами
for i:=1 to N do
for

МатрицыЗаполнение случайными числамиfor i:=1 to N do for j:=1 to M

j:=1 to M do
A[i,j] := random(25) -

10;

цикл по строкам

цикл по столбцам

Вывод на экран

for i:=1 to N do begin


writeln;
end;

перейти на новую строку

for j:=1 to M do
write ( A[i,j]:5 );

вывод строки


в той же строке


Слайд 126 Обработка всех элементов матрицы
Задача: заполнить матрицу из 3

Обработка всех элементов матрицыЗадача: заполнить матрицу из 3 строк и 4

строк и 4 столбцов случайными числами и вывести ее

на экран. Найти сумму элементов матрицы.

program qq;
const N = 3; M = 4;
var A: array[1..N,1..M] of integer;
i, j, S: integer;
begin
{ заполнение матрицы и вывод на экран}
S := 0;



writeln('Сумма элементов матрицы ', S);
end.

for i:=1 to N do
for j:=1 to M do
S := S + A[i,j];


Слайд 127 Задания

Заполнить матрицу из 8 строк и 5 столбцов

ЗаданияЗаполнить матрицу из 8 строк и 5 столбцов случайными числами в

случайными числами в интервале [-10,10] и вывести ее на

экран.

«3»: Удвоить все элементы матрицы и вывести её на экран.
«4»: Найти минимальный и максимальный элементы в матрице их номера. Формат вывода:
Минимальный элемент A[3,4]=-6
Максимальный элемент A[2,2]=10
«5»: Вывести на экран строку, сумма элементов которой максимальна. Формат вывода:
Строка 2: 3 5 8 9 8


Слайд 128 Операции с матрицами
Задача 1. Вывести на экран главную

Операции с матрицамиЗадача 1. Вывести на экран главную диагональ квадратной матрицы

диагональ квадратной матрицы из N строк и N столбцов.
A[1,N]
A[2,2]
A[3,3]
A[N,N]
for

i:=1 to N do
write ( A[i,i]:5 );

Задача 2. Вывести на экран вторую диагональ.

A[N,1]

A[N-1,2]

A[2,N-1]

for i:=1 to N do
write ( A[i, ]:5 );

N+1-i

сумма номеров строки и столбца N+1

A[1,1]


Слайд 129 Операции с матрицами
Задача 3. Найти сумму элементов, стоящих

Операции с матрицамиЗадача 3. Найти сумму элементов, стоящих на главной диагонали

на главной диагонали и ниже ее.
строка 1: A[1,1]
строка 2:

A[2,1]+A[2,2]
...
строка N: A[N,1]+A[N,2]+...+A[N,N]

S := 0;
for i:= 1 to N do

цикл по всем строкам

for j:= 1 to i do
S := S + A[i,j];

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


Слайд 130 Операции с матрицами
Задача 4. Перестановка строк или столбцов.

Операции с матрицамиЗадача 4. Перестановка строк или столбцов. В матрице из

В матрице из N строк и M столбцов переставить

2-ую и 4-ую строки.

2

4

j

A[2,j]

A[4,j]

for j:=1 to M do begin
c := A[2,j];
A[2,j] := A[4,j];
A[4,j] := c;
end;

Задача 5. К третьему столбцу добавить шестой.

for i:=1 to N do
A[i,3] := A[i,3] + A[i,6];


Слайд 131 Задания

Заполнить матрицу из 7 строк и 7 столбцов

ЗаданияЗаполнить матрицу из 7 строк и 7 столбцов случайными числами в

случайными числами в интервале [10,90] и вывести ее на

экран. Заполнить элементы, отмеченные зеленым фоном, числами 99, и вывести полученную матрицу на экран.

«3»: «4»: «5»:


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

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

Слайд 133 Файлы
Файл – это область на диске, имеющая имя.
Файлы
только

ФайлыФайл – это область на диске, имеющая имя.Файлытолько текст без оформления,

текст без оформления, не содержат управляющих символов (с кодами

32)

ACSII (1 байт на символ)
UNICODE (2 байта на символ)

*.txt, *.log,
*.htm, *.html

могут содержать любые символы кодовой таблицы

*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg

Текстовые

Двоичные

Папки (каталоги)


Слайд 134 Принцип сэндвича

I этап. открыть файл :
связать переменную f

Принцип сэндвичаI этап. открыть файл :связать переменную f с файломоткрыть файл

с файлом
открыть файл (сделать его активным, приготовить к работе)

assign(f,

'qq.txt');

reset(f); {для чтения}

rewrite(f); {для записи}

II этап: работа с файлом

Переменная типа «текстовый файл»: var f: text;

III этап: закрыть файл

close(f);


read ( f, n ); { ввести значение n }

write ( f, n ); { записать значение n }
writeln ( f, n );{c переходом на нов.строку }


Слайд 135 Работа с файлами
Особенности:
имя файла упоминается только в команде

Работа с файламиОсобенности:имя файла упоминается только в команде assign, обращение к

assign, обращение к файлу идет через файловую переменную
файл, который

открывается на чтение, должен существовать
если файл, который открывается на запись, существует, старое содержимое уничтожается
данные записываются в файл в текстовом виде
при завершении программы все файлы закрываются автоматически
после закрытия файла переменную f можно использовать еще раз для работы с другим файлом

Слайд 136 Последовательный доступ
при открытии файла курсор устанавливается в начало
чтение

Последовательный доступпри открытии файла курсор устанавливается в началочтение выполняется с той

выполняется с той позиции, где стоит курсор
после чтения курсор

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

12 5 45 67 56●

конец файла
(end of file, EOF)


12 5 45 67 56●

assign ( f, 'qq.txt' );
reset ( f );

read ( f, x );













Слайд 137 Последовательный доступ
чтение до конца строки
как вернуться назад?
close (

Последовательный доступчтение до конца строкикак вернуться назад?close ( f ); reset

f );
reset ( f ); { начать с

начала }

readln ( f, x );

12 5 45¤ 36 67¤ 56●

конец строки
(end of line, EOL)










Слайд 138 Пример

Задача: в файле input.txt записаны числа (в столбик),

ПримерЗадача: в файле input.txt записаны числа (в столбик), сколько их –

сколько их – неизвестно. Записать в файл output.txt их

сумму.
Алгоритм:
Открыть файл input.txt для чтения.
S := 0;
Если чисел не осталось, перейти к шагу 7.
Прочитать очередное число в переменную x.
S := S + x;
Перейти к шагу 3.
Закрыть файл input.txt.
Открыть файл output.txt для записи.
Записать в файл значение S.
Закрыть файл output.txt.

цикл с условием «пока есть данные»


Слайд 139 Программа
program qq;
var s, x: integer;
f: text;

Программаprogram qq;var s, x: integer; f: text; begin assign(f, 'input.txt'); reset(f);


begin
assign(f, 'input.txt');
reset(f);
s :=

0;




close(f);




end.

while not eof(f) do begin
readln(f, x);
s := s + x;
end;

f: text;

eof(f)

логическая функция, возвращает True, если достигнут конец файла

assign(f, 'output.txt');
rewrite(f);
writeln(f, 'Сумма чисел ', s);
close(f);

запись результата в файл output.txt


Слайд 140 Задания

В файле data.txt записаны числа, сколько их –

ЗаданияВ файле data.txt записаны числа, сколько их – неизвестно. «3»: Найти

неизвестно.
«3»: Найти сумму чётных чисел и записать её

в файл output.txt.
«4»: Найти минимальное и максимальное из четных чисел и записать их в файл output.txt.
«5»: Найти длину самой длинной цепочки одинаковых чисел, идущих подряд, и записать её в файл output.txt.

Слайд 141 Обработка массивов
Задача: в файле input.txt записаны числа (в

Обработка массивовЗадача: в файле input.txt записаны числа (в столбик), сколько их

столбик), сколько их – неизвестно, но не более 100.

Переставить их в порядке возрастания и записать в файл output.txt.
Проблемы:
для сортировки надо удерживать в памяти все числа сразу (массив);
сколько чисел – неизвестно.
Решение:
выделяем в памяти массив из 100 элементов;
записываем прочитанные числа в массив и считаем их в переменной N;
сортируем первые N элементов массива;
записываем их в файл.

Слайд 142 Чтение данных в массив
var A: array[1..100] of integer;

Чтение данных в массивvar A: array[1..100] of integer; f: text; function

f: text;
function ReadArray: integer;
var i: integer;

begin
assign(f, 'input.txt');
reset(f);
i := 0;




close(f);
ReadArray := i;
end;

Глобальные переменные:

Функция: ввод массива, возвращает число элементов

while (not eof(f)) and (i < 100) do begin
i := i + 1;
readln(f, A[i]);
end;

ReadArray := i;

цикл заканчивается, если достигнут конец файла или прочитали 100 чисел


Слайд 143 Программа
program qq;
var A: array[1..100] of integer;
f:

Программаprogram qq;var A: array[1..100] of integer; f: text;  N, i:

text; N, i: integer;
Begin
N :=

ReadArray;
{ сортировка первых N элементов }




end.

function ReadArray: integer;
...
end;

assign(f, 'output.txt');
rewrite(f);
for i:=1 to N do
writeln(f, A[i]);
close(f);

вывод отсортированного массива в файл


Слайд 144 Задания

В файле input.txt записаны числа (в столбик), известно,

ЗаданияВ файле input.txt записаны числа (в столбик), известно, что их не

что их не более 100.
«3»: Отсортировать массив по

убыванию и записать его в файл output.txt.
«4»: Отсортировать массив по убыванию последней цифры и записать его в файл output.txt.
«5»: Отсортировать массив по возрастанию суммы цифр и записать его в файл output.txt.

Слайд 145 Обработка текстовых данных
Задача: в файле input.txt записаны строки,

Обработка текстовых данныхЗадача: в файле input.txt записаны строки, в которых есть

в которых есть слово-паразит «короче». Очистить текст от мусора

и записать в файл output.txt.
Файл input.txt :
Мама, короче, мыла, короче, раму.
Декан, короче, пропил, короче, бутан.
А роза, короче, упала на лапу, короче, Азора.
Каждый, короче, охотник желает, короче, знать, где ...
Результат - файл output.txt :
Мама мыла раму.
Декан пропил бутан.
А роза упала на лапу Азора.
Каждый охотник желает знать, где сидит фазан.

Слайд 146 Обработка текстовых данных

Алгоритм:
Прочитать строку из файла (readln).

Обработка текстовых данныхАлгоритм: Прочитать строку из файла (readln). Удалить все сочетания

Удалить все сочетания ", короче," (Pos, Delete).
Записать строку

в другой файл.
Перейти к шагу 1.
Обработка строки s:
Особенность:
надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи).

пока не кончились данные

repeat
i := Pos(', короче,', s);
if i <> 0 then Delete(s, i, 9);
until i = 0;

искать «, короче,»

удалить 9 символов


Слайд 147 Работа с двумя файлами одновременно



program qq;
var s:

Работа с двумя файлами одновременноprogram qq; var s: string;  i:

string;
i: integer;
fIn, fOut:

text;
begin
assign(fIn, 'input.txt');
reset(fIn);
assign(fOut, 'output.txt');
rewrite(fOut);
{ обработать файл }
close(fIn);
close(fOut);
end.

fIn, fOut: text;

файловые переменные

открыть файл для чтения

открыть файл для записи


Слайд 148 Полный цикл обработки файла
while not eof(fIn) do

Полный цикл обработки файла while not eof(fIn) do begin  readln(fIn,

begin
readln(fIn, s);
writeln(fOut, s);


end;

repeat
i := Pos(', короче,', s);
if i <> 0 then
Delete(s, i, 9);
until i = 0;

пока не достигнут конец файла

обработка строки

запись «очищенной» строки


Слайд 149 Задания

В файле input.txt записаны строки, сколько их –

ЗаданияВ файле input.txt записаны строки, сколько их – неизвестно. «3»: Заменить

неизвестно.
«3»: Заменить все слова «короче» на «в общем»

и записать результат в файл output.txt.
«4»: Вывести в файл output.txt только те строки, в которых есть слово «пароход». В этих строках заменить все слова «короче» на «в общем».
«5»: Вывести в файл output.txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).

Слайд 150 Сортировка списков
Задача: в файле list.txt записаны фамилии и

Сортировка списковЗадача: в файле list.txt записаны фамилии и имена пользователей сайта

имена пользователей сайта (не более 100). Вывести их в

алфавитном порядке в файл sort.txt.
Файл list.txt :
Федоров Иван
Иванов Федор
Анисимов Никита
Никитин Николай
Результат – файл sort.txt :
Анисимов Никита
Иванов Федор
Никитин Николай
Федоров Иван

Слайд 151 Сортировка списков

Алгоритм:
прочитать строки из файла в массив

Сортировка списковАлгоритм: прочитать строки из файла в массив строк, подсчитать их

строк, подсчитать их в переменной N
отсортировать первые N строк

массива по алфавиту
вывести первые N строк массива в файл

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

const MAX = 100;
var s: array[1..MAX] of string;


Слайд 152 Сортировка списков

Ввод массива строк из файла:
assign(f, 'list.txt');
reset(f);
N:=

Сортировка списковВвод массива строк из файла: assign(f, 'list.txt');reset(f);N:= 0;while not eof(f)

0;
while not eof(f) do begin
N:= N + 1;

readln(f, s[N]);
end;
close(f);

var f:Text;
N: integer;


Слайд 153 Сортировка списков

Сортировка первых N элементов массива:
for i:=1

Сортировка списковСортировка первых N элементов массива: for i:=1 to N-1 do

to N-1 do begin
nMin:= i;
for j:=i+1 to

N do
if s[j] < s[nMin] then nMin:= j;
if i <> nMin then begin
c:= s[i];
s[i]:= s[nMin];
s[nMin]:= c;
end;
end;

var i, j, nMin: integer;
c: string;


Слайд 154 Сортировка списков

Вывод первых N строк массива в файл:

Сортировка списковВывод первых N строк массива в файл: assign(f, 'sort.txt');rewrite(f);for i:=1


assign(f, 'sort.txt');
rewrite(f);
for i:=1 to N do
writeln(f, s[i]);
close(f);
var

f:Text;
i, N: integer;

Слайд 155 Сортировка списков

Как сравниваются строки:
||
||
||
||
?
s1
s2
Кодовая таблица:
Win
UNICODE
245
226
код('х') >

Сортировка списковКак сравниваются строки: ||||||||?s1s2Кодовая таблица: WinUNICODE245226код('х') > код('в')'х' > 'в''Пароход' > 'Паровоз'

код('в')
'х' > 'в'
'Пароход' > 'Паровоз'


Слайд 156 Сортировка списков

Как сравниваются строки:
||
||
||
?
s1
s2
'х' > ¤
'Пароход' >

Сортировка списковКак сравниваются строки: ||||||?s1s2'х' > ¤'Пароход' > 'Пар'

'Пар'


Слайд 157 Сортировка списков

Работа с отдельной строкой массива:
var s:

Сортировка списковРабота с отдельной строкой массива: var s: array[1..MAX] of string;

array[1..MAX] of string;
c: string; {вспомогательная строка}
...
for

i:=1 to N do begin
с:= s[i];
{ работаем со строкой c, меняем ее }
s[i]:= c;
end;

Слайд 158 Задания

«3»: Добавить к списку нумерацию:
1) Анисимов

Задания«3»: Добавить к списку нумерацию: 1) Анисимов Никита 2) Иванов Федор«4»:

Никита
2) Иванов Федор
«4»: Выполнить задачу на «3»

и сократить имя до первой буквы:
1) Анисимов Н.
2) Иванов Ф.
«5»: Выполнить задачу на «4», но при выводе начинать с имени:
1) Н. Анисимов
2) Ф. Иванов

Слайд 159 Списки с числовыми данными
Задача: в файле marks.txt записаны

Списки с числовыми даннымиЗадача: в файле marks.txt записаны фамилии и имена

фамилии и имена школьников и баллы, полученные ими на

экзамене (0-100). В файле не более 100 строк. Вывести в файл best.txt список тех, кто получил более 75 баллов.
Файл marks.txt :
Федоров Иван 78
Иванов Федор 63
Анисимов Никита 90
Никитин Николай 55
Результат – файл best.txt :
Федоров Иван 78
Анисимов Никита 90

Слайд 160 Работа с двумя файлами одновременно
var fIn, fOut: Text;
...

Работа с двумя файлами одновременноvar fIn, fOut: Text;... assign(fIn, 'marks.txt');reset(fIn);assign(fOut, 'best.txt');rewrite(fOut);while


assign(fIn, 'marks.txt');
reset(fIn);
assign(fOut, 'best.txt');
rewrite(fOut);
while not eof(fIn) do begin

{ обработка строк из файла }
end;
close(fIn);
close(fOut);

Слайд 161 Цикл обработки файла
var ball: integer;
...
while not eof(fIn) do

Цикл обработки файлаvar ball: integer;...while not eof(fIn) do begin readln(fIn, s);

begin
readln(fIn, s);
{ обработка строки s }

{ ball:= результат на экзамене }
if ball > 75 then
writeln(fOut, s);
end;

Слайд 162 Преобразования «строка»-«число»
Из строки в число:
s := '123';
Val (

Преобразования «строка»-«число»Из строки в число:s := '123';Val ( s, N, r

s, N, r ); { N = 123 }

{ r = 0, если ошибки не было
r – номер ошибочного символа}
s := '123.456';
Val ( s, X, r ); { X = 123.456 }

Из числа в строку:

N := 123;
Str ( N, s ); { '123' }
X := 123.456;
Str ( X, s ); { '1.234560E+002' }
Str ( X:10:3, s ); { ' 123.456' }

var N, r: integer;
X: real;
s: string;



Слайд 163 Обработка строки
n:= Pos(' ', s); {

Обработка строкиn:= Pos(' ', s);  { n:= 7; }fam:= Copy(s,1,n-1);

n:= 7; }
fam:= Copy(s,1,n-1); { fam:= 'Пупкин'; }
Delete(s, 1,

n); { s:= 'Вася 82'; }
n:= Pos(' ', s); { n:= 5; }
name:= Copy(s,1,n-1); { name:= 'Вася'; }
Delete(s, 1, n); { s:= '82'; }
Val(s, ball, r); { ball:= 82; }

var n, r: integer;
s, fam, name: string;

s:

n

1

n

1






Слайд 164 Задания

«3»: Добавить к списку нумерацию:
1) Федоров

Задания«3»: Добавить к списку нумерацию: 1) Федоров Иван 78	2) Анисимов Никита

Иван 78
2) Анисимов Никита 90
«4»: Выполнить задачу на «3»

и сократить имя до первой буквы:
1) Федоров И. 78
2) Анисимов Н. 90
«5»: Выполнить задачу на «4», но отсортировать список по алфавиту.
1) Анисимов Н. 90
2) Федоров И. 78
«6»: Выполнить задачу на «4», но отсортировать список по убыванию отметки (балла).

  • Имя файла: programmirovanie-na-yazyke-paskal-chast-ii.pptx
  • Количество просмотров: 128
  • Количество скачиваний: 0