Как Петя Бейсиков Тоню Соображалкину программировать учил
- Автор: Бруно Мартузан
- Жанр: Околокомпьютерная литература / Детская образовательная литература / Basic, Visual Basic, VB Script, VBA и т.п.
- Дата выхода: 1987
Читать книгу "Как Петя Бейсиков Тоню Соображалкину программировать учил"
ДЕНЬ РОЖДЕНИЯ ДРУГА ЗАБЫТЬ НЕЛЬЗЯ!
Еще мне хочется показать программу, которая проверяет, сколько дней осталось до дня рождения кого-нибудь из одноклассников. Конечно, она использует файл с данными.
10 REM ПРОГРАММА ОПРЕДЕЛЯЕТ БЛИЖАЙШИЙ ДЕНЬ РОЖДЕНИЯ
20 PRINT "СЕГОДНЯШНЕЕ ЧИСЛО ДД-ММ-ГГ" INPUT D1¤
30 N=5 REM СКОЛЬКО ДНЕЙ ДО ДНЯ РОЖДЕНИЯ
40 PRINT "НОМЕР ДИСКА С ФАЙЛОМ СПИСКА"
50 INPUT D¤
60 PRINT "ВВЕДИТЕ КЛАСС, НАПРИМЕР: 6А"
65 PRINT "БУКВА LATINSKAJA!!!" INPUT К¤
70 OPEN "DK"+D¤+":"+"FUCH"+K¤ FOR INPUT AS FILE 1
80 S¤=D¤ GOSUB 2000 REM ОПРЕДЕЛЯЕТ КОЛ. ДНЕЙ
90 D1=D REM И СОХРАНЯЕТ
100 Z=0 REM ПОКАЗАТЕЛЬ, НАЙДЕН ЛИ ДЕНЬ РОЖДЕНИЯ
110 G0SUB 1000 REM СЧИТЫВАЕТ ЕДИНИЦУ ЗАПИСИ
120 IF U¤<>"#" THEN 160
130 IF Z<>0 THEN 150
140 PRINT " В БЛИЖАЙШЕЕ ВРЕМЯ ДНЕЙ РОЖДЕНИЯ НЕТ"
15 °CLOSE STOP
160 S¤=SEG¤(D¤, 1,5)+SEG¤(D1¤x, 6, 8)
170 GOSUB 2000
175 IF D-D1<0 THEN 110
180 IF D-D1>=N THEN 110
190 Z=1 REM СИГНАЛ, ЧТО ДЕНЬ РОЖДЕНИЯ НАЙДЕН
200 PRINT l¤;" РОДИЛСЯ";SEG¤(D¤,1,5)
210 GO ТО 110
220 STOP
1000 REM СЧИТЫВАЕТ СВЕДЕНИЯ О ШКОЛЬНИКЕ
1010 INPUT #1,U¤
1020 IF U¤<>“#“ THEN 1040
1030 RETURN
1040 INPUT #1,I¤,O¤,D¤
1050 RETURN
2000 REM ОПРЕДЕЛЯЕТ КОЛИЧЕСТВО ДНЕЙ С НАЧАЛА ВЕКА
2010 DATA 0,31,59,90,120,151,181,212,243,273,304,334
2020 DIM А(12)
2030 RESTORE
2040 FOR I=1 ТО 12 READ A(I) NEXT I
2050 DEF FND(I)=VAL(SEG¤(S¤,3*I-2,3*I-1))
2060 G=FND(3)
2070 D=G*365+INT(G/4)+A(FND(2))+FND(1)
2080 IF INT(G/4)<>G/4 THEN 2110
2090 IF FND(2)>2 THEN 2110
2100 D=D-1
2110 RETURN
Все операторы этой программы тебе хорошо известны, и ты можешь ее самостоятельно изучить. Единственно, может быть, не поймешь подпрограмму в строках 2000–2110, где рассчитывается, сколько дней прошло с 1 января 1900 года.
— С 1 января 1900 года! Кому нужна такая старина?
— Наш теперешний календарь довольно путаный. Месяцы длиной то 30, то 31 день, плюс еще этот февраль и високосные годы.
— Но тут же ничего нельзя сделать — сам когда-то так выразился.
— Что-нибудь уж можно было бы, но ведь не сделают. Поэтому я должен иметь подпрограмму, рассчитывающую, сколько дней прошло с 1 января 1900 года до сегодняшнего дня и сколько до дня рождения одноклассника, и нахожу разность. Получится, сколько дней осталось. Почему именно с 1 января 1900 года? Думаю, что эта дата совсем не обязательна, но так уж было в той программе, которую мне дали для образца. Понять, как же именно рассчитывается количество прошедших дней, можно, если знать, что каждый четвертый год високосный и числа, которые считываются оператором READ в массив А, выражают количество дней, прошедших с начала года до первого числа соответствующего месяца. Вот и все об этой подпрограмме. А вообще говоря, мы можем эту программу, которая считывает сведения с файла, объединить с той, которая печатает поздравление, и автоматически его напечатать, если день рождения уже близок. Правда, в этом случае единица записи файла должна быть другой и содержать сведения о поздравляемом, нужные для печати — «взрослый» или «ученик», «уважаемый» или «дорогой» и т. д.
— Давай пофантазируем, что машина выпечатывает поздравления не здесь, в машинном зале, а подключается к персональному компьютеру в квартире поздравляемого и печатает там. И даже не печатает, а записывает на диск, что Петя Бейсиков или кто-то другой поздравил. А у того счастливчика имеется программа, которая проверяет, кто поздравил, и посылает ответные поздравления компьютеру, скажем, Пети Бейсикова. Это будет прекрасная жизнь! Никого не надо будет самому поздравлять. Всю дружбу возьмут на себя компьютеры.
— Не хочешь, не делай такие программы поздравлений. Кто тебя заставляет? А представь себе, что на диске хранятся не фамилии, а список работ, которые нужно сделать. И сроки выполнения тоже хранятся там. Тогда машина может печатать не поздравление, а напоминание, что должно быть сделано через столько-то дней. И получится программа контроля выполнения работ. Таких программ уже очень много. Например, я в газете читал о такой программе как о чуде современной техники, и притом чрезвычайно полезном чуде.
— Если говорить о работах на заводах или где-нибудь еще, то количество оставшихся до завершения работы дней мало что говорит. Важно, сколько из них рабочих и сколько выходных. А об этом в твоей программе ни гу-гу.
— Рассчитать количество рабочих дней будет потруднее, но ничего невыполнимого нет. То же самое количество дней, прошедших с начала века, позволяет определить день недели.
— Неужели?!
— Конечно. Надо только знать, что первый день века был понедельником. Итак, если остаток от деления количества прошедших дней века на семь будет единицей, то сегодня понедельник, если двойкой, то вторник…
— Великолепно! А государственные праздники?
— Их придется разместить в список. Ну, в массив занесешь количество дней с начала года до праздника. Конечно, придется подумать.
— Все это интересно. Но о работе с файлами хотелось бы услышать что-то поконкретнее. Из всего, о чем говорилось, нельзя сделать вывод, что эти файлы действительно важны для реальных задач.
— Неужели! После стольких разговоров?! Сделаем так. Я до следующего раза обдумаю, где еще нужны файлы, и подготовлю задачи по программированию, оставшиеся в наследство от Алгоритмыча.
— Задачи? Может не надо?
— Нет, надо. Надо хотя бы подумать о том, как их решить.