Лекция №1 Введение Эволюция языков программирования Программирование на языке высокого уровня
Введение <ul><li>Дисциплина: </li></ul><ul><li>Программирование на языке высокого уровня. Основы программирования </li></u...
Расписание занятий
Содержание дисциплины <ul><li>1-й семестр: </li></ul><ul><li>Основы алгоритмизации и программирования на языке  Pascal </l...
Литература <ul><li>Павловская Т.А.   Паскаль. Программирование на языке высокого уровня. Учебник для ВУЗов. СПб: «Питер», ...
Вычислительные машины и языки программирования <ul><li>История языков развития программирования тесным образом связана с и...
Первая программируемая вычислительная машина <ul><li>Все основные идеи, которые лежат в основе работы компьютеров, были из...
Первый язык программирования <ul><li>Первый язык программирования разработала Лавлейс Огаста Ада Кинг (1815 – 1852) для ма...
Создание компании  IBM <ul><li>В 1888 году американский инженер Герман Холлерит сконструировал первую электромеханическую ...
Первая электронная вычислительная машина <ul><li>В 1946 в США была создана первая электронная вычислительная машина (ЭВМ) ...
Первая советская ЭВМ <ul><li>В Советском Союзе первая электронная цифровая вычислительная машина была разработана в 1950 г...
Возникновение компьютерной науки ( Computer Science) <ul><li>Основоположниками компьютерной науки по праву считаются  Клод...
Первое поколение ЭВМ <ul><li>Развитие ЭВМ делится на несколько периодов. Поколения ЭВМ каждого периода отличаются друг от ...
Языки программирования Программисты под руководством Хоппер впервые во всем мире реализовали идею подпрограмм как многокра...
Языки программирования Хоппер создала первый ассемблер, который понимал мнемонические команды.  Юнивак Грейс  Хоппер B-0 5...
Второе поколение ЭВМ <ul><li>ЭВМ 2-го поколения были разработаны в 1950—60 гг. В качестве основного элемента были использо...
Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год В 59 году в США появилась первая компания, занимающая...
Языки программирования Язык для исследований в области искусственного интеллекта, предназначенный для работы со списками и...
Лекция №2 Эволюция языков программирования (продолжение) Программирование на языке высокого уровня
Третье поколение ЭВМ <ul><li>Разработка в 60-х годах  интегральных схем  - целых устройств и узлов из десятков и сотен тра...
Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год <ul><li>Был разработан в Дартмундском колледже как яз...
Языки программирования язык, который изначально разрабатывался учёными для обучения детей, чтобы изучать их психологию. Им...
Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Самый компактный язык программирования. Обладает высо...
Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Универсальный язык программирования, был разработан п...
Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Универсальный язык программирования, был разработан п...
Четвертое поколение ЭВМ <ul><li>Обычно считается, что период с 1975 г. принадлежит компьютерам четвертого поколения. Их эл...
Языки программирования Оберон отличается от Модулы-2 отсутствием многих необязательных конструкций; добавлены же в язык ср...
Языки программирования Интерпретируемый объектно-ориентированный язык программирования. По структуре и области применения ...
Языки программирования C# 99 Наследует синтаксис C и C++ и избавлен от некоторых неприятных черт последнего. Отличительной...
Пятое поколение ЭВМ <ul><li>ЭВМ пятого поколения — это ЭВМ будущего. Программа разработки, так называемого, пятого поколен...
Пятое поколение ЭВМ <ul><li>К сожалению, японский проект ЭВМ пятого поколения повторил трагическую судьбу ранних исследова...
Языки искусственного интеллекта <ul><li>В качестве основных языков программирования в этом, пока неосуществленном, проекте...
Лекция №3 Понятие алгоритма  Язык программирования  Turbo Pascal
Понятие алгоритма <ul><li>Слово «алгоритм» происходит от имени узбекского математика Хорезми (по арабски ал - Хорезми), ко...
Свойства алгоритма <ul><li>Алгоритм обладает следующими свойствами: </li></ul><ul><li>дискретностью - алгоритм состоит из ...
Пример <ul><li>Дано  X , Вычислить 3 x 2 +6 x +2. Допустимые операции - сложение и умножение 2-х чисел. Т.о. есть предпосы...
Алгоритм <ul><li>начало; </li></ul><ul><li>вычислить  X  X , результат обозначить через  Y ; </li></ul><ul><li>вычислить ...
Язык  Pascal <ul><li>Алгоритмический язык программирования высокого уровня </li></ul><ul><li>Разработан Никлаусом Виртом в...
Язык программирования <ul><li>Алфавит </li></ul><ul><li>Лексемы </li></ul><ul><ul><li>Идентификаторы </li></ul></ul><ul><u...
Алфавит <ul><li>Кодовая таблица  ASCII </li></ul><ul><li>1) латинские буквы и символ подчеркивания: ABC...Zabc...z_  2) ар...
Лексемы <ul><li>1) Служебные (зарезервированные) слова.  2) Имена. Они вводятся для обозначения в программе переменных, ко...
Идентификаторы <ul><li>Первый символ – латинская буква </li></ul><ul><li>Остальные – латинские буквы, цифры, символ подчер...
Правильные и неправильные идентификаторы <ul><li>3 Yfgh </li></ul><ul><li>V x </li></ul><ul><li>R_36% </li></ul><ul><li>Fg...
Выражения <ul><li>Выражения могут содержать, переменные, константы, вызовы функций, знаки операций, круглые скобки </li></...
Правильные и неправильные выражения <ul><li>A+B </li></ul><ul><li>Sin(x)*(2+y) </li></ul><ul><li>D(+2/)c </li></ul><ul><li...
Операторы <ul><li>оператор процедуры  - оператор присваивания  - условный оператор  - составной оператор  - оператор вариа...
Оператор присваивания <ul><li>Самым простым действием над переменной является занесение в нее величины соответствующего ти...
Структура программы <ul><li>[Program < Имя программы >;] </li></ul><ul><li>[Uses < Имена подключаемых модулей >;] </li></u...
Пример программы <ul><li>program Summa; </li></ul><ul><li>var </li></ul><ul><li>A,B,Sum : integer; </li></ul><ul><li>begin...
Лекция №4 Стандартные типы данных языка  Turbo Pascal
Тип данных <ul><li>Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множеств...
Операции и их приоритет
Объявление переменных <ul><li>var </li></ul><ul><li><имя переменной>:<имя типа1> ; </li></ul><ul><li>< имя1 >[,<имя2>,…]:<...
Стандартные типы данных
Порядковые типы данных
Порядковые типы <ul><li>отличаются тем, что каждый из них имеет конечное число возможных значений. Эти значения можно опре...
Функция  ORD ( X ) <ul><li>Для целых типов функция  ORD ( X ) возвращает само значение  Х , т.е.  ORD ( X )= X  для  Х,  п...
Функции  PRED(X)  и  SUCC(X) <ul><li>PRED  ( X )  – возвращает предыдущее значение порядкового типа (значение, которое соо...
Пример <ul><li>var  </li></ul><ul><li>c: char; </li></ul><ul><li>begin </li></ul><ul><li>с:='5'; </li></ul><ul><li>writeln...
Символьный тип <ul><li>Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое...
Служебные коды (0..31)
Операции и функции <ul><li>К типу  CHAR  применимы операции отношения, а также встроенные функции: </li></ul><ul><li>CHR  ...
Пример <ul><li>Var c1,c2:char; </li></ul><ul><li>Begin </li></ul><ul><li>c1:=upcase('s'); </li></ul><ul><li>c2:=upcase('ф'...
Целочисленные типы
Функции
Функции
Пример <ul><li>Var </li></ul><ul><ul><ul><li>a: integer; </li></ul></ul></ul><ul><ul><ul><li>x, y: real; </li></ul></ul></...
Целочисленное деление <ul><li>a = (a div b)*b+(a mod b) </li></ul>
Лекция №5 Стандартные типы данных языка  Turbo Pascal ( продолжение)
Логический тип <ul><li>Значениями логического типа может быть одна из предварительно объявленных констант  FALSE  (ложь) и...
Логические операции True False False True Not A A
Логические операции True True True False False True False True False False False False A and B B A
Логические операции True True True True False True True True False False False False A or B B A
Логические операции False True True True False True True True False False False False A xor B B A
Логические операции <ul><li>if I mod 7 = 0 then </li></ul><ul><li>if I mod 13 = 0 then </li></ul><ul><li>writeln(I); </li>...
Раздел описания типов <ul><li>Раздел описания типов начинается ключевым словом  Type  и содержит описания новых типов данн...
Перечисляемый тип <ul><li>Задается перечислением тех значений, которые он может получать. Каждое значение именуется некото...
Пример <ul><li>tуре </li></ul><ul><li>TypeMonth=(jan,feb,mar,apr,may, jun,jul,aug,sep,oct,nov,dec); </li></ul><ul><li>Var ...
Тип диапазон <ul><li>Тип диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядк...
Пример <ul><li>Type  </li></ul><ul><li>Digit = '0'..'9'; </li></ul><ul><li>Dig2 = 48..57; </li></ul><ul><li>Var </li></ul>...
Вещественные типы <ul><li>В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, сле...
Представление вещественных чисел <ul><li>1.234560E+003 </li></ul><ul><li>1234.56 </li></ul><ul><li>0.123456E+004 </li></ul...
Вещественные типы -2 63 +1...+2 63 -1 19...20 Comp 8 -4951...+4932 19...20 Extended 10 -324...+308 15...16 Double 8 -39......
Вещественные типы Как видно из таблицы вещественное число  в Паскале занимает от 4-х до 10 смежных байт и имеет следующую ...
Функции П  = 3.141592653... Real - Pi Логарифм натуральный “ “ Ln  ( x ) Целая часть числа “ “ Int  ( x ) Дробная часть чи...
Функции Корень квадратный Real real Sqrt (x) Квадрат аргумента Тип аргумента Real, integer Sqr(x) Синус (радианы) Real Rea...
Пример var x, y: real; begin write(‘ Введите значение  x: ‘); readln(x); y:=(1+sin(2*x))/cos(2*x); writeln(‘ Результат= ’,...
Лекция №5 Операторы языка  Turbo Pascal
Составной оператор <ul><li>Составной оператор – это последовательность произвольных операторов программы, заключенная в оп...
Составной оператор <ul><li>Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в состав...
Пустой оператор <ul><li>Фактически, весь раздел операторов, обрамленный словами  begin … end , представляет собой один сос...
Пустой оператор <ul><li>Если поставить точку с запятой перед  end , это будет означать, что между последним оператором и о...
<ul><li>Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или и...
Условный оператор if  <условие>  then   <оператор1>  [else   <оператор2> ] ; где  if ,  then ,  else  –  зарезервированные...
Алгоритм работы Условный оператор работает по следующему алгоритму. Сначала вычисляется условное выражение <условие>. Если...
Пример var  x, y, max : real; ....... if x>y then max:=x else max:=y; При выполнении этого фрагмента переменная  max  полу...
Пример Часть  else  <оператор2> условного оператора может быть опущена. Тогда при значении  true  условного выражения выпо...
Пример Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же в...
Пример var  a, b, c, d : integer; … a:=1; b:=2; c:=3; d:=4; if a>b then if c<d then if c<0 then c:=0 else a:=b;  {a=1} if ...
Использование составного оператора <ul><li>Обратите внимание на то, что перед  else  точка с запятой не ставится. Символ «...
<ul><li>if a>b then </li></ul><ul><li>begin  </li></ul><ul><li>if c<d then </li></ul><ul><li>if c<0 then  </li></ul><ul><l...
<ul><li>Program Hex;  </li></ul><ul><li>v ar  </li></ul><ul><li>  n : Integer; {Вводимое число}   </li></ul><ul><li>  ch :...
Оператор выбора  Case <ul><li>Если у вас не два возможных варианта выполнения программы, а больше, то может использоваться...
<ul><li>Здесь <ключ_выбора> - это выражение порядкового типа, в зависимости от значения которого принимается решение; C1,....
<ul><li>Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой. Если для нескольк...
<ul><li>Program calc; </li></ul><ul><li>Var a,b,rez:real; </li></ul><ul><li>oper:char; </li></ul><ul><li>Begin </li></ul><...
Лекция №6 Операторы повтора (циклы)
Циклы <ul><li>Циклом называется многократное повторение однотипных действий. Телом же цикла будем называть те самые действ...
Цикл  while ( «Пока») <ul><li>Первый вариант цикла называется циклом с предпроверкой условия или циклом &quot;Пока&quot;  ...
Алгоритм работы <ul><li>Выполнение цикла начинается с проверки <условия выполнения цикла>. Если оно истинно, то выполняетс...
Использование составного оператора <ul><li>Если в цикле необходимо выполнить несколько операторов, то необходимо воспользо...
Цикл  repeat ( «Повторить») <ul><li>Второй вариант цикла называется циклом с постпроверкой условия и записывается следующи...
Алгоритм работы <ul><li>Выполнение цикла начинается с выполнения <операторов> (тела цикла), потом проверяется <условие вых...
Использование составного оператора <ul><li>Тело цикла может содержать несколько операторов, причем нет необходимости испол...
Зацикливание <ul><li>Чтобы не произошло зацикливание программы, необходимо чтобы:  </li></ul><ul><li>на момент начала выпо...
Цикл  for  («С параметром») <ul><li>Следующий вариант оператора цикла включает в себя оба этих условия. и записывается сле...
Алгоритм работы <ul><li>Выполнение цикла начинается с присвоения <переменная цикла> <начального значения>. Далее, если зна...
Шаг -1 <ul><li>Есть еще один вариант цикла  for : </li></ul><ul><li>for  <переменная цикла>:=<начальное значение>  downto ...
Примеры <ul><li>Следующая маленькая программа выводит на экран кодовую таблицу:  </li></ul><ul><li>Program Str3; </li></ul...
Поиск совершенных чисел <ul><li>Совершенными называются числа, равные сумме всех своих делителей, включая 1. Например, 6 –...
Var I,sum,del1,n:word; Begin for i:=4 to 10000 do Begin sum:=1; n:= trunc(sqrt(i));   for del1:=2 to n do if I mod del1 =0...
Вычислить квадратный корень  <ul><li>Вычислить квадратный корень из произвольного вещественного числа, введенного с клавиа...
<ul><li>Var A,Y1,Y:real; </li></ul><ul><li>Begin </li></ul><ul><li>write(‘ Введите число: ’); </li></ul><ul><li>readln(A);...
Разбиение числа на цифры <ul><li>X mod 10 </li></ul><ul><li>X div 10000 </li></ul><ul><li>(x mod 10000) div 1000 </li></ul...
Вывод трехзначных чисел из неповторяющихся цифр <ul><li>For i:=0 to 9 do </li></ul><ul><li>for j:=0 to 9 do </li></ul><ul>...
Вывод чисел из нечетных цифр <ul><li>i:=1; </li></ul><ul><li>While i<=9 do </li></ul><ul><li>begin </li></ul><ul><li>J:=1;...
Лекция №7 Массивы
Структурированные типы данных <ul><li>Структурированные типы данных отличаются от обычных типов тем, что переменные таких ...
Объявление переменной-массива <ul><li>Массивы содержат фиксированное число элементов одного типа, так называемого типа эле...
<ul><li>Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого и поддиапазонов длинног...
Примеры объявлений <ul><li>Приведем пример переменной типа массив: </li></ul><ul><li>var </li></ul><ul><li>A: array[1..100...
Доступ к элементам массива <ul><li>Конкретный элемент массива обозначается с помощью ссылки на переменную массива, за кото...
Сумма элементов массива <ul><li>Const N=10; </li></ul><ul><li>Var a:array[1..N] of real; </li></ul><ul><li>i:word; </li></...
<ul><li>Const  </li></ul><ul><li>< имя конст. >=< значение >; </li></ul>
Произведение   элементов   массива  <ul><li>Const N=10; </li></ul><ul><li>Var a:array[1..N] of real; </li></ul><ul><li>i:w...
<ul><li>randomize; </li></ul><ul><li>for i:=1 to N do </li></ul><ul><li>a[i]:=x1+random*(x2-x1); </li></ul><ul><li>b[1]:=1...
<ul><li>for i:=1 to N do </li></ul><ul><li>if b[i] mod 2=0 then  </li></ul><ul><li>b[i]:=sqr(b[i]); </li></ul><ul><li>i:=2...
Лекция №8 Многомерные массивы
Двумерные массивы <ul><li>Если тип элемента в типе массив также является массивом, то результат можно рассматривать как ма...
<ul><li>В случае многомерного массива можно использовать несколько индексов или несколько выражений в индексе. Например: <...
<ul><li>For i:=1 to N do </li></ul><ul><li>for j:=1 to M do  </li></ul><ul><li>begin </li></ul><ul><li>writeln(‘ Введите э...
<ul><li>For i:=1 to N do </li></ul><ul><li>begin </li></ul><ul><li>for j:=1 to M do  </li></ul><ul><li>write(a2[I,j]:8); <...
 
<ul><li>For i:=1 to N-1 do </li></ul><ul><li>for j:=1 to N-i do </li></ul><ul><li>begin  </li></ul><ul><li>tmp:=c2[I,j]; <...
Лекция №9 Процедуры и функции
<ul><li>Заголовок процедуры имеет вид: </li></ul><ul><li>PROCEDURE  <имя> [(<сп.ф.п.>)]; </li></ul><ul><li>Заголовок функц...
<ul><li>Procedure SB (a: real; b: Integer ;  с: char); </li></ul><ul><li>Как видно из примера, параметры в списке отделяют...
<ul><li>Операторы тела подпрограммы рассматривают список формальных параметров как своеобразное расширение раздела описани...
<ul><li>Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной. В пр...
<ul><li>Определение формального параметра тем или иным способом существенно только для вызывающей программы: если формальн...
<ul><li>const </li></ul><ul><li>а : integer = 5; </li></ul><ul><li>b : integer = 7; </li></ul><ul><li>PROCEDURE lnc2 (var ...
<ul><li>В результате прогона программы будет выведено: </li></ul><ul><li>Исходные:  5  7 удвоенные  10  14 результат  10  ...
<ul><li>Формат описания процедуры: Procedure <Имя процедуры> (<Имя форм. параметра 1>:<Тип 1 >; < Имя форм. параметра 2>:<...
<ul><li>Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы (описание процедур и фун...
<ul><li>Формат описания функции: Function <Имя функции> (<Имя форм. параметра 1>:<Тип>; < Имя форм. параметра 2>:<Тип>?) :...
<ul><li>В теле функции обязательно должна быть хотя бы команда присвоения такого вида:  </li></ul><ul><li><Имя функции>:=<...
<ul><li>Вызов процедуры представляет в программе самостоятельную инструкцию: </li></ul><ul><li>< Имя процедуры>(<Фактическ...
<ul><li>Program Fn; Var A,B,C :Real; Function Max(A,B:Real):Real;  </li></ul><ul><li>{Описываем функцию Max с формальными}...
<ul><li>Program Pr; Var S1,S2,S3 :Integer; Procedure Swap(Var A,B: Integer);{Процедура Swap с параметрами-переменными} Var...
<ul><li>Рассмотрим следующий пример. В языке Турбо Паскаль нет операции возведения в степень, однако с помощью встроенных ...
<ul><li>var </li></ul><ul><li>х , у  : real; </li></ul><ul><li>FUNCTION Power(a,b : real) : real; </li></ul><ul><li>begin ...
<ul><li>Для вызова функции  POWER  мы просто указали ее в качестве параметра при обращении к встроенной процедуре  WRITELN...
Лекция №10 Строки
<ul><li>Тип  STRING  (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный ...
<ul><li>Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, к...
<ul><li>Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает ...
<ul><li>var </li></ul><ul><li>st : strlng[10]; </li></ul><ul><li>i  : word; </li></ul><ul><li>i := 10; </li></ul><ul><li>w...
<ul><li>while ( Iength(st)<>0) and (st[ length(st)]-' ') do </li></ul><ul><li>s[0] := chr(length(st)-1)  </li></ul><ul><li...
<ul><li>Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются. Следующая...
<ul><li>Все остальные действия над строками и символами реализуются с помощью встроенных процедур и функций. </li></ul><ul...
<ul><li>DELETE ( ST ,  INDEX ,  COUNT ) - процедура; удаляет  COUNT  сим­волов из строки ST, начиная с символа с номером  ...
<ul><li>POS ( SUBST ,  ST ) - функция типа  INTEGER :  отыскивает в строке ST первое вхождение подстроки  SUBST  и возвращ...
<ul><li>WIDTH  определяет общую ширину поля, выделенного под соответству...
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
лекции презентации
Upcoming SlideShare
Loading in …5
×

лекции презентации

3,156 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,156
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Он представлял собой дальнейшее развитие языка Би (B), который основывался на созданном в Кембриджском университете языке BCPL (от Basic Combined Programming Language- базовый комбинированный язык программирования), который в свою очередь был потомком Алгола-60.
  • Он представлял собой дальнейшее развитие языка Би (B), который основывался на созданном в Кембриджском университете языке BCPL (от Basic Combined Programming Language- базовый комбинированный язык программирования), который в свою очередь был потомком Алгола-60.
  • Вычислительный процесс здесь заключается в следующем: Вычисляется правая часть выражения, полученный результат присваивается переменной, стоящей в левой части. Дискретность, определить, результативность здесь очевидны. Массивность заключается в том, что значение выражения может быть найдено при любом X . При составлении алгоритма целесообразно стремиться к уменьшению числа шагов выполнения алгоритма. Если выражение
  • 1) Служебные (зарезервированные) слова. Их смысл зафиксирован в языке, и поэтому служебные слова нельзя использовать в качестве имен, вводимых программистом. Полный список служебных слов приведен в приложении 1. 2) Имена. Они вводятся для обозначения в программе переменных, констант, типов, проедур и функций. Имена формируются из букв и цифр. Первым символом имени должна быть буква. Длина имени не должна превышать 63 символа. Заглавные и строчные буквы в именах не различаются. 3) Числа и символьные строки. 4) Знаки операций и разделители. Они формируются из одного или нескольких специальных символов. 5) Комментарии. Они представляют собой произвольную последовательность символов (не обязательно из алфавита языка, то есть допускаются и русские буквы), заключенную в фигурные скобки { }. Комментарии не изменяют смысл программы, не влияют на ее выполнение и предназначены для пояснений. Для отделения лексем друг от друга используются символы пробелов или же лексемы должны быть размещены на различных строках программы.
  • 4110 лек 4
  • Кол лекция 4
  • Лек 5 ПЯВУ добавить таблицы лог операций, div, mod Кол лек 5
  • Л
  • 4112
  • 4112
  • Кит 18.11.09 ?\\, 4112 26.11.09
  • Кит
  • Кит
  • Лек 6 4110,11
  • Кит 25.11.09
  • Кит
  • 4110,11 26.11.09
  • Кит
  • Кит
  • Кит
  • Кит
  • Кит
  • Кит
  • Кит
  • Кит
  • лекции презентации

    1. 1. Лекция №1 Введение Эволюция языков программирования Программирование на языке высокого уровня
    2. 2. Введение <ul><li>Дисциплина: </li></ul><ul><li>Программирование на языке высокого уровня. Основы программирования </li></ul><ul><li>Лектор: </li></ul><ul><li>Шершуков Кирилл Вячеславович </li></ul>
    3. 3. Расписание занятий
    4. 4. Содержание дисциплины <ul><li>1-й семестр: </li></ul><ul><li>Основы алгоритмизации и программирования на языке Pascal </li></ul><ul><li>1 лекция в неделю, 8 лабораторных работ </li></ul><ul><li>3 аттестации – 2 текущие по 30 баллов (9, 17 неделя) и зачет 40 баллов </li></ul>
    5. 5. Литература <ul><li>Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник для ВУЗов. СПб: «Питер», 2007. – 393с. </li></ul><ul><li>Фаронов В.В. Turbo Pascal 7.0 Начальный курс. Учебное пособие. М.: «ОМД Групп», 2003.- 616с. </li></ul><ul><li>Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Практикум. СПб: «Питер», 2007. – 317с. </li></ul>
    6. 6. Вычислительные машины и языки программирования <ul><li>История языков развития программирования тесным образом связана с историей вычислительных машин. Даже простые арифметические операции с большими числами затруднительны для человеческого мозга. Поэтому уже в древности появилось простейшее счетное устройство - абак . В семнадцатом веке была изобретена логарифмическая линейка . В 1642 году Блез Паскаль сконструировал восьмиразрядный суммирующий механизм. В 1820 году француз Шарль де Кольмар создал арифмометр , способный производить умножение и деление. </li></ul>
    7. 7. Первая программируемая вычислительная машина <ul><li>Все основные идеи, которые лежат в основе работы компьютеров, были изложены еще в 1833 году английским математиком Чарльзом Бэббиджем (1791-1871). Он разработал проект машины для выполнения научных и технических расчетов, где предугадал основные устройства современного компьютера, а также его задачи. Управление такой машиной должно было осуществляться программным путем. Для ввода и вывода данных Бэббидж предлагал использовать перфокарты . В то время перфокарты уже использовались в текстильной промышленности. </li></ul>
    8. 8. Первый язык программирования <ul><li>Первый язык программирования разработала Лавлейс Огаста Ада Кинг (1815 – 1852) для машины Бэбиджа. </li></ul><ul><li>В комментариях к описанию машины, изданном в 1843 году, введены понятия «операция», «переменная», «условный переход», «цикл». Приведена программа для решения системы двух линейных уравнений с двумя неизвестными </li></ul>
    9. 9. Создание компании IBM <ul><li>В 1888 году американский инженер Герман Холлерит сконструировал первую электромеханическую счетную машину. Эта машина, названная табулятором , могла считывать и сортировать статистические записи, закодированные на перфокартах. В 1890 году изобретение Холлерита было впервые использовано в 11-й американской переписи населения. Работа, которую пятьсот сотрудников выполняли в течение семи лет, Холлерит сделал с 43 помощниками на 43 табуляторах за один месяц.     В 1896 году Герман Холлерит основал фирму Computing Tabulating Recording Company, которая стала основой для будущей International Business Machines Corporation (IBM). </li></ul>
    10. 10. Первая электронная вычислительная машина <ul><li>В 1946 в США была создана первая электронная вычислительная машина (ЭВМ) - ENIAC (Electronic Numerical integrator and Computer - Электронный числовой интегратор и компьютер). Разработчики: Джон Мочи (John Маuchу) и Дж. Преспер Эккерт (J. Prosper Eckert).     Он был произведен на свет в Школе электрической техники Moore (при университете в Пенсильвании).     Время сложения - 200 мкс, умножения - 2800 мкс и деления - 24000 мкс.     Компьютер содержал 17468 вакуумных ламп шестнадцати типов, 7200 кристаллических диодов и 4100 магнитных элементов.  Общая стоимость базовой машины - 750000 долларов. </li></ul>
    11. 11. Первая советская ЭВМ <ul><li>В Советском Союзе первая электронная цифровая вычислительная машина была разработана в 1950 году под руководством академика С. А. Лебедева в Академии наук Украинской ССР. Она называлась «МЭСМ» (малая электронная счётная машина). </li></ul>
    12. 12. Возникновение компьютерной науки ( Computer Science) <ul><li>Основоположниками компьютерной науки по праву считаются Клод Шеннон - создатель теории информации, Алан Тьюринг - математик, разработавший теорию программ и алгоритмов, и Джон фон Нейман - автор конструкции вычислительных устройств, которая до сих пор лежит в основе большинства компьютеров. В те же годы возникла еще одна новая наука, связанная с информатикой, - кибернетика, наука об управлении как одном из основных информационных процессов. Основателем кибернетики является американский математик Норберт Винер . </li></ul>
    13. 13. Первое поколение ЭВМ <ul><li>Развитие ЭВМ делится на несколько периодов. Поколения ЭВМ каждого периода отличаются друг от друга элементной базой и математическим обеспе­чением. Первое поколение (1945-1954) - ЭВМ на электронных лампах . Их быстродействие не превышало 2—3 тыс. операций в секунду, оперативная память не превышала 2 Кб. </li></ul><ul><li>Машинно-зависимые языки программирования низкого уровня – двоичные машинные коды, Автокод, языки Ассемблера. </li></ul>
    14. 14. Языки программирования Программисты под руководством Хоппер впервые во всем мире реализовали идею подпрограмм как многократно используемую последовательность команд. Тогда они просто переписывали куски машинного кода друг у друга из блокнотов. Марк-1 Грейс Хоппер Идея подпрограммы 49 По своей сути, это была система обозначений для быстрого ввода в ЭВМ алгебраических выражений. &quot;Краткий код&quot; работал как примитивный интерпретатор. Юнивак Мочли &quot;Краткий код&quot; 49 Немецкий инженер Цузе разработал этот язык для ЭВМ Z4, но ни компилятора, ни интерпретатора для него написано не было (поскольку и язык, и ЭВМ он разрабатывал в одиночку). Z4 Цузе Плюнкалкюль 46 Заметки о языке ЭВМ Создатель Язык (идея) Год
    15. 15. Языки программирования Хоппер создала первый ассемблер, который понимал мнемонические команды. Юнивак Грейс Хоппер B-0 56 А-0 был первым полноценным ассемблером, получившим широкую известность. Он предоставлял услуги как компилятора, так и компоновщика. По сути, А-0 представлял первое промышленное средство для создания других программ. Юнивак Грейс Хоппер А-0 52 Автокод был первым полноценным транслятором (компилятором), т.е. он транслировал мнемоническую схему в машинные коды. Марк-1 Гленн АВТОКОД 52 Первый ассемблер представлял из себя систему мнемонических обозначений, объединённую с библиотекой подпрограмм Эдсак Грейс Хоппер Ассемблер 50 Заметки о языке ЭВМ Создатель Язык (идея) Год
    16. 16. Второе поколение ЭВМ <ul><li>ЭВМ 2-го поколения были разработаны в 1950—60 гг. В качестве основного элемента были использованы уже не электронные лампы, а полупроводниковые диоды и транзисторы , а в качестве устройств памяти стали применяться магнитные сердечники и магнитные барабаны - далекие предки современных жестких дисков. Второе отличие этих машин — это то, что появилась возможность программирования на алгоритмических языках. Были разработаны первые языки высокого уровня - Фортран, Алгол, Кобол. </li></ul>
    17. 17. Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год В 59 году в США появилась первая компания, занимающаяся созданием промышленных программ.     “ CSC” – первая компания по разработке ПО 59 Первая спецификация Алгола была рождена европейским международным комитетом.     ALGOL – 58 58 Был первым языком программирования высокого уровня. Разрабатывался компанией IBM для её новой ЭВМ. Коллектив под руководством Бэкуса разработал не только спецификацию языка, но и создал компилятор для него. Это обеспечило достаточно быструю и широкую распространенность языка. Кроме того, Фортран был первым языком, для которого были разработаны компиляторы для разных ЭВМ (т.е. программа могла выполняться на различных ЭВМ). Лучше всего Фортран подходит для решения инженерных и расчетных задач. IBM-704 Бэкус FORTRAN 54
    18. 18. Языки программирования Язык для исследований в области искусственного интеллекта, предназначенный для работы со списками и лямбда – выражениями (был создан в МТИ). Маккарти Lisp 58 Заметки о языке ЭВМ Создатель Язык (идея) Год Стандарт языка, принятый для создания коммерческих приложений   CODASYL COBOL 59 <ul><li>Новая спецификация Алгола, которую отличали следующие идеи: </li></ul><ul><li>Блочная структура </li></ul><ul><li>Возможность рекурсии </li></ul><ul><li>Описание с использованием БНФ </li></ul>  Бэкус ALGOL – 60 60 Министерство обороны США создало организацию CODASYL, главным назначением которой было создание нового языка, ориентированного на бизнес – приложения.     CODASYL 59 Для описания спецификации Алгола Бэкус создал специальную систему – “нормальную форму”. Чуть позже эта система была уточнена Науром.   Бэкус, Наур БНФ 59
    19. 19. Лекция №2 Эволюция языков программирования (продолжение) Программирование на языке высокого уровня
    20. 20. Третье поколение ЭВМ <ul><li>Разработка в 60-х годах интегральных схем - целых устройств и узлов из десятков и сотен транзисторов, выполненных на одном кристалле полупроводника (то, что сейчас называют микросхемами) привело к созданию ЭВМ 3-го поколения. В это же время появляется полупроводниковая память, которая и по сей день используется в персональных компьютерах в качестве оперативной. </li></ul>
    21. 21. Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год <ul><li>Был разработан в Дартмундском колледже как язык для обучения работе с компьютером студентов всех специальностей (и технических, и гуманитарных). Начал разрабатываться в 59-60 х годах, когда существовал только Фортран. Отличия от Фортрана: </li></ul><ul><li>операторы ввода/вывода </li></ul><ul><li>единая система чисел (без различия на целые/вещественные) </li></ul><ul><li>Одновременно с разработкой языка велась разработка ЭВМ, которая работала бы не в пакетном режиме, а в режиме разделения времени (отсюда – необходимость операторов ввода. Позже появится и структурно-ориентированный стандарт TrueBASIC. </li></ul>  Кемени, Курц БЭЙСИК 64 Универсальный язык программирования, разрабатывавшийся для системы System/360. Учитывая количество средств, которые были вложены в разработку и пропаганду этого языка и конечный результат, можно сказать, что этот проект провалился. Язык имел плохой дизайн.   Рэдин (IBM) ПЛ/1 64
    22. 22. Языки программирования язык, который изначально разрабатывался учёными для обучения детей, чтобы изучать их психологию. Именно он служит первым претендентом на звание первого объектно-ориентированного (ОО) ЯП, так как вся последующая терминология ОО подхода пошла именно оттуда . Smalltalk 72 72 Этот вариант Алгола очень не понравился Вирту. Он как и PL/1 получился слишком большим. Кроме того имел очень сложное описание. Отсутствие реально работающих промышленных компиляторов для Алгола-68 только довершило ситуацию.     АЛГОЛ – 68 68 Заметки о языке ЭВМ Создатель Язык (идея) Год Новый стандарт языка, который был предложен Хоаром и Виртом как альтернатива существующей спецификации (буква W – от фамилии Вирт).   Хоар, Вирт АЛГОЛ – W 6 6 Создан на основе Алгола 60 для целей имитационного моделирования. В нём впервые появилось понятие «класса». Но этот язык был неэффективен. Симула 67 67
    23. 23. Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Самый компактный язык программирования. Обладает высокой степенью расширяемости. Первое промышленное применение – управление радиотелескопами.   Чарльз Мур ФОРТ 71 Был разработан Виртом как противопоставление Алголу-68. Язык с высокой структурированностью. До сих пор – лучший язык для обучения программированию.   Никлаус Вирт ПАСКАЛЬ 70 Очень компактный универсальный язык программирования. Именно для этого языка была организация ACM открыла первую SIG(Software Interest Group).   Кеннет Айверсон (IBM) AПЛ 69 <ul><li>В этой статье Дейкстра доказывал вредность оператора “GOTO” (т.к. он нарушает последовательность операторов) и показывал, что любая программа может быть написана с использованием 3-х структур: </li></ul><ul><li>Последовательность </li></ul><ul><li>Альтернатива </li></ul><ul><li>Повторение </li></ul>  Дейкстра Статья о структурном программировании 68
    24. 24. Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Универсальный язык программирования, был разработан по заказу МО США. После создания вышло требование переписать все существующие приложения на Аде.   Жан Ихбиа АДА 79 HOLWG – рабочая группа по управлением Уайтекера, была создана Пентагоном для получения языка, который мог бы использоваться на всех компьютерах министерства обороны США. Результатом в 79 году стал язык Ада.   Уайтекер HOLWG 75 Логический язык программирования, в котором описываются факты и отношения между ними.   Алан Колмери ПРОЛОГ 72 Язык был разработан для написания операционной системы UNIX. В рекламных целях UNIX в университетах распространялся почти бесплатно, вместе с UNIX’ом распространялся и С. До сих пор С – один из лучших языков для системного программирования.   Керниган, Ричи, Bell Lab. С 72
    25. 25. Языки программирования Заметки о языке ЭВМ Создатель Язык (идея) Год Универсальный язык программирования, был разработан по заказу МО США. После создания вышло требование переписать все существующие приложения на Аде.   Жан Ихбиа АДА 79 HOLWG – рабочая группа по управлением Уайтекера, была создана Пентагоном для получения языка, который мог бы использоваться на всех компьютерах министерства обороны США. Результатом в 79 году стал язык Ада.   Уайтекер HOLWG 75 Логический язык программирования, в котором описываются факты и отношения между ними.   Алан Колмери ПРОЛОГ 72 Язык был разработан для написания операционной системы UNIX. В рекламных целях UNIX в университетах распространялся почти бесплатно, вместе с UNIX’ом распространялся и С. До сих пор С – один из лучших языков для системного программирования.   Керниган, Ричи, Bell Lab. С 72
    26. 26. Четвертое поколение ЭВМ <ul><li>Обычно считается, что период с 1975 г. принадлежит компьютерам четвертого поколения. Их элементной базой стали большие интегральные схемы (БИС. В одном кристалле интегрировано до 100 тысяч элементов). Быстродействие этих машин составляло десятки млн. операций в секунду, а оперативная память достигла сотен Мб. Появились микропроцессоры (1971 г. фирма Intel), микро-ЭВМ и персональные ЭВМ. Стало возможным коммунальное использование мощности разных машин (соединение машин в единый вычислительный узел и работа с разделением времени). </li></ul>
    27. 27. Языки программирования Оберон отличается от Модулы-2 отсутствием многих необязательных конструкций; добавлены же в язык средства объектно-ориентированного программирования -- расширяемые записи. Оберон -- это самый простой универсальный язык. Никлаус Вирт Oberon 87 Язык создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-серверах. Ларри Уолл Perl 86 Объектно-ориентированное расширение языка С Бьярн Страуструп С++ 85 Заметки о языке ЭВМ Создатель Язык (идея) Год
    28. 28. Языки программирования Интерпретируемый объектно-ориентированный язык программирования. По структуре и области применения близок к Perl, однако менее распространен и более строг и логичен. Python 91 Расмус Лердорф PHP 95 Delphi 95 В 1992 году были приняты расширения языка Оберон, предложенные Ханспетером Мёссенбёком. Расширенный язык получил название Оберон-2. Основное нововведение -- связанные с типами процедуры. Сейчас Оберон-2 является фактическим стандартом языка Никлаус Вирт Oberon-2 92 Заметки о языке ЭВМ Создатель Язык (идея) Год
    29. 29. Языки программирования C# 99 Наследует синтаксис C и C++ и избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования. Кен Арнольд, Джеймс Гослинг Java 96 Заметки о языке ЭВМ Создатель Язык (идея) Год
    30. 30. Пятое поколение ЭВМ <ul><li>ЭВМ пятого поколения — это ЭВМ будущего. Программа разработки, так называемого, пятого поколения ЭВМ была принята в Японии в 1982 г. Предполагалось, что к 1991 г. будут созданы принципиально новые компьютеры, ориентированные на решение задач искусственного интеллекта. С помощью языка Пролог и новшеств в конструкции компьютеров планировалось вплотную подойти к решению одной из основных задач этой ветви компьютерной науки - задачи хранения и обработки знаний. Коротко говоря, для компьютеров пятого поколения не пришлось бы писать программ, а достаточно было бы объяснить на &quot;почти естественном&quot; языке, что от них требуется.     Предполагается, что их элементной базой будут служить не СБИС, а созданные на их базе устройства с элементами искусственного интеллекта. Для увеличения памяти и быстродействия будут использоваться достижения оптоэлектроники и биопроцессоры. </li></ul>
    31. 31. Пятое поколение ЭВМ <ul><li>К сожалению, японский проект ЭВМ пятого поколения повторил трагическую судьбу ранних исследований в области искусственного интеллекта. Более 50-ти миллиардов йен инвестиций были потрачены впустую, проект прекращен, а разработанные устройства по производительности оказались не выше массовых систем того времени. Однако, проведенные в ходе проекта исследования и накопленный опыт по методам представления знаний и параллельного логического вывода сильно помогли прогрессу в области систем искусственного интеллекта в целом. </li></ul>
    32. 32. Языки искусственного интеллекта <ul><li>В качестве основных языков программирования в этом, пока неосуществленном, проекте предполагались языки искусственного интеллекта LISP и PROLOG. </li></ul><ul><li>Создателем языка LISP (1956-1959 гг.) является Джон Маккарти, которого называют отцом искусственного интеллекта. Именно он первым ввел термин &quot;искусственный интеллект&quot;. Основным в языке LISP является понятие рекурсивно определенных функций. Доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций. Основные идеи этого языка были позже использованы в языке программирования для детей LOGO, разработанном в 70-е годы в Массачусетском технологическом институте под руководством Сэймура Пейперта. Подмножество языка LOGO, включающее команды для Черепашки, применяется при раннем обучении программированию. </li></ul><ul><li>Язык PROLOG разработан во Франции в 1972 году также для решения проблем искусственного интеллекта. PROLOG позволяет в формальном виде описывать различные утверждения, логику рассуждений, заставляет компьютер давать ответы на заданные вопросы. </li></ul>
    33. 33. Лекция №3 Понятие алгоритма Язык программирования Turbo Pascal
    34. 34. Понятие алгоритма <ul><li>Слово «алгоритм» происходит от имени узбекского математика Хорезми (по арабски ал - Хорезми), который в IX веке разработал правила 4-х арифметических действий над числами в десятичной системе счисления. </li></ul><ul><li>Алгоритм - точное предписание по выполнению ограниченного числа определенных действий, последовательно преобразующих исходные данные в конечный результат. </li></ul><ul><li>Совокупность действий по преобразованию исходных данных в конечный результат составляет процесс выполнения алгоритма, называемый вычислительным процессом или просто процессом. Тот кто выполняет алгоритм называется процессор (человек или часть ЭВМ). Алгоритм, предназначенный для выполнения ЭВМ называется программой. </li></ul>
    35. 35. Свойства алгоритма <ul><li>Алгоритм обладает следующими свойствами: </li></ul><ul><li>дискретностью - алгоритм состоит из конкретных действий; </li></ul><ul><li>определенностью - точностью, не оставляющей место для произвола, т.е. алгоритм понятен для возможных исполнителей благодаря этому свойству процесс выполнения алгоритма носит механический характер; </li></ul><ul><li>результативностью - свойством приводить к искомому результату за конечное число действий (шагов); </li></ul><ul><li>Массовостью - пригодностью для решения задач из некоторого класса. </li></ul>
    36. 36. Пример <ul><li>Дано X , Вычислить 3 x 2 +6 x +2. Допустимые операции - сложение и умножение 2-х чисел. Т.о. есть предпосылки для разработки алгоритма: </li></ul><ul><li>исходные данные - X ; </li></ul><ul><li>действия - сложение, умножение, которое применительно к выражению 3 x 2 +6 x +2 дадут искомый результат. </li></ul><ul><li>Т.к. среди действий нет возведения в степень выражение необходимо записать в виде 3 xx +6 x +2. </li></ul>
    37. 37. Алгоритм <ul><li>начало; </li></ul><ul><li>вычислить X  X , результат обозначить через Y ; </li></ul><ul><li>вычислить 3  4, результат обозначить через Z ; </li></ul><ul><li>вычислить 6  X , результат обозначить через W ; </li></ul><ul><li>вычислить Z + W , результат обозначить через U ; </li></ul><ul><li>вычислить U +2, результат обозначить через S ; </li></ul><ul><li>конец; </li></ul>
    38. 38. Язык Pascal <ul><li>Алгоритмический язык программирования высокого уровня </li></ul><ul><li>Разработан Никлаусом Виртом в 1970 году для обучения студентов программированию. </li></ul><ul><li>Хорошо структурированный язык с жестким контролем типов данных </li></ul>
    39. 39. Язык программирования <ul><li>Алфавит </li></ul><ul><li>Лексемы </li></ul><ul><ul><li>Идентификаторы </li></ul></ul><ul><ul><li>Константы </li></ul></ul><ul><ul><li>Знаки операций и разделители </li></ul></ul><ul><ul><li>Комментарии </li></ul></ul><ul><li>Выражения </li></ul><ul><li>Типы данных и операции </li></ul><ul><li>Операторы </li></ul><ul><li>Структура программы </li></ul>
    40. 40. Алфавит <ul><li>Кодовая таблица ASCII </li></ul><ul><li>1) латинские буквы и символ подчеркивания: ABC...Zabc...z_ 2) арабские цифры: 012...9 3) 22 специальных символа: +-*/=><.,:;@')(][}{#$^ </li></ul><ul><li>Символы алфавита используются для построения базовых элементов Pascal-программ - минимальных единиц языка, имеющих самостоятельный смысл. Базовые элементы также называют лексемами. </li></ul>
    41. 41. Лексемы <ul><li>1) Служебные (зарезервированные) слова. 2) Имена. Они вводятся для обозначения в программе переменных, констант, типов, процедур и функций. 3) Числа и символьные строки. 4) Знаки операций и разделители. Они формируются из одного или нескольких специальных символов. 5) Комментарии - произвольная последовательность символов (не обязательно из алфавита языка, то есть допускаются и русские буквы), заключенную в фигурные скобки { }. </li></ul>
    42. 42. Идентификаторы <ul><li>Первый символ – латинская буква </li></ul><ul><li>Остальные – латинские буквы, цифры, символ подчеркивания </li></ul><ul><li>Ограничение по длине </li></ul>
    43. 43. Правильные и неправильные идентификаторы <ul><li>3 Yfgh </li></ul><ul><li>V x </li></ul><ul><li>R_36% </li></ul><ul><li>Fgh23_ </li></ul><ul><li>&A </li></ul>
    44. 44. Выражения <ul><li>Выражения могут содержать, переменные, константы, вызовы функций, знаки операций, круглые скобки </li></ul><ul><li>Записываются в соответствии с правилами использования операций </li></ul>
    45. 45. Правильные и неправильные выражения <ul><li>A+B </li></ul><ul><li>Sin(x)*(2+y) </li></ul><ul><li>D(+2/)c </li></ul><ul><li>‘ A’*2 </li></ul>
    46. 46. Операторы <ul><li>оператор процедуры - оператор присваивания - условный оператор - составной оператор - оператор варианта - оператор цикла с предусловием - оператор цикла с постусловием - оператор цикла с параметром - присоединения - пустой оператор </li></ul>
    47. 47. Оператор присваивания <ul><li>Самым простым действием над переменной является занесение в нее величины соответствующего типа. Иногда говорят об этом, как о присвоении переменной конкретного значения. Такая команда (оператор) в общем виде выглядит на языке Паскаль следующим образом:       <Имя переменной>:=<Выражение>; </li></ul><ul><li>      Выражение, указанное справа от знака &quot;:=&quot;, должно приводить к значению того же типа, какого и сама переменная, или типа, совместимого с переменной относительно команды присваивания. Например, переменной типа Real можно присвоить значение типа Integer или Word (впрочем, наоборот делать нельзя). Выражение будет сначала вычислено, затем, его результат будет положен в ячейки памяти, отведенные для переменной. </li></ul>
    48. 48. Структура программы <ul><li>[Program < Имя программы >;] </li></ul><ul><li>[Uses < Имена подключаемых модулей >;] </li></ul><ul><li>[Label < Список меток >;] </li></ul><ul><li>[Const < Объявления констант >;] </li></ul><ul><li>[Type < Объявления типов >;] </li></ul><ul><li>[Var < Объявления переменных >;] </li></ul><ul><li>[< Раздел подпрограмм >] </li></ul><ul><li>Begin </li></ul><ul><li>[< Операторы >] </li></ul><ul><li>End. </li></ul>
    49. 49. Пример программы <ul><li>program Summa; </li></ul><ul><li>var </li></ul><ul><li>A,B,Sum : integer; </li></ul><ul><li>begin </li></ul><ul><li>Writ е(’Введите два числа: ’); </li></ul><ul><li>Readln(A,B); </li></ul><ul><li>Su m := А + В ; </li></ul><ul><li>Writ е ln (’ Сумма равна ’, Sum ); </li></ul><ul><li>Writ е (’ Нажмите Enter ’); </li></ul><ul><li>Readln ; </li></ul><ul><li>end . </li></ul>
    50. 50. Лекция №4 Стандартные типы данных языка Turbo Pascal
    51. 51. Тип данных <ul><li>Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет также и формат внутреннего представления данных в памяти ПК. </li></ul>
    52. 52. Операции и их приоритет
    53. 53. Объявление переменных <ul><li>var </li></ul><ul><li><имя переменной>:<имя типа1> ; </li></ul><ul><li>< имя1 >[,<имя2>,…]:<тип2>; </li></ul><ul><li>var </li></ul><ul><li>a,b:integer; </li></ul><ul><li>ch:char; </li></ul>
    54. 54. Стандартные типы данных
    55. 55. Порядковые типы данных
    56. 56. Порядковые типы <ul><li>отличаются тем, что каждый из них имеет конечное число возможных значений. Эти значения можно определенным способом упорядочить и, следовательно, с каждым из них можно сопоставить некоторое целое число – порядковый номер значения. </li></ul>
    57. 57. Функция ORD ( X ) <ul><li>Для целых типов функция ORD ( X ) возвращает само значение Х , т.е. ORD ( X )= X для Х, принадлежащего любому целому типу. Применение ORD ( X ) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1(логический тип), от 0 до 255(символьный), от 0 до 65535(перечисляемый). </li></ul>
    58. 58. Функции PRED(X) и SUCC(X) <ul><li>PRED ( X ) – возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ORD ( X )-1 ) то есть </li></ul><ul><li>ORD(PRED(X))=ORD(X)-1 </li></ul><ul><li>SUCC ( X ) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ORD ( X )+1 т.е. </li></ul><ul><li>ОRD(SUCC(X))=ORD(X)+1. </li></ul>
    59. 59. Пример <ul><li>var </li></ul><ul><li>c: char; </li></ul><ul><li>begin </li></ul><ul><li>с:='5'; </li></ul><ul><li>writeln(pred(c)); </li></ul><ul><li>writeln(succ(c)); </li></ul><ul><li>end. </li></ul>
    60. 60. Символьный тип <ul><li>Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0..255. Это число служит кодом внутреннего представления символа, его возвращает функция ORD . </li></ul>
    61. 61. Служебные коды (0..31)
    62. 62. Операции и функции <ul><li>К типу CHAR применимы операции отношения, а также встроенные функции: </li></ul><ul><li>CHR ( B ) – функция типа CHAR преобразует выражение В типа BYTE в символ и возвращает его своим значением; </li></ul><ul><li>UPCASE ( CH ) – функция типа CHAR ; возвращает символ в верхнем регистре, если он определен для аргумента CH типа CHAR , в противном случае возвращает сам символ Ch </li></ul>
    63. 63. Пример <ul><li>Var c1,c2:char; </li></ul><ul><li>Begin </li></ul><ul><li>c1:=upcase('s'); </li></ul><ul><li>c2:=upcase('ф'); </li></ul><ul><li>Writeln (c1,' ', c2); </li></ul><ul><li>End. </li></ul>
    64. 64. Целочисленные типы
    65. 65. Функции
    66. 66. Функции
    67. 67. Пример <ul><li>Var </li></ul><ul><ul><ul><li>a: integer; </li></ul></ul></ul><ul><ul><ul><li>x, y: real; </li></ul></ul></ul><ul><li>Begin </li></ul><ul><ul><ul><li>a:=32767; </li></ul></ul></ul><ul><ul><ul><li>x:= a+2; </li></ul></ul></ul><ul><ul><ul><li>y:=longint (a)+2; </li></ul></ul></ul><ul><ul><ul><li>Writeln (x:10:0,y:10:0); </li></ul></ul></ul><ul><li>End . </li></ul><ul><li>Результат : -32 7 67 32769 </li></ul>
    68. 68. Целочисленное деление <ul><li>a = (a div b)*b+(a mod b) </li></ul>
    69. 69. Лекция №5 Стандартные типы данных языка Turbo Pascal ( продолжение)
    70. 70. Логический тип <ul><li>Значениями логического типа может быть одна из предварительно объявленных констант FALSE (ложь) или TRUE (истина). Для них справедливы правила: </li></ul><ul><li>Ord (false) = 0; </li></ul><ul><li>Ord (true)=1; </li></ul><ul><li>False<True; </li></ul><ul><li>Succ (False)=True; </li></ul><ul><li>Pred (true)=False; </li></ul>
    71. 71. Логические операции True False False True Not A A
    72. 72. Логические операции True True True False False True False True False False False False A and B B A
    73. 73. Логические операции True True True True False True True True False False False False A or B B A
    74. 74. Логические операции False True True True False True True True False False False False A xor B B A
    75. 75. Логические операции <ul><li>if I mod 7 = 0 then </li></ul><ul><li>if I mod 13 = 0 then </li></ul><ul><li>writeln(I); </li></ul><ul><li>if (I mod 7 = 0) and (I mod 13 = 0) then </li></ul><ul><li>writeln(I); </li></ul>
    76. 76. Раздел описания типов <ul><li>Раздел описания типов начинается ключевым словом Type и содержит описания новых типов данных, созданных программистом: </li></ul><ul><li>Type </li></ul><ul><li>< Имя типа1 >=<Описание1>; </li></ul><ul><li>< Имя типа2 >=<Описание2>; </li></ul><ul><li>... </li></ul>
    77. 77. Перечисляемый тип <ul><li>Задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленным круглыми скобками. </li></ul>
    78. 78. Пример <ul><li>tуре </li></ul><ul><li>TypeMonth=(jan,feb,mar,apr,may, jun,jul,aug,sep,oct,nov,dec); </li></ul><ul><li>Var </li></ul><ul><li>Month:TypeMonth; </li></ul><ul><li>... </li></ul><ul><li>If Month = aug then </li></ul><ul><li>writeln(’Лето!'); </li></ul>
    79. 79. Тип диапазон <ul><li>Тип диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. </li></ul><ul><li>Тип-диапазон задается границами своих значений внутри базового типа: </li></ul><ul><li><мин. знач.>..<макс. знач.> </li></ul>
    80. 80. Пример <ul><li>Type </li></ul><ul><li>Digit = '0'..'9'; </li></ul><ul><li>Dig2 = 48..57; </li></ul><ul><li>Var </li></ul><ul><li>Date: 1..31; </li></ul><ul><li>Month: 1..12; </li></ul><ul><li>Lchr:'A'..'Z'; </li></ul><ul><li>D1:Digit; </li></ul>
    81. 81. Вещественные типы <ul><li>В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа. </li></ul>
    82. 82. Представление вещественных чисел <ul><li>1.234560E+003 </li></ul><ul><li>1234.56 </li></ul><ul><li>0.123456E+004 </li></ul><ul><li>0.123456*10 4 </li></ul><ul><li>123456 </li></ul><ul><li>0.123456*10 6 </li></ul>
    83. 83. Вещественные типы -2 63 +1...+2 63 -1 19...20 Comp 8 -4951...+4932 19...20 Extended 10 -324...+308 15...16 Double 8 -39...+38 11...12 Real 6 -45...+38 7...8 Single 4 Диапазон десятичного порядка Мантисса Название типа Длина, байты
    84. 84. Вещественные типы Как видно из таблицы вещественное число в Паскале занимает от 4-х до 10 смежных байт и имеет следующую структуру в памяти ПК. Здесь s -знаковый разряд числа; е – экспоненциальная часть, содержит двоичный порядок ; m - мантисса числа. M E S
    85. 85. Функции П = 3.141592653... Real - Pi Логарифм натуральный “ “ Ln ( x ) Целая часть числа “ “ Int ( x ) Дробная часть числа “ “ Frac ( x ) Экспонента “ “ Exp ( x ) Косинус (радианы) “ “ Cos ( x ) Арктангенс (радианы) Real Real ArcTan(x) Модуль аргумента Тип аргумента Real, integer Abs(x) Примечание Тип результата Тип параметра Обращение
    86. 86. Функции Корень квадратный Real real Sqrt (x) Квадрат аргумента Тип аргумента Real, integer Sqr(x) Синус (радианы) Real Real Sin(x) Инициация датчика случайных чисел - - Randomize Равномерное псевдослучайное целое число 0<= x < i Integer Integer Random(i) Равномерное псевдослучайное число 0<= x <1 Real - Random Примечание Тип результата Тип параметра Обращение
    87. 87. Пример var x, y: real; begin write(‘ Введите значение x: ‘); readln(x); y:=(1+sin(2*x))/cos(2*x); writeln(‘ Результат= ’, y:10:3); end.
    88. 88. Лекция №5 Операторы языка Turbo Pascal
    89. 89. Составной оператор <ul><li>Составной оператор – это последовательность произвольных операторов программы, заключенная в операторные скобки – зарезервированные слова begin … end . Составные операторы – важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода goto ). </li></ul>
    90. 90. Составной оператор <ul><li>Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть и другие составные операторы – Турбо Паскаль допускает произвольную глубину их вложенности: </li></ul><ul><li>Begin ....... Begin ....... Begin ....... End; ....... End; ....... End ; </li></ul>
    91. 91. Пустой оператор <ul><li>Фактически, весь раздел операторов, обрамленный словами begin … end , представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ «;» необязательно. </li></ul>
    92. 92. Пустой оператор <ul><li>Если поставить точку с запятой перед end , это будет означать, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор не содержит никаких действий, просто в программу добавляется лишняя точка с запятой. </li></ul>
    93. 93. <ul><li>Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. </li></ul><ul><li>Таким образом, условный оператор - это средство ветвления вычислительного процесса. </li></ul>Условный оператор
    94. 94. Условный оператор if <условие> then <оператор1> [else <оператор2> ] ; где if , then , else – зарезервированные слова (если, то, иначе); <условие> – произвольное выражение логического типа; <оператор1>, <оператор2>, – любые операторы языка Турбо Паскаль.
    95. 95. Алгоритм работы Условный оператор работает по следующему алгоритму. Сначала вычисляется условное выражение <условие>. Если результат есть true (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть false (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>.
    96. 96. Пример var x, y, max : real; ....... if x>y then max:=x else max:=y; При выполнении этого фрагмента переменная max получит значение переменной x , если это значение больше чем значение y , в противном случае max станет равным y .
    97. 97. Пример Часть else <оператор2> условного оператора может быть опущена. Тогда при значении true условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается: var x, y, max : real; ....... if x>max then max:=x; y := x ;
    98. 98. Пример Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же время не каждый из «вложенных» условных операторов может иметь часть else <оператор2>, то возникает неоднозначность трактовки условий, т.е. непонятно какой else к какому if … then относится. Эта неоднозначность в Турбо Паскале решается следующим образом: любая встретившаяся часть else соответствует ближайшей к ней «сверху» части if … then условного оператора.
    99. 99. Пример var a, b, c, d : integer; … a:=1; b:=2; c:=3; d:=4; if a>b then if c<d then if c<0 then c:=0 else a:=b; {a=1} if a>b then if c<d then if c<0 then c:=0 else else else a:=b; {a=2}
    100. 100. Использование составного оператора <ul><li>Обратите внимание на то, что перед else точка с запятой не ставится. Символ «;» в Паскале означает конец оператора, а оператор if заканчивается там где заканчивается <оператор2> (если есть часть else ). </li></ul><ul><li>В случае, когда необходимо выполнить несколько операторов, а не один (<оператор1> или <оператор2>) их необходимо заключить в операторные скобки begin … end , получив, тем самым, составной оператор. </li></ul>
    101. 101. <ul><li>if a>b then </li></ul><ul><li>begin </li></ul><ul><li>if c<d then </li></ul><ul><li>if c<0 then </li></ul><ul><li>c:=0; </li></ul><ul><li>end </li></ul><ul><li>else a:=b; </li></ul>
    102. 102. <ul><li>Program Hex; </li></ul><ul><li>v ar </li></ul><ul><li> n : Integer; {Вводимое число}  </li></ul><ul><li> ch : Char; {Результат}  </li></ul><ul><li>begin </li></ul><ul><li> Write ( 'n = ' ) ; </li></ul><ul><li> ReadLn(n); { Вводим число }  </li></ul><ul><li>{Проверяем число на принадлежность к диапазону 0...15} </li></ul><ul><li>if (n >= 0) and (n <= 15) then </li></ul><ul><li>begin {Да, принадлежит диапазону}  </li></ul><ul><li>if n < 10 then </li></ul><ul><li>ch := chr(ord('0') + n) </li></ul><ul><li>else </li></ul><ul><li>ch := chr(ord('A') + n- 10); </li></ul><ul><li>WriteLn('n = ',ch)  </li></ul><ul><li>end </li></ul><ul><li>else {He принадлежит диапазону} </li></ul><ul><li>WriteLn('Ошибка')  </li></ul><ul><li>end. </li></ul>Пример
    103. 103. Оператор выбора Case <ul><li>Если у вас не два возможных варианта выполнения программы, а больше, то может использоваться оператор выбора CASE. Структура этого оператора в Турбо Паскале: </li></ul><ul><li>CASE <ключ_выбора> OF </li></ul><ul><li>C1 : <оператор1>; </li></ul><ul><li>C2 : <оператор2>; </li></ul><ul><li>. . . </li></ul><ul><li>CN : <операторN>; </li></ul><ul><li>[ELSE <оператор0>;] </li></ul><ul><li>END; </li></ul>
    104. 104. <ul><li>Здесь <ключ_выбора> - это выражение порядкового типа, в зависимости от значения которого принимается решение; C1,...,CN - значения, с которыми сравнивается значение <ключа>; <оператор1>,..., <операторN> - оператор (возможно составные), из которых выполняется rnr, с константой которого происходит первое совпадение значения <ключа>, <оператор0> выполнится, если значение ключа не совпадает ни с одной из констант C1,...,CN. </li></ul>
    105. 105. <ul><li>Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой. Если для нескольких значений <ключа> действия совпадают, то эти константы можно перечислить через запятую перед двоеточием или даже задать диапазон значений (нижняя граница .. верхняя граница). </li></ul>
    106. 106. <ul><li>Program calc; </li></ul><ul><li>Var a,b,rez:real; </li></ul><ul><li>oper:char; </li></ul><ul><li>Begin </li></ul><ul><li>write(‘ Введите два числа : ’); </li></ul><ul><li>readln(a,b); </li></ul><ul><li>write(‘ Введите операцию: ‘); </li></ul><ul><li>readln(oper); </li></ul><ul><li>case oper of </li></ul><ul><li>‘ +’:rez:=a+b; </li></ul><ul><li>‘ -’:rez:=a-b; </li></ul><ul><li>‘ *’:rez:=a*b; </li></ul><ul><li>‘ /’:rez:=a/b; </li></ul><ul><li>end; </li></ul><ul><li>writeln(‘ Результат= ‘,rez); </li></ul><ul><li>end. </li></ul>
    107. 107. Лекция №6 Операторы повтора (циклы)
    108. 108. Циклы <ul><li>Циклом называется многократное повторение однотипных действий. Телом же цикла будем называть те самые действия, которые нужно многократно повторять. </li></ul><ul><li>В языке Турбо Паскаль имеются три различных оператора цикла. Различаются эти операторы способом определения количества необходимых повторов, или, другими словами, когда необходимо завершить работу цикла. </li></ul>
    109. 109. Цикл while ( «Пока») <ul><li>Первый вариант цикла называется циклом с предпроверкой условия или циклом &quot;Пока&quot; записывается следующим образом: </li></ul><ul><li>while <условие выполнения цикла> do </li></ul><ul><li><оператор>; </li></ul><ul><li>По-русски это можно прочитать так: &quot;Пока истинно условие, выполнять оператор&quot;.  </li></ul>
    110. 110. Алгоритм работы <ul><li>Выполнение цикла начинается с проверки <условия выполнения цикла>. Если оно истинно, то выполняется <оператор> (тело цикла). Потом снова проверяется <условие выполнения цикла> и, если оно истинно, то выполняется <оператор> и т.д. Если на коком-то шаге <условие выполнения цикла> станет ложным, то выполнение цикла будет завершено. Таким образом, пока <условие выполнения цикла> истинно будет выполняться <оператор>. Если <условие выполнения цикла> изначально ложно, то <оператор> ни разу не будет выполнен. </li></ul>
    111. 111. Использование составного оператора <ul><li>Если в цикле необходимо выполнить несколько операторов, то необходимо воспользоваться составным оператором: </li></ul><ul><li>while <условие выполнения цикла> do </li></ul><ul><li>begin </li></ul><ul><li><операторы> </li></ul><ul><li>end ; </li></ul>
    112. 112. Цикл repeat ( «Повторить») <ul><li>Второй вариант цикла называется циклом с постпроверкой условия и записывается следующим образом: </li></ul><ul><li>repeat </li></ul><ul><li><операторы>; </li></ul><ul><li>until <условие выхода из цикла>; </li></ul>
    113. 113. Алгоритм работы <ul><li>Выполнение цикла начинается с выполнения <операторов> (тела цикла), потом проверяется <условие выхода из цикла>. Если оно ложно, то снова выполняются <операторы>. Потом снова проверяется <условие выхода из цикла> и т.д. Если на коком-то шаге <условие выхода из цикла> станет истинным, то выполнение цикла будет завершено. Таким образом, будут выполняться <операторы> до тех пор, пока <условие выхода из цикла> не станет истинным. Каким бы ни было <условие выхода из цикла> в начале работы цикла, <операторы> будут выполнены, по крайней мере, один раз. </li></ul>
    114. 114. Использование составного оператора <ul><li>Тело цикла может содержать несколько операторов, причем нет необходимости использовать составной оператор, поскольку в качестве операторных скобок здесь выступают ключевые слова repeat и until . </li></ul>
    115. 115. Зацикливание <ul><li>Чтобы не произошло зацикливание программы, необходимо чтобы: </li></ul><ul><li>на момент начала выполнения цикла определены (имеют начальные значения) все переменные участвующие в вычислении значений условий и </li></ul><ul><li>тело цикла содержит оператор или операторы, которые изменяют эти переменные таким образом, чтобы условие изменило свое значение и цикл завершил свою работу. </li></ul>
    116. 116. Цикл for («С параметром») <ul><li>Следующий вариант оператора цикла включает в себя оба этих условия. и записывается следующим образом: </li></ul><ul><li>for <переменная цикла>:=<начальное значение> to <верхняя граница> do </li></ul><ul><li><оператор>; </li></ul>
    117. 117. Алгоритм работы <ul><li>Выполнение цикла начинается с присвоения <переменная цикла> <начального значения>. Далее, если значение <переменная цикла> меньше или равно значению <верхней границы>, то выполняется <оператор>. Потом значение переменной цикла увеличивается на единицу и снова проверяется условие, что значение <переменной цикла> меньше или равно значению <верхней границы>, выполняется <оператор> и т.д. </li></ul>
    118. 118. Шаг -1 <ul><li>Есть еще один вариант цикла for : </li></ul><ul><li>for <переменная цикла>:=<начальное значение> downto <нижняя граница> </li></ul><ul><li>do <оператор>; </li></ul><ul><li>Здесь на каждом шаге значение переменной цикла уменьшается на единицу. </li></ul>
    119. 119. Примеры <ul><li>Следующая маленькая программа выводит на экран кодовую таблицу: </li></ul><ul><li>Program Str3; </li></ul><ul><li>Var I : Byte; </li></ul><ul><li>Begin </li></ul><ul><li>For I:=32 to 255 do </li></ul><ul><li>Write('VV',I:4, '-',Chr(I)) </li></ul><ul><li>End. </li></ul><ul><li>      Цикл в программе начинается с 32 потому, что символы с кодами от 0 до 31 являются управляющими и не имеют соответствующего графического представления. </li></ul>
    120. 120. Поиск совершенных чисел <ul><li>Совершенными называются числа, равные сумме всех своих делителей, включая 1. Например, 6 – совершенное число, поскольку 6=1+2+3. Требуется найти и вывести на экран все совершенные числа вместе с их делителями, лежащие в диапазоне от 4 до 10000. </li></ul>
    121. 121. Var I,sum,del1,n:word; Begin for i:=4 to 10000 do Begin sum:=1; n:= trunc(sqrt(i)); for del1:=2 to n do if I mod del1 =0 then if del1<> I div del1 then begin sum:=sum+del1+(I div del1); end else sum:=sum+del1; if sum=i then writeln(i); End; End.
    122. 122. Вычислить квадратный корень <ul><li>Вычислить квадратный корень из произвольного вещественного числа, введенного с клавиатуры, используя метод Ньютона: </li></ul><ul><li>Здесь A – введенное число, Y 0= A . </li></ul><ul><li>Если A – отрицательное число, то необходимо вывести сообщение об ошибке. </li></ul><ul><li>Результат должен иметь относительную точность 1·10-6. Как только получено значение Y 0 оно используется для получения следующего приближения Y 0, по которому в свою очередь вычисляется Y 0, и так до тех пор, пока не будет достигнута требуемая точность, то есть, пока не станет </li></ul>
    123. 123. <ul><li>Var A,Y1,Y:real; </li></ul><ul><li>Begin </li></ul><ul><li>write(‘ Введите число: ’); </li></ul><ul><li>readln(A); </li></ul><ul><li>Y1:=A; </li></ul><ul><li>repeat </li></ul><ul><li>Y:=Y1; </li></ul><ul><li>Y1:=(Y+A/Y)/2; </li></ul><ul><li>until abs(Y1-Y)<0.000001; </li></ul><ul><li>writeln(‘ Корень из числа= ‘,Y1:10:5); </li></ul><ul><li>end. </li></ul>
    124. 124. Разбиение числа на цифры <ul><li>X mod 10 </li></ul><ul><li>X div 10000 </li></ul><ul><li>(x mod 10000) div 1000 </li></ul><ul><li>(x div 1000) mod 10 </li></ul><ul><li>i*100+j*10+k </li></ul>
    125. 125. Вывод трехзначных чисел из неповторяющихся цифр <ul><li>For i:=0 to 9 do </li></ul><ul><li>for j:=0 to 9 do </li></ul><ul><li>for k:=0 to 9 do </li></ul><ul><li>if (i<>j)and(i<>k)and </li></ul><ul><li>(j<>k) then </li></ul><ul><li>write(I,j,k,’ ‘); </li></ul>
    126. 126. Вывод чисел из нечетных цифр <ul><li>i:=1; </li></ul><ul><li>While i<=9 do </li></ul><ul><li>begin </li></ul><ul><li>J:=1; </li></ul><ul><li>while j<=9 do </li></ul><ul><li>begin </li></ul><ul><li>K:=1; </li></ul><ul><li>while k<=9 do </li></ul><ul><li>begin </li></ul><ul><li>write(I,j,k,’ ‘); </li></ul><ul><li>Inc(k,2); </li></ul><ul><li>end; </li></ul><ul><li>Inc(j,2); </li></ul><ul><li>end; </li></ul><ul><li>Inc(I,2); </li></ul><ul><li>End; </li></ul>
    127. 127. Лекция №7 Массивы
    128. 128. Структурированные типы данных <ul><li>Структурированные типы данных отличаются от обычных типов тем, что переменные таких типов, имеют более одного значения, т.е. состоят из нескольких компонентов. Структурированные типы характеризуются методом структурирования и типами своих компонентов. Если тип компонента является структурированным типом, то получаемый в результате структурированный тип имеет более одного уровня структурирования. </li></ul>
    129. 129. Объявление переменной-массива <ul><li>Массивы содержат фиксированное число элементов одного типа, так называемого типа элемента. Переменные типа массив объявляются следующим образом: </li></ul><ul><li>var </li></ul><ul><li><имя переменной>: array [<тип индекса>] of <тип элемента>; </li></ul>
    130. 130. <ul><li>Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого и поддиапазонов длинного целого. Массив может быть проиндексирован по каждой размерности всеми значениями соответствующего индексного типа; число элементов поэтому равно произведению числа значений в каждом индексном типе. Число размерностей не ограничено. </li></ul>
    131. 131. Примеры объявлений <ul><li>Приведем пример переменной типа массив: </li></ul><ul><li>var </li></ul><ul><li>A: array[1..100] of Real ; </li></ul><ul><li>B: array[char] of integer; </li></ul><ul><li>C: array[boolean] of char; </li></ul><ul><li>C[True]:=‘1’; </li></ul>
    132. 132. Доступ к элементам массива <ul><li>Конкретный элемент массива обозначается с помощью ссылки на переменную массива, за которой указывается индекс, определяющий данный элемент. </li></ul><ul><li>A [5]:=3.4; </li></ul><ul><li>For i:=1 to 100 do </li></ul><ul><li>Begin </li></ul><ul><li>writeln(‘ Введите элемент A[‘,I,’]:’); </li></ul><ul><li>Readln(A[i]); </li></ul><ul><li>End; </li></ul>
    133. 133. Сумма элементов массива <ul><li>Const N=10; </li></ul><ul><li>Var a:array[1..N] of real; </li></ul><ul><li>i:word; </li></ul><ul><li>sum:real; </li></ul><ul><li>Begin </li></ul><ul><li>sum:=0; </li></ul><ul><li>for i:=1 to N do </li></ul><ul><li>sum:=sum+a[i]; </li></ul><ul><li>writeln(‘ Сумма= ‘,sum:10:5); </li></ul><ul><li>end. </li></ul>
    134. 134. <ul><li>Const </li></ul><ul><li>< имя конст. >=< значение >; </li></ul>
    135. 135. Произведение элементов массива <ul><li>Const N=10; </li></ul><ul><li>Var a:array[1..N] of real; </li></ul><ul><li>i:word; </li></ul><ul><li>p:real; </li></ul><ul><li>Begin </li></ul><ul><li>p:=1; </li></ul><ul><li>for i:=1 to N do </li></ul><ul><li>p:=p*a[i]; </li></ul><ul><li>writeln(‘ Произведение= ‘,p:10:5); </li></ul><ul><li>end. </li></ul>
    136. 136. <ul><li>randomize; </li></ul><ul><li>for i:=1 to N do </li></ul><ul><li>a[i]:=x1+random*(x2-x1); </li></ul><ul><li>b[1]:=1; </li></ul><ul><li>b[2]:=1; </li></ul><ul><li>for i:=3 to N do </li></ul><ul><li>b[i]:=b[i-1]+b[i-2]; </li></ul>
    137. 137. <ul><li>for i:=1 to N do </li></ul><ul><li>if b[i] mod 2=0 then </li></ul><ul><li>b[i]:=sqr(b[i]); </li></ul><ul><li>i:=2; </li></ul><ul><li>while i<=N do </li></ul><ul><li>begin </li></ul><ul><li>a[i]:=sqr(a[i]); </li></ul><ul><li>Inc(I,2); </li></ul><ul><li>End; </li></ul>
    138. 138. Лекция №8 Многомерные массивы
    139. 139. Двумерные массивы <ul><li>Если тип элемента в типе массив также является массивом, то результат можно рассматривать как массив массивов или как один многомерный массив. Например , </li></ul><ul><li>array[boolean] of array[1..10] of Real ; </li></ul><ul><li>интерпретируется компилятором точно так же, как массив: </li></ul><ul><li>array[boolean,1..10] of Real ; </li></ul>
    140. 140. <ul><li>В случае многомерного массива можно использовать несколько индексов или несколько выражений в индексе. Например: </li></ul><ul><li>Matrix [ I ][ J ] </li></ul><ul><li>что тождественно записи: </li></ul><ul><li>Matrix[I,J] </li></ul>
    141. 141. <ul><li>For i:=1 to N do </li></ul><ul><li>for j:=1 to M do </li></ul><ul><li>begin </li></ul><ul><li>writeln(‘ Введите элемент a2[‘,I,’,’,j,’]: ‘); </li></ul><ul><li>readln(a2[I,j]); </li></ul><ul><li>end; </li></ul>
    142. 142. <ul><li>For i:=1 to N do </li></ul><ul><li>begin </li></ul><ul><li>for j:=1 to M do </li></ul><ul><li>write(a2[I,j]:8); </li></ul><ul><li>writeln; </li></ul><ul><li>end; </li></ul>
    143. 144. <ul><li>For i:=1 to N-1 do </li></ul><ul><li>for j:=1 to N-i do </li></ul><ul><li>begin </li></ul><ul><li>tmp:=c2[I,j]; </li></ul><ul><li>c2[I,j]:=c2[N-j+1,N-i+1]; </li></ul><ul><li>c2[N-j+1,N-i+1]:=tmp; </li></ul><ul><li>end; </li></ul>
    144. 145. Лекция №9 Процедуры и функции
    145. 146. <ul><li>Заголовок процедуры имеет вид: </li></ul><ul><li>PROCEDURE <имя> [(<сп.ф.п.>)]; </li></ul><ul><li>Заголовок функции: </li></ul><ul><li>FUNCTION <имя> [(<сп.ф.п.>)] : <тип> ; </li></ul><ul><li>Здесь <имя> - имя подпрограммы (правильный идентификатор); </li></ul><ul><li><сп.ф.п.> - список формальных параметров, </li></ul><ul><li><тип> - тип возвращаемого функцией результата. </li></ul><ul><li>Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их тип, например: </li></ul>
    146. 147. <ul><li>Procedure SB (a: real; b: Integer ; с: char); </li></ul><ul><li>Как видно из примера, параметры в списке отделяются друг от друга точками с запятой. Несколько следующих подряд однотипных параметров можно объединять в подсписки, например, вместо </li></ul><ul><li>Function F (а: real; b: real): real; </li></ul><ul><li>можно написать проще : </li></ul><ul><li>Function F (a, b: real): real; </li></ul>
    147. 148. <ul><li>Операторы тела подпрограммы рассматривают список формальных параметров как своеобразное расширение раздела описаний: все переменные из этого списка могут использоваться в любых выражениях внутри подпрограммы. Таким способом осуществляется настройка алгоритма подпрограммы на конкретную задачу. </li></ul>
    148. 149. <ul><li>Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной. В предыдущем примере параметры А и В определены как параметры-значения. Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR , например: </li></ul><ul><li>Function Power (var a : real; b : real) : real; </li></ul><ul><li>Здесь параметр А – параметр-переменная, а В – параметр-значение. </li></ul>
    149. 150. <ul><li>Определение формального параметра тем или иным способом существенно только для вызывающей программы: если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной нужного типа; если формальный параметр объявлен как параметр-значение, то при вызове ему может соответствовать произвольное выражение. </li></ul><ul><li>В программе задаются два целых числа 5 и 7, эти числа передаются процедуре INC 2, в которой они удваиваются. Один из параметров передается как параметр-переменная, другой - как параметр-значение. Значения параметров до и после вызова процедуры, а также результат их удвоения выводятся на экран. </li></ul>
    150. 151. <ul><li>const </li></ul><ul><li>а : integer = 5; </li></ul><ul><li>b : integer = 7; </li></ul><ul><li>PROCEDURE lnc2 (var с : Integer; b : Integer); </li></ul><ul><li>begin { Inc 2} </li></ul><ul><li>с := с + с; </li></ul><ul><li>b := b + b ; </li></ul><ul><li>writeln (' удвоенные:', c :5, b :5); </li></ul><ul><li>end ; { Inc 2} </li></ul><ul><li>BEGIN {main} </li></ul><ul><li>writeln(' исходные:'. a:5, b:5); </li></ul><ul><li>lnc2(a,b); </li></ul><ul><li>writeln(' результат :', a:5, b:5); </li></ul><ul><li>END . { main } </li></ul>
    151. 152. <ul><li>В результате прогона программы будет выведено: </li></ul><ul><li>Исходные: 5 7 удвоенные 10 14 результат 10 7 </li></ul><ul><li>Как видно из примера, удвоение второго формального параметра в процедуре INC 2 не вызвало изменения фактической переменной В, так как этот параметр описан в заголовке процедуры как параметр-значение. Этот пример может служить еще и иллюстрацией механизма &quot;закрывания&quot; глобальной переменной одноименной локальной: хотя переменная В объявлена как глобальная (она описана в вызывающей программе перед описанием процедуры), в теле процедуры ее «закрыла» локальная пере­менная В, объявленная как параметр-значение. </li></ul>
    152. 153. <ul><li>Формат описания процедуры: Procedure <Имя процедуры> (<Имя форм. параметра 1>:<Тип 1 >; < Имя форм. параметра 2>:<Тип 2 >); <Раздел описаний> Begin <Тело процедуры> End; </li></ul>
    153. 154. <ul><li>Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы (описание процедур и функций - в том числе). Однако все описанные здесь объекты &quot;видимы&quot; лишь в этой процедуре. Они здесь локальны также, как и имена формальных параметров. Объекты, описанные ранее в разделе описаний основной программы и не переопределенные в процедуре, называются глобальными для этой подпрограммы и доступны для использования. </li></ul>
    154. 155. <ul><li>Формат описания функции: Function <Имя функции> (<Имя форм. параметра 1>:<Тип>; < Имя форм. параметра 2>:<Тип>?) : <Тип результата>; <Раздел описаний> Begin <Тело функции> End; </li></ul>
    155. 156. <ul><li>В теле функции обязательно должна быть хотя бы команда присвоения такого вида: </li></ul><ul><li><Имя функции>:=<Выражение>; </li></ul><ul><li>Указанное выражение должно приводить к значению того же типа, что и тип результата функции, описанный выше. </li></ul>
    156. 157. <ul><li>Вызов процедуры представляет в программе самостоятельную инструкцию: </li></ul><ul><li>< Имя процедуры>(<Фактический параметр 1>, < Фактический параметр 2> ,… ); </li></ul><ul><li>Типы фактических параметров должны быть такими же, что и у соответсвующих им формальных. </li></ul><ul><li>Вызов функции должен входить в выражение. При вычислении значения такого выражения функция будет вызвана, действия, находящиеся в ее теле, будут выполнены, в выражение будет подставлено значение результата функции. </li></ul>
    157. 158. <ul><li>Program Fn; Var A,B,C :Real; Function Max(A,B:Real):Real; </li></ul><ul><li>{Описываем функцию Max с формальными} Begin {параметрами A и B, которая принимает } </li></ul><ul><li>If A>B Then Max:=A {значение максимального из них } Else Max:=B </li></ul><ul><li>{Здесь A и B - локальные переменные } </li></ul><ul><li>End; Begin </li></ul><ul><li>Writeln('Введите три числа'); Readln(A,B,C); Writeln('Максимальным из всех является ', </li></ul><ul><li>Max(Max(A,B),C)) </li></ul><ul><li>End. </li></ul>
    158. 159. <ul><li>Program Pr; Var S1,S2,S3 :Integer; Procedure Swap(Var A,B: Integer);{Процедура Swap с параметрами-переменными} Var C : Integer; {C - независимая локальная переменная} Begin C:=A; A:=B; B:=C {Меняем местами содержимое A и B} End; Begin </li></ul><ul><li>Writeln('Введите три числа'); Readln(S1,S2,S3); If S1>S2 Then Swap(S1,S2); If S2>S3 Then Swap(S2,S3); If S1>S2 Then Swap(S1,S2); Writeln('Числа в порядке неубывания:V',S1,S2,S3) </li></ul><ul><li>End. </li></ul>
    159. 160. <ul><li>Рассмотрим следующий пример. В языке Турбо Паскаль нет операции возведения в степень, однако с помощью встроенных функций LN ( X ) и ЕХР(Х) нетрудно реализовать новую функцию с именем, например, POWER , осуществляющую возведение любого вещественного числа в любую вещественную степень. В следующем примере вводится пара чисел X и У и выводится на экран дисплея результат возведения Х сначала в степень +У, а затем - в степень - У. Для выхода из программы нужно ввести Ctrl - Z и «Ввод». </li></ul>
    160. 161. <ul><li>var </li></ul><ul><li>х , у : real; </li></ul><ul><li>FUNCTION Power(a,b : real) : real; </li></ul><ul><li>begin {Power} </li></ul><ul><li>if a > 0 then Power := exp(b * Ln(a)) </li></ul><ul><li>else </li></ul><ul><li>If a < 0 then </li></ul><ul><li>Power := exp(b * Ln(abs(a))) else </li></ul><ul><li>if b=0 then Power := 1 else Power := 0 </li></ul><ul><li>end {Power}; </li></ul><ul><li>BEGIN {main} </li></ul><ul><li>repeat </li></ul><ul><li>readln(x,y); </li></ul><ul><li>writeln(power(x,y):12:10, power (x, -у) :15:10) </li></ul><ul><li>until EOF; </li></ul><ul><li>END. {main} </li></ul>
    161. 162. <ul><li>Для вызова функции POWER мы просто указали ее в качестве параметра при обращении к встроенной процедуре WRITELN . Параметры Х и У в момент обращения к функции - это фактические параметры. Они подставляются вместо формальных параметров А и В в заголовке функции и затем над ними осуществляются нужные действия. Полученный резуль­тат присваивается идентификатору функции - именно он и будет возвращен как значение функции при выходе из нее. В программе функция POWER вызывается дважды - сначала с параметрами Х и Y , а затем Х и ‑У, поэтому будут получены два разных результата. </li></ul>
    162. 163. Лекция №10 Строки
    163. 164. <ul><li>Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [0.. N ] OF CHAR , однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объяв­лением типа STRING [ N ] и может быть любой константой порядкового типа, но не больше 255 . Турбо Паскаль разрешает не указывать N , в этом случае длина строки принимается максимально возможной, а именно N -255 . </li></ul>
    164. 165. <ul><li>Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномер­ного массива ARRAY [ O .. N ] OF CHAR , например: </li></ul><ul><li>var </li></ul><ul><li>st : string; </li></ul><ul><li>if st[5] - 'A' then .. . </li></ul>
    165. 166. <ul><li>Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной строки можно осуществлять необходимые действия и таким способом изменять длину. Например, удалить из строки все ведомые пробелы можно следующим образом: </li></ul>
    166. 167. <ul><li>var </li></ul><ul><li>st : strlng[10]; </li></ul><ul><li>i : word; </li></ul><ul><li>i := 10; </li></ul><ul><li>while (st[l]=' ') and (i<>0) do begin dec(i): </li></ul><ul><li>st[0] := chr(i) end; </li></ul><ul><li>Значение ORD ( st [0]) , т.е. текущую длину строки, можно получить и с помощью функции LENGTH ( st ), например: </li></ul>
    167. 168. <ul><li>while ( Iength(st)<>0) and (st[ length(st)]-' ') do </li></ul><ul><li>s[0] := chr(length(st)-1) </li></ul><ul><li>К строкам можно применять операцию «+» - сцепление, например: </li></ul><ul><li>st := 'а' + ' b ': </li></ul><ul><li>st := st + 'с'; {st содержит 'abc'} </li></ul>
    168. 169. <ul><li>Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются. Следующая программа, например, напечатает символ 1: </li></ul><ul><li>var </li></ul><ul><li>st:string[1]; </li></ul><ul><li>begin </li></ul><ul><li>st:='123'; </li></ul><ul><li>writeln(st) </li></ul><ul><li>end. </li></ul>
    169. 170. <ul><li>Все остальные действия над строками и символами реализуются с помощью встроенных процедур и функций. </li></ul><ul><li>CONCAT ( S 1 [, S 2, ... , SN ]) - функция типа STRING ; возвращает строку, представляющую собой сцепление строк-параметров SI , S 2,... , SN . </li></ul><ul><li>COPY ( ST , INDEX , COUNT ) - функция типа STRING ; копирует из строки ST COUNT символов, начиная с символа с номером INDEX . </li></ul>
    170. 171. <ul><li>DELETE ( ST , INDEX , COUNT ) - процедура; удаляет COUNT сим­волов из строки ST, начиная с символа с номером INDEX . </li></ul><ul><li>INSERT ( SUBST , ST , INDEX ) - процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX . </li></ul><ul><li>LENGTH ( ST ) - функция типа INTEGER ; возвращает длину строки ST . </li></ul>
    171. 172. <ul><li>POS ( SUBST , ST ) - функция типа INTEGER : отыскивает в строке ST первое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль. </li></ul><ul><li>STR ( X [: WIDTH [: DECIMALS ]], ST ) - процедура; преобразует число Х любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS , если они присутствуют, задают формат преобразования: </li></ul>
    172. 173. <ul><li>WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, а DECIMALS - количество символов в дробной части (имеет смысл только в том случае, когда Х - вещественное число). </li></ul><ul><li>VAL ( ST , X, CODE ) - процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае он содержит номер позиции в строке ST . где обнаружен ошибочный символ, и

    ×