58
Лекция 1. Обзор Язык Turbo Pascal Язык программирования Pascal это: Алгоритмический язык программирования высокого уровня Разработан Никлаусом Виртом в 1970 году для обучения студентов программированию. Хорошо структурированный язык с жестким контролем типов данных В дальнейшем под языком Pascal будем подразумевать Turbo Pascal. Алгоритмы Слово «алгоритм» происходит от имени узбекского математика Хорезми (по арабски ал - Хорезми), который в IX веке разработал правила 4-х арифметических действий над числами в десятичной системе счисления. Алгоритм - точное предписание по выполнению ограниченного числа определенных действий, последовательно преобразующих исходные данные в конечный результат. Совокупность действий по преобразованию исходных данных в конечный результат составляет процесс выполнения алгоритма, называемый вычислительным процессом или просто процессом. Тот кто выполняет 1

Лекция 1-5

Embed Size (px)

Citation preview

Page 1: Лекция 1-5

Лекция 1. Обзор

Язык Turbo Pascal

Язык программирования Pascal это:

Алгоритмический язык программирования высокого уровня

Разработан Никлаусом Виртом в 1970 году для обучения студентов

программированию.

Хорошо структурированный язык с жестким контролем типов данных

В дальнейшем под языком Pascal будем подразумевать Turbo Pascal.

Алгоритмы

Слово «алгоритм» происходит от имени узбекского математика Хорезми

(по арабски ал - Хорезми), который в IX веке разработал правила 4-х

арифметических действий над числами в десятичной системе счисления.

Алгоритм - точное предписание по выполнению ограниченного числа

определенных действий, последовательно преобразующих исходные данные

в конечный результат.

Совокупность действий по преобразованию исходных данных в

конечный результат составляет процесс выполнения алгоритма, называемый

вычислительным процессом или просто процессом. Тот кто выполняет

алгоритм называется процессор (человек или часть ЭВМ). Алгоритм,

предназначенный для выполнения ЭВМ называется программой.

Алгоритм обладает следующими свойствами:

дискретностью - алгоритм состоит из конкретных действий;

определенностью - точностью, не оставляющей место для произвола,

т.е. алгоритм понятен для возможных исполнителей благодаря этому

свойству процесс выполнения алгоритма носит механический характер;

результативностью - свойством приводить к искомому результату за

конечное число действий (шагов);

Массовостью - пригодностью для решения задач из некоторого класса.

1

Page 2: Лекция 1-5

Пример

Дано X, Вычислить 3x2+6x+2. Допустимые операции - сложение и

умножение 2-х чисел. Т.о. есть предпосылки для разработки алгоритма:

исходные данные - X;

действия - сложение, умножение, которое применительно к выражению

3x2+6x+2 дадут искомый результат.

Т.к. среди действий нет возведения в степень выражение необходимо

записать в виде 3xx+6x+2.

Получим следующий алгоритм:

начало;

вычислить X´X, результат обозначить через Y;

вычислить 3´4, результат обозначить через Z;

вычислить 6´X, результат обозначить через W;

вычислить Z+W, результат обозначить через U;

вычислить U+2, результат обозначить через S;

конец;

Алгоритмические языки

Языки в основе которых лежит понятие алгоритма называются

алгоритмическими. Существуют и другие подходы: функциональный,

логический и др. В рамках данной дисциплины рассматриваются только

алгоритмические языки.

Эволюция основных алгоритмических языков показана на рисунке

далее. Там же показаны два наиболее известных не алгоритмических языка

Lisp (фукциональный) и Prolog (логический).

2

Page 3: Лекция 1-5

Turbo Pascal1981

FORTRAN1954

Simula 671967

Algol 601960

(первая версия – 1958)

Smalltalk 721972

CPL1963

B1969

C1971

Oberon 21991

Oberon1987

BCPL1967

Algol W1967

Pascal1970

Modula1975

Modula 21979

Object Pascal1985

Delphi1995

C++1983

Java1995

COBOL1959

PL/11964

Algol 681968

BASIC1964

Prolog1970

Lisp1958

Ada1979

C#2000

PHP1995

Perl1987

Python1991

UCSD Pascal1976

Рис. Эволюция языков программирования

3

Page 4: Лекция 1-5

Структурное программирование

Э. Дэйкстра (60-е годы):

Для любой простой программы можно построить функционально

эквивалентную ей структурную программу, т.е. программу,

сформированную на основе фиксированного базисного множества,

включающего:

структуру последовательного действия,

структуру выбора одного из двух действий

структуру цикла, то есть многократного повторения некоторого

действия с проверкой условия остановки повторения.

Простая программа – ровно один вход и один выход.

Базисные конструкции:

Стандартизация и линейность программы – снижение сложности.

Некоторые соображения:

Алгоритм должен иметь 1 вход и 1 выход.

Никаких goto.

Нет зависимости от языка программирования.

Ясен набор операторов, который необходим в языках

программирования.4

Page 5: Лекция 1-5

Операторы

В языке Pascal предусмотрены следующие операторы:

оператор присваивания

составной оператор

пустой оператор

условный оператор (ветвление)

оператор варианта (ветвление)

оператор цикла с предусловием (повтор)

оператор цикла с постусловием (повтор)

оператор цикла с параметром (повтор)

присоединения

оператор процедуры

Язык Pascal обладает всеми необходимыми средствами для реализации

структурной технологии программирования.

Структура программы

[Program <Имя программы>;]

[Uses <Имена подключаемых модулей>;]

[Label <Список меток>;]

[Const <Объявления констант>;]

[Type < Объявления типов>;]

[Var < Объявления переменных>;]

[<Раздел подпрограмм>]

Begin

[<Операторы>]

End.

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

Таким образом, минимальная синтаксически допустимая программа

выглядит следующим образом:

5

Page 6: Лекция 1-5

Begin

End.

Нетрудно догадаться, что эта программа будет компилироваться и

запускаться (сразу же завершая свою работу), но никаких действий

выполнять не будет.

Более осмысленный пример на языке Pascal:

program Summa;

var

A,B,Sum : integer;

begin

Wгitе(’Введите два числа: ‘);

Readln(A,B);

Sum :=А+В;

Wгitеln(’Сумма равна’,Sum);

Wгitе(’Нажмите Enter’);

Readln;

end.

Для запуска программы из среды Turbo Pascal выберите команду Run в

меню Run. Вы попадете в окно пользователя, появится сообщение:

Введите два числа:

Наберите два любых целых числа с пробелом между ними и нажмите

Enter. Появится следующее сообщение:

Сумма равна

а за ним - сумма двух чисел. В следующей строке появится сообщение:

Нажмите клавишу Enter

Программа будет ожидать нажатия клавиши Епtег. Для наблюдения за

выводом из своей программы, выберите команду User Screen в меню Window

(или нажмите Аlt-F5).

Любые данные, т.е. константы, переменные, значения функций или

выражения, в турбо Паскале характеризуются своими типами. Тип

6

Page 7: Лекция 1-5

определяет множество допустимых значений, которые может иметь тот или

иной объект, а также множество допустимых операций, которые применимы

к нему. Кроме того, тип определяет также и формат внутреннего

представления данных в памяти ПК.

Операции языка Pascal и их приоритеты

На этом рисунке приведены группы операций в порядке убывания их

приоритетов. Внутри группы приоритет операций одинаков.

Объявление переменных

var

<имя переменной>:<имя типа1>;

<имя1>[,<имя2>,…]:<тип2>;

var

a,b:integer;

ch:char;

Типы данных

Турбо Паскаль характеризуется разветвленной структурой типов

данных.

Операции языка Pascal

Унарные

Бинарные

Аппликативные

Мультипликативные

Операции отношения

7

Page 8: Лекция 1-5

В Турбо Паскале предусмотрен механизм создания новых типов данных,

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

быть сколь угодно большим.

Лекция 2. Эволюция языков программирования

История языков развития программирования тесным образом связана с

историей вычислительных машин. Даже простые арифметические операции с

Типы данных

Простые

Структурированные

Порядковые

Вещественные

Символьный

Целочисленные

Перечисление

Логический

Диапазон

Массивы

Строки

Записи

Файлы

Указатели

8

Page 9: Лекция 1-5

большими числами затруднительны для человеческого мозга. Поэтому уже в

древности появилось простейшее счетное устройство - абак. В семнадцатом

веке была изобретена логарифмическая линейка. В 1642 году Блез Паскаль

сконструировал восьмиразрядный суммирующий механизм. В 1820 году

француз Шарль де Кольмар создал арифмометр, способный производить

умножение и деление.

Все основные идеи, которые лежат в основе работы компьютеров, были

изложены еще в 1833 году английским математиком Чарльзом Бэббиджем

(1791-1871). Он разработал проект машины для выполнения научных и

технических расчетов, где предугадал основные устройства современного

компьютера, а также его задачи. Управление такой машиной должно было

осуществляться программным путем. Для ввода и вывода данных Бэббидж

предлагал использовать перфокарты. В то время перфокарты уже

использовались в текстильной промышленности.

Первый язык программирования разработала Лавлейс Огаста Ада Кинг

(1815 – 1852) для машины Бэбиджа.

В комментариях к описанию машины, изданном в 1843 году, введены

понятия «операция», «переменная», «условный переход», «цикл». Приведена

программа для решения системы двух линейных уравнений с двумя

неизвестными

В 1888 году американский инженер Герман Холлерит сконструировал

первую электромеханическую счетную машину. Эта машина, названная

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

закодированные на перфокартах. В 1890 году изобретение Холлерита было

впервые использовано в 11-й американской переписи населения. Работа,

которую пятьсот сотрудников выполняли в течение семи лет, Холлерит

сделал с 43 помощниками на 43 табуляторах за один месяц.

9

Page 10: Лекция 1-5

    В 1896 году Герман Холлерит основал фирму Computing Tabulating

Recording Company, которая стала основой для будущей International Business

Machines Corporation (IBM).

В 1946 в США была создана первая электронная вычислительная

машина (ЭВМ) - ENIAC (Electronic Numerical integrator and Computer -

Электронный числовой интегратор и компьютер). Разработчики: Джон Мочи

(John Маuchу) и Дж. Преспер Эккерт (J. Prosper Eckert).

    Он был произведен на свет в Школе электрической техники Moore (при

университете в Пенсильвании).

    Время сложения - 200 мкс, умножения - 2800 мкс и деления - 24000 мкс.

    Компьютер содержал 17468 вакуумных ламп шестнадцати типов, 7200

кристаллических диодов и 4100 магнитных элементов.  Общая стоимость

базовой машины - 750000 долларов.

В Советском Союзе первая электронная цифровая вычислительная

машина была разработана в 1950 году под руководством академика

С.А. Лебедева в Академии наук Украинской ССР. Она называлась «МЭСМ»

(малая электронная счётная машина).

Основоположниками компьютерной науки по праву считаются Клод

Шеннон - создатель теории информации, Алан Тьюринг - математик,

разработавший теорию программ и алгоритмов, и Джон фон Нейман - автор

конструкции вычислительных устройств, которая до сих пор лежит в основе

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

связанная с информатикой, - кибернетика, наука об управлении как одном из

основных информационных процессов. Основателем кибернетики является

американский математик Норберт Винер.

10

Page 11: Лекция 1-5

Развитие ЭВМ делится на несколько периодов. Поколения ЭВМ каждого

периода отличаются друг от друга элементной базой и математическим

обеспечением. Первое поколение (1945-1954) - ЭВМ на электронных лампах.

Их быстродействие не превышало 2—3 тыс. операций в секунду,

оперативная память не превышала 2 Кб.

Машинно-зависимые языки программирования низкого уровня –

двоичные машинные коды, Автокод, языки Ассемблера.

Таблица 1.

Год Язык (идея) Создатель ЭВМ Заметки о языке

46 Плюнкалкюль Цузе Z4 Немецкий инженер Цузе разработал этот язык

для ЭВМ Z4, но ни компилятора, ни

интерпретатора для него написано не было

(поскольку и язык, и ЭВМ он разрабатывал в

одиночку).

49 "Краткий код" Мочли Юнивак По своей сути, это была система обозначений

для быстрого ввода в ЭВМ алгебраических

выражений."Краткий код" работал как

примитивный интерпретатор.

49 Идея

подпрограммы

Грейс

Хоппер

Марк-1 Программисты под руководством Хоппер

впервые во всем мире реализовали идею

подпрограмм как многократно используемую

последовательность команд. Тогда они

просто переписывали куски машинного кода

друг у друга из блокнотов.

50 Ассемблер Грейс

Хоппер

Эдсак Первый ассемблер представлял из себя

систему мнемонических обозначений,

объединённую с библиотекой подпрограмм

52 АВТОКОД Гленн Марк-1 Автокод был первым полноценным

транслятором (компилятором), т.е. он

транслировал мнемоническую схему в

машинные коды.

52 А-0 Грейс Юнивак А-0 был первым полноценным ассемблером,

11

Page 12: Лекция 1-5

Хоппер получившим широкую известность. Он

предоставлял услуги как компилятора, так и

компоновщика.По сути, А-0 представлял

первое промышленное средство для создания

других программ.

56 B-0 Грейс

Хоппер

Юнивак Хоппер создала первый ассемблер, который

понимал мнемонические команды.

ЭВМ 2-го поколения были разработаны в 1950—60 гг. В качестве

основного элемента были использованы уже не электронные лампы, а

полупроводниковые диоды и транзисторы, а в качестве устройств памяти

стали применяться магнитные сердечники и магнитные барабаны - далекие

предки современных жестких дисков. Второе отличие этих машин — это то,

что появилась возможность программирования на алгоритмических языках.

Были разработаны первые языки высокого уровня - Фортран, Алгол, Кобол.

Таблица 2.

Год Язык (идея) Создатель ЭВМ Заметки о языке

54 FORTRAN Бэкус IBM-704 Был первым языком программирования

высокого уровня. Разрабатывался компанией

IBM для её новой ЭВМ.Коллектив под

руководством Бэкуса разработал не только

спецификацию языка, но и создал компилятор

для него. Это обеспечило достаточно быструю

и широкую распространенность языка.Кроме

того, Фортран был первым языком, для

которого были разработаны компиляторы для

разных ЭВМ (т.е. программа могла

выполняться на различных ЭВМ).Лучше всего

Фортран подходит для решения инженерных и

расчетных задач.

58 ALGOL – 58     Первая спецификация Алгола была рождена

12

Page 13: Лекция 1-5

европейским международным комитетом.

59 “CSC” – первая

компания по

разработке ПО

    В 59 году в США появилась первая компания,

занимающаяся созданием промышленных

программ.

59 БНФ Бэкус, Наур   Для описания спецификации Алгола Бэкус

создал специальную систему – “нормальную

форму”. Чуть позже эта система была

уточнена Науром.

59 CODASYL     Министерство обороны США создало

организацию CODASYL, главным

назначением которой было создание нового

языка, ориентированного на бизнес –

приложения.

60 ALGOL – 60 Бэкус   Новая спецификация Алгола, которую

отличали следующие идеи:

Блочная структура

Возможность рекурсии

Описание с использованием БНФ

59 COBOL CODASYL   Стандарт языка, принятый для создания

коммерческих приложений

58 Lisp Маккарти  

Язык для исследований в области

искусственного интеллекта, предназначенный

для работы со списками и лямбда –

выражениями (был создан в МТИ).

Разработка в 60-х годах интегральных схем - целых устройств и узлов из

десятков и сотен транзисторов, выполненных на одном кристалле

полупроводника (то, что сейчас называют микросхемами) привело к

созданию ЭВМ 3-го поколения. В это же время появляется

полупроводниковая память, которая и по сей день используется в

персональных компьютерах в качестве оперативной.

13

Page 14: Лекция 1-5

Таблица 3.

Год Язык (идея) Создатель ЭВМ Заметки о языке

64 ПЛ/1 Рэдин (IBM)   Универсальный язык программирования,

разрабатывавшийся для системы System/360.

64 БЭЙСИК Кемени,

Курц

  Был разработан в Дартмундском колледже

как язык для обучения работе с

компьютером студентов всех

специальностей (и технических, и

гуманитарных). Начал разрабатываться в 59-

60х годах, когда существовал только

Фортран. Отличия от Фортрана:

o операторы ввода/вывода

o единая система чисел (без различия

на целые/вещественные)

Одновременно с разработкой языка велась

разработка ЭВМ, которая работала бы не в

пакетном режиме, а в режиме разделения

времени (отсюда – необходимость

операторов ввода. Позже появится и

структурно-ориентированный стандарт

TrueBASIC.

66 АЛГОЛ – W Хоар, Вирт   Новый стандарт языка, который был

предложен Хоаром и Виртом как

альтернатива существующей спецификации

(буква W – от фамилии Вирт).

68 АЛГОЛ – 68     Этот вариант Алгола очень не понравился

Вирту.

68 Статья о

структурном

программирован

ии

Дейкстра   В этой статье Дейкстра доказывал вредность

оператора “GOTO” (т.к. он нарушает

последовательность операторов) и

показывал, что любая программа может быть

написана с использованием 3-х структур:

Последовательность

Альтернатива

14

Page 15: Лекция 1-5

Повторение

69 AПЛ Кеннет

Айверсон

(IBM)

  Очень компактный универсальный язык

программирования. Именно для этого языка

была организация ACM открыла первую

SIG(Software Interest Group).

70 ПАСКАЛЬ Никлаус

Вирт

  Был разработан Виртом как

противопоставление Алголу-68. Язык с

высокой структурированностью. До сих пор

– лучший язык для обучения

программированию.

71 ФОРТ Чарльз Мур   Самый компактный язык программирования.

Обладает высокой степенью расширяемости.

Первое промышленное применение –

управление радиотелескопами.

72 С Керниган,

Ричи,

Bell Lab.

  Язык был разработан для написания

операционной системы UNIX. В рекламных

целях UNIX в университетах

распространялся почти бесплатно, вместе с

UNIX’ом распространялся и С. До сих пор С

– один из лучших языков для системного

программирования.

72 ПРОЛОГ Алан

Колмери

  Логический язык программирования, в

котором описываются факты и отношения

между ними.

75 HOLWG Уайтекер   HOLWG – рабочая группа по управлением

Уайтекера, была создана Пентагоном для

получения языка, который мог бы

использоваться на всех компьютерах

министерства обороны США. Результатом в

79 году стал язык Ада.

76 UCSD Pascal Кеннет Боулз Apple II Введены модули

79 АДА Жан Ихбиа   Универсальный язык программирования,

был разработан по заказу МО США. После

создания вышло требование переписать все

15

Page 16: Лекция 1-5

существующие приложения на Аде.

81 Turbo Pascal Андерс

Хейлсберг

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

четвертого поколения. Их элементной базой стали большие интегральные

схемы (БИС. В одном кристалле интегрировано до 100 тысяч элементов).

Быстродействие этих машин составляло десятки млн. операций в секунду, а

оперативная память достигла сотен Мб. Появились микропроцессоры (1971 г.

фирма Intel), микро-ЭВМ и персональные ЭВМ. Стало возможным

коммунальное использование мощности разных машин (соединение машин в

единый вычислительный узел и работа с разделением времени).

Таблица 4.

Год Язык

(идея)

Создатель ЭВМ Заметки о языке

85 С++ Бьярн

Страуструп

  Объектно-ориентированное расширение языка С

85 Object

Pascal

Ларри

Теслер,

Никлаус

Вирт

Apple

86 Perl Ларри Уолл   Язык создавался в помощь системному

администратору операционной системы Unix для

обработки различного рода текстов и выделения

нужной информации. Развился до мощного средства

работы с текстами. Является интерпретируемым

языком и реализован практически на всех

существующих платформах. Применяется при

обработке текстов, а также для динамической

генерации веб-страниц на веб-серверах.

16

Page 17: Лекция 1-5

87 Oberon Никлаус

Вирт

  Оберон отличается от Модулы-2 отсутствием многих

необязательных конструкций; добавлены же в язык

средства объектно-ориентированного

программирования -- расширяемые записи. Оберон --

это самый простой универсальный язык.

91 Python   

Интерпретируемый объектно-ориентированный язык

программирования. По структуре и области

применения близок к Perl, однако менее

распространен и более строг и логичен.

92 Oberon-2 Никлаус

Вирт 

В 1992 году были приняты расширения языка

Оберон, предложенные Ханспетером Мёссенбёком.

Расширенный язык получил название Оберон-2.

Основное нововведение -- связанные с типами

процедуры. Сейчас Оберон-2 является фактическим

стандартом языка

93 DelphiАндерс

Хейлсберг

   Delphi 1 был первым инструментарием разработки

Windows приложений, объединившим в себе

оптимизирующий компилятор, визуальную среду

программирования и мощные возможности работы с

базами данных.

95 PHP Расмус

Лердорф  Cкриптовый язык программирования общего

назначения, интенсивно применяющийся для

создания веб-приложений. В настоящее время

поддерживается подавляющим большинством

хостинг-провайдеров и является одним из лидеров

среди языков программирования, применяющихся

для создания динамических веб-сайтов.

96 Java Кен Арнольд,

Джеймс

Гослинг

 Наследует синтаксис C и C++ и избавлен от

некоторых неприятных черт последнего.

Отличительной особенностью языка является

компиляция в код некоей абстрактной машины, для

которой затем пишется эмулятор (Java Virtual

Machine) для реальных систем. Кроме того, в Java нет

17

Page 18: Лекция 1-5

указателей и множественного наследования, что

сильно повышает надежность программирования.

99 C#Андерс

Хейлсберг

  Основной язык разработки приложений для

платформы Microsoft .NET. Компилятор с C# входит

в стандартную установку самой .NET, поэтому

программы на нём можно создавать и компилировать

даже без инструментальных средств, вроде Visual

Studio. C# относится к семье языков с C-подобным

синтаксисом, из них его синтаксис наиболее близок к

C++ и Java. Язык имеет статическую типизацию,

поддерживает полиморфизм, перегрузку операторов

(в том числе операторов явного и неявного

приведения типа), делегаты, атрибуты, события,

свойства, обобщённые типы и методы, итераторы,

анонимные функции с поддержкой замыканий, LINQ,

исключения, комментарии в формате XML.

ЭВМ пятого поколения — это ЭВМ будущего. Программа разработки,

так называемого, пятого поколения ЭВМ была принята в Японии в 1982 г.

Предполагалось, что к 1991 г. будут созданы принципиально новые

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

С помощью языка Пролог и новшеств в конструкции компьютеров

планировалось вплотную подойти к решению одной из основных задач этой

ветви компьютерной науки - задачи хранения и обработки знаний. Коротко

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

программ, а достаточно было бы объяснить на "почти естественном" языке,

что от них требуется. Предполагается, что их элементной базой будут

служить не СБИС, а созданные на их базе устройства с элементами

искусственного интеллекта. Для увеличения памяти и быстродействия будут

использоваться достижения оптоэлектроники и биопроцессоры.

К сожалению, японский проект ЭВМ пятого поколения повторил

трагическую судьбу ранних исследований в области искусственного 18

Page 19: Лекция 1-5

интеллекта. Более 50-ти миллиардов йен инвестиций были потрачены

впустую, проект прекращен, а разработанные устройства по

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

Однако, проведенные в ходе проекта исследования и накопленный опыт по

методам представления знаний и параллельного логического вывода сильно

помогли прогрессу в области систем искусственного интеллекта в целом.

Лекция 3. Алгоритмы

Слово «алгоритм» происходит от имени узбекского математика Хорезми

(по арабски ал - Хорезми), который в IX веке разработал правила 4-х

арифметических действий над числами в десятичной системе счисления.

Алгоритм - точное предписание по выполнению ограниченного числа

определенных действий, последовательно преобразующих исходные данные

в конечный результат.

Совокупность действий по преобразованию исходных данных в

конечный результат составляет процесс выполнения алгоритма, называемый

вычислительным процессом или просто процессом. Тот кто выполняет

алгоритм называется процессор (человек или часть ЭВМ). Алгоритм,

предназначенный для выполнения ЭВМ называется программой.

Алгоритм обладает следующими свойствами:

дискретностью - алгоритм состоит из конкретных действий;

определенностью - точностью, не оставляющей место для произвола,

т.е. алгоритм понятен для возможных исполнителей благодаря этому

свойству процесс выполнения алгоритма носит механический характер;

результативностью - свойством приводить к искомому результату за

конечное число действий (шагов);

Массовостью - пригодностью для решения задач из некоторого класса.

19

Page 20: Лекция 1-5

Пример

Дано X, Вычислить 3x2+6x+2. Допустимые операции - сложение и

умножение 2-х чисел. Т.о. есть предпосылки для разработки алгоритма:

исходные данные - X;

действия - сложение, умножение, которое применительно к выражению

3x2+6x+2 дадут искомый результат.

Т.к. среди действий нет возведения в степень выражение необходимо

записать в виде 3xx+6x+2.

Получим следующий алгоритм:

начало;

вычислить X´X, результат обозначить через Y;

вычислить 3´4, результат обозначить через Z;

вычислить 6´X, результат обозначить через W;

вычислить Z+W, результат обозначить через U;

вычислить U+2, результат обозначить через S;

конец;

Язык Turbo Pascal

Язык программирования Pascal это:

Алгоритмический язык программирования высокого уровня

Разработан Никлаусом Виртом в 1970 году для обучения студентов

программированию.

Хорошо структурированный язык с жестким контролем типов данных

В дальнейшем под языком Pascal будем подразумевать Turbo Pascal.

Любой алгоритмический язык программирования состоит из следующих

элементов:

Алфавит

Лексемы

o Идентификаторы

o Константы

20

Page 21: Лекция 1-5

o Знаки операций и разделители

o Комментарии

Выражения

Типы данных и операции

Операторы

Структура программы

Алфавит

Алфавит языка: кодовая таблица ASCII. Для оригинального языка

Pascal:

1. латинские буквы и символ подчеркивания: ABC...Zabc...z_

2. арабские цифры: 012...9

3. 22 специальных символа: +-*/=><.,:;@')(][}{#$^

Символы алфавита используются для построения базовых элементов

Pascal-программ - минимальных единиц языка, имеющих самостоятельный

смысл. Базовые элементы также называют лексемами.

Лексемы

4. Служебные (зарезервированные) слова.

5. Имена. Они вводятся для обозначения в программе переменных, констант,

типов, процедур и функций.

6. Числа и символьные строки.

7. Знаки операций и разделители. Они формируются из одного или

нескольких специальных символов.

8. Комментарии - произвольная последовательность символов (не

обязательно из алфавита языка, то есть допускаются и русские буквы),

заключенную в фигурные скобки { }.

Идентификаторы

Правило составления идентификаторов: первый символ – латинская

буква, остальные – латинские буквы, цифры или символ подчеркивания

21

Page 22: Лекция 1-5

Определите, какие выражения являются правильным идентификатором:

3Yfgh

V x

R_36%

Fgh23_

&A

Выражения

Выражения могут содержать, переменные, константы, вызовы функций,

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

использования операций

Определите, какие выражения записаны правильно:

A+B

Sin(x)*(2+y)

D(+2/)c

‘A’*2

Операторы

В языке Pascal предусмотрены следующие операторы:

оператор присваивания

составной оператор

пустой оператор

условный оператор

оператор варианта

оператор цикла с предусловием

оператор цикла с постусловием

оператор цикла с параметром

присоединения

оператор процедуры

22

Page 23: Лекция 1-5

Оператор присваивания

Самым простым действием над переменной является занесение в нее

величины соответствующего типа. Иногда говорят об этом, как о присвоении

переменной конкретного значения. Такая команда (оператор) в общем виде

выглядит на языке Паскаль следующим образом:

<Имя переменной>:=<Выражение>;

Выражение, указанное справа от знака ":=", должно приводить к

значению того же типа, какого и сама переменная, или типа, совместимого с

переменной относительно команды присваивания. Например, переменной

типа Real можно присвоить значение типа Integer или Word (впрочем,

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

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

Структура программы

[Program <Имя программы>;]

[Uses <Имена подключаемых модулей>;]

[Label <Список меток>;]

[Const <Объявления констант>;]

[Type < Объявления типов>;]

[Var < Объявления переменных>;]

[<Раздел подпрограмм>]

Begin

[<Операторы>]

End.

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

Таким образом, минимальная синтаксически допустимая программа

выглядит следующим образом:

Begin

23

Page 24: Лекция 1-5

End.

Нетрудно догадаться, что эта программа будет компилироваться и

запускаться (сразу же завершая свою работу), но никаких действий

выполнять не будет.

Более осмысленный пример на языке Pascal:

program Summa;

var

A,B,Sum : integer;

begin

Wгitе(’Введите два числа: ‘);

Readln(A,B);

Sum :=А+В;

Wгitеln(’Сумма равна’,Sum);

Wгitе(’Нажмите Enter’);

Readln;

end.

Для запуска программы из среды Turbo Pascal выберите команду Run в

меню Run. Вы попадете в окно пользователя, появится сообщение:

Введите два числа:

Наберите два любых целых числа с пробелом между ними и нажмите

Enter. Появится следующее сообщение:

Сумма равна

а за ним - сумма двух чисел. В следующей строке появится сообщение:

Нажмите клавишу Enter

Программа будет ожидать нажатия клавиши Епtег. Для наблюдения за

выводом из своей программы, выберите команду User Screen в меню Window

(или нажмите Аlt-F5).

Лекция 4-5. Основные типы данных. Ввод-вывод

24

Page 25: Лекция 1-5

Любые данные, т.е. константы, переменные, значения функций или

выражения, в турбо Паскале характеризуются своими типами. Тип

определяет множество допустимых значений, которые может иметь тот или

иной объект, а также множество допустимых операций, которые применимы

к нему. Кроме того, тип определяет также и формат внутреннего

представления данных в памяти ПК.

Операции языка Pascal и их приоритеты

На этом рисунке приведены группы операций в порядке убывания их

приоритетов. Внутри группы приоритет операций одинаков.

Объявление переменных

var

<имя переменной>:<имя типа1>;

<имя1>[,<имя2>,…]:<тип2>;

var

a,b:integer;

ch:char;

Операции языка Pascal

Унарные

Бинарные

Аппликативные

Мультипликативные

Операции отношения

25

Page 26: Лекция 1-5

Типы данных

Турбо Паскаль характеризуется разветвленной структурой типов

данных.

В Турбо Паскале предусмотрен механизм создания новых типов данных,

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

быть сколь угодно большим.

Простые типы

К простым типам относятся порядковые и вещественные типы.

Типы данных

Простые

Структурированные

Порядковые

Вещественные

Символьный

Целочисленные

Перечисление

Логический

Диапазон

Массивы

Строки

Записи

Файлы

Указатели

26

Page 27: Лекция 1-5

Порядковые типы отличаются тем, что каждый из них имеет конечное

число возможных значений. Эти значения можно определенным способом

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

некоторое целое число – порядковый номер значения.

Вещественные типы, строго говоря, тоже имеют конечное число

значений, которое определяется форматом внутреннего представления

вещественного числа. Однако количество возможных значений

вещественных типов настолько велико, что сопоставить с каждым из них

целое число (его номер) не представляется возможным.

Порядковые типы

К порядковым типам относятся целые, логические, символьный,

перечисляемый и тип-диапазон. К любому из них применима функция

ORD(X), которая возвращает порядковый номер значения выражения Х. Для

целых типов функция ORD(X) возвращает само значение Х, т.е. ORD(X)=X

для Х, принадлежащего любому целому типу. Применение ORD(X) к

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

целое число в диапазоне от 0 до 1(логический тип), от 0 до 255(символьный),

от 0 до 65535(перечисляемый). Тип-диапазон сохраняет все свойства

базового порядкового типа, поэтому результат применения к нему функции

ORD(X) зависит от свойств этого типа.

К порядковым типам можно также применять функции:

PRED (X) – возвращает предыдущее значение порядкового типа(значение

которое соответствует порядковому номеру ORD (X)-1 то есть

ORD(PRED(X))=ORD(X)-1

SUCC (X) - возвращает следующее значение порядкового типа, которое

соответствует порядковому номеру ORD (X)+1 т.е.

ОRD(SUCC(X)=ORD(X)+1.

Например, если в программе определена переменная

27

Page 28: Лекция 1-5

Var

C: Char;

.........

с:=’5’;

то функция PRED(C) вернет значение ‘4’, а функция SUCC(C) значение ‘6’.

Если представить себе любой порядковый тип как упорядоченное

множество значений, возрастающих слева направо и занимающих на

числовой оси некоторый отрезок, то функция PRED(C) не определена для

левого, а SUCC(X) для правого конца отрезка.

Целые типы.

Диапазон возможных значений целых типов зависит от их внутреннего

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

1 приводится название целых типов, длина их внутреннего представления в

байтах и диапазон их возможных значений.

Таблица 5.

Длина, байт Название типа Диапазон значений

1 Byte 0..255

1 Shorting -128.127

2 Word 0...65535

2 Integer -32768...32767

4 longint -2147483648...

2147483647

При использовании процедур и функций с целочисленными

параметрами следует руководствоваться «вложенностью типов», т.е. везде,

где может использоваться WORD, допускается использование BYTE(но не

28

Page 29: Лекция 1-5

наоборот), в LONGINT «входит» INTEGER, который, в свою очередь

включает в себя SHORTINT.

Перечень процедур и функций, применимых к целочисленным типам

приведен в таблице 2. Буквами b, s, w, i, l обозначены выражения

соответственно типа BYTE, SHORTINT, WORD, INTEGER, LONGINT, x –

выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают

переменные соответствующих типов. В квадратных скобках –

необязательный параметр.

Таблица 6.

Обращение Тип результата Действие

Abs (x) X Возвращает модуль х

Chr (b) Char Возвращает символ по его коду

Dec(vx[,i]) Процедура Уменьшает значение vx на i, при

отсутствии i -на 1

Inc(vx,[i]) Процедура Увеличивает значение vx на i, при

отсутствии i -на 1

Hi(i) Byte Возвращает старший байт аргумента

Hi(w) Byte То же

Lo (i) Byte Возвращает младший байт аргумента

Lo(w) Byte То же

Odd(l) Boolean Возвращает TRUE , если аргумент

нечетное число, False – если четное

Random(w) Как у параметра Возвращает псевдослучайное число,

равномерно распределенное на

интервале 0 <= х <w

Sqr(X) То же Возвращает квадрат аргумента

Swap(i) Integer Меняет местами байты в слове

Swap(w) Word То же

29

Page 30: Лекция 1-5

При действиях с целыми числами тип результата будет соответствовать

типу операндов, а если операнды относятся к различным целым типам, - типу

того операнда, который имеет максимальную мощность (максимальный

диапазон значений). Возможное переполнение результата никак не

контролируется, что может привести к недоразумениям, например:

Var

A: integer;

X, y: real;

Begin

A:=32767;

X:= a+2;

Y:=longint (a)+2;

Writeln (x:10:0,y:10:0 );

End.

В результате прогона получим

-32677 32769

Логический тип

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

объявленных констант FALSE(ложь) или TRUE (истина). Для них

справедливы правила:

Ord (false) = 0;

Ord (true)=1;

False<True;

Succ (False)=True;

Pred (true)=False;

Поскольку логический тип относится к порядковым типам, его можно

использовать, например, в операторе

...............

30

Page 31: Лекция 1-5

Var

i : Boolean;

. . . .

for i:=false to true do ...

Логические операции

Таблица 7.

A Not A

False True

True False

Таблица 8.

A B A and B

False False False

False True False

True False False

True True True

Таблица 9.

A B A or B

False False False

False True True

True False True

True True True

Таблица 10.

A B A xor B

False False False

False True True

True False True

True True False

31

Page 32: Лекция 1-5

Пример

if I mod 7 = 0 then

if I mod 13 = 0 then

writeln(I);

if (I mod 7 = 0) and (I mod 13 = 0) then

writeln(I);

Символьный тип

Значением символьного типа является множество всех символов ПК.

Каждому символу приписывается целое число в диапазоне 0..255. Это число

служит кодом внутреннего представления символа, его возвращает функция

ORD.

Для кодировки используется код ASCII. Это 7-битный код, т.е. с его

помощью можно закодировать лишь 128 символов в диапазоне от 0 до 127. В

то же время в 8-битном байте, отведенном для хранения символов в Турбо

Паскале, можно закодировать в два раза больше символов в диапазоне 0..255.

Первая половина символов ПК с кодами 0..127 соответствует стандарту

ASCII. Вторая половина с кодами 128-255 не ограничена жесткими рамками

стандарта и может меняться на ПК разных типов.

Символы с кодами 0…31 относятся к служебным кодам. Если эти коды

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

При использовании их в операциях ввода - вывода они могут иметь

следующее самостоятельное значение:

Таблица 11.

Символ Код Значение

Bel 7 Звонок: вывод на экран этого символа

32

Page 33: Лекция 1-5

сопровождается звуковым сигналом

Ht 9 Горизонтальная табуляция: при выводе на

экран смещает курсор в позицию кратную

8, плюс 1

Lf 10 Перевод строки: при выводе на экран все

последующие символы будут выводиться,

начиная с той же позиции, но на

следующей строке.

VT 11 Вертикальная табуляция: при выводе на

экран заменяется спец.символом

FF 12 Прогон страницы: при выводе на принтер

формирует страницу, при выводе на экран

заменяется спец. символом

Cr 13 Возврат каретки: водится нажатием на

клавишу enter (при вводе с помощью read

или readln означает команду “ввод” и в

буфер ввода не помещается; при выводе

означает команду “продолжить вывод с

начала текущей строки”)

Sub 26 Конец файла: вводится с клавиатуры

нажатием ctrl+Z; при выводе заменяется

спец. знаком

Esc 27 Конец работы: вводится с клавиатуры

нажатием на клавишу esc; при выводе

заменяется спец.символом

К типу CHAR применимы операции отношения, а также встроенные

функции:

CHR (B) – функция типа CHAR преобразует выражение В типа BYTE в

символ и возвращает его своим значением;

33

Page 34: Лекция 1-5

UPCASE (CH) – функция типа CHAR; возвращает символ в верхнем

регистре, если он определен для аргумента CH типа CHAR, в противном

случае возвращает сам символ Ch:

Var c1,c2:char;

Begin

C1:=upcase (‘s’);

C2:=upcase (‘ ф ’);

Writeln (c1,’ ‘, c2);

End.

В результате прогона программы на экран будет выдано

S ф

Так как функция UPCASE не обрабатывает кириллицу.

Раздел описания типов

Раздел описания типов начинается ключевым словом Type и содержит

описания новых типов данных, созданных программистом:

Type

<Имя типа1>=<Описание1>;

<Имя типа2>=<Описание2>;

...

Перечисляемый тип

Задается перечислением тех значений, которые он может получать.

Каждое значение именуется некоторым идентификатором и располагается в

списке, обрамленным круглыми скобками:

Type

Colors = (red, white, blue);

34

Page 35: Лекция 1-5

Применение перечисляемых типов делает программы нагляднее.

Если, например, в программе используются данные, связанные с

месяцами года то:

Type

Тип месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен,

окт, ноя, дек);

Var

Месяц :ТипМесяц;

..........

If месяц= авг then writeln(‘Море!!!’);

Этот фрагмент программы был бы очень наглядным. Увы! В Паскале

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

писать так:

tуре

TypeMonth=(jan, feb, mar, may, apr, jun, jul, aug, sep, oct,

nov, dec);

Var

Month:TypeMonth;

..........

If Month = aug then writeln(‘Хорошо бы поехать к морю!’);

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

номерами этих значений устанавливается порядком перечисления: первое

значение в списке получает значение 0, второе – 1 и т.д. Максимальная

мощность перечисляемого типа составляет 65535 значений, поэтому

фактически перечисляемый тип задает некоторое подмножество целого типа

WORD и может рассматриваться как компактное объявление сразу группы

целочисленных констант со значениями 0,1 и т.д.

35

Page 36: Лекция 1-5

Использование перечисляемых типов повышает надежность программ

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

соответствующие переменные. Пусть задано:

Type

Colors =(black, red, white);

Ordenal = (one, two, three);

Days = (monday, tuesday, wednesday);

С точки зрения мощности и внутреннего представления все три типа

эквивалентны:

Ord (black)=0,…, ord (white)=2,

Ord (one)=0, ... , ord (three)=2,

Ord (monday)=0, ... , ord (wednesday)=2,

Однако если определены переменные

Var

col: colors;

Num:ordenal;

Day:days;

То допустимы операторы

Col:=black;

Num:=succ (two);

Day:=pred (tuesday);

но недопустимы

Col:=one;

Day:=black;

и т.д.

36

Page 37: Лекция 1-5

Как уже упоминалось, между значениями перечисляемого типа и

множеством целых чисел существует однозначное соответствие, задаваемое

функцией ord(x). В Турбо Паскале допускается и обратное преобразование:

любое выражение типа WORD можно преобразовать в значения

перечисляемого типа, если только значение целочисленного выражения не

превышает мощности перечисляемого типа.

Например, для рассмотренного выше объявления типов эквивалентны

следующие присваивания:

Col:=one;

Col:=colors (0);

Разумеется присваивание

Col:=0;

Будет недопустимым.

Переменные любого перечисляемого типа можно объявлять без

предварительного описания этого типа:

Var col: (black, white);

Тип диапазон

Это подмножество есть подмножество своего базового типа, в качестве

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

Тип-диапазон задается границами своих значений внутри базового типа:

<мин. знач.>..<макс. знач.>

Например:

Type

Digit = ‘0’.. '9';

37

Page 38: Лекция 1-5

Dig2 = 48..57;

Тип диапазон не обязательно описывать в разделе type, а можно

указывать непосредственно при объявлении переменной:

Var

Date: 1..31;

Month: 1 .. 12;

Lchr:’A’..’Z’;

При объявлении типа диапазона нужно руководствоваться следующими

правилами:

1. Два символа «..» рассматриваются как один символ, поэтому между ними

недопустимы пробелы;

2. Левая граница диапазона не может превышать правую границу.

Тип-диапазон наследует все свойства базового типа, но с

ограничениями, связанными с его меньшей мощностью. В частности если

определена переменная

Type

Days = (mo, tu, we, th, fr, sut, sa);

Weekend = sa.. su;

Var

w: Weekend;

...................

W:=sa;

то ord(w) вернет значение 5, в то время как PRED(W) приведет к ошибке.

Вещественные типы

В отличие от порядковых типов, значения которых всегда

сопоставляется с рядом целых чисел и, следовательно, представляются в ПК

абсолютно точно, значения вещественных типов определяют произвольное

38

Page 39: Лекция 1-5

число лишь с некоторой конечной точностью, зависящей от внутреннего

формата вещественного числа.

Таблица 12.

Длина, байты Название типа Мантисса Диапазон

десятичного

порядка

4 Single 7...8 -45...+38

6 Real 11...12 -39...+38

8 Double 15...16 -324...+308

10 Extended 19...20 -4951...+4932

8 Comp 19...20 -2^63+1...

+2^63-1

Как видно из таблицы вещественное число в Паскале занимает от 4-х до

10 смежных байт и имеет следующую структуру в памяти ПК.

S E M

Здесь s-знаковый разряд числа; е – экспоненциальная часть, содержит

двоичный порядок.m- мантисса числа.

Мантисса имеет длину от 23 до 63 двоичных разрядов, что и

обеспечивает точность 7..8 для single и 19..20 для extended десятичных цифр.

Десятичная точка подразумевается перед левым (старшим) разрядом

мантиссы, но при действиях с числом ее положение сдвигается влево или

вправо в соответствии с двоичным порядком числа, хранящимся

экспоненциальной части, поэтому действия над вещественными числами

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

Паскаль характеризуется богатой гаммой вещественных типов, однако

доступ к типам single, double, extended возможен только при особых режимах

39

Page 40: Лекция 1-5

компиляции. Дело в том, что эти типы рассчитаны на аппаратную поддержку

арифметики с плавающей точкой и для их эффективного использования в

состав ПК должен входить арифметический сопроцессор 8087, 80287 или их

отечественный аналог К1810ВМ87.

Компилятор позволяет создавать программы, работающие на любых ПК

и использующие любые вещественные типы. В процессе запуска Турбо

Паскаль проверяет состав аппаратных средств и выявляет наличие или

отсутствие сопроцессора.

Арифметический сопроцессор всегда обрабатывает числа в формате

extended, а три других вещественных типа в этом случае получаются

простым усечением результатов до нужных размеров и применяются я в

основном для экономии памяти.

Например:

{$N+, E+}

Type

RealType= real;

Var

Epsilon:= realtype;

Begin

Epsilon:=1;

while 1+epsilon/2>1 do

Epsilon:=epsilon/2;

Writeln (epsilon);

End.

Независимо от объявления типа REALTYPE на печать будет выдан рез-т:

1.08420217248550Е-0019,что соответствует типу extended.

Чтобы получить правильный результат программу необходимо изменить

следующим образом:

{$N+, E+}

40

Page 41: Лекция 1-5

Type

Realtype = real;

Var

epsilon, eps1: realtype;

Begin

Epsilon:=1;

Repeat

Epsilon:=epsilon/2;

Eps1:=epsilon+1;

Until eps1>1;

Writeln (2*epsilon)

End.

Следует учесть, что тип REAL оптимизирован для работы без

сопроцессора. Если ваш ПК оснащен сопроцессором, использование типа

REAL приведет к дополнительным затратам времени на преобразование

REAL к EXTENDED. Поэтому никогда не используйте REAL на ПК с

сопроцессором, т.к. дополнительные затраты времени на преобразование

типов могут свести на нет все преимущества сопроцессора. При разработке

программ, критичных ко времени счета, следует заменять его типами SINGLE

или DOUBLE: по сравнению с типом REAL скорость вычислений на машинах

с сопроцессором в этом случае увеличивается в 2-3 раза. Если в ПК нет

арифметического сопроцессора, скорость обработки данных всех

вещественных типов приблизительно одинакова.

Особое положение в Паскале занимает тип COMP, который трактуется

как вещественное число без экспоненциальной и дробной части. COMP- это

"большое" целое число со знаком, сохраняющее 19.. 20 значащих десятичных

цифр. В то же время в выражениях COMP полностью совместим с любыми

другими вещественными типами: над ними определены все вещественные

операции, он может использоваться как аргумент математических функций и

т.д. Наиболее подходящей областью применения типа COMP являются

41

Page 42: Лекция 1-5

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

над ними сводятся к операциям с достаточно длинными целыми числами.

Для работы с вещественными данными могут использоваться

встроенные математические функции, представленные в таблице 3. В этой

таблице REAL означает любой вещественный тип, INTEGER- любой целый

тип.

Таблица 13.

Обращение Тип параметра Тип результата Примечание

Abs(x) Real, integer Тип аргумента Модуль аргумента

ArcTan(x) Real Real Арктангенс (радианы)

Cos (x) “ “ Косинус (радианы)

Exp (x) “ “ Экспонента

Frac (x) “ “ Дробная часть числа

Int (x) “ “ Целая часть числа

Ln (x) “ “ Логарифм натуральный

Pi - Real П = 3.141592653...

Random - Real Равномерное

псевдослучайное число

0<=x<1

Random(i) Integer Integer Равномерное

псевдослучайное целое

число 0<=i<1

Randomize - - Инициация датчика

случайных чисел

Sin(x) Real Real Синус (радианы)

Sqr(x) Real, integer Тип аргумента Квадрат аргумента

Sqrt (x) real Real Корень квадратный

42

Page 43: Лекция 1-5

43