Содержание
- 2. ЯЗЫКИ И МЕТОДЫ ПРОГРАММИРОВАНИЯ § 1. ИСТОРИЯ РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Одной из самых революционных идей, приведших
- 3. АДУ ЛАВЛЕЙС, одну из немногих современников Чарльза Бэббиджа, кто сумел по достоинству оценить аналитическую машину, называют
- 4. Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов,
- 5. При работе на компьютере «Марк-I» Г.Хоппер и ее группе пришлось столкнуться со многими проблемами и все,
- 6. На заре компьютерной эры машинный код был единственным средством общения человека с компьютером. Огромным достижением создателей
- 7. Уже в 1951 г. Хоппер создала первый в мире компилятор и ею же был введен сам
- 8. В 1954 г. группа под руководством Г. Хоппер разработала систему, включающую язык программирования и компилятор, которая
- 9. В 1958 г. появился компилятор FLOW-MATIC. В отличие от ФОРТРАНа - языка для научных приложений -
- 10. Середина 50-х годов характеризуется стремительным прогрессом в области программирования. Роль программирования в машинных командах стала уменьшаться.
- 11. В середине 60-х годов сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный
- 12. В начале 60-х годов все существующие языки программирования высокого уровня можно было пересчитать по пальцам, однако
- 13. Первым детищем этого направления стал PL/1 (Programm Language One), 1967 г. Затем на эту роль претендовал
- 14. Языки программирования служат разным целям и их выбор определяется удобностью пользователя, пригодностью для данного компьютера и
- 15. Например, Бейсик широко употребляется при написании простых программ; Фортран является классическим языком программирования при решении на
- 16. Обучаясь программированию на ЛОГО, дети задают простые команды, которые управляют игрушечной черепашкой, снабженной карандашиком. Отметим и
- 17. В конце 50-х годов плодом международного сотрудничества в области программирования явился Алгол (ALGOL, от ALGOrithmic Language
- 18. Развитие идеи Алгола о структуризации разработки алгоритмов нашло наивысшее отражение при создании в начале 70-х годов
- 19. Период с конца 60-х и до начала 80-х годов характеризуется бурным ростом числа различных языков программирования,
- 20. В мае 1979 г. был объявлен победитель - группа ученых во главе с Жаном Ихбиа. Победивший
- 21. Большой отпечаток на современное программирование наложил язык Си (первая версия - 1972 г.), являющийся очень популярным
- 22. В течение многих лет программное обеспечение строилось на основе операциональных и процедурных языков, таких как Фортран,
- 23. Классическое операциональное и/или процедурное программирование требует от программиста детального описания того, как решать задачу, т.е. формулировки
- 24. Принципиально иное направление в программировании связано с методологиями (иногда говорят «парадигмами») непроцедурного программирования. К ним можно
- 25. Классификация языков программирования
- 26. При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами
- 27. § 2. ЯЗЫКИ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ Языки программирования - это формальные языки специально созданные для общения
- 28. При описании языка и его применении используют понятия языка. Понятие подразумевает некоторую синтаксическую конструкцию и определяемые
- 29. Языки программирования, имитирующие естественные языки, обладающие укрупненными командами, ориентированными на решение прикладных содержательных задач, называют языками
- 30. Во-первых, машинная программа в конечном счете записывается с помощью лишь двух символов 0 и 1. Во-вторых,
- 31. Команда на машинном языке содержит очень ограниченный объем информации, поэтому она обычно определяет простейший обмен содержимого
- 32. Языки программирования высокого уровня имеют следующие достоинства: алфавит языка значительно шире машинного, что делает его гораздо
- 33. Таким образом, языки программирования высокого уровня являются машинно-независимыми и требуют использования соответствующих программ-переводчиков (трансляторов) для представления
- 34. МЕТАЯЗЫКИ ОПИСАНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Интерпретация конструкций языка программирования должна быть абсолютно однозначной, ибо фраза на языке
- 35. В этом отношении языки программирования значительно отличаются от естественных языков, допускающих неоднозначно интерпретируемые фразы, рассчитанные на
- 36. Для строгого и точного описания синтаксиса языка программирования, как правило, используют специальные метаязыки (языки для описания
- 37. Язык БНФ (называемый также языком нормальных форм) представляет компактную форму в виде некоторых формул, похожих на
- 38. Например, метаформулы ::=А|В ::= | + + | - означают, что в том (сугубо модельном) языке,
- 39. Правая часть метаформулы может содержать правило построения допустимых последовательностей. Допускаются рекурсивные определения терминов и понятий, т.е.
- 40. Рекурсия здесь не мешает конструктивному построению понятия , так как по принятым правилам при первом обращении
- 41. Для задания синтаксических конструкций произвольной длины часто используют фигурные скобки как метасимволы. Фигурные скобки означают, что
- 42. Синтаксическая диаграмма является графическим представлением значения метапеременной метаязыка. Диаграмма состоит из основных символов или понятий языка.
- 43. Еще примеры: Металингвистические формулы в некотором виде заложены в трансляторы; с их помощью ведется проверка конструкций,
- 44. ГРАММАТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Описанию грамматики языка предшествует описание его алфавита. Алфавит любого языка состоит из фиксированного
- 45. Алфавиты большинства языков программирования близки друг другу и основываются на буквах латинского алфавита, арабских цифрах и
- 46. : : = AaBbCcDdEeFf и т.д. :: = 0 1 2 3 4 5 6 7
- 47. Несмотря на значительные различия между языками программирования, ряд фундаментальных понятий в большинстве из них схожи. Приведем
- 48. В соответствии с теорией алгоритмов выделяют основные (базисные) операторы языка: присвоения, условный и безусловный переход, пустой
- 49. Все операторы языка в тексте программы отделяются друг от друга явными или неявными разделителями, например: S1;S2;...;Sn
- 50. Большая часть операторов ведет обработку величин. Величины могут быть постоянными и переменными. Значения постоянных величин не
- 51. Другая важная классификация величин - простые и структурированные. Простая величина в каждый момент может иметь не
- 52. Важнейшие характеристики структурированной величины таковы: упорядоченность (да или нет), однородность (да или нет), способ доступа к
- 53. Всем программным объектам в языках даются индивидуальные имена. Имя программного объекта называют идентификатором (от слова «идентифицировать»).
- 54. Как правило, в большинстве языков программирования в качестве идентификатора запрещается использовать служебные слова языка. Многим слово
- 55. Программисты выбирают имена по своему усмотрению. Принципы выбора и назначения имен программным объектам естественны. Следует избегать
- 56. Описания или объявления программных объектов связаны с правилами обработки данных. Данные бывают разные и необходимо для
- 57. В некоторых языках стандартные описания простых числовых и символьных данных опускают (описания по умолчанию), или в
- 58. Особый интерес представляют в языках программирования описания нестандартных структур данных, таких как запись, файл, объект, список,
- 59. Переменные играют важнейшую роль в системах программирования. Понятие «переменная» в языках программирования отличается от общепринятого в
- 60. Семантический смысл переменной заключается в хранении некоторого значения, соответствующего ее типу (например, переменная целого типа может
- 61. Функция - это программный объект, задающий вычислительную процедуру определения значения, зависимого от некоторых аргументов. Вводится в
- 62. Выражения строятся из величин - постоянных и переменных, функций, скобок, знаков операций и т.д. Выражение имеет
- 63. Процедура - это программный объект, представляющий некоторый самостоятельный этап обработки данных. По сути, процедуры явились преемниками
- 64. Модуль (Unit) - это специальная программная единица, предназначенная для создания библиотек и разделения больших программ на
- 65. § 3. ПАСКАЛЬ КАК ЯЗЫК СТРУКТУРНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ Язык Паскаль, начиная с момента своего создания Н.Виртом в
- 66. Существует много версий языка Паскаль. Различия между ними порой весьма велики. Так, базовая версия Вирта имеет
- 67. Любая Паскаль-программа является текстовым файлом с собственным именем и с расширением .pas. Рассмотрим в качестве примера
- 68. Программа 1 program KvadUravn; {заголовок программы} var {список переменных} a,b,c: real; {коэффициенты уравнения} d,x1,x2: real; {вспомогательные
- 69. Схематически программа представляется в виде последовательности восьми разделов: заголовок программы; описание внешних модулей, процедур и функций;
- 70. Каждый раздел начинается со служебного слова, назначение которого зафиксировано в Паскале так, что его нельзя употреблять
- 71. В этой программе можно выделить четыре раздела. Описание заголовка начинается со служебного слова program, описание констант
- 72. Постоянные величины описываются в разделе констант по схеме: const = В разделе констант может быть описано
- 73. Группа типов, значения каждого из которых можно перечислить в некотором списке - скалярные типы. Для них
- 74. Для логического типа выполняется неравенство: false Переменные описываются в разделе описания переменных по схеме: var :
- 75. Над целыми величинами (тип integer) определены арифметические операции : * (умножение), div (деление нацело), mod (вычисление
- 76. Над вещественными величинами определены операции: *, +, -, /, а также стандартные функции при вещественном или
- 77. Выражения - это конструкции, задающие правила вычисления значений переменных. В общем случае выражения строятся из переменных,
- 78. Примеры. l:=2*pi*r; p:=(a+b+c)/2; z:=sqrt(sqr(x)+sqr(y)) В Паскале можно вводить с клавиатуры числовые и символьные данные. Имеются две
- 79. Процедура readln отличается от read только тем, что при завершении ввода курсор перемещается в начало следующей
- 80. Процедура write(x1,x2,...,xN) печатает на экране значения выражений из списка x1, х2, ..., xN. Процедура writeln отличается
- 81. Для управления печатью используются форматы данных. Пусть х - переменная типа real. Если не использовать форматы,
- 82. Пусть, например, х = 387.26. Следующая таблица демонстрирует влияние форматов на вывод значения х: оператор строка
- 83. 3.2. ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА Паскаль - язык структурного программирования. Это означает, что программист должен выражать свои
- 84. Раздел операторов в программе всегда является составным оператором. Служебные слова begin и end часто называют операторными
- 85. Пример: составим программу, которая определяет длину общей части двух отрезков числовой оси, заданных координатами своих концов
- 86. Оператор варианта имеет следующую форму: case of : ; : ; …………………………………………………… : end. Выражение, стоящее
- 87. Оператор варианта вычисляет значение выражения, записанного после case. Если его значение совпадает с одной из констант
- 88. В качестве примера приведем программу, которая в зависимости от номера месяца выдает сообщение о времени года.
- 89. Для реализации циклов в Паскале имеются три оператора. Если число повторений известно заранее, то удобно воспользоваться
- 90. Цикл с предусловием является наиболее мощным в Паскале. Другие операторы цикла можно выразить через него. Его
- 91. На склад привозят однородный груз на машинах различной грузоподъемности. На компьютер, управляющий работой склада, поступает информация
- 92. Программа 5 program store; var sum,w:real; num:integer; begin num:=0;sum:=0; while sum begin writeln('введите вес груза машины');
- 93. Оператор цикла с постусловием имеет форму: repeat until Действие: выполняется последовательность операторов. Далее вычисляется значение логического
- 94. Программа 6 program store2; var sum,w:real; num:integer; begin num:=0; sum:=0; repeat writeln('введите вес груза машины'); readln(w);
- 95. Оператор цикла с параметром предусматривает повторное выполнение некоторого оператора с одновременным изменением по правилу арифметической прогрессии
- 96. Если в этом описании отношение = , а функцию succ на pred, то параметр в цикле
- 97. Программа 7 program mili; const a=1.603; b='км'; с='мили'; var k:integer; m:real; begin writeln(b:5,c:7); writeln; for k:=1
- 98. СТРУКТУРЫ ДАННЫХ Мы уже познакомились с простыми типами real, integer, boolean, byte, char. В Паскале программист
- 99. Поскольку перечисляемый тип относится к ординальным, то к его элементам можно применять функции ord(x), pred(x), succ(x)
- 100. Программа 8 program week; type days=(mon,tue,wed,thu,fri,sat,sun); var d:days; begin for d:=mon to sun do case d
- 101. Интервальный тип - это подмножество другого уже определенного ординального типа, называемого базовым. Интервал можно задать в
- 102. Операции и функции - те же, что и для базового типа. Использование интервальных типов в программе
- 103. СОСТАВНЫЕ СТРУКТУРЫ. Данные, с которыми имеет дело ЭВМ, являются абстракциями некоторых реальных или существующих в воображении
- 104. Значительные удобства представляются пользователю в Паскале при организации однотипных величин в виде множества с соответствующим набором
- 105. Часто используемый составной тип - массив. Массив - это последовательность, состоящая из фиксированного числа однотипных элементов.
- 106. Тип элементов - произвольный, он может быть составным. Число типов индексов называется размерностью массива. После описания
- 107. Обращение к элементу массива осуществляется с помощью задания имени переменной, за которым следует заключенный в квадратные
- 108. В Турбо-Паскале разрешена инициализация начальных значений составных перемененных с помощью, так называемых, типизированных констант. Типизированные константы
- 109. Пример: используя массив, составим программу, которая напечатает на экране 20 чисел Фибоначчи. Последовательность Фибоначчи определяется равенствами
- 110. Программа 9 program fibon; const n=20; var a:array[1..n] of integer; k:integer; begin a[1]:=1; a[2]:=1; for k:=3
- 111. Рассмотрим часто встречающуюся задачу упорядочения членов числовой последовательности по какому-либо признаку. Пример: упорядочить члены числовой последовательности
- 112. В начале просмотра присвоим некоторой логической переменной значение true: p:=true; если при просмотре пар была хотя
- 113. Программа 10 program bubble; uses crt; const a:array[1..10] of integer=(19, 8,17, 6,15, 4,13, 2,11, 0) ;
- 114. Обработка элементов двумерных массивов (матриц) обычно выполняется с помощью двойного цикла. Один цикл управляет номером строки,
- 115. 1. Строковый тип определяется в разделе описания типов, переменные этого типа - в разделе описания переменных:
- 116. Символы, составляющие строку, занумерованы слева направо; к ним можно обращаться с помощью индексов, как к элементам
- 117. Для строковых величин определены следующие четыре стандартные функции. 1. Функция соединения - concat(s1,s2,...,sk). Значение функции -
- 118. В Паскале определены также четыре стандартные процедуры для обработки строковых величин: 1. Процедура удаления delete(s,i,k). Из
- 119. Рассмотрим несколько программ, в которых используются строковые величины. 1. Составить программу, определяющую количество гласных в русском
- 120. Программа 11 program vowel; const с:string[18] = 'аеиоуыэюяАЕИОУЫЭЮЯ'; var a:string[100]; k,n:integer; begin writeln(‘введите текст’); readln(a); n:=0;
- 121. 2. Заменить в арифметическом выражении функцию sqr на ехр. Замена выражения sqr на ехр достигается последовательным
- 122. 3. Ввести и упорядочить по алфавиту 10 латинских слов. В программе определим массив из 10 элементов-строк
- 123. Множество в Паскале имеет такой же смысл, как и в алгебре - это неупорядоченная совокупность отличных
- 124. Задание конкретного множества определяется правилом (конструктором) - списком элементов или интервалов, заключенным в квадратные скобки. Пустое
- 125. Можно совместить описание множественного типа и соответствующих переменных: var code : set of 0..7; digits :
- 126. Для данных множественного типа определены операции объединения, пересечения и дополнения множеств, обозначаемые в Паскале соответственно знаками
- 127. Пусть alfa- множество всех букв латинского алфавита. Будем вводить заданный текст с клавиатуры символ за символом,
- 128. Программа 14 program search; const alfa:set of char=['a' . .'z']; var c:char; E,N:set of char; begin
- 129. Переменные множественного типа удобно применять в задачах, где порядок данных не имеет значения, например при моделировании
- 130. В программе используются обозначения: mn - множество натуральных чисел из интервала 1..36, а - множество чисел,
- 131. Программа 15 program lottery; type mn = set of 1 . . 36; var x,a, z:
- 132. Записи (комбинированный тип) - одна из наиболее гибких и удобных структур данных, применяющихся при описании сложных
- 133. Так же, как и массив, запись содержит ряд отдельных компонент, но компонентами записи могут быть данные
- 134. Как и при описании массивов, можно совместить описание типа записи и соответствующих переменных. Например, данные о
- 135. С компонентами записи можно обращаться как с переменными соответствующего типа. Обращение к компонентам записи осуществляется с
- 136. Программа 16 program compl; type compl = record re : real; im : real end; var
- 137. Громоздкость обозначений в программе компенсируется большей наглядностью алгоритма за счет структуризации данных. Во многих случаях, если
- 138. Например: man = record fio : record fam, im, otch : string[10]; end; data : record
- 139. В Паскале разрешается использовать тип «запись» при описании других составных типов данных, например, можно построить массив
- 140. Предположим, что вводится список группы с соответствующими оценками за экзамены. Графа «Балл» вычисляет суммарную оценку за
- 141. Программа 17 program spisok; type stud = record fio :string[20]; ex1, ex2, ехЗ :2 . .
- 142. for i:= 1 to n do with x[i] do begin bal:=ex1+ex2+ex3; if (ex1=2) or (ex2=2) or
- 143. 3.4. ПРОЦЕДУРЫ И ФУНКЦИИ Описание и вызов. В Паскале подпрограммы называются процедурами и функциями и описываются
- 144. Данные для обработки могут передаваться процедуре через глобальные имена или через аргументы процедуры. В процедуре каждый
- 145. Указанные выражения называют фактическими параметрами. Их список должен точно соответствовать списку описаний формальных параметров процедуры. Во
- 146. Программа 18 program section; var х:integer; procedure line(a:integer; c:char) ; var j:integer; begin for j:=1 to
- 147. Функция - это подпрограмма, определяющая единственное скалярное, вещественное или строковое значение. Отличия подпрограммы-функции от процедуры: заголовок
- 148. Пример: составим программу, которая для заданных четырех натуральных чисел а, b, с, d напечатает наибольшие общие
- 149. Программа 19 Program four; var a,b,c,d,m,n:integer; function nod(x,у:integer):integer; var h:integer; begin if y=0 then h:=x else
- 150. Внешние библиотеки. Как известно, подпрограммы (процедуры и функции) используются в программах с целью их структурирования, а
- 151. С одной из таких библиотек - встроенной библиотекой стандартных подпрограмм - пользователи имеют дело практически всегда.
- 152. Внешние подпрограммы создаются обычным образом в виде отдельного файла или файлов. Для подключения внешних подпрограмм в
- 153. Программа 20 procedure PRIVET; var a:char; begin clrscr; gotoxy(20,10); write('здравствуйте, желаю успехов!'); repeat {цикл позволяет} gotoxy(35,50);
- 154. Пусть представленные три подпрограммы записаны в файл с именем lab.pas. А теперь составим программу, использующую созданную
- 155. Модули используют в более поздних версиях Паскаля для создания библиотек и разделения больших программ на логически
- 156. Таким образом модуль - это набор констант, типов данных, переменных, процедур и функций. Каждый модуль компилируется
- 157. В Турбо-Паскале версии 5.0 и выше применяют стандартные модули CRT, GRAPH и др. В этих модулях
- 158. Пример. Создать модуль, дополняющий математические возможности Паскаля арифметическими действиями над комплексными числами. Будем представлять комплексные числа
- 159. Создаваемый модуль будет включать четыре процедуры: Sum - сумма, Raz -разность, Proiz - произведение, Chastn -
- 160. Программа 22 unit CompChisla; interface procedure Sum(a,b,c,d: real; var x,y: real); procedure Raz(a,b,c,d: real; var x,y:
- 161. 3.5. РАБОТА С ФАЙЛАМИ Файл (последовательность) - это одна из наиболее фундаментальных структур данных. Программная организация
- 162. В качестве типа компонентов файла разрешается использовать любой тип данных, кроме файлового. Например: type intfile =
- 163. Файловая переменная является буфером между Паскаль-программой и внешним устройством и должна быть логически с ним связана.
- 164. Если внешним устройством является принтер, то связь осуществляется оператром assign(f, ‘lst:'). Здесь lst - логическое имя
- 165. Закрытие файла осуществляется командой close(f). Условно файл можно представить в виде ленты, у которой есть начало,
- 166. Команда закрытия файла close(f) обязательна, поскольку эта команда формирует маркер конца файла, что в большинстве случаев
- 167. На практике широко используются текстовые файлы, которые состоят из литерных (логических) строк. Поэтому в языке Паскаль
- 168. Ниже приведены несколько примеров, иллюстрирующих работу с файлами. Пример 1. Вывод данных на печатающее устройство -
- 169. Пример 2. Создание и сохранение в файле «xxx.dat» последовательности целых чисел от 10 до 20. Программа
- 170. Пример 4. В текстовом файле (text) «slov.txt» содержится русский текст. Определить сколько гласных букв в тексте.
- 171. Поскольку длина текста (файла) неизвестна, то в цикле «пока» используется логическая функция eof(f), которая возвращает значение
- 172. Программа 27 (а) program key; var n: integer; f: file of integer; begin assign (f,'n.key’); rewrite(f);
- 173. Программа 27 (б) program sekret; var slovo,anslovo: string[100]; alfavit : string[33]; n, i, k, p :
- 174. Программа 27 (в) program retsek; var slovo, anslovo : string[100]; alfavit : string[33]; n,i,k,p : integer;
- 175. 3.7. РАБОТА С ГРАФИКОЙ Машинная (компьютерная) графика - одно из важных направлений в современной прикладной информатике.
- 176. Подключение модуля Graph.tpu к программе выполняется директивой uses graph; Инициализация графического экрана осуществляется с помощью процедуры
- 177. Таблица 3.1 Некоторые сведения о драйверах и определяемых ими режимах
- 178. Процедура инициализации в Турбо-Паскале имеет три аргумента: Initgraph( , ,' ') Она может быть выполнена так:
- 179. Целая константа detect=0 в модуле Graph автоматически распознает драйвер и устанавливает режим максимального разрешения для данной
- 180. uses graph; var gd, gm, errorcod: integer; begin gd:=detect; initgraph(gd,gm,' ') ; errorcod:=graphresult; if errorcod ogrok
- 181. Процедура Halt останавливает выполнение программы и возвращает управление операционной системе. Для формирования палитры используется система смешения
- 182. Координаты точек воспринимаются в «экранной» системе координат, в которой начало - верхний левый угол экрана, ось
- 183. Таблица 3.2 Основные процедуры модуля Graph
- 184. Первый аргумент процедуры setfillstyle(t,c) - тип закраски t - принимает значения из интервала 0..12. Наиболее употребителен
- 185. Размер букв определяется параметром d, принимающим значения из интервала 1.. 10. Если d = 1 и
- 187. Скачать презентацию