Программы для начинающих

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску

Замечания перед прочтением

Данный документ - набросок минимального множества задач, необходимых для изучения указанных тем. Впоследствии для всех задач, содержащихся в этом списке, будут приведены тексты программ на языке Паскаль.

Данный документ МОЖНО править. Любому, кто на это отважится :) Разумеется, если будут конструктивные предложения. Если правка будет неудачной, мы безболезненно откатим документ к старой версии.

Название - неудачное. Надо предложить другое название.

Основные идеи данного набора задач

  1. Разумная минимальность покрытия, обеспечивающая изучение и закрепление тем
  2. Приводятся более или менее конструктивные алгоритмы, а не алгоритмы, иллюстрирующие ту или иную конструкцию языка. В идеале в этих задачах не должно быть особенностей языка вовсе.
  3. Идея обучения на примерах. Здесь приведены решения канонических задач и задач, по которым легко вспомнить ту или иную конструкцию. А на практике предлагаются родственные задачи и разрешается пользоваться этими решениями.
  4. Повторение алгоритмов из предыдущих пунктов в алгоритмах следующих пунктов.
  5. Включение в список большинства известных простых алгоритмов (обмен значений, поиск минимального, алгоритм Евклида, пузырьковая сортировка и т.п.).
  6. В каждом алгоритме предполагается указать принадлежность к той или иной категории или подкатегории. Кажжый алгоритм может принадлежать к нескольким категориям. Одной из категорий является тема, в которой данная задача рассматривается.
  7. В каждой теме в конце будет также набор ошибок (компиляции, выполнения), которые можно совершить при решении задач из этой темы. Сейчас в скобках после некоторых алгоритмов указаны некоторые категории.

Начало

Программы

  1. HelloWorld
  2. Вычисление площади круга (использование констант)
  3. Вычисление A8 (промежуточные переменные)
  4. Вычисление расстояния между двумя точками на прямой (стандартные функции, abs)
  5. Вычисление гипотенузы по катетам (стандартные функции, sqrt)
  6. Генерация случайного числа (стандартные функции, random)
  7. Перемена местами двух значений (базовые алгоритмы)
  8. Выделение цифр из двузначного числа (div mod)
  9. Выделение цифр из трехзначного числа (div mod)

Возможные ошибки

  • Неописанная переменная
  • Отсутствующая ;
  • Несовместимость типов при присваивании
  • Отсутствие закрывающего апострофа литеральной строки
  • Ошибки расстановки запятых и апострофов при выводе строк и выражений
  • Ошибка ввода
  • Ошибка отсутствия ввода
  • Ошибка неинициализированной переменной
  • Корень из отрицательного числа
  • Деление на 0

Условный оператор и оператор выбора

Программы

  1. Минимум из двух значений (базовые алгоритмы)
  2. Определение четности числа (повторение div mod)
  3. Состоит ли двузначное число из одинаковых цифр (выделение цифр из числа)
  4. Упорядочение двух значений по возрастанию (составной оператор, неполная форма условного)
  5. Проверка числа на двузначность (and)
  6. Проверка числа на равенство одному из значений (or)
  7. Наименование праздника по дате (вложенные if, цепочечные if)
  8. Определение четверти, в которой находится точка (вложенные if, математика)
  9. Нахождение корней квадратного уравнения (математика)
  10. Словесное наименование дня недели (case)
  11. Определение того, является ли символ цифрой или буквой (case)

Возможные ошибки

  • Неверная расстановка begin end
  • Отсутствие begin end
  • Неверная расстановка скобок в сложном логическом выражении

Циклы

  1. Вывод последовательностей 1 2 3 4 5 и 5 4 3 2 1 с помощью разных циклов (арифметическая прогрессия)
  2. Вывод последовательностей 1 3 5 7 9 и 10 8 6 4 2 с помощью разных циклов (арифметическая прогрессия)
  3. Сумма двузначных чисел (суммы)
  4. n! (базовые алгоритмы)
  5. a^n (базовые алгоритмы)
  6. Вывод степеней двойки (геометрическая прогрессия)
  7. Вывод цифр числа (div mod)
  8. Вывод букв английского алфавита (for)
  9. Числа Фибоначчи (рекуррентные последовательности)
  10. Минимум из введенных (минимумы-максимумы, базовые алгоритмы)
  11. Поиск заданного числа среди введенных (поиск, базовые алгоритмы)
  12. Защита от ввода неверного значения с помощью repeat
  13. Алгоритм Евклида поиска НОД (математика, классические алгоритмы)
  14. Является ли число степенью 2 (2 варианта: делением и умножением)
  15. Вывод таблицы умножения (вложенные циклы)
  16. Определение простоты числа (математика)
  17. Разложение числа на простые множители (математика)

Возможные ошибки

  • Неверный тип переменной цикла
  • Изменение переменной цикла в теле цикла
  • Использование одинаковой переменной цикла в заголовках вложенных циклов
  • Зацикливание
  • Переполнение
  • Сравнение вещественных чисел на равенство

Процедуры и функции

Основная часть задач - создание оберток над известными алгоритмами

Программы

  1. Вычисление площади и периметра прямоугольника (параметры-значения и параметры-переменные)
  2. Табулирование функции
  3. Функция вычисления a^n
  4. Функция вычисления n!
  5. Вывод четверти по координатам точки (if, функция)
  6. Вывод слова, обозначающего данную цифру (case, функция)
  7. Функция проверки числа на четность
  8. Функция определения простоты числа (флаги)
  9. Функция вычисления n-того числа Фибоначчи
  10. Функция определения НОД числа (математика)
  11. Процедура вывода таблицы умножения (вложенные циклы)

Возможные ошибки

  • Невозвращение значения функции по одной из ветвей алгоритма
  • Описание переменной цикла, используемого в процедуре, как глобальной
  • Передача выходных параметров по значению

Массивы

Программы

  1. Ввод, заполнение случайными и вывод
  2. Заполнение арифметической прогрессией (рекуррентные соотношения)
  3. Заполнение степенями двойки (рекуррентные соотношения)
  4. Заполнение числами Фибоначчи (рекуррентные соотношения)
  5. Инвертирование массива
  6. Максимальный элемент в массиве и его индекс (базовые алгоритмы, минимумы-максимумы)
  7. Минимальный четный элемент и его индекс (минимумы-максимумы, условный минимум)
  8. Запись в новый массив элементов другого массива, удовлетворяющих определенному условию (базовые алгоритмы, добавление элемента в конец)
  9. Слияние отсортированных массивов в отсортированный (барьерный элемент, классические алгоритмы)
  10. Сдвиг элементов влево (базовые алгоритмы)
  11. Сдвиг элементов вправо (базовые алгоритмы)
  12. Удаление элемента
  13. Вставка элемента
  14. Подсчет количества элементов, удовлетворяющих условию (базовые алгоритмы, счетчики)
  15. Есть ли элемент, удовлетворяющий условию (базовые алгоритмы, флаги)
  16. Сортировка пузырьком (сортировка, классические алгоритмы)
  17. Сортировка выбором (сортировка, классические алгоритмы)
  1. Проверка того, является ли массив отсортированным (по возрастанию, убыванию или в любом порядке), вывод первого элемента, нарушающего порядок сортировки
  2. Анализ локальных максимумов, минимумов и экстремумов (использование барьерных элементов)
  3. Вставка в отсортированный массив нового элемента с сохранением упорядоченности элементов
  4. Сортировка с помощью индексного массива (с сохранением исходного порядка элементов в основном массиве)
  5. Анализ последовательностей одинаковых элементов в массиве (определение числа таких последовательностей, самой длинной последовательности, числа самых длинных последовательностей или числа последовательностей указанной длины и т.д.)
  6. Нахождение нескольких минимальных или максимальных элементов за один проход массива
  7. Нахождение количества максимальных/минимальных элементов, количества элементов, следующих за максимальными/минимальными и т.д., за один проход массива
  8. Инвертирование части массива
  9. Удаление из массива всех элементов, удовлетворяющих определенному условию
  10. Вставка в массив новых элементов перед/после элементов, удовлетворяющих определенному условию, дублирование таких элементов

Возможные ошибки

  • Попытка вывести массив не поэлементно, а целиком
  • Использование записи a[i] вне цикла
  • Выход за границы диапазона изменения индекса
  • Затирание элементов при сдвиге

Матрицы

Программы

  1. Заполнение матрицы случайными числами и вывод (заполнение)
  2. Перемена местами двух строк
  3. Поиск минимумов в строках (минимумы-максимумы)
  4. Поиск максимумов в столбцах (минимумы-максимумы)
  5. Поиск сумм в строках (сумма)
  6. Поиск произведений в столбцах (произведение)
  7. Поиск элемента в матрице (поиск)
  8. Сумма чисел на главной диагонали (сумма)
  9. Сумма чисел на побочной диагонали (сумма)
  10. Заполнение нулями ниже/выше главной диагонали (диагонали матрицы)
  11. Заполнение нулями ниже/выше побочной диагонали (диагонали матрицы)
  1. Удаление строки/столбца с заданным номером
  2. Вставка новой строки/столбца перед/после заданной строки/столбца (или дублирование строки/столбца)
  3. Нумерация диагоналей, параллельных главной/побочной, использование массива с характеристиками каждой диагонали (например, с суммой значений)
  4. Сортировка строк/столбцов по некоторому ключу, связанному со строками/столбцами
  5. Анализ элементов, соседних с данным элементом матрицы, в частности, нахождение локальных минимумов/максимумов (использование обрамляющих матрицу строк и столбцов для единообразной обработки)

Возможные ошибки

  • Перепутывание строк и столбцов

Записи

Программы

  1. Ввод и вывод данных о персонах (привыкание к синтаксису)
  2. Поиск в массиве персон по фамилии, возрасту (поиск)
  3. Подсчет количества в массиве персон по возрасту (счетчики)
  4. Подсчет в массиве точек количества точек, находящихся от начала координат на расстоянии не более R (минимумы-максимумы)
  5. Выбор из массива точек точки, наиболее близкой к началу координат (минимумы-максимумы)
  6. Сортировка массива персон по фамилии, возрасту (сортировка)

Строки и символы

Программы

  1. Определение кода по символу и символа по коду
  2. Вывод кодовой таблицы
  3. Формирование строки из n одинаковых символов (конкатенация строк)
  4. Заменить все маленькие английские буквы в строке соответствующими большими (цикл по символам строки)
  5. Подсчет количества цифр в строке (цикл по символам строки)
  6. Есть ли в строке английские буквы (цикл по символам строки, флаги)
  7. Просуммировать записанные в строке числа (преобразование строки в число)
  8. Перестановка слов в строке из двух слов (вырезание подстроки, конкатенация)
  9. Количество вхождений подстроки в строку
  1. Преобразование числа в строку и обратно, быстрый способ преобразование цифрового символа в соответствующее однозначное число и обратно
  2. Разные способы инвертирования строки
  3. Проверка того, что строка представляет собой запись целого числа; вещественного числа
  4. Нахождение последнего вхождения подстроки в строку (варианты, использующие различные стандартные функции)
  5. Удаление из строки определенных символов или вставка в строку символов перед/после требуемых (просмотр строки с конца)
  6. Разные способы удаления из строки лишних пробелов
  7. Разбиение строки на отдельные слова (в предположении, что слова разделяются пробелами, или при наличии набора разделителей)
  8. Изменение регистра букв в строке
  9. Удаление из начала/конца строки требуемого символа (с учетом того, что в результате строка может оказаться пустой)
  10. Распознавание в строке начальных и конечных символов слов, при условии, что в начале и конце строки могут находиться пробелы, а слова разделяются одним или несколькими пробелами или другими разделителями
  11. Проверка правильности расстановки скобок в строке (ситуация, когда используются только круглые скобки, и ситуация, когда имеется несколько видов скобок)

Возможные ошибки

  • Ошибка при преобразовании строки в число
  • Выход за границы строки

Файлы

Программы

  1. Создать текстовый файл с указанным текстом
  2. Вывести на экран текст файла текущей программы
  3. Записать в текстовый файл таблицу умножения n на n
  4. Скопировать один текстовый файл в другой построчно
  5. Просуммировать числа, записанные в файле
  6. Создать типизированный файл, содержащий данные числа
  7. Считать числа, содержащиеся в типизированном файле, и вывести их на экран
  8. Есть ли данное число в данном типизированном файле
  9. Возвести все числа в типизированном файле в квадрат

Возможные ошибки

  • Использование readln и writeln для типизированных файлов
  • Открытие файла без выполнения assign
  • Попытка выполнить операцию чтения-записи с неоткрытым файлом
  • Попытка открыть несуществующий файл
  • Попытка считывания за концом файла