Программирование на процедурном языке высокого уровня(Turbo Pascal)



Скачать 125.96 Kb.
Дата09.07.2014
Размер125.96 Kb.
ТипДокументы
Программирование на процедурном языке высокого уровня(Turbo Pascal)

  1. Знакомство с языком программирования Turbo Pascal.

Я
Никлаус Вирт

Блез Паскаль
зык программирования Паскаль был создан швейцарским программистом Никлаусом Виртом в начале 1970-х гг. как язык для начала серьёзного изучения программирования. Вирт назвал его именем выдающегося французского математика Блеза Паскаля (1623 — 1662 гг.). Особая роль в продвижении этого языка принадлежит фирме Borland, которая, в частности, создала интегрированную среду (IDE) для работы с этим языком. Паскаль постоянно совершенствовался, и сегодня его наиболее полно представляют версии Turbo Pascal 7.0, Borland Pascal 7.0, а также Object Pascal. По некоторым экспертным оценкам, в той или иной степени он изучается более чем в 65% учебных заведений мира.

    1. Алфавит, лексика и структура программ. Интегрированная среда языка. Процедуры вывода строковой константы




Алфавит языка Паскаль включает буквы, цифры, шестнадцатеричные цифры, специальные символы и зарезервированные слова. Особое место в алфавите языка занимают пробелы, к которым относятся любые символы в диапазоне кодов от 0 до 32 Американского стандартного кода для обмена информацией (ASCII). Эти символы рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов. Несколько следующих друг за другом пробелов считаются одним пробелом, кроме тех случаев, когда речь идёт о строковых константах.

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

PROGRAM <имя_программы>; заголовок программы

<блок_описаний>;

BEGIN

<блок_операторов>;

END.

PROGRAM, BEGIN, END — зарезервированные служебные слова (BEGIN, END называют соответственно открывающей и закрывающей операторными скобками).

Имя программы представляет пример идентификатора, например, PROGRAM MyProgram14.

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

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

  • идентификатор должен начинаться с буквы или символа подчеркивания «_»;

  • Turbo Pascal 7.0 не различает прописные и строчные символы

  • начиная со второй позиции в идентификаторе можно применять цифры, например, z12a3;

  • пробел в Turbo Pascal 7.0 является разделителем и не может стоять внутри идентификатора.
    Для идентификаторов, состоящих из двух и более слов, используются прописные буквы или знак подчёркивания, например, ExampleOne или Example_one;

  • в идентификаторах разрешается использование только символов латинского алфавита;

  • зарезервированные слова и стандартные директивы в качестве идентификаторов не используются;

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

Интегрированная среда языка

Интегрированная среда — программный комплекс, включающий в себя удобные для пользователя средства (интерфейс), предназначенный для создания интеллектуального электронного продукта (текста, программы, графического изображения, мультимедийной программы и т.д.).

Система программирования Turbo Pascal 7.0 является интегрированной средой, включающей в себя:

  • редактор, позволяющий набирать и корректировать текст программы;

  • транслятор — компилятор языка программирования Паскаль;

  • подробный справочник по языку с многочисленными примерами;

  • библиотеки модулей и процедур;

  • средства для работы с окнами и манипуляторам «мышь»;

  • систему отладки программы.

Структура основного экрана системы программирования Turbo Pascal 7.0:

Основной экран системы состоит из:

  • строки меню;

  • рабочей зоны;

  • строки состояния.

Строка меню активизируется нажатием клавиши F10 или щелкчком левой кнопки мыши в троке меню.

Рабочая зона — это часть экрана дисплея, где набирается текст программы. В середине верхнего края рабочей зоны высвечивается имя программного файла, которое может быть присвоено пользователем (по умолчанию NONAME00.PAS).

Процедуры вывода строковой константы

Строковая константа — это строка символов, заключённая в апострофы, например: ‘Строковая константа’. Константа не изменяет свое значение в процессе работы программы.

Вывод информации на экран монитора производится процедурой:

W
Строковая константа _
RITE
или WRITELN, например, вывод на экран строковой константы ‘Строковая константа’ можно организовать процедурой WRITE:

WRITE(‘Строковая константа’); — на экране появится: курсор останется после вывода в той же строке экрана

и
Строковая константа _
ли процедурой WRITELN:

WRITELN(‘Строковая константа’); — на экране появится: курсор после вывода переместится в начало следующей строки экрана.

ПРАКТИЧЕКОЕ ЗАДАНИЕ

Вывести на экран дисплея свои фамилию, имя и отчество.

Руководство к выполнению задания:

  • Составить программу по образцу:

PROGRAM PrRab1;

BEGIN

WRITELN(‘Иванов Иван Иванович’);

END.

  • Войти в систему программирования Turbo Pascal 7.0 и ввести текст программы в рабочей зоне экрана.

  • Откомпилировать программу, используя комбинацию клавиш Alt+F9, исправить допущенные ошибки.

  • Исполнить программу, используя комбинацию клавиш Ctrl+F9.

  • Просмотреть результат исполнения программы, сняв панель экрана системы программирования комбинацией клавиш Alt+F5, повторное нажатие этой комбинации клавиш, вернет экран системы.

  • Комбинируя процедуры вывода информации WRITE , WRITELN выведите свои фамилию, имя и отчество в столбик



    1. Работа в символьном режиме экрана.



    1. Работа в графическом режиме экрана.



  1. Динамические структуры данных

    1. Два подхода к распределению памяти на стадии компиляции

Статический (традиционный)

Динамический

На основании информации из раздела описаний и длины кода самой программы операционная система во время работы программы выделяет определённый объём оперативной памяти, который закрепляется за программой на всё время её выполнения

В процессе работы программы специальной процедурой программист может запросить у системы некоторый объём памяти, а после использования (также специальной процедурой) возвратить её системе, т.е. динамическое управление памятью – это выделение памяти во время выполнения программы.

Например, пусть в программе имеется описание:
Const a:real=25.369;

Var MAS:array[1..200] of integer;

I,j:byte;

s:string

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

под константу типа real – 6 байтов; под массив – 400 байтов (200 элементов по 2 байта); под переменные i и j – по 2 байта; под переменную s – 256 байтов. Всего – 6+400+2+2+256=666 байт.

Преимущества:

  • разумное использование динамических структур данных приводит к сокращению объёма памяти, необхродимого для работы программы;

  • динамические данные не требуют объявлений их как данных фиксированного размера;

  • ряд алгоритмов более эффективен при реализации их с использованием динамических структур. Например, вставка элемента в массив на определенное место требует перемещения части элементов массива. При вставке в середину списка достаточно несколько операторов присваивания.ё

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

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

2)ситуации, при которых требуется объём памяти, больший того, который может быть доступен программе в статическом режиме;

3)ищется слово в тексте, длина которого заранее неизвестна.

Недостатки:

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

  • использование динамических структур требует затрат на память для ссылок. В некоторых задачах объём памяти, отводимой для ссылок, превосходит объём памяти, выделяемой непосредственно для данных;

  • существуют алгоритмы, реализация которых более эффективна на обычных данных.



    1. Принципы адресации оперативной памяти

Если в программе мы ссылаемся на любой объект по его имени ( на переменную, константу, массив, строку и т.д.), то в машинном коде, вырабатываемом компилятором, в этом месте стоит адрес байта памяти, начиная с которого в ней расположен этот объект.

Абсолютный адрес состоит из 20 двоичных разрядов и задается двумя переменными типа word — сегментом и смещением. Сегмент адресует пространство оперативной памяти с точностью до параграфа — фрагмента ОЗУ в 16 байт. Смещение же адресует память с точностью до байта, но в пределах данного сегмента.

Реальный (абсолютный) адрес складывается из номера сегмента, сдвинутого влево на 4 разряда(т.е. умноженного на 16):

А=SG.16+SM

Таким образом, систему адресации оперативной памяти можно условно сравнить с адресацией улицы, где номера сегментов — это номера домов, а смещения — номера квартир.

    1. Основные сведения о ссылочном типе данных (указателях)

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

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

Переменной, на которую указывает указатель, не обязательно присваивать какое-либо имя. К ней можно обращаться через имя указателя, потому она называется ссылочной переменной. Все ссылочные переменные имеют одинаковый размер, равный 4 байтам. Для хранения динамических переменных выделяется специальная область памяти, называемая «кучей». Работая с указателями, мы работаем с адресами величин, а не с их именами. Место для данных в «куче» отводится и высвобождается только во время работы программ, и потому мы говорим о динамических данных.

    1. Объявление переменных ссылочного типа

Типизированные указатели

Нетипизированные указатели

Всегда привязаны к конкретному типу данных. Для объявления используется специальный символ ”^”, после которого записывается базовый тип динамической переменной.

TYPE <имя_типа>=^<базовый_тип>;

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

или

VAR <имя_переменной>:^<базовый_тип>;

Например,

TYPE ss=^Integer;

VAR x,y: ss;{Указатели на переменные целого типа}

a:^Real; {Указатель на переменную вещественного типа}

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

Можно записать x:=y; но нельзя записать x:=a;

Если x — это указатель, значением которого является адрес переменной типа Integer, то x^ — это обращение к самой переменной, расположенной по этому адресу.

Среди возможных указателей в Турбо Паскале выделяется один специальный указатель, который «никуда не указывает». Для его обозначения используется зарезервированное слово Nil. Указатель Nil считается константой, совместимой с любым ссылочным типом.

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

Например,

VAR p: pointer;

Любое значение можно передать, используя нетипизированные указатели: p:=x;

x:=p;

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

TYPE MAS:array[1..50] of real;

Тогда можно указать тип указателя на такой объект:

TYPE PMAS:^MAS;

ПРИМЕР программы с использованием указателей:

PROGRAM isp_ukaz1;

Uses crt;

VAR A:^Integer;B:^Integer; W:Integer;

BEGIN

clrscr;

{Запрос на выделение динамической памяти}

WriteLn('Введите число:');

ReadLn(A^);{Вводится целое число, которое размещается в ОЗУ по адресу, являющемуся значением указателя A}

W:=A^;

B^:=7;{По адресу, являющемуся значением указателя B, размещается целое число 7 в формате Integer}

W:=W+B^;

WriteLn(W);

{После использования динамическая память, выделенная ранее, возвращается системе}

Readkey;

END.

    1. Операции при работе с ссылочными переменными

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

Например, P^:=15 означает, что по адресу, который явлется значением указателяP, записывается значение 15.

      1. При использовании типизированных указателей запрос на выделение динамической памяти осуществляется процедурой

NEW(P), где P — типизированный указатель.

Процедура NEW отводит место для хранения динамической переменной P^ и присваивает её адрес ссылке P.

Освобождение же памяти, запрошенной с помощью NEW, осуществляется процедурой DISPOSE(P), которая освобождает память, занимаемую динамической переменной. После выполнения процедуры значение указателя P становится неопределённым:

P P^

P:=Nil

NEW(P)

P^:=15

DISPOSE(P)

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

память запрашивается процедурой

GETMEM(P,SIZE),

а высвобождается — процедурой

FREEMEM(P,SIZE),

где P — нетипизированнный указатель, а SIZE —объём прамяти в байтах (за одно обращение — не более 65521 байта).

Тут нужно помнить правило: высвобождать нужно ровно столько памяти, сколько было запрошено, и с того же самого адреса!

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

Вся динамическая память представляет собой сплошную область, которая физически располагается в старших адресах ОЗУ непосредственно за памятью, занимаемой самой программой.

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

Адрес начала кучи хранится в стандартной переменной HEAPORG, конечный адрес — в переменной HEAPEND, а адрес начала невыделенной части памяти кучи хранит переменная HEAPPTR:

Системная область Программа Куча Системная область

Характерно, что в момент выделения динамической памяти указатель P, являющийся параметром в процедуре NEW(P), получает то значение, которое на этот момент имел указатель кучи PTR(HEAPPTR), после чего он смещается на величину объёма выделенной памяти. Чередование процедур NEW и DISPOSE приводит к формированию «ячеистой» структуры памяти.

Все операции с кучей выполняются под руководством специальной программы — «администратора кучи». При очередной процедуре «администратор» разыскивает наименьший свободный фрагмент, где может разместиться объект, под который запрашивается память, и адрес начала найденного фрагмента становится значением указателя, а сам фрагмент помечается как занятая часть кучи

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

      1. Сформируйте массив случайных чисел, находящихся в диапазоне от 1 до 255, состоящий из 1000 элементов. Отобразите квадрат наибольшего числа. Массив расположите в динамической памяти.

PROGRAM din_mas;

Uses crt;

TYPE TARR=array[1..1000] of byte;

VAR P:^TARR;MX:byte;i,kv:Integer;

BEGIN

clrscr;

randomize;

NEW(P);

MX:=0;

For i:=1 To 1000 do

Begin

P^[i]:=random(256);

If P^[i]> MX Then Mx:=P^[i];

End;

DISPOSE(P);

kv:=sqr(MX);

WriteLn(kv);

Readkey;

END.

      1. Составьте программу нахождения корней квадратного уравнения, расположив его коэффициенты в динамической памяти.

PROGRAM din_kvur;

Uses crt;

VAR a,b,c:^real;d,x1,x2:real;

BEGIN

clrscr;

randomize;

NEW(a);NEW(b); NEW(c);{Запрос динамической памяти}

WriteLn('Введите коэффициенты:');

ReadLn(a^,b^,c^);

D:=sqr(b^)-4*a^*c^;

If D<0 Then

begin

WriteLn('Дискриминант отрицателен');

Halt;

end;

x1:=((-b^)+sqrt(D))/(2*a^);

x2:=((-b^)-sqrt(D))/(2*a^);

DISPOSE(a);DISPOSE(b);DISPOSE(c);{Высвобождение динамической памяти}

WriteLn('x1=',x1:4,' ','X2=',X2:4);

Readkey;

END.

      1. В текстовом файле находится матрица a целых чисел

a[1,1]…a[1,n]



a[m,1] a[m,n]

причём каждая строка матрицы занимает отдельную строку файла (разделитель между числами – пробел). Числа m и n заранее неизвестны. Загрузив a в динамическую память, найти такое число, которое является максимальным в своей строке и в то же время минимальным в своём столбце, или выдать сообщение, что таких чисел нет. Можно доказать, что если все элементы в матрице различны и подобное число существует, то оно единственное. Такое число называется седловой точкой матрицы.

Решение:

Рассмотрим решение данной задачи для матрицы, все элементы которой различны.

Докажем единственность решения в случае его существования.

Пусть существуют две седловые точки — a[i1,j1] и a[i2,j2], причём i1≠i2 и j1≠j2 в силу определения седловой точки и отсутствия в матрице одинаковых элементов. Рассмотрим элемент матрицы a[i1,j2]. Так как a[i1,j1] максимален в своей строке, а a[i2,j2] минимален в своём столбце, получаем

a[i2,j2] < a[i1,j2] < a[i1,j1]

С другой стороны —

a[i2,j2] > a[i2,j1] > a[i1,j1]

Полученное противоречие доказывает, что предположение о существовании двух седловых точек неверно.

    1. Линейные списки


Похожие:

Программирование на процедурном языке высокого уровня(Turbo Pascal) iconЛитература по курсам "Программирование на языке высокого уровня" и «Программирование и основы алгоритмизации»
Перевезенцева Е. С., Перевезенцев А. А. Технология решения задач с использованием компьютера: Учебное пособие по курсу "Программирование...
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconУрок n 17 Основы программирования на языке Turbo Pascal
Паскаль (Pascal)- учебный инструментальный язык программирования вычислительных машин и персональных компьютеров. На современных...
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconI основы языка высокого уровня турбо pascal алфавит языка Pascal
Прописные и строчные буквы Pascal'eм не различаются. Знаки «возведение в степень» и двойная кавычка в языке отсутствуют
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconПрограммирование на языке Turbo Pascal
Использование икт при создании программ является неотъемлемой частью обучения школьников программированию
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconКраткая теория по курсу информатика Типы данных языка программирования Turbo Pascal
В языке программирования Turbo Pascal все данные, используемые программой должны принадлежать к какому-либо типу данных. Некоторые...
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconОтчет по лабораторной работе №15 по дисциплине "Программирование на языке высокого уровня"

Программирование на процедурном языке высокого уровня(Turbo Pascal) iconДанные логического, символьного и строкового типа в Turbo Pascal. Библиотека (модуль) crt и Graph. Работа с файлами в Turbo Pascal. Построение графиков функций. Численные методы
Логический тип переменных называется булевым. Он основан на ма- тематической логике, в которой применяются две константы: 1 ис
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconРабочая программа дисциплины программирование на языке высокого уровня
Государственным образовательным стандартом высшего профессионального образования направления 552800 «Информатика и вычислительная...
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconУрок №57-58 Языки и системы программирования. Начальные сведения о языке Turbo Pascal
...
Программирование на процедурном языке высокого уровня(Turbo Pascal) iconВопросы к экзамену по дисциплине «Программирование»
Базовые математические операции и стандартные математические функции в Turbo Pascal. Запись математических выражений
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org