8-9 класс_АлгЯзык-2.ppt
- Количество слайдов: 144
Программирование на алгоритмическом языке. Часть II 1. 2. 3. 4. 5. Массивы Максимальный элемент массива Обработка массивов Сортировка массивов Двоичный поиск 6. 7. 8. 9. Символьные строки Рекурсивный перебор Матрицы Файлы
Программирование на алгоритмическом языке. Часть II Тема 1. Массивы
3 Массивы Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Особенности: • все элементы имеют один тип • весь массив имеет одно имя • все элементы расположены в памяти рядом Примеры: • список учеников в классе • квартиры в доме • школы в городе • данные о температуре воздуха за год
4 Массивы A массив 1 НОМЕР 2 5 10 A[1] A[2] 3 3 15 15 элемента массива (ИНДЕКС) 4 5 20 25 A[3] A[4] ЗНАЧЕНИЕ A[5] элемента массива НОМЕР (ИНДЕКС) элемента массива: 2 A[2] ЗНАЧЕНИЕ элемента массива: 10
5 Объявление массивов Зачем объявлять? • определить имя массива • определить тип массива • определить число элементов • выделить место в памяти Массив целых чисел: тип элементов имя целтаб начальный индекс A[ 1 : 5 ] Размер через переменную: цел N = 5 целтаб A[ 1 : N ] конечный индекс
6 Объявление массивов Массивы других типов: вещтаб X[1: 10], Y[1: 20] | вещественные X[1] : = 4. 25 симтаб S[1: 20] | символьный S[1] : = "z" логтаб L[1: 5] | логический L[1] : = да | да или нет Другой диапазон индексов: целтаб Q[0: 9] вещтаб C[-5: 13]
7 Что неправильно? целтаб A [1: 10] [10: 1]. . . A[5] : = 4. 5; целтаб A[1: 10]. . . A[15] : = "a"
8 Как обработать все элементы массива? Объявление: цел N = 5 целтаб A[1: N] Обработка: | | | ? обработать обработать A[1] A[2] A[3] A[4] A[5] 1) если N велико (1000, 1000000)? 2) при изменении N программа не должна меняться!
9 Как обработать все элементы массива? Обработка с переменной: i: = 1 | обработать i: = i + 1 | обработать i: = i + 1 A[i] A[i] Обработка в цикле: i: = 1 нц пока i <= N | обработать A[i] i: = i + 1 кц Цикл с переменной: нц для i от 1 до N | обработать A[i] кц
10 Простейшая программа Объявление: цел N = 5, i целтаб A[1: N] Ввод с клавиатуры: нц для i от 1 до N вывод "A[", i, "]=" ввод A[i] кц Обработка каждого элемента: нц для i от 1 до N A[i]: = A[i]*2 кц Массив A: 10 24 68 112 26 A[1] = 5 A[2] = 12 A[3] = 34 A[4] = 56 A[5] = 13 Вывод на экран: вывод "Массив A", нс нц для i от 1 до N вывод A[i], " " кц
11 Задания « 4» : Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива. Пример: Введите пять чисел: 4 15 3 10 14 среднее арифметическое 9. 200 « 5» : Ввести c клавиатуры массив из 5 элементов, найти минимальный из них. Пример: Введите пять чисел: 4 15 3 10 14 минимальный элемент 3 ! При изменении N остальная программа не должна изменяться!
Программирование на алгоритмическом языке. Часть II Тема 2. Максимальный элемент массива
13 Максимальный элемент Задача: найти в массиве максимальный элемент. Алгоритм: Решение: 1) считаем, что первый элемент – максимальный 2) просмотреть остальные элементы массива: если очередной элемент > M, то записать A[i] в M 3) вывести значение M
14 Максимальный элемент начало начать со 2 -ого пока считаем, что первый – максимальный M: = A[1] i: = 2 i <= N? нет да A[i] > M? нет i: = i + 1 да конец нашли новый максимум M: = A[i] перейти к следующему
15 Максимальный элемент алг Максимум нач цел i, N = 5, M целтаб A[1: N] | здесь заполнить массив M: = A[1] | пока максимальный – A[1] нц для i от 2 до N если A[i] > M то M: = A[i] все кц вывод "Максимальный элемент ", M кон
16 Максимальный элемент Дополнение: как найти номер максимального элемента? M: = A[1] | пока первый – максимальный i. Max: = 1 нц для i от 2 до N | проверяем остальные если A[i] > A[i. Max] то | нашли еще больше M M: = A[i] | запомнить A[i] i. Max: = i | запомнить i Как упростить? все кц A[i. Max] вывод "Максимальный элемент A[", i. Max, "]=", M ? По номеру элемента i. Max всегда можно найти его значение A[i. Max]. Поэтому везде меняем M на A[i. Max] и убираем переменную M.
Задания « 4» : Ввести с клавиатуры массив из 5 элементов, найти в нем максимальный и минимальный элементы и их номера. Пример: Исходный массив: 4 -5 10 -10 5 максимальный A[3]=10 минимальный A[4]=-10 « 5» : Ввести с клавиатуры массив из 5 элементов, найти в нем максимальный нечетный элемент и его номер. Пример: Исходный массив: 4 -5 10 -10 5 максимальный нечетный A[5]=5 17
Программирование на алгоритмическом языке. Часть II Тема 3. Обработка массивов
19 Случайность и ее моделирование Случайно… 1) встретить друга на улице 2) разбить тарелку 3) найти 10 рублей 4) выиграть в лотерею Как получить случайность? Случайный выбор: 1) жеребьевка на соревнованиях 2) выигравшие номера в лотерее
20 Случайные числа на компьютере Электронный генератор • нужно специальное устройство • нельзя воспроизвести результаты Псевдослучайные числа – обладают свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле. Метод середины квадрата (Дж. фон Нейман) 564321 458191 318458191041 938992 209938992481 в квадрате малый период • (последовательность повторяется через 106 чисел)
21 Распределение случайных чисел Модель: снежинки падают на отрезок [a, b] распределение равномерное a ? b неравномерное a b Сколько может быть разных распределений?
22 Распределение случайных чисел Особенности: • распределение – это характеристика всей последовательности, а не одного числа • равномерное распределение одно, компьютерные датчики случайных чисел дают равномерное распределение • неравномерных – много • любое неравномерное можно получить с помощью равномерного a b
23 Генератор случайных чисел Вещественные числа в интервале [0, 10): вещ X, Y X: = rnd(10) | интервал от 0 до 10 (<10) Y: = rnd(10) | это уже другое число! англ. random – случайный Целые числа в интервале [0, 10]: цел K, L K: = int ( rnd(10)) | интервал от 0 до 10 (<10) L: = int ( rnd(10)) | это уже другое число! англ. integer – целый
24 Заполнение массива случайными числами цел i, N = 5 целтаб A[1: N] вывод "Массив ", нс нц для i от 1 до N A[i]: = int ( rnd(20) ); вывод A[i], " " кц ? Зачем сразу выводить?
25 Подсчет элементов Задача: заполнить массив случайными числами в интервале [-1, 1] и подсчитать количество нулевых элементов. Идея: используем переменную-счётчик. Решение: 1) записать в счётчик ноль 2) просмотреть все элементы массива: если очередной элемент = 0, то увеличить счётчик на 1 3) вывести значение счётчика
26 Подсчет элементов начало начать с 1 -ого пока ни одного не нашли count: = 0 i: = 1 i <= N? нет конец да A[i] = 0? нет да нашли еще 1 count: = count + 1 i: = i + 1 перейти к следующему
27 Подсчет элементов цел count, i, N = 10 целтаб A[1: N] | здесь надо заполнить массив count: = 0 перебираем все нц для i от 1 до N элементы массива если A[i] = 0 то count: = count + 1 все кц
28 Задания « 4» : Заполнить массив случайными числами в интервале [20, 100] и подсчитать отдельно число чётных и нечётных элементов. « 5» : Заполнить массив случайными числами в интервале [1000, 2000] и подсчитать число элементов, у которых вторая с конца цифра – четная.
29 Сумма выбранных элементов Задача: заполнить массив случайными числами в интервале [-10, 10] и подсчитать сумму положительных элементов. Идея: используем переменную S для накопления суммы. S: =0 S: = A[1]+A[2]+A[3] S: = A[1]+A[2]+…+A[N] Решение: 1) записать в переменную S ноль 2) просмотреть все элементы массива: S: = S+A[i] если очередной элемент > 0, то добавить к сумме этот элемент 3) вывести значение суммы
30 Сумма выбранных элементов начало начать с 1 -ого пока ни одного не нашли S: = 0 i: = 1 i <= N? нет конец да A[i] > 0? нет i: = i + 1 да нашли еще 1 S: = S + A[i] перейти к следующему
31 Сумма выбранных элементов цел S, i, N = 10 целтаб A[1: N] | здесь надо заполнить массив S: = 0 перебираем все элементы массива нц для i от 1 до N если A[i] > 0 то S: = S + A[i] все кц
32 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [0, 100] и подсчитать среднее значение всех элементов, которые <50. « 5» : Заполнить массив из 10 элементов случайными числами в интервале [10, 12] и найти длину самой длинной последовательности стоящих рядом одинаковых элементов. Пример: Исходный массив: 10 10 11 12 12 12 10 11 Длина последовательности: 3 11 12
33 Поиск в массиве Задача – найти в массиве элемент, равный X, или установить, что его нет. Пример: если в классе ученик с фамилией Пупкин? Алгоритм: 1) начать с 1 -ого элемента (i: =1) 2) если очередной элемент (A[i]) равен X, то закончить поиск иначе перейти к следующему элементу:
34 Поиск элемента, равного X начало начать с 1 -ого i: = 1 i <= N? нет “Не нашли” да A[i] = X? нет i: = i + 1 да “Есть!” перейти к следующему конец ? Как найти номер?
35 Поиск в массиве алг Поиск нач цел i, N = 5, X целтаб A[1: N] | здесь нужно заполнить массив вывод нс, "Что ищем? " ввод X выход из цикла i: = 1 нц пока i <= N если A[i] = X то выход все i: = i + 1 кц i – номер нужного если i <= N то элемента в массиве вывод "A[", i, "]=", X иначе Как определить, вывод "Не нашли!" все нашли или нет? кон ?
36 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 4] и вывести номера всех элементов, равных X. Пример: Исходный массив: 4 0 1 2 0 1 3 4 1 0 Что ищем? 0 A[2], A[5], A[10] « 5» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 4]и определить, есть ли в нем одинаковые соседние элементы. Пример: Исходный массив: 4 0 1 2 0 1 Ответ: есть 3 1 1 0
37 Реверс массива Задача: переставить элементы массива в обратном порядке. 1 2 … N-1 N 3 5 … 9 7 Алгоритм: 1 2 … N-1 N 7 9 … 5 3 сумма индексов N+1 поменять местами A[1] и A[N], A[2] и A[N-1], … Псевдокод: нц для i от 1 до div(N, 2) N | поменять местами A[i] и A[N+1 -i] кц Что неверно? ?
38 Как переставить элементы? 2 Задача: поменять местами содержимое двух чашек. 3 1 ? Можно ли обойтись без c? 4 6 6 4 2 1 x: = y y: = x c: = x x: = y y: = c y x 3 Задача: поменять местами содержимое двух ячеек памяти. ? 4 c
39 Программа алг Реверс нач цел i, c, N = 10 целтаб A[1: N] | здесь нужно заполнить массив нц для i от 1 до div(N, 2) c: = A[i]: = A[N+1 -i]: = c; кц | здесь нужно вывести результат кон
40 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [-10. . 10] и сделать реверс отдельно для 1 -ой и 2 -ой половин массива. Пример: Исходный массив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: -4 10 3 -5 4 0 1 -10 8 -6 « 5» : Заполнить массив из 12 элементов случайными числами в интервале [-12. . 12] и выполнить реверс для каждой трети массива. Пример: Исходный массив: 4 -5 3 10 -4 Результат: 10 3 -5 4 -10 -6 8 8 -10 -6 -4 1 0 5 7 7 5 0 1
41 Циклический сдвиг Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего. 1 2 3 4 … N-1 N 3 5 8 1 … 9 7 3 Алгоритм: A[1]: =A[2]; A[2]: =A[3]; … A[N-1]: =A[N]; нц для i от 1 до N-1 A[i]: = A[i+1] кц почему не N? ? Что неверно?
42 Программа алг Циклический сдвиг влево нач цел i, c, N = 10 целтаб A[1: N] | здесь нужно заполнить массив c: = A[1] нц для i от 1 до N-1 A[i]: = A[i+1] кц A[N]: = c; | здесь нужно вывести результат кон
43 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [-10. . 10] и выполнить циклический сдвиг ВПРАВО. Пример: Исходный массив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: 0 4 -5 3 10 -4 -6 8 -10 1 « 5» : Заполнить массив из 12 элементов случайными числами в интервале [-12. . 12] и выполнить циклический сдвиг ВПРАВО на 4 элемента. Пример: Исходный массив: 4 -5 3 10 -4 Результат: 1 0 5 7 4 -6 8 -10 1 0 -5 3 10 -4 -6 5 7 8 -10
44 Выбор нужных элементов Задача – найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в другой массив. B A Примитивное решение: 1 1 ? цел i, N = 5 2 -5 -5 ? целтаб A[1: N], B[1: N] | здесь заполнить массив A нц для i от 1 до N если A[i] < 0 то B[i]: = A[i] все кц 3 3 4 -2 ? 5 5 ? ? Что плохо?
45 Выбор нужных элементов Решение: ввести счетчик найденных элементов count, очередной элемент ставится на место B[count]. цел i, N = 5, count = 0 целтаб A[1: N], B[1: N] | здесь заполнить массив A нц для i от 1 до N если A[i]< 0 то count: = count + 1 B[ count ]: = A[i] все кц A B 1 1 2 -5 -5 ? -2 ? 3 3 ? 4 -2 ? 5 5 ?
46 Как вывести массив B? Примитивное решение: вывод "Выбранные элементы: ", нс нц для i от 1 до N вывод B[i], " " кц ? Правильное решение: вывод "Выбранные элементы: ", нс нц для i от 1 до count вывод B[i], " " кц Что плохо?
Задания « 4» : Заполнить массив случайными числами в интервале [20, 100] и записать в другой массив все числа, которые оканчиваются на 0. Пример: Исходный массив: 40 57 30 71 84 Результат: 40 30 « 5» : Заполнить массив случайными числами и выделить в другой массив все числа, которые встречаются более одного раза. Пример: Исходный массив: 4 1 2 1 11 2 34 Результат: 1 2 47
Программирование на алгоритмическом языке. Часть II Тема 4. Сортировка массивов
49 Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме делителей, …). Задача: переставить элементы массива в порядке возрастания. сложность O(N 2) Алгоритмы сортировки: 1) простые и понятные, но медленно работающие для больших массивов время 1 § метод пузырька § метод выбора 2) сложные, но быстрые ( «быстрая сортировка» и др. ) 2 N
50 Метод пузырька Идея – пузырек воздуха в стакане воды поднимается со дна вверх. Для массивов – самый маленький ( «легкий» элемент перемещается вверх ( «всплывает» ). 1 -ый проход 5 5 5 1 2 2 1 5 1 1 2 2 3 3 3 • начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно» , меняем их местами 3 2 -ой проход • за 1 проход по массиву один элемент (самый маленький) становится на свое место 3 -ий проход 1 1 1 5 5 2 2 2 5 5 3 3 3 5 Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).
51 Программа 1 -ый проход: 1 5 2 2 … … N-1 6 N 3 2 -ой проход 1 1 2 5 … … N-1 3 N 6 i-ый проход сравниваются пары A[N-1] и A[N], A[j] и A[j+1] A[N-2] и A[N-1], . . . , A[1] и A[2] нц для j от N-1 до 1 шаг -1 если A[j] > A[j+1] то c: =A[j]; A[j]: =A[j+1]; A[j+1]: =c все A[1] уже на своем месте! кц ! нц для j от N-1 до 2 шаг -1 2 если A[j] > A[j+1] то c: =A[j]; A[j]: =A[j+1]; A[j+1]: =c все кц нц для j от N-1 до. . . i шаг -1
52 Программа ? алг Сортировка Почему цикл по i до N-1? нач цел N = 5, i, j, c целтаб A[1: N] элементы выше A[i] | здесь нужно заполнить массив уже поставлены нц для i от 1 до N-1 нц для j от N-1 до i шаг -1 если A[j] > A[j+1] то c: =A[j]; A[j]: =A[j+1]; A[j+1]: =c все кц кц | здесь нужно вывести полученный массив кон
53 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 100] и отсортировать его по последней цифре. Пример: Исходный массив: 14 25 13 30 76 58 32 11 41 97 Результат: 30 11 41 32 13 14 25 76 97 58 « 5» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 100] и отсортировать первую половину по возрастанию, а вторую – по убыванию. Пример: Исходный массив: 14 25 13 30 76 Результат: 13 14 25 30 76 58 32 11 41 97 97 58 41 32 11
54 Метод выбора Идея: • найти минимальный элемент и поставить на первое место (поменять местами с A[1]) • из оставшихся найти минимальный элемент и поставить на второе место (поменять местами с A[2]), и т. д. 4 1 1 1 3 3 2 2 1 4 4 3 2 2 3 4
55 Метод выбора нужно N-1 проходов нц для i от 1 до N-1 поиск минимального n. Min: = i от A[i] до A[N] нц для j от i+1 до N если A[j] < A[n. Min] то n. Min: = j все кц если n. Min <> i то если нужно, переставляем c: = A[i]: = A[n. Min]: = c все Можно ли убрать если? кц ?
56 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 99] и отсортировать его по возрастанию суммы цифр. Пример: Исходный массив: 14 25 13 12 76 58 21 87 10 98 Результат: 10 21 12 13 14 25 76 58 87 98 « 5» : Заполнить массив из 10 элементов случайными числами в интервале [0. . 100] и отсортировать первую половину по возрастанию, а вторую – по убыванию. Пример: Исходный массив: 14 25 13 30 76 Результат: 13 14 25 30 76 58 32 11 41 97 97 58 41 32 11
57 «Быстрая сортировка» (Quick Sort) Идея – более эффективно переставлять элементы, расположенные дальше друг от друга. ? Сколько перестановок нужно, если массив отсортирован по убыванию, а надо – по возрастанию? div(N, 2) 1 шаг: выбрать некоторый элемент массива X 2 шаг: переставить элементы так: A[i] <= X A[i] >= X при сортировке элементы не покидают « свою область» ! 3 шаг: так же отсортировать две получившиеся области Разделяй и властвуй (англ. divide and conquer)
58 «Быстрая сортировка» (Quick Sort) 78 6 82 67 ? 55 44 34 Как лучше выбрать X? Медиана – такое значение X, что слева и справа от него в отсортированном массиве стоит одинаковое число элементов (для этого надо отсортировать массив…). Разделение: 1) выбрать средний элемент массива (X=67) 78 6 82 67 55 44 34 2) установить L: = 1, R: = N 3) увеличивая L, найти первый элемент A[L], который >= X (должен стоять справа) 4) уменьшая R, найти первый элемент A[R], который <= X (должен стоять слева) 5) если L <= R, поменять местами A[L] и A[R] и перейти к п. 3
59 «Быстрая сортировка» (Quick Sort) 78 L 6 82 67 55 44 34 R 34 6 82 L 67 55 44 R 78 34 6 44 67 L 55 R 82 78 34 6 44 55 R 67 L 82 78 ! L > R: разделение закончено
60 «Быстрая сортировка» (Quick Sort) алг q. Sort(аргрез целтаб A[1: 5], арг цел i. Start, i. End) нач ограничение рекурсии цел L, R, c, X если i. Start >= i. End то выход все L: = i. Start; R: = End; разделение X: = A[div(L+R, 2)] нц пока 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 все двигаемся дальше кц q. Sort(A, i. Start, R) сортируем две части: q. Sort(A, L, i. End) рекурсия! кон
61 «Быстрая сортировка» (Quick Sort) алг Сортировка Quick Sort нач цел N = 5, i целтаб A[1: N] | заполнить массив и вывести на экран q. Sort(A, 1, N) | сортировка | вывести отсортированный массив кон алг q. Sort(аргрез целтаб A[1: 5], арг цел i. Start, i. End) нач для массивов. . . любого размера кон цел N, аргрез целтаб A[1: N] Вызов: q. Sort(N, A, 1, N)
62 Количество перестановок (случайные данные) N 10 100 200 «пузырек» 24 2263 9055 500 1000 ? Quick. Sort 11 184 426 1346 3074 63529 248547 От чего зависит? ? Как хуже всего выбирать X?
63 Задания « 4» : Заполнить массив из 10 элементов случайными числами в интервале [-50. . 50] и отсортировать его по убыванию с помощью алгоритма быстрой сортировки. « 5» : Заполнить массив из 500 элементов случайными числами в интервале [0. . 100]. Отсортировать его по возрастанию двумя способами – методом «пузырька» и методом «быстрой сортировки» . Вывести на экран число перестановок элементов массива в том и в другом случае. Массив выводить на экран не нужно.
Программирование на алгоритмическом языке. Часть II Тема 5. Двоичный поиск
65 Поиск в массиве Задача – найти в массиве элемент, равный X, или установить, что его нет. Решение: для произвольного массива: линейный поиск (перебор) недостаток: низкая скорость Как ускорить? – заранее подготовить массив для поиска • как именно подготовить? • как использовать «подготовленный массив» ?
66 Линейный поиск i: = 1 нц пока i<=N <> A[i]<>X A[i] и X i: = i + 1 кц если i <= N то вывод "A[", i, "]=", X иначе вывод "Нет такого" все i – номер нужного элемента в массиве ? Что плохо?
67 Двоичный поиск 1 1 1 2 2 2 3 X=7 3 3 4 4 5 5 4 5 X>4 X>6 6 6 7 1. Выбрать средний элемент A[c] и сравнить с X. 2. Если X = A[c], нашли (выход). 3. Если X < A[c], искать дальше в первой половине. 4. Если X > A[c], искать дальше во второй половине. 7 7 8 8 8 9 X<8 6 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16
68 Двоичный поиск 1 L c R L: = 1; R: = N; n. X: = 0 номер среднего элемента нц пока R >= L c: = div(R+L, 2); нашли если X = A[c] выйти из то n. X: = c; выход цикла все если X < A[c] то R: = c – 1 все сдвигаем если X > A[c] то L: = c + 1 все границы кц если n. X > 0 то вывод "A[", n. X, "]=", X иначе вывод "Не нашли" все ? Почему нельзя N нц пока R > L … кц ?
69 Сравнение методов поиска подготовка Линейный Двоичный нет отсортировать число шагов N=2 2 2 N = 16 16 5 N = 1024 11 N = 1048576 21 N ≤N ≤ log 2 N + 1
70 Задания « 4» : Написать программу, которая сортирует массив ПО УБЫВАНИЮ и ищет в нем элемент, равный X (это число вводится с клавиатуры). Использовать двоичный поиск. « 5» : Написать программу, которая считает среднее число шагов в двоичном поиске для массива из 32 элементов в интервале [0, 100]. Для поиска использовать 1000 случайных чисел в этом же интервале.
Программирование на алгоритмическом языке. Часть II Тема 6. Символьные строки
72 Чем плох массив символов? Это массив символов: симтаб s[1: 10] • каждый символ – отдельный объект; • массив имеет длину, которая задана при объявлении Что нужно: • обрабатывать последовательность символов как единое целое • строка должна иметь переменную длину
73 Символьные строки Объявление строки: s[3] 1 лит s s[4] 2 П р и в е т рабочая часть s[1] s[2] Длина строки: цел n n: = длин(s) ! ¤
74 Символьные строки Задача: ввести строку с клавиатуры и заменить все буквы «а» на буквы «б» . алг Замена а на б нач лит s вывод "Введите строку: " ввод s цел i нц для i от 1 до длин(s) если s[i] = "а" длина строки то s[i]: = "б" все кц вывод s кон
75 Задания « 3» : Ввести символьную строку и заменить все буквы «а» на буквы «б» , как заглавные, так и строчные. Пример: Введите строку: ааббсс. ААББСС Результат: ббббсс. ББББСС « 4» : Ввести символьную строку и заменить все буквы «а» на буквы «б» и наоборот, как заглавные, так и строчные. Пример: Введите строку: ааббсс. ААББСС Результат: ббаасс. ББААСС
76 Задания « 5» : Ввести символьную строку и проверить, является ли она палиндромом (палиндром читается одинаково в обоих направлениях). Пример: Введите строку: АБВГДЕ Результат: Не палиндром. Пример: Введите строку: КАЗАК Результат: Палиндром.
77 Операции со строками лит s, s 1, s 2 Запись нового значения: s: = "Вася" Объединение: добавить одну строку в конец другой. s 1: = "Привет" s 2: = "Вася" s : = s 1 + ", " + s 2 + "!" | "Привет, Вася!" Подстрока: выделить часть строки в другую строку. s: = "123456789" s 1: = s[3: 8] | "345678" s 2: = s 1[2: 4] | "456"
79 Поиск в строке (найти) Поиск в строке: s[3] s: = "Здесь был Вася. " n: = найти("е", s) 3 если n > 0 то вывод "Буква е – это s[", n, "]" иначе вывод "Не нашли" все n = 11 n: = найти("Вася", s) s 1: = s[n: n+3] Вася Особенности: • функция найти возвращает номер символа, с которого начинается образец в строке • если образец не найден, возвращается -1 • поиск с начала (находится первое слово) цел n
80 Примеры s: = "Вася Петя Митя" n: = найти( "Петя", s ) s: = удалить(s, n, 4) s: = вставить("Куку", s, n ) 6 'Вася Митя' 'Вася Куку Митя' s: = "Вася Петя Митя" n: = длин( s ) s 1: = s[1: 4] s 2: = s[11: 14] s 3: = s[6: 9] s: = s 3 + s 1 + s 2 n: = длин( s ) 14 'Вася' 'Митя' 'Петя. Вася. Митя' 12
81 Пример решения задачи Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы» . Пример: Введите имя, отчество и фамилию: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В. А. Алгоритм: • найти первый пробел и выделить имя • удалить имя с пробелом из основной строки • найти первый пробел и выделить отчество • удалить отчество с пробелом из основной строки • «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…
82 Программа использовать Строки алг ФИО нач лит s, имя, отчество цел n вывод "Введите имя, отчество и фамилию" ввод s n: = найти(" ", s); имя: = s[1: n-1] | вырезать имя s: = удалить(s, 1, n) n: = найти(" ", s) отчество: = s[1: n-1] | вырезать отчество s: = удалить(s, 1, n) | осталась фамилия s: = s + " " + имя[1] + ". " + отчество[1] + ". " вывод s кон
83 Задания « 3» : Ввести в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы. Пример: Введите фамилию, имя и отчество: Иванов Петр Семёнович Результат: Иванов П. С. « 4» : Ввести имя файла (возможно, без расширения) и изменить его расширение на «. exe» . Пример: Введите имя файла: qqq Результат: qqq. exe Введите имя файла: qqq. com Результат: qqq. exe
84 Задания « 5» : Ввести путь к файлу и «разобрать» его, выводя каждую вложенную папку с новой строки Пример: Введите путь к файлу: C: Мои документы10 -БВасяqq. exe Результат: C: Мои документы 10 -Б Вася qq. exe
85 Задачи на обработку строк Задача: с клавиатуры вводится число N, обозначающее количество футболистов команды «Шайба» , а затем – N строк, в каждой из которых – информация об одном футболисте таком формате: <Фамилия> <Имя> <год рождения> <голы> Все данные разделяются одним пробелом. Нужно подсчитать, сколько футболистов, родившихся в период с 1988 по 1990 год, не забили мячей вообще. Алгоритм (для каждой строки): 1) выделить год (year) и количество голов (goal) 2) если 1988 <= year <=1990 и goal = 0, то увеличить счётчик
86 Программа использовать Строки алг Футболисты год голы счётчик нач цел N, i, p, year, goal, count=0 лит s ввод N нц для i от 1 до N ввод s | разобрать строку, выделить год и голы если year >= 1988 и year <= 1990 и goal = 0 то count: =count+1 все кц вывод count кон
87 Преобразования «строка» - «число» Из строки в число: да или нет s: = "123" N: = лит_в_цел(s, OK) если не OK то вывод s: = "123. 456"; X: = лит_в_вещ(s, OK) если не OK то вывод | N = 123 "Ошибка!" все | X = 123. 456 "Ошибка!" все Из числа в строку: N: = 123 s: = цел_в_лит(N) | "123" X: = 123. 456 s: = вещ_в_лит(X) | "123. 456" цел N, вещ X, лит s, лог OK
88 Разбор строки Пропуск фамилии: p: = найти(" ", s) s: = s[p+1: длин(s)] Пропуск имени: p: = найти(" ", s) s: = s[p+1: длин(s)] p Иванов Вася 1998 5 p Вася 1998 5 Ввод года рождения: лог OK p: = найти(" ", s) year: = лит_в_цел(s[1: p-1], OK) s: = s[p+1: длин(s)] Ввод числа голов: goal: = лит_в_цел(s, OK) p 1998 5 5
89 Разбор строки Если фамилия нужна: лит fam p: = найти(" ", s) fam: = s[1: p-1] s: = s[p+1: длин(s)] Если нужны ВСЕ фамилии: литтаб fam[1: N] p: = найти(" ", s) fam[i]: = s[1: p-1] s: = s[p+1: длин(s)] p Иванов Вася 1998 5
90 Задания Информация о футболистах вводится так же, как и для приведенной задачи (сначала N, потом N строк с данными). « 4» : Вывести фамилию и имя футболиста, забившего наибольшее число голов, и количество забитых им голов. Пример: Иванов Василий 25 « 5» : Вывести в алфавитном порядке фамилии и имена всех футболистов, которые забили хотя бы один гол. В списке не более 100 футболистов. Пример: Васильев Иванов Василий Кутузов Михаил Пупкин Василий
Программирование на алгоритмическом языке. Часть II Тема 7. Рекурсивный перебор
92 Рекурсивный перебор Задача: Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и О. Вывести на экран все слова из К букв, которые можно составить в этом языке, и подсчитать их количество. Число K вводится с клавиатуры. в каждой ячейке может быть любая из 4 -х букв 1 4 варианта Количество вариантов: K 4 варианта
93 Рекурсивный перебор Рекурсия: Решения задачи для слов из К букв сводится к 4 -м задачам для слов из K-1 букв. 1 K перебрать все варианты Ы 1 Ц 1 Щ 1 О
94 Процедура 1 s p p+1 ● ● ● ? ? K ? алг Рек(цел p) нач если p > K то вывод s, нс count: = count + 1 выход все s[p]: = "Ы"; Рек(p+1) s[p]: = "Ц"; Рек(p+1) s[p]: = "Щ"; Рек(p+1) s[p]: = "О"; Рек(p+1) кон ? Глобальные переменные: лит s цел count, K окончание рекурсии рекурсивные вызовы ? А если букв много?
95 Основная программа глобальные переменные лит s, цел count = 0, K алг Рекурсивный перебор нач вывод "Введите длину слов: " ввод K строка из K пробелов s: = "" нц K раз s: = s + " " кц Рек(1) вывод "Всего ", count, " слов" кон алг Рек(цел p) нач. . . кон
96 Процедура (много букв) алг Рек(цел p) все буквы нач локальные переменные лит syms="ЫЦЩО", цел i если p > K то вывод s, нс count: = count + 1 выход цикл по всем буквам все нц для i от 1 до длин(syms) s[p]: = syms[i]; Рек(p+1) кц кон
97 Задания Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и О. Число K вводится с клавиатуры. « 4» : Вывести на экран все слова из К букв, в которых буква Ы встречается более 1 раза, и подсчитать их количество. « 5» : Вывести на экран все слова из К букв, в которых есть одинаковые буквы, стоящие рядом (например, ЫЩЩО), и подсчитать их количество.
Программирование на алгоритмическом языке. Часть II Тема 8. Матрицы
99 Матрицы Задача: запомнить положение фигур на шахматной доске. 1 a b 2 c d e 3 f g 4 h 5 6 1 2 3 4 5 6 7 8 8 8 0 0 2 0 0 0 7 7 0 0 0 0 6 6 0 0 3 0 0 0 5 5 0 0 0 0 4 0 A[6, 3]0 0 0 4 0 3 3 0 0 0 0 2 2 0 0 0 0 1 1 0 0 0 0 4 c 6
100 Матрицы Матрица – это прямоугольная таблица чисел (или других элементов одного типа). Матрица – это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца). столбец 3 A 1 2 3 4 5 1 1 4 7 3 6 2 2 -5 0 3 8 9 строка 2 15 10 11 12 20 ячейка A[3, 4]
101 Матрицы Объявление: цел N = 3, M = 4 целтаб A[1: N, 1: M] целтаб B[-3: 0, -8: M] Ввод с клавиатуры: нц для i от 1 до N j M нц для j от 1 до M i N вывод "A[", i, ", ", j, "]=" ввод A[i, j] кц кц ? Если переставить циклы? i j A[1, 1]= A[1, 2]= A[1, 3]=. . . A[3, 4]= 25 14 14 54
102 Матрицы Заполнение случайными числами цикл по строкам нц для i от 1 до N нц для j от 1 до M цикл по столбцам A[i, j]: = irand(20, 80) кц кц вывод строки Вывод на экран нц для i от 1 до N 21 65 41 43 нц для j от 1 до M 56 71 32 47 , вывод A[i, j] " " кц 31 45 22 23 Что плохо? вывод нс кц Если переставить циклы? ? ?
103 Обработка всех элементов матрицы Задача: заполнить матрицу из 3 строк и 4 столбцов случайными числами и вывести ее на экран. Найти сумму элементов матрицы. алг Сумма нач цел N = 3, M = 4, i, j целтаб A[1: N, 1: M] | заполнение матрицы и вывод на экран цел S = 0 нц для i от 1 до N нц для j от 1 до M S: = S + A[i, j] кц кц вывод "Сумма элементов матрицы: ", S кон
104 Задания Заполнить матрицу из 8 строк и 5 столбцов случайными числами в интервале [10, 90] и вывести ее на экран. Затем … « 4» : Найти минимальный и максимальный элементы в матрице их номера. Формат вывода: Минимальный элемент A[3, 4]=11 Максимальный элемент A[2, 2]=89 « 5» : Вывести на экран строку, сумма элементов которой максимальна. Формат вывода: Строка 2: 13 25 18 79 38
105 Операции с матрицами Задача 1. Вывести на экран главную диагональ квадратной матрицы из N строк и N столбцов. A[1, 1] A[2, 2] A[3, 3] A[N, N] нц для i от 1 до N вывод A[i, i], " " кц ? А снизу вверх? Задача 2. Вывести на экран вторую диагональ. A[1, N] A[2, N-1] A[N-1, 2] A[N, 1] сумма номеров строки и столбца N+1 нц для i от 1 до N вывод A[i, N+1 -i ], " " кц
106 Операции с матрицами Задача 3. Найти сумму элементов, стоящих на главной диагонали и ниже ее. ? Одиночный цикл или вложенный? строка 1: A[1, 1] строка 2: A[2, 1]+A[2, 2]. . . строка N: A[N, 1]+A[N, 2]+. . . +A[N, N] S: = 0; нц для i от 1 до N нц для j от 1 до i S: = S + A[i, j] кц кц цикл по всем строкам складываем нужные элементы строки i
107 Операции с матрицами Задача 4. Перестановка строк или столбцов. В матрице из N строк и M столбцов переставить 2 -ую и 4 -ую строки. j A[2, j] 2 1 2 5 2 1 4 7 3 1 3 7 A[4, j] нц для j от 1 до M c: = A[2, j]: = A[4, j]: = c кц Задача 5. К третьему столбцу добавить шестой. нц для i от 1 до N A[i, 3]: = A[i, 3] + A[i, 6] кц
108 Задания Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [10, 90] и вывести ее на экран. Заполнить элементы, отмеченные зеленым фоном, числами 99, и вывести полученную матрицу на экран. « 4» : « 5» :
Программирование на алгоритмическом языке. Часть II Тема 9. Файлы
110 Файлы Файл – это данные на диске, имеющие имя. Файлы Текстовые Двоичные только текст без оформления, могут содержать любые не содержат управляющих символы кодовой таблицы символов (с кодами < 32) *. doc, *. exe, ACSII (1 байт на символ) UNICODE (>1 байта на символ) *. bmp, *. jpg, *. txt, *. log, *. html *. wav, *. mp 3, *. avi, *. mpg Каталоги (папки)
111 Работа с файлами: принцип сэндвича I этап. открыть файл: • сделать его активным, цел F приготовить к работе • связать переменную F с файлом F: = открыть на чтение("in. txt") F: = открыть на запись("out. txt") II этап: работа с файлом Фввод F, a, b | ввести a и b Фвывод F, a, b, нс | вывести a и b III этап: закрыть файл закрыть(F)
112 Работа с файлами Особенности: • имя файла упоминается только при открытии файла, работа с файлом – через файловую переменную • файл, который открывается на чтение, должен существовать • если файл, который открывается на запись, существует, старое содержимое уничтожается • данные записываются в файл в текстовом виде • при завершении программы все файлы закрываются автоматически • после закрытия файла переменную F можно использовать еще раз для работы с другим файлом
113 Последовательный доступ • при открытии файла курсор устанавливается в начало F: = открыть на чтение("qq. txt") конец файла 12 5 45 67 56● • чтение выполняется с той позиции, где стоит курсор • после чтения курсор сдвигается на первый непрочитанный символ Фввод F, x 12 5 45 67 56●
114 Последовательный доступ • как вернуться назад и начать с начала? закрыть ( F ) F: = открыть на чтение ( "qq. txt" ) • не открывая файл заново начать чтение ( F )
115 Пример Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output. txt их сумму. ? Можно ли обойтись без массива? Алгоритм: 1. Открыть файл input. txt для чтения. 2. S : = 0 3. Если чисел не осталось, перейти к шагу 7. 4. Прочитать очередное число в переменную x. 5. S : = S + x цикл «пока есть 6. Перейти к шагу 3. данные» 7. Закрыть файл input. txt. 8. Открыть файл output. txt для записи. 9. Записать в файл значение S. 10. Закрыть файл output. txt.
116 Программа: чтение данных из файла использовать Файлы П алг Сумма чисел нач цел F, S, x F: = открыть на чтение("input. txt") S: = 0 нц пока не конец файла( F ) Фввод F, x логическая функция, S: = S + x возвращает да, если кц достигнут конец файла закрыть( F ) | здесь нужно записать результат в файл кон
117 Программа: запись результата в файл Особенности: • файл, который открывается на запись, не обязательно должен существовать • старое содержимое файла уничтожается F: = открыть на запись("output. txt") Фвывод F, S закрыть( F )
118 Задания В файле input. txt записаны числа, сколько их – неизвестно. « 3» : Найти сумму всех чётных чисел и записать её в файл output. txt. « 4» : Найти минимальное и максимальное из всех чисел и записать их в файл output. txt. « 5» : Найти длину самой длинной цепочки одинаковых чисел, идущих подряд, и записать её в файл output. txt.
119 Обработка массивов Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно, но не более 100. Переставить их в порядке возрастания и записать в файл output. txt. ? Можно ли обойтись без массива? Проблемы: 1. для сортировки надо удерживать в памяти все числа сразу (нужен массив!); 2. сколько чисел – неизвестно. Решение: 1. выделяем в памяти массив из 100 элементов; 2. записываем прочитанные числа в массив и считаем их с помощью переменной N; 3. сортируем первые N элементов массива; 4. записываем их в файл.
120 Программа: чтение данных в массив использовать Файлы П алг Сортировка нач цел F, MAX = 100, N = 0, i, j, c целтаб A[1: MAX] F: = открыть на чтение("input. txt") нц пока не конец файла(F) и N < MAX N: = N + 1 Фввод F, A[N] цикл заканчивается, если достигнут конец файла или кц прочитали 100 чисел закрыть(F) | отсортировать первые N элементов | вывести полученный массив кон
121 Программа: вывод массива в файл F: = открыть на запись("output. txt") нц для i от 1 до N Фвывод F, A[i], нс кц зачем? закрыть(F)
122 Задания В файле input. txt записаны числа (в столбик), известно, что их не более 100. « 3» : Отсортировать массив по убыванию и записать его в файл output. txt. « 4» : Отсортировать массив по убыванию последней цифры и записать его в файл output. txt. « 5» : Отсортировать массив по возрастанию суммы цифр и записать его в файл output. txt.
123 Обработка текстовых данных Задача: в файле input. txt записаны строки, в которых есть слово-паразит «короче» . Очистить текст от мусора и записать в файл output. txt. Файл input. txt : Мама, короче, мыла, короче, раму. Декан, короче, пропил, короче, бутан. А роза, короче, упала на лапу, короче, Азора. Каждый, короче, охотник желает, короче, знать, где. . . Результат - файл output. txt : Мама мыла раму. Декан пропил бутан. А роза упала на лапу Азора. Каждый охотник желает знать, где сидит фазан.
124 Обработка текстовых данных Алгоритм: 1. Прочитать строку из файла. 2. Удалить все сочетания ", короче, ". 3. Записать строку в другой файл. 4. Перейти к шагу 1. пока не кончились данные Особенность: надо одновременно держать открытыми два файла: один в режиме чтения, второй – в режиме записи.
125 Работа с двумя файлами одновременно использовать Строки использовать Файлы П алг Обработка строк нач цел f. In, f. Out f. In: = открыть на чтение("input. txt") f. Out: = открыть на запись("output. txt") | обработка файла закрыть(f. In) закрыть(f. Out) кон
126 Цикл обработки файла нц пока не конец файла(f. In) Фввод f. In, s | обработка строки s Фвывод f. Out, s, нс кц ! Оба файла открыты одновременно!
127 Обработка одной строки бесконечный цикл нц пока да p: = найти(", короче, ", s) если p < 1 то выход все s: = s[1: p-1] + s[p+9: длин(s)] кц выход из цикла удалить 9 символов 1 s p p+9 , короче, длин(s)
128 Задания В файле input. txt записаны строки, сколько их – неизвестно. « 3» : Заменить все слова «короче» на «в общем» и записать результат в файл output. txt. « 4» : Вывести в файл output. txt только те строки, в которых есть слово «пароход» . В этих строках заменить все слова «короче» на «в общем» . « 5» : Вывести в файл output. txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).
129 Сортировка списков Задача: в файле list. txt записаны фамилии и имена пользователей сайта (не более 100). Вывести их в алфавитном порядке в файл sort. txt. ? Файл list. txt : Федоров Иванов Федор Анисимов Никита Никитин Николай ! Для сортировки нужен массив! Результат – файл sort. txt : Анисимов Никита Иванов Федор Никитин Николай Федоров Иван Нужен ли массив!
130 Сортировка списков Алгоритм: 1) прочитать строки из файла в массив строк, подсчитать их в переменной N 2) отсортировать первые N строк массива по алфавиту 3) вывести первые N строк массива в файл Объявление массива (с запасом): цел MAX = 100 литтаб s[1: MAX]
131 Сортировка списков Ввод массива строк из файла: f: = открыть на чтение("list. txt") N: = 0 нц пока не конец файла(f) N: = N + 1 Фввод f, s[N] кц закрыть(f) Вывод первых N строк массива в файл: f: = открыть на запись("sort. txt") нц для i от 1 до N Фвывод f, s[i], нс кц закрыть(f) цел f, N
132 Сортировка списков Сортировка первых N элементов массива: цел i, j, n. Min нц для i от 1 до N-1 лит c n. Min: = i нц для j от i+1 до N если s[j] < s[n. Min] то n. Min: = j все кц если i <> n. Min то c: = s[i]: = s[n. Min] Какой метод? s[n. Min]: = c все кц ?
133 Сортировка списков Как сравниваются строки: 245 s 1 а р о х || s 2 П || || || ? П а р о в д о ¤ з ? ¤ Что больше? 226 Кодовая таблица: А о Б В … Я а б в … х … я 193 194 … 223 224 225 226 … 245 … 255 UNICODE 1040 1041 1042 … 1071 1072 1073 1074 … 1093 … 1103 Win 192 код("х") > код("в") "х" > "в" "Пароход" > "Паровоз"
134 Сортировка списков Как сравниваются строки: s 2 П а р о || s 1 || || ? П а р ¤ ! х о д ¤ Любой символ больше пустого! "х" > ¤ "Пароход" > "Пар"
135 Сортировка списков Работа с отдельной строкой массива: литтаб s[1: MAX] лит c | вспомогательная строка нц для i от 1 до N с: = s[i] | работаем со строкой c, меняем ее s[i]: = c кц
136 Задания « 3» : Добавить к списку нумерацию: 1) Анисимов Никита 2) Иванов Федор « 4» : Выполнить задачу на « 3» и сократить имя до первой буквы: 1) Анисимов Н. 2) Иванов Ф. « 5» : Выполнить задачу на « 4» , но при выводе начинать с имени: 1) Н. Анисимов 2) Ф. Иванов
137 Списки с числовыми данными Задача: в файле marks. txt записаны фамилии и имена школьников и баллы, полученные ими на экзамене (0 -100). В файле не более 100 строк. Вывести в файл best. txt список тех, кто получил более 75 баллов. Файл marks. txt : Федоров Иван 78 Иванов Федор 63 Анисимов Никита 90 Никитин Николай 55 ? Нужен ли массив! Результат – файл best. txt : Федоров Иван 78 Анисимов Никита 90 ! Используем два файла одновременно!
138 Работа с двумя файлами одновременно использовать Файлы П использовать Строки алг Отметки на экзамене нач цел f. In, f. Out f. In: = открыть на чтение("marks. txt") f. Out: = открыть на запись("best. txt") | обработка строк из файла закрыть(f. In) закрыть(f. Out) кон
139 Цикл обработки файла цел ball нц пока не конец файла(f. In) Фввод f. In, s | обработка строки s | ball: = результат на экзамене если ball > 75 то Фвывод f. Out, s, нс все кц ! Оба файла открыты одновременно!
140 Преобразования «строка» - «число» Из строки в число: да или нет s: = "123" N: = лит_в_цел(s, OK) если не OK то вывод s: = "123. 456"; X: = лит_в_вещ(s, OK) если не OK то вывод | N = 123 "Ошибка!" все | X = 123. 456 "Ошибка!" все Из числа в строку: N: = 123 s: = цел_в_лит(N) | "123" X: = 123. 456 s: = вещ_в_лит(X) | "123. 456" цел N, вещ X, лит s, лог OK
141 Обработка строки цел n лит s, фамилия, имя лог ОK 1 s: П у п к и н n 1 В а с я n 8 2 n: = найти(" ", s) | n: = 7 фамилия: = s[1: n-1] | фамилия: = "Пупкин" s: = удалить(s, 1, n) | s: = "Вася 82" n: = найти(" ", s) | n: = 5 имя: = s[1: n-1] | имя: = "Вася" s: = удалить(s, 1, n) | s: = "82" ball: = лит_в_цел(s, OK) | ball: = 82
142 Обработка строки n: = найти(" ", s) | n: = 7 фамилия: = s[1: n-1] | фамилия: = "Пупкин" s: = удалить(s, 1, n) | s: = "Вася 82" n: = найти(" ", s) | n: = 5 имя: = s[1: n-1] | имя: = "Вася" s: = удалить(s, 1, n) | s: = "82" ball: = лит_в_цел(s, OK) | ball: = 82 если ball > 75 то Фвывод f. Out, s, нс все ? Что плохо?
143 Задания « 3» : Добавить к списку нумерацию: 1) Федоров Иван 78 2) Анисимов Никита 90 « 4» : Выполнить задачу на « 3» и сократить имя до первой буквы: 1) Федоров И. 78 2) Анисимов Н. 90 « 5» : Выполнить задачу на « 4» , но отсортировать список по алфавиту. 1) Анисимов Н. 90 2) Федоров И. 78 « 6» : Выполнить задачу на « 4» , но отсортировать список по убыванию отметки (балла).
144 Конец фильма ПОЛЯКОВ Константин Юрьевич д. т. н. , учитель информатики высшей категории, ГОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail. ru


