- •Аннотация
- •Условия использования
- •Оглавление
- •Содержание
- •Только для взрослых
- •Десять лет спустя
- •Чему нас учат семья и школа?
- •Крошка сын к отцу пришел
- •Азбучные истины
- •Что я могу ещё сказать?
- •Благодарности
- •Детям до 16-ти
- •Глава 1 Путь далек у нас с тобою…
- •Компьютер
- •Компилятор
- •Личный багаж
- •Компьютерная литература
- •В здоровом теле – здоровый дух
- •Вместе весело шагать по просторам!
- •Повторение – мать учения
- •Соглашения
- •Итоги
- •Глава 2 Вместо теории
- •Миф о думающих машинах
- •Загадочные коды
- •Языки программирования и компиляторы
- •Следующий шаг –
- •Итоги
- •Глава 3 Консольный интерфейс
- •Что такое интерфейс?
- •Консольный интерфейс
- •Прикосновение к консольному интерфейсу
- •А почему не «окна»?
- •Итоги
- •Глава 4 Оружие – к бою!
- •Оружейный прилавок
- •Free Pascal
- •Настройка ярлыка
- •Free Pascal
- •Установка справочной системы
- •Обновление версий Free Pascal
- •Итоги
- •Глава 5 Программа номер один
- •Постановка задачи
- •Создание файла
- •Наполнение файла
- •Компиляция
- •Процедура вывода (печати)
- •Запуск программы
- •Итоги
- •Глава 6 Подготовка к следующему штурму
- •Ещё об исходных файлах
- •Управление окном редактора
- •Борьба с ошибками
- •Итоги
- •Глава 7 Развиваем успех
- •Операторы и разделители
- •Программа, стой!
- •Алгоритмы
- •Блок-схемы
- •Итоги
- •Глава 8 Постоянные и переменные
- •Константы
- •Идентификаторы
- •Переменные
- •Ввод и вывод данных
- •Итоги
- •А слабо?
- •Глава 9 Переменные: продолжение знакомства
- •Представьтесь, пожалуйста!
- •Из пустого в порожнее
- •Сцепление строк
- •Инициализация переменных
- •Типизированные константы
- •Итоги
- •А слабо?
- •Глава 10 Условный оператор
- •Стой! Кто идет?
- •Вопрос ребром
- •Пост номер один
- •Неполный условный оператор
- •Пост номер два
- •Итоги
- •А слабо?
- •Глава 11 Операторный блок
- •Операторные скобки
- •Красиво жить не запретишь
- •Комментарии
- •Итоги
- •Глава 12 Цикл с проверкой в конце
- •Подтянем дисциплину
- •Нанимаем репетитора
- •Вежливый часовой
- •Досрочный выход из цикла
- •Итоги
- •Глава 13 Правда и кривда
- •Есть ли жизнь на Марсе?
- •Информация и её мерило
- •Булевы переменные
- •Ввод и вывод булевых данных
- •Логические выражения
- •С высоты птичьего полета
- •Парад логических операций
- •Итоги
- •А слабо?
- •Глава 14 Дважды два – четыре
- •Поможем братьям нашим меньшим
- •Числа и действия с ними
- •Алгоритм экзаменатора
- •Экзаменатор, первый вариант
- •Итоги
- •А слабо?
- •Глава 15 Айда в Монте-Карло!
- •Куда ни глянь – то процедура, то функция!
- •Госпожа удача
- •Итоги
- •А слабо?
- •Глава 16 Делу время, а потехе час
- •Потемкинская лестница
- •Итоги
- •А слабо?
- •Глава 17 И вновь за парту
- •Цикл со счетчиком
- •Итоги
- •Глава 18 Аз, Буки
- •Символьный тип данных
- •Индексация
- •Длина строки
- •Распечатка строки
- •Итоги
- •Глава 19 Процедуры и функции: разделяй и властвуй
- •Снежный ком
- •Описание процедур
- •Процедуры с параметрами
- •Итоги
- •Глава 20 Процедуры: первый опыт
- •Мухи – налево, котлеты – направо!
- •Сверху вниз
- •Первые раны
- •Глобальные и локальные
- •Локально – это разумно!
- •Неподдающаяся строка
- •Итоги
- •Глава 21 Отладка
- •Отладчик
- •Жучки, вылезайте!
- •Ссылка на переменную
- •Итоги
- •Глава 22 О передаче параметров
- •Процедура обмена
- •Замена символов в строке
- •О передаче строк
- •Итоги
- •Глава 23 Функции
- •Объявление функции
- •Пример функции
- •Подсчет символов в строке
- •Возврат строк
- •Когда результат не важен
- •Неявная переменная Result
- •Итоги
- •Глава 24 Криптография
- •Секреты Юлия Цезаря
- •Суть проблемы
- •О кодировании символов
- •Чудесные превращения
- •Шифрование символа
- •Расшифровка символа
- •Итоги
- •А слабо?
- •Глава 25 Текстовые файлы
- •Файлы хорошие и разные
- •Формат текстовых файлов
- •Доступ к текстовым файлам
- •Чтение из файла
- •Последовательный доступ к файлу
- •Самореклама
- •Цикл с проверкой в начале
- •Итоги
- •Глава 26 Я не читатель, — я писатель!
- •Запись в текстовый файл
- •Пример записи в файл
- •Завершение шпионского проекта
- •Итоги
- •А слабо?
- •Глава 27 Дайте кораблю минутный отдых!
- •Ошибка ошибке рознь
- •Фатальные ошибки
- •«Простительные» ошибки
- •Опции компилятора
- •Обработка ошибок ввода-вывода
- •Директивы компилятора
- •Директиву – в студию!
- •Парад директив
- •Итоги
- •А слабо?
- •Глава 28 Редактор и справочная система
- •Небьющиеся окна
- •Буфер обмена
- •Справочная система
- •Итоги
- •Глава 29 Читайте по-новому
- •Полицейская база данных, версия 1
- •Полицейская база данных, версия 2
- •Итоги
- •Глава 30 Журнальная история
- •Статистика знает всё?
- •Строим планы
- •Барабаним по клавишам
- •Первый блин
- •Блин второй
- •Спецификатор ширины поля
- •«Развесные» числа
- •Итоги
- •Глава 31 Финал журнальной истории
- •Буква за буквой
- •Нелишняя предосторожность
- •Достройка программы
- •Испытание
- •Итоги
- •Глава 32 Порядковые типы данных
- •Типы данных: простые и сложные
- •Целое братство
- •Капля, переполняющая чашу
- •Инкремент и декремент
- •Диапазоны
- •Перечисления
- •Порядковые типы
- •Разумный контроль
- •Итоги
- •Глава 33 Вещественные числа
- •Изображение вещественных чисел
- •Вывод вещественных чисел
- •Типы вещественных чисел
- •Сравнение вещественных чисел
- •Типы данных пользователя
- •Совместимость и преобразование типов
- •Размеры переменных и типов данных
- •Итоги
- •Глава 34 Структура программы
- •Управляющие структуры
- •Структура программы
- •Структура процедур и функций
- •Обмен данными с подпрограммами
- •Встроенные процедуры и функции
- •Что дальше?
- •Итоги
- •А слабо?
- •Глава 35 Множества
- •В директорском кабинете
- •Первым делом, первым делом – оцифровка
- •Множества глазами математика
- •Числовые множества
- •Мощность множества, полные и неполные множества
- •Итоги
- •Глава 36 Множества в Паскале
- •Объявление множеств
- •Присвоение значений множествам
- •Операции с множествами
- •Сравнение множеств
- •Проверка на вхождение элемента в множество (операция IN)
- •Решение директорской задачи
- •Итоги
- •А слабо?
- •Глава 37 Ввод и вывод множеств
- •Вывод множества в текстовый файл
- •Ввод множества из текстового файла.
- •Директорская задача, первый вариант
- •Директорская задача, второй вариант
- •Итоги
- •Глава 38 Множества «в бою»
- •Активисты, шаг вперед!
- •Подвиг контрразведчика
- •В тридевятом царстве
- •Решето Эратосфена
- •Мелочь, а приятно
- •Итоги
- •А слабо?
- •Глава 39 Командная игра (массивы)
- •Снежная лавина
- •А где же волшебная палочка?
- •Массивы вокруг нас
- •Объявление массивов
- •Доступ к элементам (индексация)
- •Ввод и вывод массивов
- •Ошибки индексации
- •Итоги
- •Глава 40 Пристрелка на знакомых мишенях
- •Вопрос-ответ – добиваемся гибкости
- •Полицейская база данных – ускоряем поиск
- •Ещё раз о статистике
- •Итоги
- •Глава 41 По порядку, становись!
- •Пиратская справедливость
- •Пузырьковая сортировка
- •Электронная делёжка
- •Возвращение на футбольное поле
- •Итоги
- •Глава 42 Кто ищет, тот всегда найдет
- •Где эта улица, где этот дом?
- •Последовательный поиск
- •Двоичный поиск
- •Исследование двоичного поиска
- •Ах, время, время!
- •Логарифмы? Это просто!
- •Итоги
- •Глава 43 Сортировка по-взрослому
- •«Фермерская» сортировка
- •Быстрая сортировка
- •Процедура быстрой сортировки
- •О рекурсии и стеке
- •Алгоритмы, на старт!
- •Итоги
- •Глава 44 Строки
- •Строка – особый род массива
- •Укороченные строки
- •Операции со строками
- •Подсчет слов в строке
- •Контекстная замена
- •Итоги
- •Глава 45 Очереди и стеки
- •Вовочка в потоке событий
- •Танцевальный кружок
- •Скитания товарного вагона
- •Сортировочная горка
- •Итоги
- •Глава 46 Огромные числа
- •Сколько звезд на небе?
- •Сложение «в столбик» никто не отменял
- •Великая стройка
- •Длинная арифметика
- •Итоги
- •А слабо?
- •Глава 47 Системы счисления
- •Из тьмы веков
- •Число и его изображение
- •Десятичная система
- •Двоичная система
- •Шестнадцатеричная система
- •Другие системы счисления
- •Изображение числа в заданной системе счисления
- •Обратное преобразование
- •Итоги
- •Глава 48 Железная логика
- •Два взгляда на компьютерные «кирпичики»
- •Логические операции в регистрах
- •Сдвиги влево и вправо
- •Итоги
- •Глава 49 Сложные массивы
- •На поклон к Науке
- •Имперское строительство
- •Крестики-нолики
- •Итоги
- •А слабо?
- •Глава 50 Неспортивные рекорды (записи)
- •Кушать подано!
- •Записи
- •Второй тайм
- •Дополнительное время
- •Итоги
- •Глава 51 Указатели в море памяти
- •Погружение в оперативную память
- •«Планировка» памяти
- •Указатели, первое знакомство
- •Объявление указателей
- •Копирование указателей, пустой указатель
- •Сравнение и проверка указателей
- •Разыменование указателей
- •Нетипичный указатель
- •Примеры с указателями
- •Итоги
- •Глава 52 Динамические переменные
- •Аппетит является к обеду
- •Одолжите памяти немножко!
- •Выделение памяти
- •Освобождение памяти
- •Предупреждён – значит, вооружен
- •Итоги
- •Глава 53 Массив указателей
- •Базу данных – в кучу
- •Сортировка массива указателей
- •Итоги
- •А слабо?
- •Глава 54 Односвязные списки
- •Чудесное сочетание
- •Проблема курицы и яйца
- •Вяжем список
- •Распечатка списка
- •Поиск в несортированном списке
- •Сортированные списки
- •Поиск в сортированном списке
- •Итоги
- •Глава 55 Слова, слова, слова…
- •Частотный анализ текста
- •Слово за слово
- •Структура записи
- •Алгоритм
- •А слабо?
- •Глава 56 И снова очереди, и снова стеки…
- •Шутить изволите?
- •Танцуют все!
- •Итоги
- •Глава 57 Графомания
- •Видимое представление графа
- •Внутреннее представление графа
- •Ввод и вывод графа
- •Итоги
- •Глава 58 По графу шагом марш!
- •Империя номер два
- •Структура узла
- •В рассыпную!
- •Аты-баты
- •Итоги
- •Глава 59 Крупные проекты
- •О модулях и разделении труда
- •Модули
- •Дробление модуля – «смертельный» номер
- •Компиляция проекта
- •Инициализация модуля
- •Структура модуля
- •О совпадении имен
- •Сборочный цех
- •Фирменные библиотеки
- •Динамически загружаемые библиотеки (DLL)
- •Итоги
- •Глава 60 Мелкие хитрости
- •Включаемые файлы
- •Условная компиляция
- •Итоги
- •Глава 61 «Кубики» программиста (ООП)
- •Фокус-покус
- •Вместо паяльника
- •На трех китах
- •Инкапсуляция
- •Наследование
- •Приборостроение
- •Гражданское строительство
- •Динамические объекты
- •Полиморфизм
- •Сокрытие полей и методов
- •Итоги
- •Глава 62 Всё только начинается!
- •Крупицы мастерства
- •Программисты, на старт!
- •Приложение А Установка и настройка IDE Borland Pascal
- •Borland Pascal, состав дистрибутива
- •Borland Pascal
- •Установка
- •Организация рабочей папки
- •Создание и настройка ярлыка
- •Пробный запуск
- •Предварительная настройка
- •Русификация консольного окна
- •Turbo Pascal School Pak
- •Приложение Б Консольная программа в среде Delphi
- •Создание пустого консольного приложения
- •Настройка и сохранение консольного приложения
- •Русификация консольного приложения
- •Приложение В Особенности IDE Pascal ABCNet
- •Приложение Ж Директивы управления компиляцией
- •Приложение З Назначение пунктов меню
- •Приложение И Стандартная кодировка символов MS-DOS
- •Приложение К Некоторые встроенные процедуры и функции
- •Приложение М Пример олимпиадной задачи
- •Библиография
Только для взрослых
Конечной целью образования должно быть искусство конструктивного мышления.
Никлаус Вирт
Ученик — это не сосуд, который надо наполнить, а факел, который надо зажечь.
Плутарх
Десять лет спустя
«Не верю!» — отмахнулся бы я, если б не видел это своими глазами. Меня можно понять, как и тех, кто, барахтаясь в мутных волнах 90-х, не помышлял о дальних планах. Но оптимисты неистребимы! Они устроили тогда в нашем городе конкурс юных программистов — KidSoft. Зрители тех состязаний терялись в догадках: где «желторотики» нахватались компьютерных премудростей? Сотворенных ими программ не постыдились бы и профессионалы! А ведь найти приличный компьютер тогда было не проще, чем хороший учебник программирования. «Что же будет лет эдак через 10-15, — спрашивал я себя, — когда компьютер войдет в каждый дом?». И мнились мне колонны юных гениев, бодро шагающие на свой конкурс.
Через годы судьба вновь свела меня с «компьютерной» молодежью. Наблюдая участников олимпиад, я невольно поверял свой прогноз. Во многом он оправдался: компьютер стал предметом быта, книжные полки ломятся от компьютерной литературы, а информатикой пичкают едва ли не с детского сада. Но где колонны юных гениев? Я их не вижу! Да, конечно, «кое-кто, кое-где у нас порой…». И всё же мне видится, что интерес молодежи к программированию несколько увял. Логика, ау! Где ты? Привыкнув следовать твоим законам, я поклялся раскрыть эту тайну.
Чему нас учат семья и школа?
Интернет и другие источники привели меня к парадоксальному выводу: интерес подростков к программированию угасал с развитием компьютерных технологий! Судите сами: чем мог заняться способный мальчишка в компании с каким-нибудь примитивным «синклером» начала 90-х? Наскучив двумя или тремя простенькими игрушками, он, в конце концов, брался за программирование и лепил ещё одну. А сейчас? Об «игрунах» молчу, поскольку даже творческий человек найдет в компьютере уйму интересного!
А школа, чему она учит? Поспешая за техническим прогрессом, школа пытается втиснуть в детскую голову едва ли не все достижения информационных технологий. Сомневаясь в разумности этой попытки, согласен всё же с тем, что компьютерная грамотность стала ныне грамотностью номер два. Но теперь она не
Только для взрослых
связана с программированием: в массе востребованы офисные приложения, электронная почта, Интернет.
Спорить с этим трудно, и я бы не стал. Но как быть юным программистам? Или эта профессия отмирает, и технологии будут развивать без них? Смешной вопрос, но иным не до смеха. Ведь в школе с программистами заниматься некому и некогда, — эстафету передали в ВУЗ. А там, на профильных факультетах, давно уже бьют в набат: познания новобранцев в программировании ничтожны, и обучать их приходится с азов.
Что в сухом остатке моих изысканий? Нужны ли нам хорошие программисты?
— разумеется. Есть желающие ими стать? — конечно! Но нет школы, которая их научит. Так пусть вундеркинды учатся сами, почему нет? Вот компьютер, вот полка с учебниками, — полный вперед! Так ли это? Присев на корточки, я вошёл в положение юного нахала, дерзнувшего двинуться этой тропой.
Крошка сын к отцу пришел
Итак, я стал мальчишкой лет двенадцати. В доме есть компьютер, за который изредка садятся и родители. Но, главным образом, — это мой инструмент. Мне многое по плечу: скопировать файлы или напечатать что-то? — запросто! Признаюсь, однако, что игрушки надоели, и хочется освоить программирование. Увы! Родители в этом не разбираются, программистов среди друзей нет, а учителю информатики возиться со мной недосуг. Ладно, попробую сам. Раздобыв пару книжек и ободрившись примером Ломоносова, отважно берусь за дело.
Прикусив от старания язык, я терпеливо «сверлю» страницу за страницей. Вот алфавит языка, идентификаторы, константы, выражения... Кое-что понятно, но...
Мамочка! когда же я напишу хоть простенькую программку? Открыв другую книгу, нахожу то же самое — подробное описание языка программирования, или так называемую теорию. Убойная доза теории свалит с копыт даже крепкую казачью лошадь, — так устоит ли мой нежный организм? Энтузиазм вянет. «Нет,
— думаю, — новый Ломоносов подождёт, может, в школе когда-нибудь научат». Что будет в школе, вы уже знаете.
Так может, мальчишке попались плохие книги? Не думаю, хорошие учебники встречаются, некоторые написаны основательно. «И всё же, всё же, всё же...». Всё же книги эти адресованы другому читателю; по сути это технические руководства, рассчитанные на закаленных, зрелых бойцов. Как же обучать юнцов?
Азбучные истины
Тогда я мысленно приложил типовой учебник программиста к преподаванию грамоты в первом классе. По замыслу такого учебника, прежде, чем нацарапать «мама мыла раму», первоклашка обязан не только выучить все буквы, но и познать премудрости орфографии, синтаксиса, склонения, спряжения и так далее. Абсурд, не так ли? Ведь я отлично помню, что слово «мама» я вывел, постигнув лишь две буквы. Полагаю, что русский язык не проще языка программирования. И если для первого удалось создать азбуку — чудную вещь! — то нельзя ли чем-то подобным
16
Только для взрослых
снабдить начинающих программистов? Явилась мысль сделать обратную проекцию и создать «букварь» для программиста. На мой взгляд, такой «букварь» должен строиться на следующих принципах.
Постепенность. Излагать материал следует мелкими, легко постигаемыми порциями. Высота одолеваемых учеником ступенек не должна вызывать ощущения тупика, — маленький успех окрыляет, вселяя уверенность.
Практичность. Программирование — инженерная наука. Теория и практика здесь неразделимы, пропитывают друг друга, — ученик не должен ощущать границ между ними. Букварь программиста должен сочетать в себе учебник и хрестоматию. Примеры программ должны быть либо простыми, либо очень простыми (по крайней мере, на первых порах). Необходимо показать полные решения задач с разъяснениями, — «учились бы, на старших глядя».
Поправка на возраст. Сюжеты задач в «букваре» должны учитывать психологию подростка, а он склонен учиться играючи. Хорошо, если примеры похожи на настоящие «взрослые» проекты (разумеется, упрощенные). Непоседу не увлечешь задачей в роде «посчитать по формуле такой то» или «найти сумму элементов массива». А вот полицейская база данных или экзаменующая программа
— это серьезно! Разжечь аппетит юного инженера — едва ли не главная цель обучения.
Маловажное — за борт! От изложения некоторых второстепенных деталей языка лучше воздержаться. Например, можно «забыть» о записях с вариантами и не вспоминать о типизированных файлах. Не отвлекая внимания на эти детали, сосредоточиться на главном. Усвоив это главное, ученик доберёт остальное из «взрослых» учебников.
Вот, пожалуй, и всё. В идеале такой букварь будет и самоучителем для подростка, и конспектом для преподавателя компьютерного кружка.
Что я могу ещё сказать?
Итак, цель поставлена, но достигнута ли? — судить читателям. Вкратце содержание книги таково.
Вглавах с 1-й по 4-ю после краткой обзорной информации даны практические рекомендации для подготовки рабочего места. Далее все подносимые порции теории немедленно воплощаются на практике.
Вглавах с 5-й по 31-ю рассматриваются простые типы данных и базовые алгоритмические структуры. Здесь же рассказано о текстовых файлах и даны основные сведения об организации среды программирования.
Вглавах с 32 по 35 подводится теоретическая черта под пройденным материалом и закладывается фундамент для перехода к сложным типам данных.
17
Только для взрослых
Главы с 36 по 58 повествуют о сложных типах данных и связанных с ними алгоритмах. Здесь рассмотрены множества, массивы, записи и динамические структуры.
В главах 59 и 60 раскрыт секрет разработки многофайловых проектов, а глава 61 знакомит с принципами объектно-ориентированного программирования.
Последняя 62-я глава — это попытка заглянуть в будущее и указать читателю дальнейшие цели и пути их достижения.
Полагая, что книга будет, на какое-то время, единственной помощницей новичка, автор счел нелишним включить несколько справочных приложений.
Итак, отойдя от общепринятого порядка изложения теории, я стремился вовлечь читателя в активное осмысление конструкций языка, приглашая его к соавторству с Никлаусом Виртом. «Почему в языке сделано именно так, а не иначе?» — этот вопрос то и дело встает перед учащимся. Решая задачи, он видит, что элементы языка не с потолка свалились, а придуманы для решения типовых проблем. Отсюда следует порядок изложения: 1) проблема, 2) размышление, 3) решение. Сначала ставится задача. Затем обсуждается, как её решить уже известными средствами языка, или почему её нельзя решить этими средствами. После этого даётся надлежащая порция теории, и приводится решение либо с новым применением уже известных конструкций языка, либо с привлечением новой конструкции. Напоследок подводится теоретический итог очередной главы. Так теория с практикой следуют рука об руку.
Несладко быть в шкуре новичка: там и сям натыкаешься на проблемы! Автор снабдил почти все решения полными листингами работающих программ с подробными пояснениями. Кому то они покажутся избыточными, назойливыми. Но согласится ли с этим паренёк, корпящий над книгой где-нибудь в глухом поселке? Ведь для него, одинокого бойца, любая «непонятка» порой вырастает в неодолимую преграду!
Благодарности
Я признателен всем, кто высказался о «Песнях» на форумах и в личной переписке, — мы работали над книгой вместе! Особо благодарю форум freepascal.ru, а также Артёма Проскурнёва и Владислава Джавадова, подаривших мне массу полезных советов.
Пишите, мой адрес всё тот же: oleg.derevenets@gmail.com
Свежую редакцию книги и сопутствующие файлы можно скачать здесь:
http://oleg-derevenets.narod.ru
18