- •Основные элементы языка.
- •Типы данных
- •Выражения и операции.
- •Операторы языка.
- •Операторы Write и WriteLn
- •Операторы Read и ReadLn
- •Выберите из предложенного ниже списка задачи для самостоятельного решения.
- •Оператор выбора case. Решение задач.
- •Задачи для самостоятельного решения:
- •Общая форма записи цикла со счетчиком
- •Задачи для самостоятельного решения:
- •Проверьте себя, ответив на вопросы:
- •Массивы.
- •Изменение значения некоторых элементов
- •Нахождение номеров элементов с заданным свойством
- •Нахождение количества элементов с заданным свойством
- •Задачи для самостоятельного решения
- •Вставка одного элемента
- •Вставка нескольких элементов
- •Задачи для самостоятельного решения
- •Перестановка двух элементов
- •Перестановка части массива
- •Задачи на использование одномерных массивов
- •Самостоятельное решение задач.
- •Нахождение количества элементов с данным свойством
- •Определить, отвечает ли заданный массив некоторым требованиям
- •Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение массива по правилу
- •Задачи для самостоятельного решения
- •Вставка строк и столбцов
- •Удаление строк и столбцов
- •Задачи для самостоятельного решения Задачи на вставку элементов:
- •Задачи на удаление элементов:
- •Задачи для самостоятельного решения
- •Задачи на использованиедвумерных массивов
- •I. Заполнение и анализ элементов массива
- •II. Работа с одномерным и двумерным массивами
- •Дополнительные задачи (на усмотрение учителя)
- •Для любопытных Графические программы с применением массивов.
- •Сортировка выбором
- •Сортировка методом простого обмена. Рекурсивная сортировка.
- •Сортировка массива с помощью рекурсии
- •Рекурсивная сортировка слиянием (для любопытных)
- •Строки и множества.
- •Задачи для самостоятельного решения
- •Задачи для дополнительного решения (на усмотрение учителя)
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Pos
- •Функция Concat
- •Задачи для самостоятельного решения
- •Стандартные процедуры для работы со строками (delete, insert,str,val).
- •Задачи для самостоятельного решения
- •Задачи для дополнительного решения (на усмотрение учителя)
- •Контрольная работа.
- •Сформулируйте тексты решенных ниже задач
- •Выберите с учителем задачи для самостоятельного решения:
- •Решение задач.
- •Бегущая строка. Пример программы осыпающихся букв. Строки в графическом режиме (для увлеченных программированием).
- •1.Организовать ввод фио только на русском языке.
- •Записи.
- •Процедуры и функции.
- •2.Вывести все совершенные числа в данном диапазоне.
- •3.Введенное число - полиндром?
- •2.Найти факториал числа с помощью рекурсии.
- •Задачи на построение процедур и функций
- •Самостоятельное решение задач.
- •I Выберите с учителем одну из предложенных ниже задач (тип Integer, real)
- •II Выберите с учителем одну из предложенных ниже задач (тип char)
- •III Выберите с учителем одну из предложенных ниже задач (тип string)
- •IV Выберите с учителем одну из предложенных ниже задач (тип record)
- •Задачи на работу с файлами
- •Использование библиотеки crt
- •Программирование клавиатуры
- •Текстовый вывод на экран
- •Программирование звукового генератора
- •Использование библиотеки Graph
- •Переход в графический режим и возврат в текстовый
- •Краткая характеристика графических режимов работы дисплейных адаптеров
- •Процедуры и функции
- •Координаты, окна, страницы
Нахождение количества элементов с данным свойством
Задачи на нахождение номеров элементов с заданными свойствами и на нахождение количества таких элементов во всем массиве останутся практически такими же. В них только добавится второй цикл или вывод двух индексов вместо одного.
Задача 1. Найти максимальный элемент массива и его индексы.
Так как элементы могут повторяться, то договоримся, что будем запоминать только индексы первого максимального элемента. Опишем процедуру, которой передается массив, и ее результатом является значение максимального элемента и индексы первой встречи такого значения.
Procedure Maximum(X : MyArray; n, m : integer; Var Max, Maxi, Maxj : integer); Var i, j : integer; Begin Max := X[1, 1]; {Предположим, что максимумом является первый элемент} Maxi := 1; {в этом случае запомним первую строку} Maxj := 1; {и первый столбец} for i := 1 to n do for j := 1 to m do if X[i, j] > Max {если среди элементов массива нашелся больший элемент, то} then begin Max := X[i, j];{внесем новое найденное значение в переменную Мах} Maxi := i; {и не забудем запомнить индексы строки} Maxj := j; {и столбца этого элемента} end; End; |
Задача 2. Найти количество отрицательных элементов в каждой строке.
Рассмотрим несколько способов решения этой задачи.
Способ 1 - количество элементов каждой строки хранить в одномерном массиве (Y) соответствующей размерности. Тогда можно описать такую процедуру:
Procedure KolOtr1(X : MyArray2; n, m : integer; Var Y : MyArray1); Var i, j : integer; Begin for i := 1 to n do begin Y[i] := 0; {записываем начальное значение количества элементов в соответствующую столбцу ячейку} for j := 1 to m do if X[i, j] < 0 {если отрицательный элемент найден} then Inc(Y[i]); {то увеличиваем текущее значение на единицу} end; End; |
Способ 2 - использовать счетчик, находить количество элементов строки и выводить значение на экран.
Procedure KolOtr2(X : MyArray2; n, m : integer); Var i, j, k : integer; Begin for i := 1 to n do begin k := 0; for j := 1 to m do if X[i, j] < 0 then Inc(k); writeln(i,' - ', k); end; End; |
Вопрос. Сравните предложенные способы решения задачи. Какой способ Вам понравился больше и почему?
Определить, отвечает ли заданный массив некоторым требованиям
Задача. Определить, есть ли в заданном массиве элемент, равный 0.
Опишем логическую функцию, значение которой равно истине, если такой элемент есть, и ложь в противном случае. Самый простой способ - это просматривать элементы и, если найден искомый элемент, то присвоить функции значение True, иначе - False.
Function Check1(X : MyArray; n, m : integer) : Boolean; Var i, j : integer; Flag : Boolean; Begin Flag := False; {Предполагаем, что искомого элемента в массиве нет} i := 1; while not(Flag) and (i<=n) do {элемент не найден и строки не закончились} begin j := 1; while (j<=m) and (X[i, j]<>0) do {перебираем все элементы текущей строки, пропуская ненулевые элементы} Inc(j); Flag := not(j=m+1);{если искомый элемент найден, то переменной Flag присваиваем значение True} Inc(i); end; Check1 := Flag; End; |
Задача. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.
В задачах подобного типа необходимо увидеть зависимость между индексами элементов массива. Для этого удобно представить массив в виде таблицы, обозначив элементы, например, буквой а и написав рядом их индексы.
Заметим, что если массив является симметричным, то для него выполняется равенство A[i, j]=A[j, i] для всех i=1, ..., n и j=1, ..., n. Поэтому можно составить следующую функцию:
Function Check2(X : MyArray; n, m : integer) : Boolean; Var i, j : integer; Flag : Boolean; Begin Flag := True; {Предполагаем, что матрица симметрична} i := 2; while Flag and (i<n) do begin j := 1; while (j<i) and (X[i, j]=X[j, i]) do Inc(j); Flag := (j=i); Inc(i); end; Check2 := Flag; End; |
Вопрос. Почему в функции употребляется условие i>j? Можно ли без него обойтись и что при этом изменится?