К.Ю. Поляков, Е.А. Ерёмин, 2013 1 Программирование на алгоритмическом языке § 62. МассивыМассивы § 63. Алгоритмы обработки массивовАлгоритмы обработки.

Презентация:



Advertisements
Похожие презентации
К.Ю. Поляков, Е.А. Ерёмин, 2013 Программирование на языке Паскаль § 64. Сортировка 1.
Advertisements

К.Ю. Поляков, Е.А. Ерёмин, 2013 Программирование на языке Паскаль § 64. Сортировка 1.
К.Ю. Поляков, Е.А. Ерёмин, 2013 Программирование на языке Паскаль § 66. Символьные строки 1.
К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 63. Алгоритмы обработки массивовАлгоритмы обработки массивов.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 4. Символьные строки.
Алгоритмы сортировки. 2 Сортировка Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме.
К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 62. МассивыМассивы.
К.Ю. Поляков, Е.А. Ерёмин, 2013 Программирование на языке Паскаль § 58. Циклические алгоритмы 1.
К. Поляков, Программирование на алгоритмическом языке. Часть II 1.МассивыМассивы 2.Максимальный элемент массиваМаксимальный.
К. Поляков, Программирование на алгоритмическом языке Тема 4. Циклы.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 6. Файлы.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 4. Символьные строки.
К. Поляков, Программирование на алгоритмическом языке. Часть III 1.Обработка массивовОбработка массивов 2.Сортировка.
К.Ю. Поляков, Е.А. Ерёмин, 2013 Программирование на языке Паскаль § 58. Циклические алгоритмы 1.
К. Поляков, Программирование на алгоритмическом языке. Часть II 1. Массивы Массивы 2. Максимальный элемент массива Максимальный элемент массива.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
К.Ю. Поляков, Е.А. Ерёмин, 2013 Решение вычислительных задач на компьютере § 70. Решение уравнений 1.
1 Программирование на языке Паскаль Часть II Символьные строки.
Подведение итогов г. Н.Новгород школа 58. Блиц-опрос! Что такое двумерный массив? Как его описать? Как заполнить двумерный массив? Приведите примеры заполнения.
К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 62. МассивыМассивы § 63. Алгоритмы обработки массивовАлгоритмы обработки массивов.
Транксрипт:

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 62. Массивы Массивы § 63. Алгоритмы обработки массивов Алгоритмы обработки массивов § 64. Сортировка Сортировка § 65. Двоичный поиск Двоичный поиск § 66. Символьные строки Символьные строки § 67. Матрицы Матрицы § 68. Работа с файлами Работа с файлами

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 62. Массивы 2

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что такое массив? 3 Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка в массиве имеет уникальный номер. Надо: Как ввести переменных? ? выделять память записывать данные в нужную ячейку читать данные из ячейки

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Выделение памяти (объявление) 4 целтаб A[1:5] вещтаб V[0:5] логтаб L[-5:5] симтаб S[65:90] целтаб A[1:5] вещтаб V[0:5] логтаб L[-5:5] симтаб S[65:90] Массив = таблица! ! минимальный индекс максимальный индекс цел N = 10 целтаб A[1:N] цел N = 10 целтаб A[1:N] размер через константу Зачем? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что неправильно? 5 целтаб A [10:1]... A[5] := 4.5; целтаб A [10:1]... A[5] := 4.5; [1:10] целтаб A[1:10]... A[15] := 'a' целтаб A[1:10]... A[15] := 'a'

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обращение к элементу массива A A массив НОМЕР элемента массива (ИНДЕКС) НОМЕР элемента массива (ИНДЕКС) A[1] A[2] A[3] A[4] A[5] ЗНАЧЕНИЕ элемента массива A[2] НОМЕР (ИНДЕКС) элемента массива: 2 ЗНАЧЕНИЕ элемента массива: 10

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Как обработать все элементы массива? 7 Объявление: Обработка: цел N = 5 целтаб A[1:N] цел N = 5 целтаб A[1:N] | обработать A[1] | обработать A[2] | обработать A[3] | обработать A[4] | обработать A[5] | обработать A[1] | обработать A[2] | обработать A[3] | обработать A[4] | обработать A[5] 1) если N велико (1000, )? 2) при изменении N программа не должна меняться! 1) если N велико (1000, )? 2) при изменении N программа не должна меняться! ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Как обработать все элементы массива? 8 Обработка с переменной: i:= 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 | обработать A[i] i:= i + 1 Обработка в цикле: i:= 1 нц пока i <= N | обработать A[i] i:= i + 1 кц i:= 1 нц пока i <= N | обработать A[i] i:= i + 1 кц Цикл с переменной: нц для i от 1 до N | обработать A[i] кц нц для i от 1 до N | обработать A[i] кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Заполнение массива 9 алг Массив нач цел i, N = 10 целтаб A[1:N] нц для i от 1 до N A[i]:= i*i кц кон алг Массив нач цел i, N = 10 целтаб A[1:N] нц для i от 1 до N A[i]:= i*i кц кон Чему равен A[9] ? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Ввод с клавиатуры и вывод на экран 10 Объявление: Ввод с клавиатуры: Вывод на экран: цел N = 5, i целтаб A[1:N] цел N = 5, i целтаб A[1:N] нц для i от 1 до N вывод 'A[',i,']=' ввод A[i] кц нц для i от 1 до N вывод 'A[',i,']=' ввод A[i] кц A[1] = A[2] = A[3] = A[4] = A[5] = вывод 'Массив A', нс нц для i от 1 до N вывод A[i], ' ' кц вывод 'Массив A', нс нц для i от 1 до N вывод A[i], ' ' кц Зачем пробел? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Заполнение случайными числами 11 нц для i от 1 до N A[i]:= irand(20,100) вывод A[i], ' ' кц нц для i от 1 до N A[i]:= irand(20,100) вывод A[i], ' ' кц Задача. Заполнить массив (псевдо)случайными целыми числами в диапазоне от 20 до 100.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Перебор элементов 12 Общая схема: нц для i от 1 до N... | сделать что-то с A[i] кц нц для i от 1 до N... | сделать что-то с A[i] кц Подсчёт нужных элементов: Задача. В массиве записаны данные о росте баскетболистов. Сколько из них имеет рост больше 180 см, но меньше 190 см? цел count = 0 нц для i от 1 до N если 180 < A[i] и A[i] < 190 то count:= count + 1 все кц цел count = 0 нц для i от 1 до N если 180 < A[i] и A[i] < 190 то count:= count + 1 все кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Перебор элементов 13 Среднее арифметическое: цел count = 0, sum = 0 нц для i от 1 до N если 180 < A[i] и A[i] < 190 то count:= count + 1 sum:= sum + A[i] все кц вывод sum/count цел count = 0, sum = 0 нц для i от 1 до N если 180 < A[i] и A[i] < 190 то count:= count + 1 sum:= sum + A[i] все кц вывод sum/count среднее арифметическое

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 14 «A»: Заполните массив случайными числами в интервале [0,100] и найдите среднее арифметическое его значений. Пример: Массив: Среднее арифметическое «B»: Заполните массив случайными числами в интервале [0,100] и подсчитайте отдельно среднее значение всех элементов, которые <50, и среднее значение всех элементов, которые 50. Пример: Массив: Ср. арифм. элементов [0,50): Ср. арифм. элементов [50,100):

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 15 «C»: Заполните массив из N элементов случайными числами в интервале [1,N] так, чтобы в массив обязательно вошли все числа от 1 до N (постройте случайную перестановку). Пример: Массив:

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 63. Алгоритмы обработки массивов 16

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Поиск в массиве 17 Найти элемент, равный X: i:= 1 нц пока A[i] <> X i:= i + 1 кц вывод 'A[',i,']=',X i:= 1 нц пока A[i] <> X i:= i + 1 кц вывод 'A[',i,']=',X Что плохо? ? i:= 1 нц пока и A[i] <> X i:= i + 1 кц если i <= N то вывод 'A[',i,']=',X иначе вывод 'Не нашли!' все i:= 1 нц пока и A[i] <> X i:= i + 1 кц если i <= N то вывод 'A[',i,']=',X иначе вывод 'Не нашли!' все Что если такого нет? ? i <= N должно быть первым!

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Поиск в массиве 18 nX:= 0 нц для i от 1 до N если A[i] = X то nX:= i все кц если nX > 0 то вывод 'A[',i,']=',X иначе вывод 'Не нашли!' все nX:= 0 нц для i от 1 до N если A[i] = X то nX:= i все кц если nX > 0 то вывод 'A[',i,']=',X иначе вывод 'Не нашли!' все Вариант с досрочным выходом: выход досрочный выход из цикла

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 19 «A»: Заполните массив случайными числами в интервале [0,5]. Введите число X и найдите все значения, равные X. Пример: Массив: Что ищем: 2 Нашли: A[2]=2, A[5]=2 Пример: Массив: Что ищем: 6 Ничего не нашли.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 20 «B»: Заполните массив случайными числами в интервале [0,5]. Определить, есть ли в нем элементы с одинаковыми значениями, стоящие рядом. Пример: Массив: Есть: 3 Пример: Массив: Нет

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 21 «C»: Заполните массив случайными числами. Определить, есть ли в нем элементы с одинаковыми значениями, не обязательно стоящие рядом. Пример: Массив: Есть: 3, 2 Пример: Массив: Нет

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Максимальный элемент 22 M:= A[1] нц для i от 2 до N если A[i] > M то M:= A[i] все кц вывод M M:= A[1] нц для i от 2 до N если A[i] > M то M:= A[i] все кц вывод M M:= A[1]; нц для i от 2 до N если A[i] > M то M:= A[i] все кц вывод 'A[',nMax,']=',M M:= A[1]; нц для i от 2 до N если A[i] > M то M:= A[i] все кц вывод 'A[',nMax,']=',M nMax:= 1 nMax:= i Что можно улучшить? ? Как найти его номер? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Максимальный элемент и его номер 23 По номеру элемента можно найти значение! ! nMax:= 1 нц для i от 2 до N если A[i] > то nMax:= i все кц вывод 'A[',nMax,']=', nMax:= 1 нц для i от 2 до N если A[i] > то nMax:= i все кц вывод 'A[',nMax,']=', A[nMax]

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 24 «A»: Заполнить массив случайными числами и найти минимальный и максимальный элементы массива и их номера. Пример: Массив: Минимальный элемент: A[1]=1 Максимальный элемент: A[5]=5 «B»: Заполнить массив случайными числами и найти два максимальных элемента массива и их номера. Пример: Массив: Максимальный элемент: A[1]=5 Второй максимум: A[2]=5

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 25 «C»: Введите массив с клавиатуры и найдите (за один проход) количество элементов, имеющих максимальное значение. Пример: Массив: Максимальное значение 5 Количество элементов 3

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Реверс массива N-3N-2N-1N N-3N-2N-1N «Простое» решение: нц для i от 1 до N | поменять местами A[i] и A[N+1-i] кц нц для i от 1 до N | поменять местами A[i] и A[N+1-i] кц div(N,2) Что плохо? ? остановиться на середине!

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Реверс массива 27 нц для i от 1 до div(N,2) c:= A[i] A[i]:= A[N+1-i] A[N+1-i]:= c кц нц для i от 1 до div(N,2) c:= A[i] A[i]:= A[N+1-i] A[N+1-i]:= c кц *Как обойтись без переменной c ? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, N-3N-2N-1N Циклический сдвиг элементов N-3N-2N-1N «Простое» решение: c:= A[1] нц для i от 1 до N-1 A[i]:= A[i+1] кц A[N]:= c c:= A[1] нц для i от 1 до N-1 A[i]:= A[i+1] кц A[N]:= c Что плохо? ? Почему не до N ? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 29 «A»: Заполнить массив случайными числами и выполнить циклический сдвиг элементов массива вправо на 1 элемент. Пример: Массив: Результат: «B»: Массив имеет четное число элементов. Заполнить массив случайными числами и выполнить реверс отдельно в первой половине и второй половине. Пример: Массив: Результат:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 30 «C»: Заполнить массив случайными числами в интервале [- 100,100] и переставить элементы так, чтобы все положительные элементы стояли в начала массива, а все отрицательные и нули – в конце. Вычислите количество положительных элементов. Пример: Массив: Результат: Количество положительных элементов: 3

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Отбор нужных элементов 31 «Простое» решение: Задача. Отобрать элементы массива A, удовлетворяющие некоторому условию, в массив B. нц для i от 1 до N если условие выполняется для A[i] то B[i]:= A[i] все кц нц для i от 1 до N если условие выполняется для A[i] то B[i]:= A[i] все кц Что плохо? ? A 12?34??46 B выбрать чётные элементы

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Отбор нужных элементов A ??? B выбрать чётные элементы count:= 0 | счётчик нц для i от 1 до N если mod(A[i],2) = 0 то count:= count + 1 все кц count:= 0 | счётчик нц для i от 1 до N если mod(A[i],2) = 0 то count:= count + 1 все кц нц для i от 1 до вывод B[i], ' ' кц нц для i от 1 до вывод B[i], ' ' кц count Как вывести на экран? ? Если A и B – один и тот же массив? ? B[count]:= A[i]

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 33 «A»: Заполнить массив случайными числами в интервале [-10,10] и отобрать в другой массив все чётные отрицательные числа. Пример: Массив А: Массив B: «B»: Заполнить массив случайными числами в интервале [0,100] и отобрать в другой массив все простые числа. Используйте логическую функцию, которая определяет, является ли переданное ей число простым. Пример: Массив А: Массив B: 13 47

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 34 «C»: Заполнить массив случайными числами и отобрать в другой массив все числа Фибоначчи. Используйте логическую функцию, которая определяет, является ли переданное ей число числом Фибоначчи. Пример: Массив А: Массив B: 13 34

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 64. Сортировка 35

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что такое сортировка? 36 Сортировка – это расстановка элементов массива в заданном порядке. …по возрастанию, убыванию, последней цифре, сумме делителей, по алфавиту, … Алгоритмы: простые и понятные, но неэффективные для больших массивов метод пузырька метод выбора сложные, но эффективные «быстрая сортировка» (QuickSort) сортировка «кучей» (HeapSort) сортировка слиянием (MergeSort) пирамидальная сортировка время работы N

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод пузырька (сортировка обменами) 37 Идея: пузырек воздуха в стакане воды поднимается со дна вверх. Для массивов – самый маленький («легкий» элемент перемещается вверх («всплывает») сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами за 1 проход по массиву один элемент (самый маленький) становится на свое место 1-й проход:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод пузырька й проход: 3-й проход: й проход: Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов). !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод пузырька 39 1-й проход: нц для j от N-1 до 1 шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц нц для j от N-1 до 1 шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц 2-й проход: нц для j от N-1 до шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц нц для j от N-1 до шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц 2 единственное отличие!

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод пузырька 40 нц для i от 1 до N-1 нц для j от N-1 до шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц нц для i от 1 до N-1 нц для j от N-1 до шаг -1 если A[j+1]< A[j] то | поменять местами A[j] и A[j+1] все кц i Как написать метод «камня»? ? Как сделать рекурсивный вариант? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 41 «A»: Напишите программу, в которой сортировка выполняется «методом камня» – самый «тяжёлый» элемент опускается в конец массива. «B»: Напишите вариант метода пузырька, который заканчивает работу, если на очередном шаге внешнего цикла не было перестановок. «С»: Напишите программу, которая сортирует массив по убыванию суммы цифр числа. Используйте функцию, которая определяет сумму цифр числа.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод выбора (минимального элемента) 42 Идея: найти минимальный элемент и поставить его на первое место. нц для i от 1 до N-1 | найти номер nMin минимального элемента | из A[i]..A[N] если i <> nMin то | поменять местами A[i] и A[nMin] все кц нц для i от 1 до N-1 | найти номер nMin минимального элемента | из A[i]..A[N] если i <> nMin то | поменять местами A[i] и A[nMin] все кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Метод выбора (минимального элемента) 43 нц для i от 1 до N-1 если i <> nMin то | поменять местами A[i] и A[nMin] все кц нц для i от 1 до N-1 если i <> nMin то | поменять местами A[i] и A[nMin] все кц nMin:= i нц для j от i+1 до N если A[j] < A[nMin] то nMin:= j все кц Как поменять местами два значения? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 44 «A»: Массив содержит четное количество элементов. Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую – по убыванию. Каждый элемент должен остаться в «своей» половине. Пример: Массив: После сортировки:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 45 «B»: Напишите программу, которая сортирует массив и находит количество различных чисел в нем. Пример: Массив: После сортировки: Различных чисел: 5 «C»: Напишите программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком» и методом выбора. Проверьте ее на разных массивах, содержащих 1000 случайных элементов, вычислите среднее число перестановок для каждого метода.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка (QuickSort) 46 Ч.Э.Хоар Идея: выгоднее переставлять элементы, который находятся дальше друг от друга Для массива из N элементов нужно всего N/2 обменов! !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка 47 Шаг 2: переставить элементы так: при сортировке элементы не покидают « свою область»! Шаг 1: выбрать некоторый элемент массива X A[i] <= XA[i] >= X Шаг 3: так же отсортировать две получившиеся области Разделяй и властвуй (англ. divide and conquer) Медиана – такое значение X, что слева и справа от него в отсортированном массиве стоит одинаковое число элементов (для этого надо отсортировать массив…) Как лучше выбрать X? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка 48 Разделение: 1)выбрать средний элемент массива ( X=67 ) 2)установить L:=1, R:=N 3)увеличивая L, найти первый элемент A[L], который >= X (должен стоять справа) 4)уменьшая R, найти первый элемент A[R], который <= X (должен стоять слева) 5)если L<=R то поменять местами A[L] и A[R] и перейти к п. 3 иначе стоп

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка LR LR LR RL L > R : разделение закончено! !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка 50 цел N = 7 целтаб A[1:N] алг Быстрая сортировка нач | заполнить массив qSort(1, N) | сортировка | вывести результат кон цел N = 7 целтаб A[1:N] алг Быстрая сортировка нач | заполнить массив qSort(1, N) | сортировка | вывести результат кон Основная программа: глобальные данные

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка 51 алг qSort(цел nStart, nEnd) нач цел L, R, c, X если nStart >= nEnd то выход все L:= nStart; R:= nEnd X:= A[div(L+R,2)] | или X:= A[irand(L,R)] нц пока L <= R | разделение нц пока A[L] < X; L:= L + 1 кц нц пока A[R] > X; R:= R - 1 кц если L <= R то c:= A[L]; A[L]:= A[R]; A[R]:= c L:= L+1; R:= R-1 все кц qSort(nStart, R) | рекурсивные вызовы qSort(L, nEnd) кон алг qSort(цел nStart, nEnd) нач цел L, R, c, X если nStart >= nEnd то выход все L:= nStart; R:= nEnd X:= A[div(L+R,2)] | или X:= A[irand(L,R)] нц пока L <= R | разделение нц пока A[L] < X; L:= L + 1 кц нц пока A[R] > X; R:= R - 1 кц если L <= R то c:= A[L]; A[L]:= A[R]; A[R]:= c L:= L+1; R:= R-1 все кц qSort(nStart, R) | рекурсивные вызовы qSort(L, nEnd) кон

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Быстрая сортировка 52 N метод пузырька метод выбора быстрая сортировка 10000,24 с 0,12 с 0,004 с 50005,3 с 2,9 с 0,024 с с 34 с 0,068 с Сортировка массива случайных значений:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 53 «A»: Массив содержит четное количество элементов. Напишите программу, которая сортирует по возрастанию отдельно элементы первой и второй половин массива. Каждый элемент должен остаться в «своей» половине. Используйте алгоритм быстрой сортировки. Пример: Массив: После сортировки:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 54 «B»: Напишите программу, которая сортирует массив и находит количество различных чисел в нем. Используйте алгоритм быстрой сортировки. Пример: Массив: После сортировки: Различных чисел: 5

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 55 «C»: Напишите программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком», методом выбора и алгоритма быстрой сортировки. Проверьте ее на разных массивах, содержащих 1000 случайных элементов, вычислите среднее число перестановок для каждого метода. «D»: Попробуйте построить массив из 10 элементов, на котором алгоритм быстрой сортировки показывает худшую эффективность (наибольшее число перестановок). Сравните это количество перестановок с эффективностью метода пузырька (для того же массива).

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 65. Двоичный поиск 56

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Двоичный поиск X = 7X = 7 X = 7X = 7 X < 8X < X > 4X > X > 6 1. Выбрать средний элемент A[c] и сравнить с X. 2. Если X = A[c], то нашли (стоп). 3. Если X < A[c], искать дальше в первой половине. 4. Если X > A[c], искать дальше во второй половине. 1. Выбрать средний элемент A[c] и сравнить с X. 2. Если X = A[c], то нашли (стоп). 3. Если X < A[c], искать дальше в первой половине. 4. Если X > A[c], искать дальше во второй половине.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Двоичный поиск 58 A[1]A[N]A[N+1] LRс LсR X = LсR LR L = R-1 : поиск завершен! !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Двоичный поиск 59 цел L, R, c L:= 1; R:= N + 1 | начальный диапазон нц пока L < R-1 c:= div(L+R,2) | нашли середину если X < A[c] то R:= c | изменить диапазон иначе L:= c все кц если A[L] = X то вывод 'A[',L,']=',X иначе вывод 'Не нашли!' все цел L, R, c L:= 1; R:= N + 1 | начальный диапазон нц пока L < R-1 c:= div(L+R,2) | нашли середину если X < A[c] то R:= c | изменить диапазон иначе L:= c все кц если A[L] = X то вывод 'A[',L,']=',X иначе вывод 'Не нашли!' все

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Двоичный поиск 60 N линейный поиск двоичный поиск скорость выше, чем при линейном поиске нужна предварительная сортировка Когда нужно применять? ? Число сравнений:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 61 «A»: Заполнить массив случайными числами и отсортировать его. Ввести число X. Используя двоичный поиск, определить, есть ли в массиве число, равное X. Подсчитать количество сравнений. Пример: Массив: После сортировки: Введите число X: 2 Число 2 найдено. Количество сравнений: 2

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 62 «B»: Заполнить массив случайными числами и отсортировать его. Ввести число X. Используя двоичный поиск, определить, сколько чисел, равных X, находится в массиве. Пример: Массив: После сортировки: Введите число X: 4 Число 4 встречается 2 раз(а). Пример: Массив: После сортировки: Введите число X: 14 Число 14 не встречается.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 63 «C»: Заполнить массив случайными числами и ввести число и отсортировать его. Ввести число X. Используя двоичный поиск, определить, есть ли в массиве число, равное X. Если такого числа нет, вывести число, ближайшее к X. Пример: Массив: После сортировки: Введите число X: 12 Число 12 найдено. Пример: Массив: После сортировки: Введите число X: 11 Число 11 не найдено. Ближайшее число 12.

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 66. Символьные строки 64

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Зачем нужны символьные строки? 65 симтаб s[1:80] | массив символов элементы массива – отдельные объекты сложно работать со строками переменной длины Хочется: строка – единый объект длина строки может меняться во время работы программы лит s | символьная строка литерный тип

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Символьные строки 66 Присваивание: s:= 'Вася пошёл гулять' Ввод с клавиатуры: ввод s Вывод на экран: вывод s А если массив? ? Отдельный символ: s[4]:= 'a' Длина строки: цел n n:= длин(s) цел n n:= длин(s) лит s

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Символьные строки 67 алг Замена а на б нач лит s вывод 'Введите строку: ' ввод s цел i нц для i от 1 до длин(s) если s[i] = 'а' то s[i]:= 'б' все кц вывод s кон алг Замена а на б нач лит s вывод 'Введите строку: ' ввод s цел i нц для i от 1 до длин(s) если s[i] = 'а' то s[i]:= 'б' все кц вывод s кон Задача: заменить в строке все буквы 'а' на буквы 'б'.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 68 «A»: Ввести с клавиатуры символьную строку и заменить в ней все буквы «а» на «б» и все буквы «б» на «а» (заглавные на заглавные, строчные на строчные). Пример: Введите строку: аабб ААББссСС Результат: ббаа ББААссСС

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 69 «B»: Ввести с клавиатуры символьную строку и определить, сколько в ней слов. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Найдено слов: 3

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 70 «C»: Ввести с клавиатуры символьную строку и найдите самое длинное слово и его длину. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Самое длинное слово: гулять, длина 6

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Операции со строками 71 Объединение (конкатенация) : s1:= 'Привет' s2:= 'Вася' s := s1 + ', ' + s2 + '!' s1:= 'Привет' s2:= 'Вася' s := s1 + ', ' + s2 + '!' 'Привет, Вася!' Срез: s:= ' ' s1:= s[3:7] | '34567' s:= ' ' s1:= s[3:7] | '34567' с какого символа до какого символа

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Операции со строками 72 Вставка: s:= ' ' вставить('ABC', s, 3) | '12ABC ' s:= ' ' вставить('ABC', s, 3) | '12ABC ' что куда с какого символа Удаление: s:= ' ' удалить(s, 3, 6) | '129' s:= ' ' удалить(s, 3, 6) | '129' с какого символа сколько символов

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Поиск в строках 73 s:= 'Здесь был Вася.' n:= позиция('с', s) если n > 0 то вывод 'Номер символа ', n иначе вывод 'Символ не найден.' все s:= 'Здесь был Вася.' n:= позиция('с', s) если n > 0 то вывод 'Номер символа ', n иначе вывод 'Символ не найден.' все что где Находит первое слева вхождение подстроки! !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Пример обработки строк 74 Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы». Пример: Введите имя, отчество и фамилию: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В.А. Алгоритм: найти первый пробел и выделить имя удалить имя с пробелом из основной строки найти первый пробел и выделить отчество удалить отчество с пробелом из основной строки «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы… Алибабаевич Хрюндиков Хрюндиков Хрюндиков В.А.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Пример обработки строк 75 алг FIO нач лит s, name, name2 цел n вывод 'Введите имя, отчество и фамилию' ввод s n:= позиция(' ', s); name:= s[1:n-1] | вырезать имя удалить(s, 1, n) n:= позиция(' ', s) name2:= s[1:n-1] | вырезать отчество удалить(s, 1, n) | осталась фамилия s:= s + ' ' + name[1] + '.' + name2[1] + '.' вывод s кон алг FIO нач лит s, name, name2 цел n вывод 'Введите имя, отчество и фамилию' ввод s n:= позиция(' ', s); name:= s[1:n-1] | вырезать имя удалить(s, 1, n) n:= позиция(' ', s) name2:= s[1:n-1] | вырезать отчество удалить(s, 1, n) | осталась фамилия s:= s + ' ' + name[1] + '.' + name2[1] + '.' вывод s кон

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 76 «A»: Ввести с клавиатуры в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы. Пример: Введите фамилию, имя и отчество: Иванов Петр Семёнович П.С. Иванов

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 77 «B»: Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'. Каждую часть вывести в отдельной строке. Пример: Введите адрес файла: C:/Фото/2013/Поход/vasya.jpg C: Фото 2013 Поход vasya.jpg

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 78 «C»: Напишите программу, которая заменяет во всей строке одну последовательность символов на другую. Пример: Введите строку: (X > 0) and (Y Y) and (Z <> 5) Что меняем: and Чем заменить: & Результат (X > 0) & (Y Y) & (Z <> 5)

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Преобразования «строка» – «число» 79 Из строки в число: s:= '123' N:= лит_в_цел(s, OK) | N = 123 если не OK то вывод 'Ошибка!' все s:= ' '; X:= лит_в_вещ(s, OK) | X = если не OK то вывод 'Ошибка!' все s:= '123' N:= лит_в_цел(s, OK) | N = 123 если не OK то вывод 'Ошибка!' все s:= ' '; X:= лит_в_вещ(s, OK) | X = если не OK то вывод 'Ошибка!' все Из числа в строку: N:= 123 s:= цел_в_лит(N) | '123' X:= s:= вещ_в_лит(X) | ' ' N:= 123 s:= цел_в_лит(N) | '123' X:= s:= вещ_в_лит(X) | ' ' цел N, вещ X, лит s, лог OK да или нет

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 80 «A»: Напишите программу, которая вычисляет сумму трех чисел, введенную в форме символьной строки. Все числа целые. Пример: Введите выражение: Ответ: 60 «B»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–»). Выражение вводится как символьная строка, все числа целые. Пример: Введите выражение: Ответ: 54

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 81 «C»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки « + », « – », « * » и « / »). Выражение вводится как символьная строка, все числа целые. Операция « / » выполняется как целочисленное деление ( div ). Пример: Введите выражение: 12*3+45 Ответ: 81

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 82 «D»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки « + », « – », « * » и « / ») и круглых скобок. Выражение вводится как символьная строка, все числа целые. Операция « / » выполняется как целочисленное деление ( div ). Пример: Введите выражение: 2*(3+45)+4 Ответ: 100

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Строки в процедурах и функциях 83 Задача: построить процедуру, которая заменяет в строке s все вхождения слова-образца wOld на слово-замену wNew. нц пока | слово wOld есть в строке s | удалить слово wOld из строки | вставить на это место слово wNew кц нц пока | слово wOld есть в строке s | удалить слово wOld из строки | вставить на это место слово wNew кц Что плохо? ? wOld: '12' wNew: 'A12B' зацикливание

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Замена всех экземпляров подстроки 84 s res б)б) wNew s res в)в) s г)г) wOld res s а)а) wNew

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Замена всех экземпляров подстроки 85 рабочая строка s результат res ' ''' '.12.12''A12B' '.12''A12B.A12B' '''A12B.A12B.A12B' алг Замена всех нач лит s = ' ' replaceAll(s, '12', 'A12B') вывод s кон алг Замена всех нач лит s = ' ' replaceAll(s, '12', 'A12B') вывод s кон

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Замена всех экземпляров подстроки 86 алг replaceAll(аргрез лит s, арг лит wOld, wNew) нач лит res; цел p, len len:= длин(wOld) res:= '' нц пока длин(s) > 0 p:= позиция(wOld, s) если p < 0 то res:= res + s; выход все если p > 1 то res:= res + s[1:p-1] все res:= res + wNew если p+len > длин(s) то s:= '' иначе s:= s[p+len:длин(s)] все кц s:= res кон алг replaceAll(аргрез лит s, арг лит wOld, wNew) нач лит res; цел p, len len:= длин(wOld) res:= '' нц пока длин(s) > 0 p:= позиция(wOld, s) если p < 0 то res:= res + s; выход все если p > 1 то res:= res + s[1:p-1] все res:= res + wNew если p+len > длин(s) то s:= '' иначе s:= s[p+len:длин(s)] все кц s:= res кон найти слово wOld не нашли… добавить то, что перед ним добавить wNew взять «хвост»

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Замена: из процедуры в функцию 87 алг Замена всех нач лит s = ' ' s:= replaceAll(s, '12', 'A12B') вывод s кон алг Замена всех нач лит s = ' ' s:= replaceAll(s, '12', 'A12B') вывод s кон алг лит replaceAll(лит s0, wOld, wNew) нач лит s s:= s0... | тело процедуры знач:= res кон алг лит replaceAll(лит s0, wOld, wNew) нач лит s s:= s0... | тело процедуры знач:= res кон

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 88 «A»: Напишите функцию, которая возвращает первое слово переданной ей символьной строки. Пример: Введите строку: Однажды в студёную зимнюю пору... Первое слово: Однажды

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 89 «B»: Напишите функцию, которая заменяет расширение файла на заданное новое расширение. Пример: Введите имя файла: qq Введите новое расширение: tmp Результат: qq.tmp Пример: Введите имя файла: qq.exe Введите новое расширение: tmp Результат: qq.tmp Пример: Введите имя файла: qq.work.xml Введите новое расширение: tmp Результат: qq.work.tmp

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 90 «C»: Напишите функцию, которая заменяет во всей строке все римские числа на соответствующие десятичные числа. Пример: Введите строку: В MMXIII году в школе CXXIII состоялся очередной выпуск XI классов. Результат: В 2013 году в школе 123 состоялся очередной выпуск 11-х классов.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Рекурсивный перебор 91 Задача. В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все слова, состоящие из K букв, которые можно построить из букв этого алфавита. Ы??? перебор K-1 символов Ш??? Ч??? 0??? задача для слов длины К сведена к задаче для слов длины К-1!

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Рекурсивный перебор 92 алг перебор К символов нач w[1]:='Ы' | перебор последних K-1 символов w[1]:='Ш' | перебор последних K-1 символов w[1]:='Ч' | перебор последних K-1 символов w[1]:='О' | перебор последних K-1 символов кон алг перебор К символов нач w[1]:='Ы' | перебор последних K-1 символов w[1]:='Ш' | перебор последних K-1 символов w[1]:='Ч' | перебор последних K-1 символов w[1]:='О' | перебор последних K-1 символов кон

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Рекурсивный перебор 93 алг ЫШЧО нач лит word = '...'; | из K символов TumbaWords('ЫШЧО', word, 0) кон алг ЫШЧО нач лит word = '...'; | из K символов TumbaWords('ЫШЧО', word, 0) кон алг TumbaWords(лит A, w0, цел N) нач если N = длин(w0) то | слово построено вывод w0, нс выход все цел i; лит w w:= w0 нц для i от 1 до длин(A) w[N+1]:= A[i] TumbaWords(A, w, N+1) | рекурсия кц кон алг TumbaWords(лит A, w0, цел N) нач если N = длин(w0) то | слово построено вывод w0, нс выход все цел i; лит w w:= w0 нц для i от 1 до длин(A) w[N+1]:= A[i] TumbaWords(A, w, N+1) | рекурсия кц кон уже установлено когда все символы уже установлены по всем символам алфавита алфавит слово

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 94 «A»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых вторая буква «Ы». Подсчитайте количество таких слов. «B»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых есть по крайней мере две одинаковые буквы, стоящие рядом. Подсчитайте количество таких слов. Программа не должна строить другие слова, не соответствующие условию.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 95 «C»: В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых есть по крайней мере две одинаковые буквы, не обязательно стоящие рядом. Программа не должна строить другие слова, не соответствующие условию.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Сравнение строк 96 парпарк Пар?? Сравнение по кодам символов: AB...YZ CP UNCODE ab...yz CP UNCODE CP UNCODE

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Сравнение строк 97 АБ...Ё ЮЯ CP UNCODE аб...ё юя CP UNCODE STEAM < STEAM < Steam < steam steam < ПАР < Пар < п Ар < пар < парк

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Сортировка строк 98 алг Сортировка строк нач цел i, j, N = 10 литтаб S[1:N] лит s1 нц для i от 1 до N ввод S[i] кц... нц для i от 1 до N вывод S[i], нс кц кон алг Сортировка строк нач цел i, j, N = 10 литтаб S[1:N] лит s1 нц для i от 1 до N ввод S[i] кц... нц для i от 1 до N вывод S[i], нс кц кон нц для i от 1 до N-1 нц для j от N-1 до i шаг -1 если S[j+1] < S[j] то s1:= S[j] S[j]:= S[j+1] S[j+1]:= s1 все кц нц для i от 1 до N-1 нц для j от N-1 до i шаг -1 если S[j+1] < S[j] то s1:= S[j] S[j]:= S[j+1] S[j+1]:= s1 все кц массив строк

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 99 «A»: Вводится 5 строк, в которых сначала записан порядковый номер строки с точкой, а затем – слово. Вывести слова в алфавитном порядке. Пример: Введите 5 строк: 1. тепловоз 2. арбуз 3. бурундук 4. кефир 5. урядник Список слов в алфавитном порядке: арбуз, бурундук, кефир, тепловоз, урядник

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 100 «B»: Вводится несколько строк (не более 20), в которых сначала записан порядковый номер строки с точкой, а затем – слово. Ввод заканчивается пустой строкой. Вывести введённые слова в алфавитном порядке. Пример: Введите слова: 1. тепловоз 2. арбуз Список слов в алфавитном порядке: арбуз, тепловоз

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 101 «C»: Вводится несколько строк (не более 20), в которых сначала записаны инициалы и фамилии работников фирмы. Ввод заканчивается пустой строкой. Отсортировать строки в алфавитном порядке по фамилии. Пример: Введите ФИО: А.Г. Урядников Б.В. Тепловозов В.Д. Арбузов Список в алфавитном порядке: В.Д. Арбузов Б.В. Тепловозов А.Г. Урядников

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 67. Матрицы 102

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Что такое матрица? Как закодировать? ? Матрица это прямоугольная таблица, составленная из элементов одного типа (чисел, строк и т.д.). Каждый элемент матрицы имеет два индекса – номера строки и столбца. нет знака нолик крестик строка 2, столбец 3

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Объявление матриц 104 цел N = 3, M = 4 целтаб A[1:N, 1:M] вещтаб X[-3:0, -8:M] логтаб L[1:N, 0:1] цел N = 3, M = 4 целтаб A[1:N, 1:M] вещтаб X[-3:0, -8:M] логтаб L[1:N, 0:1] строки столбцы строки столбцы

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Простые алгоритмы 105 Заполнение случайными числами: нц для i от 1 до N нц для j от 1 до M A[i,j]:= irand(20,80) вывод A[i,j], ' ' кц вывод нс кц нц для i от 1 до N нц для j от 1 до M A[i,j]:= irand(20,80) вывод A[i,j], ' ' кц вывод нс кц Суммирование: s:= 0 нц для i от 1 до N нц для j от 1 до M s:= s + A[i,j] кц s:= 0 нц для i от 1 до N нц для j от 1 до M s:= s + A[i,j] кц Вложенный цикл! !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 106 «A»: Напишите программу, которая заполняет квадратную матрицу случайными числами в интервале [10,99], и находит максимальный и минимальный элементы в матрице и их индексы. Пример: Матрица А: Максимальный элемент A[2,2]=87 Минимальный элемент A[3,4]=11

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 107 «B»: Яркости пикселей рисунка закодированы числами от 0 до 255 в виде матрицы. Преобразовать рисунок в черно-белый по следующему алгоритму: 1)вычислить среднюю яркость пикселей по всему рисунку 2)все пиксели, яркость которых меньше средней, сделать черными (записать код 0), а остальные – белыми (код 255) Пример: Матрица А: Средняя яркость Результат:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 108 «С»: Заполните матрицу, содержащую N строк и M столбцов, натуральными числами по спирали и змейкой, как на рисунках:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Перебор элементов матрицы 109 Главная диагональ: нц для i от 1 до N | работаем с A[i,i] кц нц для i от 1 до N | работаем с A[i,i] кц Побочная диагональ: нц для i от 1 до N | работаем с A[i,N+1-i] кц нц для i от 1 до N | работаем с A[i,N+1-i] кц Главная диагональ и под ней: нц для i от 1 до N нц для j от 1 до i | работаем с A[i,j] кц нц для i от 1 до N нц для j от 1 до i | работаем с A[i,j] кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Перестановка строк я и 4-я строки: нц для j от 1 до M c:= A[2,j] A[2,j]:= A[4,j] A[4,j]:= c кц нц для j от 1 до M c:= A[2,j] A[2,j]:= A[4,j] A[4,j]:= c кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 111 «A»: Напишите программу, которая заполняет квадратную матрицу случайными числами в интервале [10,99], а затем записывает нули во все элементы выше главной диагонали. Алгоритм не должен изменяться при изменении размеров матрицы. Пример: Матрица А: Результат:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 112 «B»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните отражение рисунка сверху вниз: «С»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните поворот рисунка вправо на 90 градусов:

К.Ю. Поляков, Е.А. Ерёмин, Программирование на алгоритмическом языке § 68. Работа с файлами 113

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Как работать с файлами? 114 файлы текстовые двоичные «plain text»: текст, разбитый на строки; из специальных символов только символы перехода на новую строку любые символы рисунки, звуки, видео, …

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Принцип сэндвича 115 открыть файл работа с файлом закрыть файл хлеб начинка файл Fin, Fout Fin:= открыть на чтение('input.txt') Fout:= открыть на запись('output.txt') | здесь работаем с файлами закрыть(Fout) закрыть(Fin) файл Fin, Fout Fin:= открыть на чтение('input.txt') Fout:= открыть на запись('output.txt') | здесь работаем с файлами закрыть(Fout) закрыть(Fin) файловые переменные

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Ввод данных 116 цел a, b файл Fin Fin:= открыть на чтение('input.txt') закрыть(Fin) цел a, b файл Fin Fin:= открыть на чтение('input.txt') закрыть(Fin) начать чтение(Fin) ввод Fin, a, b Переход к началу открытого файла: если конец файла(Fin) вывод 'Данные кончились' все если конец файла(Fin) вывод 'Данные кончились' все Определение конца файла:

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Вывод данных в файл 117 цел a = 1, b = 2 файл Fout Fout:= открыть на запись('output.txt') закрыть(Fout) цел a = 1, b = 2 файл Fout Fout:= открыть на запись('output.txt') закрыть(Fout) вывод Fout, a, '+', b, '=', a+b

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Чтение неизвестного количества данных 118 нц пока | не конец файла | прочитать число из файла | добавить его к сумме кц нц пока | не конец файла | прочитать число из файла | добавить его к сумме кц Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму. цел x, S файл Fin Fin:= открыть на чтение('input.txt') S:= 0 нц пока не конец файла(Fin) ввод Fin, x S:= S + x кц закрыть(Fin) цел x, S файл Fin Fin:= открыть на чтение('input.txt') S:= 0 нц пока не конец файла(Fin) ввод Fin, x S:= S + x кц закрыть(Fin)

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 119 «A»: Напишите программу, которая находит среднее арифметическое всех чисел, записанных в файле в столбик, и выводит результат в другой файл. «B»: Напишите программу, которая находит минимальное и максимальное среди чётных положительных чисел, записанных в файле, и выводит результат в другой файл. Учтите, что таких чисел может вообще не быть. «C»: В файле в столбик записаны целые числа, сколько их – неизвестно. Напишите программу, которая определяет длину самой длинной цепочки идущих подряд одинаковых чисел и выводит результат в другой файл.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка массивов 120 Задача. В файле записано не более 100 целых чисел. Вывести в другой текстовый файл те же числа, отсортированные в порядке возрастания. В чем отличие от предыдущей задачи? ? цел MAX = 100 целтаб A[1:MAX] цел MAX = 100 целтаб A[1:MAX] Для сортировки нужно удерживать все элементы в памяти одновременно. !

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка массивов 121 Ввод массива: файл Fin Fin:= открыть на чтение('input.txt') цел N N:= 0 | счётчик прочитанных данных нц пока не конец файла(Fin) и N:= N + 1 ввод Fin, A[N] кц закрыть(Fin) файл Fin Fin:= открыть на чтение('input.txt') цел N N:= 0 | счётчик прочитанных данных нц пока не конец файла(Fin) и N:= N + 1 ввод Fin, A[N] кц закрыть(Fin) N < MAX Зачем? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка массивов 122 Вывод результата: файл Fout Fout:= открыть на запись('output.txt') нц для i от 1 до вывод Fout, A[i], нс кц закрыть(Fout) файл Fout Fout:= открыть на запись('output.txt') нц для i от 1 до вывод Fout, A[i], нс кц закрыть(Fout) N

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 123 «A»: В файле записано не более 100 чисел. Отсортировать их по возрастанию последней цифры и записать в другой файл. «B»: В файле записано не более 100 чисел. Отсортировать их по возрастанию суммы цифр и записать в другой файл. Используйте функцию, которая вычисляет сумму цифр числа. «C»: В двух файлах записаны отсортированные по возрастанию массивы неизвестной длины. Объединить их и записать результат в третий файл. Полученный массив также должен быть отсортирован по возрастанию.

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка строк 124 Задача. В файле записано данные о собаках: в каждой строчке кличка собаки, ее возраст и порода: Мухтар 4 немецкая овчарка Вывести в другой файл сведения о собаках, которым меньше 5 лет. нц пока не конец файла(Fin) | прочитать строку из файла Fin | разобрать строку – выделить возраст если возраст < 5 то | записать строку в файл Fout все кц нц пока не конец файла(Fin) | прочитать строку из файла Fin | разобрать строку – выделить возраст если возраст < 5 то | записать строку в файл Fout все кц

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка строк 125 | найти в строке пробел | удалить из строки кличку с первым пробелом | найти в строке пробел | выделить возраст перед пробелом | преобразовать возраст в числовой вид | найти в строке пробел | удалить из строки кличку с первым пробелом | найти в строке пробел | выделить возраст перед пробелом | преобразовать возраст в числовой вид Разбор строки: лит s, sAge цел age, p лог OK... | s = ' Мухтар 4 овчарка' p:= позиция(' ', s) | 'Мухтар 4 овчарка' s:= s[p+1:длин(s)] | s = '4 овчарка' p:= позиция (' ',s) | '4 овчарка' sAge:= s[1:p-1] | sAge = '4' age:= лит_в_цел(sAge, OK) | age = 4 лит s, sAge цел age, p лог OK... | s = ' Мухтар 4 овчарка' p:= позиция(' ', s) | 'Мухтар 4 овчарка' s:= s[p+1:длин(s)] | s = '4 овчарка' p:= позиция (' ',s) | '4 овчарка' sAge:= s[1:p-1] | sAge = '4' age:= лит_в_цел(sAge, OK) | age = 4 pp

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Обработка строк 126 лит s, s0 нц пока не конец файла(Fin) ввод Fin, s0 s:= s0... | обработка строки s если age < 5 то вывод Fout, s0, нс все кц лит s, s0 нц пока не конец файла(Fin) ввод Fin, s0 s:= s0... | обработка строки s если age < 5 то вывод Fout, s0, нс все кц Зачем s0 ? ?

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 127 «A»: В файле записаны данные о результатах сдачи экзамена. Каждая строка содержит фамилию, имя и количество баллов, разделенные пробелами: Вывести в другой файл фамилии и имена тех учеников, которые получили больше 80 баллов. «B»: В предыдущей задаче добавить к полученному списку нумерацию, сократить имя до одной буквы и поставить перед фамилией: П. Иванов И. Петров...

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 128 «C»: В файле записаны данные о результатах сдачи экзамена. Каждая строка содержит фамилию, имя и количество баллов, разделенные пробелами: Вывести в другой файл данные учеников, которые получили больше 80 баллов. Список должен быть отсортирован по убыванию балла. Формат выходных данных: П. Иванов 98 И. Петров 96...

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ 163, г. Санкт-Петербург ЕРЕМИН Евгений Александрович к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь

Алгоритмизация и программирование, Алг Язык, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Источники иллюстраций иллюстрации художников издательства «Бином» 3. авторские материалы