Как Петя Бейсиков Тоню Соображалкину программировать учил
- Автор: Бруно Мартузан
- Жанр: Околокомпьютерная литература / Детская образовательная литература / Basic, Visual Basic, VB Script, VBA и т.п.
- Дата выхода: 1987
Читать книгу "Как Петя Бейсиков Тоню Соображалкину программировать учил"
КАЛЕНДАРЬ В КОМПЬЮТЕРЕ
— А вот еще две функции, значения которых символьные переменные, а аргументов вообще нет. Первая функция СLK¤ выдает текущее время по часам, а вторая DАТ¤ — сегодняшнее число. Сначала о числе. Проще всего его узнать так:
PRINT DAT¤
12-FEB-87
Как видишь, это сегодняшнее число, но в строго определенной форме. Сперва день, потом тире, или минус, потом первые три буквы английского названия месяца, потом опять тире и, наконец, последние две цифры года.
— А мне лучше нравится, когда вместо названия месяца стоит его номер: 12-02-87.
— Госстандарт предусматривает вот такую форму записи числа: 87 02 1 2. А хочешь другую, составь программу, превращающую число с формы Бейсика в твою форму.
— А как это сделать?
— Во-первых, надо из DAT¤ выделить название месяца.
— Ага! Функцией… забыла название.
— Функцией SEG¤.
— Хорошо. Посмотри, что у меня получится.
— Чуть потерпи. Введем директиву NEW, чтобы очистилась память.
Теперь можешь вводить свою программу.
— Программы пока нет, есть только одна строчка.
10 A¤=SEG¤(DAT¤,4,6)
Будет правильно?
— Кажется, да. Сейчас надо по названию найти номер месяца в году. Для этого я предлагаю ввести такую переменную:
20 B¤="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
Эта переменная содержит первые три буквы всех названий месяцев. Догадываешься, что будет дальше?
— Нет! Я скорее поняла бы, если бы ты ввел массив с сокращением месяцев.
— Можно было бы и так. Сделать цикл сравнений всех элементов этого массива со значением А¤. Но с этой переменной будет короче. Мы должны, используя функцию POS, определить, где в значении В¤ начинается значение переменной А¤ — с первой, четвертой, седьмой или другой позиции.
— Ну… Я начинаю догадываться о твоей идее. Но только догадываться.
— Тогда давай запиши обращение к этой функции.
30 N=POS(B¤,A¤,1)
— Последний аргумент у меня 1, потому что проверку совпадения надо начинать с первого символа в значении В¤.
— Думаю, все в порядке. Но точно это узнаем, когда запустим программу. Сейчас напиши, как по числу N определить номер месяца.
— Ой, такие задачи для меня всегда были трудными. Здесь надо… Нет, не так. Выразим N через номер месяца I.
N=3(I-1)+1=3I—2
А сейчас, наоборот, выражаю I через N.
N=(l+2)/3
Проверим эту формулу: если N=1, то I = 1. Берем N=4, I = 2. Правильно! Можем вводить в память:
40 I=(N+2)/3
Теперь название месяца в значении А¤ надо заменить значением I.
— Ничего подобного. Значение I надо превратить в символьную строку, и только эту строку можно подставлять в значение А¤. При этом функция STR¤ здесь малопригодна, так как она из единицы делает символ «1», из двойки — «2», а из двенадцати, естественно, «12». А нам нужно так, чтобы получаемые символьные строки всегда состояли ровно из двух символов — не «1» или «2», а «01» или «02».
— Так, конечно, было бы красивее. А как туда этот нуль запихнуть?
— Подобное мы только что делали. Введем еще одну переменную.
60 J=2*I-1
7 °C1¤=SEG¤(C¤,J,J+1)
И теперь в этой символьной строке по числовому значению номера месяца найди его символьное обозначение.
— Получаем задачу, обратную задаче поиска номера месяца. Как-нибудь уж справлюсь.
5 °C¤="010203040506070809101111"
А сейчас бы сделать новую форму сегодняшнего числа.
80 D¤=SEG¤(DAT¤,1,3)+C1¤+SEG¤(DAT¤,7,9)
90 PRINT D¤
100 END
— Посмотрим, что получилось.
RUNNH
12-02-87
— Ур-р-р-ра! Работает как часы!