Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6817

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

301 

20FORi=1TO10 
30 PRINT #3, i:' либо эквивалентная команда WRITE #3, i 

40 NEXT i 

50 CLOSE #3 

Аналогичные команды используют при извлечении данных из существующего файла. При 

этом в команде OPEN указывают служебное слово INPUT, а считывание информации происходит 
по команде INPUT с указанием номера файла. 

' *(******** работа с файлами доя чтения ********** 
60 OPEN "aa3.dat" FOR INPUT AS #2 'для чтения 
70 FOR i = 1 TO 10 
80 INPUT #2, a(i) 
90 PRINT a(i) 

100 NEXTi 
110 CLOSE #2 

Добавить данные в существующий файл можно, используя служебное слово 

APPEND.

 

' работа с файлами для продолжения записи в существующий файл  
120 OPEN "aa3.dat" FOR APPEND AS #1  
130 WRITE #1, 13  
140 CLOSE #1 
Ниже приведен пример двух программ, осуществляющих передачу и прием зашифрованно-

го послания. Текст шифруется заменой символа его порядковым номером в русском алфавите со 
смещением на 10. Например, код буквы "а"равен 11, буквы "б" - 12 и т.д. Программы вполне ана-
логичны  программам  26  на  Паскале,  разобранным  в  параграфе  3,  хотя  для  разнообразия  способ 
шифровки принят несколько иным. 

Программа 75

 (см. программу 27 sekret) 

5 ' ******«-** шифровка текста **************  
10 INPUT "введи текст"; а$ 23 с5 = "абвгдежзийклмнопрстуфхцчшшъыэюя "  
30 х$ = " " 
40 FOR i = 1 ТО LEN(a$)  
50 FOR j = 1 TO LEN(c$) 
60 IF MID$(a$, i, 1) - MID$(c$, j, 1) THEN k = j: GOTO 90  
70 NEXT j 
80 PRINT "таких символов в таблице кодов нет": GOTO 160  
90 kk = k + 10  
100 x$ 

=

 x$ + STR$(kk)  

110 NEXT i 
120 OPEN "letter.txt" FOR OUTPUT AS #1  
130 PRINT #1, x$  
140 CLOSE »1 
150 PRINT "шифровка - "; x$  
160 END 

Результатом работы программы является зашифрованный текст, записанный в файл с име-

нем letter.txt. 

Следующая программа считывает информацию из этого файла и проводит его 

раскодирование, используя указанный выше ключ. 

Программа

 76 (см. программу 27 retsek) 

5 '*********•* расшифровка текста *******•***«*» 
10 OPEN "letter.txt" FOR INPUT AS #1 
20 INPUT tl, a$ 
30 CLS 
40 PRINT a$ 
50 c$ 

=

 "абвгдежзийклшюпрстуфхцчшщъыэюя " 

60 x$ 

=

 " " 

70 FOR i 

=

 1 TO LEM(a$) STEP 3 

SO k = VAL(MID$(a$, i, 2)) 
90 k 

=

 k - 10 

100 x$ 

=

 x$ + MID$(c$, k, 1) 

110 NEXT i 


background image

 

302 

120 CLOSE #1 

130 PRINT "шифровка - "; x$ 
140 END 
 

5.8. СРЕДСТВА И МЕТОДЫ ОРГАНИЗАЦИИ ДИАЛОГА 

 

В

  Бейсике

  сильно  развиты  команды  и  функции  ввода-вывода  данных,  позволяющие  осу-

ществлять диалог (интерактивный интерфейс) с пользователем. 

Для осуществления клавиатурного управления программой, помимо уже известных опера-

торов ввода  INPUT и вывода PRINT, используют функцию  INPUT$(n), возвращающею значение 
введенной  символьной  строки  из  п  символов  с  ожиданием,  функцию  INKEYS,  принимающею 
символьное значение нажатой клавиши без ожидания, функции STICK(n), STRIG(O), определяю-
щие коды стрелок или направления джойстика (внешнего управляющего устройства для компью-
терных игр и тренажеров). 

Часто  при  разработке  компьютерных  программ  необходимо  использовать  коды  клавиш  в 

ASCI-представлении.  Следующая  программа  печатает  код  нажатой  клавиши  и  может  оказаться 
полезной при отсутствии под рукой таблицы ASCI кодов. 

 
Программа 77 

5 ' ************ коды символов ************ 

10 

CLS

 

20 f$ 

=

 INPUT$(1) 

30 PRINT "символ="; f$; "код="; ASC(f$) 
40 PRINT 50 GOTO 20 

Полную таблицу кодов символов можно получить и другим способом, см. программу 78. 

Программа 78 

5 ************ до коду печать символа ************** 

 
10 FOR i = 1 ТО 256 
20 PRINT "код="; i, "символ="; CHR$(i) 
30 a$ = INPUT$(1)  
40 NEXT I 
 

Функцию INPUTS часто используют для приостановки выполнения программы до нажатия любой кла-

виши: 

п г$ = INPUTS(l): IF r$ = "" THEN n 
В отличие от оператора INPLT ф\ нкцпя не ставит знак "?"и не высвечивает вводимые сим-

волы.  Это  свойство  удобно  использовать  для  защиты  доступа  к  какой-либо  информации.  В  сле-
дующем примере демонстрируется фрагмент проверки «своего» клиента с помощью пароля. Если 
при  вводе  четырехсимвольного  пароля  ("")  трижды  допущена  ошибка,  программа  приостанавли-
вает работу. 

Программа 79 ; 

5 ********** пароль *********'** 
7 CLS 
8 PRINT "нажми любую клавишу" 
9 r$=INPUT$(l) : IF r$=""THEN 9 
10 code$ = "1996" : k = О 
20 INPUT "Имя"; а$ 
30 PRINT "Пароль" 
40 р$ = INPUT$(4) 
50 IF p$ = code$ THEN GOTO 80 
60 k 

=

 k + 1 70 IF k < 3 THEN GOTO 30 ELSE PRINT "До свидания" : END 

80 . PRINT 90 PRINT a$, "добро пожаловать" 
100 END 

С  помощью  строковой  переменной  INKEYS  аналогично  можно  осуществлять  временную 

задержку программы до нажатия любой клавиши: 

n sS=INKEYS: IF sS=""THEN n 

Ниже приведен пример назначения некоторых клавиш, управляющих процессом рисования 

точек (простейший графический редактор). Здесь код 27 (строка 20) означает клавишу Esc. 


background image

 

303 

 

Программа 80 

•^ i

 ********** простейший графический редактор ************ 5 SCREEN 2 

6 х 

=

 100: у = 100: h = 2 

7 PSET (х, у) 
10 g$ = INKEY$ 
20 IF g$ = CHR$(27) THEN 80 
30 IF g$ = "A" OR g$ = "a " THEN х = х - h 
40 IF g$ 

= "S"

 OR g$ = "s " THEN х = х + h 

50 IF g$ = "Z" OR g$ 

= "z"

 THEN у = у + h 

60 IF g$ = "W" OR g$ 

=

 "w" THEN у = у - h 

70 GOTO 7 
80 END 

При  разработке  компьютерных  программ  полезно  бывает  использовать  функциональные 

клавиши в качестве «горячих» (НОТ  KEY). Назначение команд функциональным клавишам осу-
ществляет оператор KEY. Его работу можно изучить по следующей демонстрационной програм-
ме. 

 
Программа 81 

5 ' ********** назначение функциональных клавиш ******** 
10 FOR i = 1 ТО 10 
20 KEY i, "+ STR$(i) 
30 NEXT i 
40 KEY 30, " 
50 KEY 31, "+ CHR$(13) 
60 KEY LIST 
70 KEY ON 
80 r$ = INPUT$(1): IF r$ = ""THEN 80 
 

Контрольные задания 

1. Составьте программу, подсчитывающую количество слогов в заданном слове. 
2. Разработайте собственный компьютерный вариант игры «Поле чудес». 
3. Придумайте новые варианты программ шифрования и дешифрования текста. 
4. Разработайте клавиатурный тренажер, используя игровые элементы. 
5. Разработайте игру «Крестики-нолики». 
6.

 

Разработайте компьютерный вариант карточной игры «21». 

 

5.9. ВЕРСИИ БЕЙСИКА 

 
Бейсик  характерен  необычайным  обилием  версий,  которые  иногда  настолько  отличаются 

друг от друга, что могли бы считаться разными языками. 

Хотя  первая  официальная  публикация  по  Бейсику  создавшей  его  группы  разработчиков 

Дартмутского колледжа (США) относится к 1967 г., к этому времени уже было создано три «Дар-
тмутских версии»; первая из них относится к 1964 г. После 1967 г. к разработке этого языка под-
ключились крупные фирмы, и были созданы версии для систем с разделением времени, для сете-
вых  информационных  систем,  для  мощных  ЭВМ  третьего  поколения  (включая  отечественную 
версию «Бейсик ЕС»), для малых ЭВМ. 

Большой толчок развитию Бейсика дало появление персональных компьютеров. На какое-

то время Бейсик с его естественной ориентацией на трансляторы интерпретирующего типа оказал-
ся  доминирующим  для  «персоналок»  языком  программирования.  Бейсик  оказался  пригоден  для 
первых  учебных  и  бытовых  ЭВМ  с  малым  объемом  оперативной  памяти  и  невысоким  уровнем 
системного  программного  обеспечения.  Зачастую  Бейсик-интерпретатор  выполнял  и  функции 
операционной системы (например, бывшая популярной в России в конце 80-х - начале 90-х годов 
версия MSX-Бейсик учебных компьютеров «Ямаха»). 

Бейсик начала 60-х годов был прост и примитивен. Он насчитывал всего порядка двух де-

сятков  команд.  Несмотря  на  простоту  работы  с  Бейсиком,  интерфейс  пользователя  оставлял  же-
лать  лучшего.  Вся  информация  (текст  программы,  «мусор»,  результаты  работы,  сообщения)  раз-


background image

 

304 

мещались  на  скроллирующем  экране.  В  силу  несложной  процедуры  разработки  транслятора-
интерпретатора  Бейсика  каждый  разработчик  персональных  компьютеров  встраивал  (обычно  в 
ПЗУ) свой вариант Бейсика. 

Бурное развитие микропроцессорной техники в 70-х, затем в 80-х годах и связанные с этим 

проблемы  совместимости  заставили  разработчиков  задуматься  о  стандарте  Бейсика  для  персо-
нальных  компьютеров.  Аппаратное  и  программное  развитие  позволило  существенно  расширить 
возможности языка. Бейсик стал системой программирования со всеми сервисными утилитами и 
инструментарием программиста. Наибольшей популярностью для школьного и педвузовского об-
разования  приобрел  Бейсик-MSX.  Для  большинства  учебных  компьютеров  (Ямаха,  Корвет, 
УКНЦ) были разработаны трансляторы версии Бейсик-MSX. Описание и практика работы с этим 
языком достаточно полно раскрыты в существующих популярных учебниках для вузов и школ. 

Бейсик последних версий, в основном, отличается интерфейсом. Например, основное меню 

Турбо-Бейсика расположено в верхней строке экрана и представляет систему ниспадающих под-
меню, команды которых позволяют выполнять все необходимые действия по составлению, отлад-
ке и выполнению программ. В Турбо-Бейсике существуют несколько экранных режимов. Основ-
ной исходный экран представляет поле редактирования текста программы. Встроенный текстовый 
редактор выполняет две функции - редактирования текста и синхронной интерпретации строки. В 
этой связи строки  нумеровать необязательно. Результаты работы программы, комментарии и со-
общения интерпретатора представляются в текстовом экране (по  умолчанию режим  SCREEN  0). 
При  работе  с  графикой  изображения  строятся  в  графическом  экране,  который  имеет  несколько 
режимов  (режимы  SCREEN  n,  п=2,3,...).  Аналогичные  возможности  предусмотрены  и  в  QBasic. 
Следует  отметить,  что  в  последних  версиях  Бейсика  предусмотрены  управляющие  структуры. 
Введены  операторы  выбора  SELECT  CASE,  циклические  конструкции  с  пост-  и  предусловием 
WHILE-WEND, DO-LOOP-WHILE, DO-WHILE-LOOP, развит аппарат подпрограмм (SUB-CALL). 

Особый  интерес  представляет  система  помощи  -  help  (подсказок),  имеющая  контекстную 

структуру  с  возможностью  копирования  примеров  из  текста  подсказок,  что  позволяет  осваивать 
работу с языком программирования практически самостоятельно. 

 

5.10. БЕЙСИК И ПАСКАЛЬ 

 
Сопоставим эти популярные языки - не в деталях, а в целом. В Бейсике отсутствуют: 
• ряд структур данных (множества, записи, перечисляемые и интервальные типы); 
• ссылочные типы и динамические переменные (хотя в старших версиях возможно динами-

ческое описание массивов); 

• в большинстве версий - процедуры и функции (их слабыми аналогами являются подпро-

граммы); 

• модули (и, следовательно, возможности организации больших внешних библиотек). 
По работе с графикой, возможностям обработки строк (текстов) Бейсик не уступает Паска-

лю, а по возможностям организации диалога, пожалуй, даже превосходит. 

Одна из неприятных особенностей Бейсика для тех, кто привык к структурной записи про-

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

Усложненные версии Бейсика, в которых фигурируют истинные процедуры и другие сред-

ства,  заимствованные  из  более  мощных  языков,  производят  неоднозначное  впечатление,  так  как 
теряется  одно  из  главных  достоинств  языка  -  простота  (лучше  уж  тогда  пользоваться  во  многих 
отношениях  превосходящим  Бейсик  языком  операционального  программирования  Фортран-77). 
При  написании  же  коротких  простых  программ  Бейсик  реально  не  уступает  Паскалю  (и  многие 
специалисты утверждают, что процедура программирования на Бейсике проще, хотя это спорно). 
Поскольку  современные  версии  Бейсик-систем  используют  не  интерпретаторы,  а  компиляторы, 
эффективность программ не ниже, чем аналогичных на Паскале. 

 

§ 6. ВВЕДЕНИЕ В ЯЗЫК ПРОГРАММИРОВАНИЯ СИ 

 6.1. ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКА И ПРИМЕР ПРОГРАММЫ НА СИ 


background image

 

305 

 

Язык  программирования  Си  -  это  универсальный  язык  с  богатым  набором  операторов  и 

компактным способом записи выражений. Благодаря гибкости, выразительности и  компактности 
своих  конструкций  Си  завоевал  наибольшую  популярность  в  среде  профессиональных  програм-
мистов и широко используется при разработке системных и прикладных программ. 

Язык Си представляет собой удачный компромисс между желанием располагать теми воз-

можностями, которые обычно предоставляют программисту столь понятные и удобные языки вы-
сокого уровня, и стремлением эффективно использовать особенности компьютера. Кроме набора 
средств, присущих современным языкам программирования высокого уровня (структурность, мо-
дульность, определяемые типы данных) в него включены средства для программирования «почти» 
на  уровне  ассемблера  (использование  указателей,  побитовые  операции,  операции  сдвига).  Боль-
шой  набор  операторов  позволяет  писать  компактные  и  эффективные  программы.  Однако,  такие 
мощные средства требуют от программиста осторожности, аккуратности и хорошего знания языка 
со всеми его преимуществами и недостатками. В отличие от языков программирования типа Пас-
каль, требующих жесткой дисциплины программирования, ограничивающих свободу программи-
ста, содействующих устранению многих ошибок в программах еще на стадии их трансляции, язык 
Си  предоставляет  программисту  наибольшую  свободу.  Однако,  ответственность  за  корректность 
программ при этом полностью ложится на программиста. 

Си  был  создан  Денисом  Ритчи  как  инструмент  для  разработки  операционной  системы 

UNIX и реализован в рамках этой операционной системы. Название языка имеет случайное проис-
хождение: «С» - третья буква английского алфавита. Это наименование говорит о чувстве юмора у 
создателей языка - его предшественником был язык В («В» - вторая буква английского алфавита). 

В настоящее время имеется большое количество систем программирования на Си для раз-

ных типов компьютеров. Разработано много библиотек модулей, инструментальных средств раз-
работки и отладки, облегчающих создание новых программ. Программы на Си обладают высокой 
мобильностью, без каких-либо изменений они переносятся, транслируются и выполняются на ма-
шинах различных типов. 

Язык  Си  -  компилирующего  типа.  Текст  программы  на  Си,  подготовленный  с  помощью 

текстового  редактора,  для  получения  объектного  модуля  обрабатывается  компилятором,  причем 
компиляция  выполняется  в  два  прохода.  При  первом  проходе  (претрансляцни)  обрабатываются 
строки-директивы, начинающиеся со знака #, при втором - транслируется текст программы и соз-
дается  объектный  (машинный)  код.  Для  получения  загрузочного  (исполняемого)  модуля  теперь 
необходимо отредактировать внешние связи объектного модуля - подсоединить к нему соответст-
вующие библиотечные модули. 

Рассмотрим простую программу на языке Си. Такой пример позволит нам выявить некото-

рые основные черты любой программы, написанной на языке Си. 

Программа 82 

#include<stdio.h> 
main() /* Простая программа */ < 

int num; 
num =1,' 

printf ("Это моя  1-я программа на языке Си.\n",num);) 

 
Результат выполнения программы: 
Это моя 1-я программа на языке Си. 
Поясним строки этой программы. 
#include<stdio.h> - подключение файла stdio.h, который является частью пакета, имеющего-

ся  в  любом  компиляторе  языка  Си  и  описывающего  функции  ввода-вывода  (например,  средства 
взаимодействия  программы  с  терминалом).  В  качестве  имени  файла  используется  аббревиатура 
английских  слов:  STandard  Input/Output  header  -  стандартный  заголовок  ввода-вывода.  Данная 
строка  не  является  оператором  языка  Си.  Символ  #  оказывает,  что  она  должна  быть  обработана 
«препроцессором»  компилятора.  Препроцессор  осуществляет  некоторую  предварительную  обра-
ботку текста программы перед началом компиляции.  

Main() - имя функции (в переводе с английского main - «главная»). Любая программа, напи-

санная на языке Си, состоит из одной или более «функций», являющихся модулями, из которых