Как Петя Бейсиков Тоню Соображалкину программировать учил
- Автор: Бруно Мартузан
- Жанр: Околокомпьютерная литература / Детская образовательная литература / Basic, Visual Basic, VB Script, VBA и т.п.
- Дата выхода: 1987
Читать книгу "Как Петя Бейсиков Тоню Соображалкину программировать учил"
СОСТАВИТЬ ПОЗДРАВЛЕНИЕ НЕЛЕГКО
— Ладно. Далее следуют операторы DATA, в которых, судя по всему, ты хранишь текст поздравления.
— Я бы сказал, заготовку текста. Потом, когда все символьные строки из операторов DATA перекочуют в значения переменных, я их дополню и получу окончательный текст.
— Интересно, почему в строке 150 упоминается вывод на экран, если ты собираешься печатать.
— Это нужно для проверки. Не думай, что такую программу я могу сделать в один присест, не допустив ни одной ошибки. Программу надо было отлаживать, и во время отладки все лучше выводить на экран, чтобы зря не тратить бумагу. Но вернемся к программе. Ты ввела свое пожелание, куда выводить поздравление: оно содержится в значении переменной F¤.
— А почему для хранения чисел 1 или 2 ты выбираешь символьную переменную? С числовой переменной было бы проще.
— Ничего не проще. Это для тебя привычнее числа, чем символы, а машине, что числа, что строки символов, все одно. А вношу я ответ пользователя в значение символьной переменной для удобства проверки ввода. После ввода мне остается только проверить, входит ли введенный символ в строку символов S2¤, которую я загодя определил в строке 50. Этим я и занимаюсь в строке 165.
— А поскольку ты все равно потом хочешь иметь число, тебе приходится символ превращать в число при помощи функции VAL. Правильно ли я понимаю?
— Ты понимаешь правильно. Мы получаем число F и сразу вычитаем из него единицу. Зачем? Чтобы получить номер файла. Номер файла вывода на экран всегда должен быть нулем, а файлу печати можем присваивать такой номер, какой хотим. На сей раз лучше всего хотеть единицу.
— Лучше захоти объяснить, на что этот оператор ветвления здесь в строке 180!
— Здесь мы вычисленный номер файла сравниваем с нулем. Если он оказался нулем, это означает, что пользователь желает выводить на экран и мы спокойно уходим дальше на ввод данных. Если же номер файла не нуль, то надо в строке 190 открыть устройство печати — как файл с номером 1.
— Дальнейшее понятно. Пользователь вводит все, что от него требуется.
— Но правильность ввода все время проверяется.
— Это ты делаешь всегда одинаково, потому что и ввод у тебя практически всегда одинаков. Ищешь введенный символ в значении переменной S2¤, и все.
— Да, что-то поинтереснее начинается, когда введено имя поздравляемого и мы приступаем к его анализу. Сначала находим длину имени и его последнюю букву в строках 300 и 310. А потом выясняем, кого надо поздравлять — мужчину или женщину.
— Это же просто!
— Тебе просто. А для компьютера это неразрешимая задача, потому что нет алгоритма, как по имени определить, мужское это имя или женское.
— Ну, женские имена оканчиваются на «-а»…
— Оканчиваются-то оканчиваются, да не все. И не каждое имя, оканчивающееся на «-а», будет женским. Более того, существуют же одинаковые имена и для мужчин, и для женщин.
— Ну да!
— Например «Саша» может быть и юношей и девушкой.
— Так это же, ну… сокращение.
— Не важно. Программа должна была бы работать для всех случаев. Но алгоритм, который я запрограммировал, сможет уверенно отличить мужчину и женщину только при обращении по имени и отчеству. Конечно, по окончанию — оно «-а» или нет. Если оканчивается на «а», а не на «ша», то программа сама пытается выяснить, не мужчина ли это, сравнивая введенное имя с мужскими именами на «-а» — Слава, Савва, Сережа и другими. А в случаях, когда обращение оканчивается на «я» или «ша», программа сдается и просит пользователя самого ввести, кого он поздравляет. Вот такой алгоритм.
— И запрограммирован он в строках 330–400…
— Да. И в результате работы этих строк переменная D получает значение 1, если поздравляем мужчину, и 2, если женщину.
— Об этом хватит. Перейдем к подготовке текста поздравления, которая начинается в строке 470. И сразу вся заготовка текста считается в массив Т¤. А в следующей строке…
— В следующей строке выясняется, почему всюду вводили либо 1, либо 2.
— Смотрим. Переменная С¤! Ее значение… «1», если надо обращаться «дорогой», и «2», если — «уважаемый». Переменная D указывает пол поздравляемого.
— Важно то, что значения этих переменных…
— … используются для получения нужного элемента массива L1¤: «дорогого» или «уважаемого»— в мужском или женском роде.
— Ты мне не даешь похвастаться хорошо сделанным куском. Тебе надо было спокойно все прослушать и в конце воскликнуть: «Ой, Петя, как ты хорошо придумал с этими переменными С¤ и D!»
— Ой, Петя, как ты хорошо придумал, что к найденному значению массива L1¤ можно прицепить пробел и имя поздравляемого. И еще восклицательный знак!
— Пробел можно было бы и не ставить, но тогда в массив L1¤ нужно было бы заносить не просто «УВАЖАЕМЫЙ», а «УВАЖАЕМЫЙ» с пробелом в конце.
— Я же говорю, что это сногсшибательно!
— Можешь смеяться, но я тебе скажу, что программировать интересно хотя бы потому, что пусть и мелочь, но можно хорошо придумать.
— И это дает «творческое удовлетворение».
— Одному дает творческое удовлетворение работать, другому — издеваться.
— Ну не надо обижаться! Я же просто пошутила.
— Лучше посмотри, как образуются третий и четвертый элементы массива T¤. Здесь я сцепляю две символьных строки, а пробел между ними не ставлю, потому что в операторах DATA уже хранятся слова «поздравляю» и «желаю» с пробелом в конце.
— А что ты вытворяешь в строках 520 и дальше! Опять пренебрежительное отношение к ученикам! Взрослым ты желаешь доброго здоровья, а ученикам — «успехов в учебе». Успехов в учебе, детка! Зачем тебе доброе здоровье, лишь бы были успехи в учебе.
— Не верю, чтобы кто-то потерял здоровье из-за успехов в учебе.
— Бедный Петя! Если бы ты не был так смешон, то от твоего серьезного вида мухи бы дохли!
— Не понимаю, будем продолжать или отложим?