Реализация процедур и функций в языке турбо паскаль

Автор работы: Пользователь скрыл имя, 19 Декабря 2012 в 17:13, реферат

Краткое описание

Язык Паскаль, названный в честь французского математика и философа Блеза Паскаля (1623-1662), был создан как учебный язык программирования в 1968-71 годах швейцарским ученым Никлаусом Виртом на кафедре информатики Стэнфордского университета (Цюрих). В настоящее время это язык имеет более широкую сферу применения, чем предусматривалось при его создании. Свое признание Паскаль получил с появлением пакета Турбо Паскаль (Turbo Pascal). Этот язык отличается простотой понимания, стройностью и структурностью алгоритмов, быстротой компилятора и удобными средствами создания и отладки программ.

Вложенные файлы: 1 файл

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

— 54.79 Кб (Скачать файл)

    END.

Наша  процедура OutVar получает из главной  процедуры вещественное число x и  символ Name, но ничего не передает обратно. Теперь попробуем написать процедуру, которая по заданным значениям x и y вычисляет cos(x)+cos(y) и cos(x)-cos(y) :

    PROCEDURE T(x,y:Real; Cplus,Cminus:Real);

    BEGIN Cplus:=cos(x)+cos(y); Cminus:=cos(x)-cos(y); END;

    VAR p,m:Real;

    BEGIN T(1.235,0.645,p,m); WRITELN(p:7:3,m:7:3); END.

Запустим  эту программу и - вместо правильного  результата 1.129,-0.470 - получим в лучшем случае нули. Дело в том, что через  параметры-значения (а Cplus и Cminus описаны  в нашей процедуре как параметры-значения!) невозможно передать информацию из процедуры, но лишь в процедуру. Чтобы правильно  решить нашу задачу, следует Cplus и Cminus описать  в заголовке как параметры-переменные:

    PROCEDURE T(x,y:Real; VAR Cplus,Cminus:Real);

    BEGIN Cplus:=cos(x)+cos(y); Cminus:=cos(x)-cos(y); END;

Таким образом, входные параметры процедуры  могут быть и параметрами -значениями и параметрами-переменными, а выходные параметры - только параметрами-переменными. Для того, чтобы глубже понять это правило, выясним, что же происходит с параметрами и аргументами при вызове процедуры. В момент вызова для каждого параметра-значения в специальной области памяти, называемой стеком (за контроль переполнения стека отвечает описанная выше опция компилятора Stack cheking), создается его копия - переменная соответствующего типа, которой присваивается значение аргумента. В дальнейшем процедура работает с этой копией, и при выходе из процедуры копия уничтожается. Таким образом, никакие изменения параметра-значения не могут быть известны за пределами процедуры. По-другому обрабатываются параметры-переменные: в процедуру передается не значение аргумента, а его адрес, и она работает с аргументом (теперь понятно, почему аргумент, соответствующий параметру-переменной, должен быть только именем переменной: он должен иметь адрес). Так что все изменения параметра на самом деле происходят с аргументом и известны в вызывающей процедуре.

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

     FUNCTION имя ( список параметров ) : тип  ;

В остальном  функции аналогичны процедурам. Обращение  к функции осуществляется с помощью  указателя функции:

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

Указатель функции может использоваться как  и любое другое выражение того же типа, но это не оператор, в отличие  от оператора вызова. Запишем пример функции:

     FUNCTION Na3(x:LongInt):Boolean;

    { функция проверяет, делится ли x на 3 }

     BEGIN Na3:=x MOD 3=0; END;

     VAR L:LongInt;

     BEGIN WRITE('Введите целое число '); READ(L);

            WRITE('Число ',L);

            IF NOT Na3(L) THEN WRITE(' не');

            WRITELN(' делится на 3 !');

     END.

В любой  процедуре и функции можно  использовать черезвычайно полезную стандартную  процедуру Exit без параметров для  немедленного выхода в вызывающую процедуру.

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

   

 

 

 

 

FUNCTION Factorial(n:Byte):Real;

    BEGIN IF n<=1 THEN Factorial:=1

                    ELSE Factorial:=n*Factorial(n-1);

    END;

Но это, конечно, очень плохая функция, гораздо  лучше записать этот алгоритм так:

    FUNCTION Factorial(n:Byte):Real;

    VAR i:Byte; f:Real;

    BEGIN f:=1; FOR i:=2 TO n DO f:=f*i;

           Factorial:=f;

    END;

Итак, мы знаем, что программа может содержать  много процедур и функций, и в  каждой из них могут быть описаны  типы, константы и переменные. Но не все из них могут быть использованы в любом месте программы, каждое описание имеет строго определенную сферу действия. Пусть процедура  А находится внутри процедуры  В - условимся называть процедуру  А внутренней по отношению к В, а процедуру В - объемлющей по отношению  к А. Если же ни процедура А не находится внутри В, ни В не находится  внутри А, то эти процедуры - внешние  по отношению друг к другу. Сфера  действия описания любого объекта включает ту процедуру, где он описан (начиная  с места описания) и все внутренние процедуры, если там данный идентификатор  не описан. В принципе, это дает возможность  передавать информацию в процедуры  и функции, минуя параметры, то есть пользоваться во внутренней процедуре  переменными, описанными в объемлющей процедуре, но такой стиль программирования считается ненадежным. Старайтесь, если это возможно, все переменные, используемые в процедуре, описывать  в этой процедуре.

Для чего нужны процедуры и функции, когда  и как их следует применять? Многие начинающие программисты избегают процедур и функций, утверждая, что "без  них проще". На самом деле обойтись без функций и процедур легко  только в самых тривиальных программах. Сколько-нибудь сложная программа, записанная "одним куском", требует  при отладке от программиста огромных усилий, которые зачастую все равно  пропадают даром. Обязательно используйте  в своих программах процедуры  и функции! Хорошая программа  должна содержать главным образом  обращения к процедурам и функциям. Конечно, не существует никаких жестких  правил, определяющих, когда использовать функции, а когда нет, но автор  этой книжки может предложить несколько  нестрогих, но полезных рецептов:

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

- не смешивайте  в одной процедуре (функции)  ввод-вывод данных и вычислительные  алгоритмы;

- называйте  свои процедуры (функции) мнемоническими  именами;

- если  алгоритм, который вы решили выделить  в процедуру (функцию), все еще  слишком сложен, оформите фрагмент  этого алгоритма в другой процедуре  (функции);

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

- если  в вашей программе встречаются  многократно вложенные циклы  или "многоэтажные" условные  операторы, это верный признак,  что вам нужны процедуры (функции);

- если  текст вашей программы не умещается  на одном экране - подумайте о  процедурах;

- используйте  в процедурах и функциях процедуру  Exit.

 

История развития турбо паскаля

К началу 60-х годов. Все основные языки программирования все еще можно было пересчитать по пальцам, но вскоре их число начало резко возрастать. Поэтому были предприняты попытки создать универсальный язык программирования, но ни одна из этих попыток не увенчалась успехом. Среди десятка наиболее распространенных на тот период времени языков программирования каждый был ориентирован на решение определенных задач. Бейсик употреблялся для написания простых программ. Фортран - с его четко определенными правилами выполнения арифметических операций - являлся классическим языком программирования для решения математических и физических задач. Язык программирования COBOL был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса. Другие языки программирования были также специализированы. Еще один заслуживающий внимания язык программирования - Алгол - предназначался для записи алгоритмов, которые строятся в виде последовательности процедур, применяемых для решения поставленной задачи. Программисты далеко неоднозначно приняли Алгол, широкого одобрения он не получил. Но все же влияние Алгола на развитие других языков программирования оказалось значительным. Среди языков, целью создания которых было улучшение Алгола, следует особо отметить Паскаль, разработанный в конце 60-х годов швейцарским ученым Никлаусом Виртом. Pascal был назван в честь французского философа и математика XVII века Блеза Паскаля. Как известно, история повторяется, и вся новизна лишь в том, что на каждом новом витке - она делает это на более высоком уровне. Мы уже отмечали, что BASIC появился как побочный продукт преподавательской деятельности у Кемени и Курца, когда они пытались обучать студентов программированию. Нечто похожее произошло и с Паскалем. Некоторое время Никлаус Вирт был профессором информатики в Федеральном техническом университете в Швейцарии и нуждался в языке, с помощью которого относительно легко можно было бы обучать студентов навыкам программирования на хорошем уровне. Базовая концепция Паскаля была разработана Виртом примерно в 1970 году, и Паскаль очень быстро начал повсеместно распространяться, прежде всего, благодаря легкости в изучении и наглядности написанных на нем программ. Язык Паскаль требовал от программиста определения всех переменных в отдельной секции в начале программы. Так как эти определения задавались явным образом, то в программах появлялось сравнительно немного ошибок, и их было проще понять и исправить разработчику. Это сделало Паскаль популярным при создании больших программ. В 1962 году он был объявлен официальным языком программирования для учащихся средних школ, которые намерены специализироваться в области вычислительной техники и программирования в американских университетах. В то же время, стандартный Паскаль обладал рядом существенных недостатков. Поэтому Вирт продолжил развивать свое детище, так через девять лет, в 1979 году, появилась Модула-2, прежде всего от Паскаля она отличалась тем, что давала возможность использовать модульное программирование, а значит, с ее помощью уже можно было создавать достаточно большие проекты. К середине 70-х годов назрела необходимость разработать международный стандарт на Паскаль. В результате, в 1982 году появился стандарт ИСО 7185. Но Вирт не останавливался на достигнутом, и немного позднее появились Ада и Оберон, которые позволяли использовать типы и объекты, что уже давало кардинально новые возможности для разработчиков. Язык Ада был создан фактически по заказу Министерства обороны США и, соответственно, при его активной поддержке. Был проведен конкурс среди разработчиков, и его выиграла некая фирма Honeywell в лице ее подразделения Cii-Bull с руководителем Ж. Ишбиа. Язык был назван в честь Августы Ады Лайвейс - дочери английского поэта Дж. Байрона, которая считается первой программисткой. Окончательная версия спецификаций языка Ада появилась в феврале 1983 году, она и стала основной. Ада до сих пор считается современным языком с традиционной структурой управления, возможностями определения типов и подпрограмм. Удовлетворяет язык и требованиям модульности. В дополнение к классическим свойствам язык обеспечивает программирование задач реального времени, а также возможности моделирования параллельного решения задач и обработку прерываний. Поскольку Ада морфологически произошла от Pascal, у них есть очень много общего, хотя наблюдаются и некоторые аналогии с Модулой. С самого начала Ада предназначалась для разработки больших программных пакетов. Учитывая то, какую серьезную (моральную и не только) поддержку предоставляли правительство и Министерство обороны США, неудивительно, что язык очень быстро развивался и без особых проблем распространялся. Здесь нужно заметить, что стандартный Паскаль был действительно очень простым языком. В то же время в сознании большинства людей (особенно молодого поколения, тех, кому еще нет 30), Паскаль обычно ассоциируется с Turbo Pascal от фирмы Borland - это не верно! Ведь Turbo Pascal включает в себя многие положительные качества как Модулы, так и Oberon"a, и является гораздо более сложным и мощным языком, чем Паскаль Вирта. Судите сами: он позволяет использовать и модули, и типы, и даже объекты, давая всю мощь объектно-ориентированного программирования в руки разработчика. Как же он возник? Никлаус Вирт здесь совсем не при чем, а при чем - Андерс Хейлсберг, которого и следует считать отцом-создателем Турбо Паскаля, вскоре вытеснившего с рынка все другие спецификации. Это победоносное шествие началось в 1984 году с появлением версии Turbo Pascal 2.0, ее распространение шло стремительными темпами. Версии 3.0, 4.0 и 5.0 выходили соответственно в 1985 и 1988 годах (последние две). В них появилось несколько революционных нововведений: возможность разбивать программу на несколько файлов (модулей), интерфейс взаимодействия с MS-DOS и встроенный отладчик. Отладчик (debugger) - это очень полезное средство, позволяющее в период выполнения программы просматривать содержимое регистров процессора, текущие значения переменных и последовательность выполнения программы. От версии к версии оптимизировалась работа компилятора, который генерировал исполняемый код на основе текста программы. Даже достаточно простые программы, перенесенные с других языков программирования, не использующие всех возможностей, которые давал Паскаль, после компиляции начинали работать существенно быстрее. Так, основной из причин, по которой автор этих строк еще очень давно решил отказаться от Бейсика и использовать Паскаль, - явилась наглядная демонстрация скорости работы компилятора Turbo Pascal 2.0. Компиляция происходила в полтора раза быстрее, ехе`шник получался во много раз меньше (несколько килобайт для простенького приложения против 40-50 у Бейсика), а скорость выполнения полученного кода просто впечатляла. Сейчас, когда машины оснащаются сотнями мегабайт оперативной памяти и быстродействующими процессорами, мало кто обращает внимание на такие, казалось бы, мелочи, а тогда, при работе на 8088 процессоре со всего 640 кб оперативной памяти, это было очень важно. Последующее развитие Pascal привело к появлению таких библиотек, как Turbo Vision, с использованием которой написан, наверное, всем известный, Dos Navigator, а также языка Object Pascal, который впоследствии стал основой для создания Delphi. Delphi - компилятор языка Object Pascal. Delphi 1 был первым инструментарием разработки Windows-приложений, объединившим в себе оптимизирующий компилятор, визуальную среду программирования и мощные возможности работы с базами данных. Годом позже Delphi 2 предложил все то же, но на новом уровне современной 32-битной операционной системы Windows 95 и Windows NT. Кроме того, Delphi 2 предоставил программисту 32-битовый компилятор, создававший более быстрые и эффективные приложения, мощные библиотеки объектов. Продолжительная работа команды разработчиков Delphi привела к появлению в третьей версии продукта расширенного набора инструментов для создания приложений, возможности использования технологий COM для разработки приложений WWW и многих других современных технологий программирования. Современный Delphi 6 является очередным шагом в эволюции компиляторов Паскаля, первый, как вы помните, был сделан более 16 лет назад Андерсом Хейлсбергом. Пожалуй, мало найдется языков, которые бы жили так долго, при этом оставаясь актуальными. Действительно, Delphi позволяет даже самому неискушенному в программировании человеку после сравнительно небольшого времени, потраченного на его изучение, создавать профессионально выглядящие программные продукты с графическим интерфейсом пользователя в стиле Windows. Особенно удобно на Delphi работать с базами данных. Естественно, эта легкость работы с Delphi оборачивается некоторыми минусами языка. Основной недостаток Delphi - скорость работы, она очень и очень невысока. Да и генерируемый компилятором код получается увесистым и неуклюжим. Так, создание пустого окна даст ехе-файл размером почти в полмегабайта, на С++ - такое же займет 15-30 килобайт, в зависимости от ваших стараний (или 1 Кб при совсем творческом подходе к проблеме). Тем не менее, для некоторых сфер применения Delphi является идеальным решением, поэтому сейчас он достаточно популярен. Я рассмотрел одну из классификаций языков программирования, в ее основе лежит выразительная мощность языка. Однако существуют и другие разделения, произведенные по совершенно другим признакам. Одна из них - классификация, согласно которой все языки делятся на вычислительные и языки символьной обработки. Можно сказать, что все вышеперечисленные языки относились к первому типу. Что же касается языков обработки символьной информации, то следует хотя бы упомянуть о ЛИСП`е (сокращение от List Processing Language), ПРОЛОГ`е (сокращение от Programming in Logic) и РЕФАЛ`е (алгоритмический язык рекурсивных функций). Язык ЛИСП разработан Дж. Маккарти в США. Он стал основой ряда программных реализаций интеллектуальных систем и дал толчок к разработке множества специализированных языков искусственного интеллекта и языков представлений знаний. Гораздо интереснее Пролог, появившийся в 1972 году. Он стоит особняком в ряду тех языков программирования, о которых мы успели рассказать. Пролог - это сокращение от PROgramming LOGic. Можно сказать, что он появился "на пустом месте", так как фактически при его создании ни один из известных языков не был взят за основу. Пролог разрабатывался Аланом Колмари - сотрудником университета в Лумини, и в отличиe от ЛИСП`а - это европейский язык. В чем же его особенность? А вот в чем: это первый и, пожалуй, единственный язык программирования, основанный на логическом выводе и решении поставленной задачи. Это роднит его с искусственным интеллектом. Фактически, на основе ряда начальных данных (аксиом, фактов) в соответствии с правилами логики, указывающими рамки поиска пути к решению, язык самостоятельно приходит к некоторым выводам. То есть, вы описываете не то, как надо решать некоторую задачу (как это делается в подавляющем большинстве других языков), a лишь ставите ее перед Прологом, и он уж сам ищет решение. Из-за необычности своей структуры он использовался при решении достаточно нестандартных задач, поэтому оказался распространен не так широко, как другие языки. Наконец, третьим языком символьной обработки, с появлением которого в эту область были внесены интересные идеи, стал язык РЕФАЛ, созданный В. Турчиным. Подобно ЛИСП’у, этот язык активно использует мощные средства преобразования списков на основе концепции распознавания по образу. Языки символьной обработки сыграли важную роль в программировании. С одной стороны, они позволили осуществить разработку и реализацию ряда практически важных систем аналитических преобразований, интеллектуальных программ и так далее, а с другой - именно эти языки породили целый спектр исследований, результатом которых стала разработка и реализация языков представления знаний. Такие языки - важнейшее средство реализации типичных спецификаций проблем информационной интеграции, и, следовательно, они могут с успехом претендовать на роль языков сверхвысокого уровня.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Практическая  часть

Задание №1

 

Созать  программу, определяющую среднюю температуру  за неделю.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Содержание

 

 

 

  1. Электронный журнал Soft&Script
  2. Онлайн книга на сайте http://pascal.guti.ru/ Последнее посещение 24 сентября 2012г.
  3. Турбо Паскаль 7.0. - 4-е изд., испр автор Грызлова Т.П., Грызлов В.И. издательство Питер год издания 2005, ISBN 5-469-00648-4.
  4. Программирование на языке Паскаль: задачник автор Воронина Ирина, Ускова Ольга, Бакланов Михаил издательство Питер год издания 2005. ISBN 5-318-00553-5.
  5. Алгоритмизация и программирование на Turbo Pascal: от простых до олимпиадных задач: Учебное пособие автор Долинский Михаил издательство Питер год издания 2004. ISBN 5-469-00444-9.
  6. Turbo Pascal в задачах и примерах автор Культин Н. Б. издательство БХВ-Петербург год издания 2010 размер, страниц 256 ISBN 978-5-8206-0061-6 
  7. Паскаль. Программирование на языке высокого уровня: Учебник для вузов автор Павловская Татьяна Александровна издательство Питер год издания 2004 размер, страниц не указан ISBN 5-94723-511-0 
  8. название Паскаль для школьников автор Ушаков Денис Михайлович, Юркова Татьяна Анатольевна издательство Питер год издания 2011 размер, страниц не указан ISBN 978-5-4237-0170-3 
  9. Программирование на языке Pascal. Учебное пособие автор Андреева Татьяна Анатольевна издательство ИНТУИТ.РУ год издания 2009 размер, страниц не указан ISBN 5-94774-405-8 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложения


Информация о работе Реализация процедур и функций в языке турбо паскаль