Контрольная работа на тему pascal

Если у вас нету времени на контрошу по pascal паскалю вы всегда можете попросить меня, вам нужно написать мне, и я вам помогу онлайн или в срок 1-3 дня всё зависит что там у вас за работа, вдруг она огромная!

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

 

Введение в контрольную работу по теме: "Паскаль"

 

Основные этапы решения задач на компьютере

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

 

По этой ссылке вы сможете узнать как я помогаю с контрольными работами:

Помощь с контрольными работами

 

Рассмотрим эти этапы на следующем примере: пусть требуется вычислить сумму двух целых чисел и вывести на экран видеомонитора результат.

Первый этап - постановка задачи. На этом этапе участвует человек, хорошо представляющий предметную область задачи. Он должен четко определить цель задачи, дать словесное описание содержания задачи и предложить подход к ее решению. Для задачи вычисления суммы двух целых чисел человек, знающий, как складываются числа, может описать задачу следующим образом: ввести два целых числа, сложить их и вывести сумму в качестве результата решения задачи.

Второй этап - математическое или информационное моделирование. Цель этого этапа - создать такую математическую модель решаемой задачи, которая может быть реализована в компьютере. Существует целый ряд задач, где математическая постановка сводится к простому перечислению формул и логических условий. Этот этап тесно связан с первым этапом, и его можно отдельно не рассматривать, однако возможно, что для полученной модели известны несколько методов решения, и тогда предстоит выбрать лучший. Для вышеописанной задачи данный этап сводится к следующему: введенные в компьютер числа запомним в памяти под именами А и В, затем вычислим значение суммы этих чисел по формуле А+В, и результат запомним в памяти под именем Summa.

Третий этап - алгоритмизация задачи. На основе математического описания необходимо разработать алгоритм решения.

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

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

 

По этой ссылке вы сможете научиться оформлять контрольную работу:

Теоретическая контрольная работа примеры оформления

 

Например, алгоритм решения задачи вычисления суммы двух целых чисел на языке блок-схем будет записан, как показано на рис. 1.

Свойства алгоритма. При составлении и записи алгоритма необходимо обеспечить, чтобы он обладал рядом свойств.

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

Для нашего примера исполнитель алгоритма должен понимать такую запись действий, как сложить числа А и В.

Конечность алгоритма - обязательность завершения каждого из действий, составляющих алгоритм, и завершае-мость выполнения алгоритма в целом. Записанный на рис.1 алгоритм обладает этим свойством, так как запись действий исполнителя завершается записью об окончании алгоритма.

Контрольная работа на тему pascal

Рис. 1

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

 

По этой ссылке вы сможете заказать контрольную работу:

Заказать контрольную работу

 

Массовость, т.е. возможность применения данного алгоритма для решения целого класса задачи. Так как алгоритм, показанный на рис.1, позволяет правильно подсчитать сумму не только чисел 2 и 3, но любой другой пары целых чисел, он обладает свойством массовости. Для того чтобы алгоритм обладал свойством массовости, следует составлять алгоритм, используя обозначения величин и избегая конкретных значений.

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

Четвертый этап - программирование. Программой называется план действий, подлежащих выполнению некоторым исполнителем, в качестве которого может выступать компьютер. Составление программы обеспечивает возможность выполнения алгоритма и соответственно поставленной задачи исполнителем-компьютером. Во многих задачах при программировании на алгоритмическом языке часто пользуются заменой блока алгоритма на один или несколько операторов, введением новых блоков, заменой одних блоков другими.

Пятый этап - ввод программы и исходных данных в ЭВМ. Программа и исходные данные вводятся в ЭВМ с клавиатуры с помощью редактора текстов, и для постоянного хранения осуществляется их запись на гибкий или жесткий магнитный диск.

Шестой этап - тестирование и отладка программы. На этом этапе происходят исполнение алгоритма с помощью ЭВМ, поиск и исключение ошибок. При этом программисту приходится выполнять рутинную работу по проверке работы программы, поиску и исключению ошибок, и поэтому для сложных программ этот этап часто требует гораздо больше времени и сил, чем написание первоначального текста программы.

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

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

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

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

Полученные в результате решения выходные данные анализируются постановщиком задачи, и на основании этого анализа вырабатываются соответствующие решения, рекомендации, выводы. Например, если при решении задачи на компьютере результат сложения двух чисел 2 и 3 будет 4, то следует сделать вывод о том, что надо изменить алгоритм и программу.

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

Языки программирования

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

Современные компьютеры не настолько совершенны, чтобы понимать программы, записанные на каком-либо употребляемом человеком языке - русском, английском, японском... Команды, предназначенные для ЭВМ, необходимо записывать в понятной ей форме. С этой целью применяются языки программирования - искусственные языки, алфавит, словарный запас и структура которых удобны человеку и понятны компьютеру.

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

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

Язык низкого уровня - это средство записи инструкций к компьютеру простыми приказами-командами на аппаратном уровне. Такой язык отражает структуру данного класса ЭВМ и поэтому иногда называется машинно-ориентированным языком. Пользуясь системой команд, понятной компьютеру, можно описать алгоритм любой сложности. Правда такая запись для сложных задач будет настолько громоздкой, что у человека мало шансов сделать ее безошибочной, так как этот язык мало приспособлен для использования человеком, ведь запись программы на этом языке представляет собой последовательность нулей и единиц.

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

Более многочисленную группу составляют языки программирования высокого уровня, средства которых допускают описание задачи в наглядном, легко воспринимаемом виде. Отличительной особенностью этих языков является их ориентация не на систему команд той или иной ЭВМ, а на систему операторов, характерных для записи определенного класса алгоритмов. К языкам программирования этого типа относятся: Бейсик, Фортран, Алгол, Паскаль, Си. Программа на языках высокого уровня записывается системой обозначений, близкой человеку (например, фиксированным набором слов английского языка, имеющих строго определенное назначение). Программу на языке высокого уровня проще понять и значительно легче отладить.

К языкам программирования сверхвысокого уровня можно отнести Ал-гол-68, при разработке которого сделана попытка формализовать описание языка, приведшая к появлению абстрактной и конкретной программ. Абстрактная программа создается программистом, конкретная выводится из первой. Предполагается, что при таком подходе принципиально невозможно породить неверную синтаксически (а в идеале семантически) конкретную программу. Язык APL относят к языкам сверхвысокого уровня за счет введения сверхмощных операций и операторов. Запись программ на таком языке получается компактной.

 

Возможно вам пригодятся эти страницы:

Контрольная работа на тему южные материки заказать
Контрольная работа на тему autocad заказать
Контрольная работа на тему методы оптимальных решений заказать
Контрольная работа на тему НДС заказать

 

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

Язык программирования Паскаль

Язык программирования Паскаль (назван в честь выдающегося французского математика и философа Блеза Паскаля (1623 - 1662)), разработан в 1968 - 1971 гг. Никлаусом Виртом, профессором, директором Института информатики Швейцарской высшей политехнической школы. Язык Паскаль, созданный первоначально для обучения программированию как систематической дисциплине, скоро стал широко использоваться для разработки программных средств в профессиональном программировании.

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

  • Благодаря своей компактности, удачному первоначальному описанию Паскаль оказался достаточно легким для изучения.
  • Язык программирования Паскаль отражает фундаментальные и наиболее важные концепции (идеи) алгоритмов в очевидной и легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
  • Язык Паскаль позволяет четко реализовать идеи структурного программирования и структурной организации данных.
  • Язык Паскаль сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической поверки правильности программ.
  • Применение языка Паскаль значительно подняло «планку» надежности разрабатываемых программ за счет требований паскаля к описанию используемых в программе переменных, проверки согласованности программ при компиляции без ее выполнения.
  • Использование в Паскале простых и гибких структур управления: ветвлений, циклов.

Алфавит и лексическая структура языка паскаль

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

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

В качестве букв в Паскале используются прописные и строчные буквы латинского алфавита:

  1. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  2. a b c d e f g h l j k l m n o p q r s t u v w x y z
  3. и знак подчеркивания (_);
  4. в качестве десятичных цифр: 0 1 2 3 4 5 6 7 8 9.

Шестнадцатеричные цифры строятся из десятичных цифр и букв от А до F (или от а до f)

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

Слова (лексемы) в Паскале.

Неделимые последовательности знаков алфавита образуют слова (лексемы), отделенные друг от друга разделителями и несущие определенный смысл в программе. Разделителем могут служить пробел, символ конца строки, комментарий. Набор слов (лексем), используемый в Паскале, можно разделить на три группы: зарезервированные лова, стандартные идентификаторы и идентификаторы пользователя.

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

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

Группа слов, имеющая некоторый смысл. Называется словосочетанием. В языке программирования словосочетание, состоящее из слов и символов и задающее правило вычисления некоторого значения, называется выражением. Минимальная конструкция языка, представляющая собой законченную мысль, есть предложение. Ели предложение языка программирования задает полное описание некоторого действия, которое необходимо выполнить, оно называется оператором. Предложение, описывающее структуру и организацию данных - объектов языка, над которыми производятся различные действия, называется описанием.

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

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

Для того чтобы программа решения задачи обладала свойством массовости, следует не употреблять конкретные значения величин, а использовать их обозначения для возможности изменения по ходу выполнения программы их значений. Для обозначения программ, а в программе переменных и постоянных величин, различных процедур, функций, объектов используются имена - идентификаторы (identification - установление соответствия объекта некоторому набору символов).

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

В идентификатор не могут входить пробелы, специальные символы алфавита. Обратите внимание, что буквы русского алфавита не могут входить в идентификатор Турбо Паскаля.

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

  1. Идентификатор начинается только с буквы или знака подчеркивания (исключение составляют метки, которые могут начинаться и цифрой, и буквой).
  2. Идентификатор может состоять из букв, цифр и знака подчеркивания (пробелы, точки и другие специальные символы при написании идентификаторов недопустимы).
  3. Между двумя идентификаторами должен быть, по крайней мере, один пробел.
  4. Максимальная длина идентификатора 127 символов, но значимы только первые 63 символы.
  5. При написании идентификаторов можно использовать как прописные, так и строчные буквы. Компилятор не делает различий между ними, хотя они и имеют различные номера в стандартном коде обмена информацией. На практике рекомендуется применять эту особенность для более простого чтения и понимания значений идентификаторов. Так, вместо идентификатора nomerotdela лучше написать NomerOtdela, выделив прописными буквами каждую из двух смысловых частей.

Константы и переменные

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

Константами называются элементы данных, значения которых установлены в описательной части программы и в процессе выполнения программы не изменяются. Константы задаются идентификаторами пользователя. Например, если вы используете в программе ваше имя, то его лучше всего задать константой, так как имя дается раз и навсегда, и не меняет своего значения.

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

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

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

Само название «переменная» подразумевает, что содержимое объявленной области памяти будет изменяться в ходе выполнения программы. Переменные описываются в специальном разделе, который начинается зарезервированным словом var (variable - переменная).

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

Кроме констант и переменных существуют так называемые типизированные константы, которые являются как бы промежуточным звеном между переменными и константами. Слово «константа» означает, что данные этого типа описываются в разделе const, а слово «типизированные» указывает, что для них должен указываться и тип, как у переменных.

Структура паскаль - программы.

Программа на языке Паскаль разделяется на две части заголовок программы и блок (тело программы),за которым следует точка, являющаяся признаком конца текста программы. Заголовок программы отделяется от блока точкой с запятой. В заголовке программы, начинающимся служебным словом PROGRAM, данной программе дается некоторое имя, которое внутри программы не имеет какого-либо смысла. В стандартном Паскале за именем программы в круглых скобках через запятые указываются имена файлов, используемых в программе. Если в программе используются только стандартные файлы ввода и вывода Input и Output, то, как правило, их имена можно не указывать. Заголовок программы в Турбо Паскале не обязателен, имена файлов после него не указываются.

Примеры заголовков программ:

PROGRAM Primer (Input, Output)

PROGRAM Proba

Основной частью программы является блок (тело программы). Блок в Турбо Паскале состоит из семи разделов. Все разделы, кроме раздела операторов, могут быть опущены. Порядок разделов в стандартном Паскале строго определен:

[раздел объявления модулей]

[раздел описания меток]

[раздел определения констант]

[раздел определения типов]

[раздел описания переменных]

[раздел описания процедур и функций]

раздел операторов.

Таким образом тело программы состоит из двух частей: декларативной -описания обрабатываемых данных и исполняемой - описания алгоритмических действий над данными. Раздел операторов, описывающий алгоритм обработки данных, является основным и обязательно должен присутствовать в любой Паскаль-программе. Разделы отделяются друг от друга точкой с запятой. В Турбо Паскале разделы описаний могут следовать друг за другом в любом порядке и встречаться несколько раз.

РАЗДЕЛ МОДУЛЕЙ. Раздел объявления модулей открывается служебным словом USES за которым через запятые перечислены имена стандартных (Crt, Dos, Printer, Graph, Turbo3, Graph3, Overlay) и пользовательских библиотечных модулей. Например: USES Crt, Dos, Complex;

Модуль System считается предварительно объявленным, поэтому его объявление компилятор расценит как попытку повторного объявления и выдаст сообщение об ошибке.

РАЗДЕЛ МЕТОК. Любой оператор программы может быть помечен. Для этого перед ним через двоеточие ставят метку. Оператор не может быть помечен более, чем одной меткой. Все метки операторов должны быть различны. На помеченные операторы можно сослаться с помощью оператора перехода. В качестве меток используются целые числа от 0 до 9999,

например: 34:х:=1;

В Турбо Паскале меткой может быть любой идентификатор. Любая метка, используемая в программе, должна быть предварительно описана в разделе меток. Этот раздел открывается служебным словом LABEL, за которым через запятые перечислены метки. Завершается раздел меток точкой с запятой. Пример непустого раздела меток:

LABEL 25,34,9,3451;

LABEL А1,А2,345,В;

РАЗДЕЛ КОНСТАНТ. Константой называется конкретное значение того или иного типа, которое зафиксировано в тексте программы и не может изменяться в процессе выполнения программы. Константе можно дать имя и использовать его в качестве синонима константы. При описании константы указывают ее имя знак равенства и саму константу, например: Е=2.7818281828,

Имя, использованное для определения константы, можно употреблять при определении последующих констант. Например: NE=-E;

Все описания констант должны содержаться в разделе определения констант. Этот раздел начинается служебным словом CONST и заканчивается точкой с запятой. Если в разделе несколько констант, то они отделяются друг от друга точкой с запятой. Например:

CONST Е=2.71828;

NE=-E;

Word-'ФУНКЦИЯ';

Maximum=100;

РАЗДЕЛ ТИПОВ. В Паскале имеются стандартные типы значений, которые могут использоваться в программе без каких-либо дополнительных описаний. Наряду с этими типами можно вводить в употребление и другие типы значений. Однако, в отличие от стандартных, каждый такой тип должен быть явно определен в программе. Все описания типов должны быть даны в разделе типов. Этот раздел начинается служебным словом TYPE, за которым следуют описания типов, отделенные друг от друга точкой с запятой, например:

TYPE Index=1..20;

Day=(Mo,Tu,We,Th,Fr,Sa,Su);

РАЗДЕЛ ПЕРЕМЕННЫХ. Каждая переменная, встречающаяся в программе, должна быть описана в разделе описания переменных. Описание переменной предшествует использованию ее в программе. Для описания переменнй указывают ее имя и через двоеточие ее тип, например:

I: Integer;

X:Real;

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

I,J,K,L: Integer;

X,Y:Real;

Все описания переменных должны содержаться в разделе переменных, который начинается служебным словом VAR. Описания отделяются друг от друга точкой с запятой. Каждая переменная, используемая в программе, должна быть описана не более одного раза.

Пример раздела переменных:

VAR I,J,K:Integer;

X,Y,Z:Real;

M,N: Integer;

Dl,D2:Day;

РАЗДЕЛ ПРОЦЕДУР И ФУНКЦИЙ. Программист может ввести в употребление любые необходимые процедуры и функции. Каждая такая процедура и функция должны быть определены с помощью соответствующего описания. Каждой процедуре и функции дается свое имя. Описание каждой процедуры начинается со служебного слова PROCEDURE, а функции со служебного слова FUNCTION. Раздел процедур и функций не начинается каким-то специальным служебным словом - начало данного раздела определяется по служебным словам PROCEDURE и FUNCTION. Порядок расположения описаний процедур и функций в этом разделе не существенен.

РАЗДЕЛ ОПЕРАТОРОВ. Это основной раздел программы. Здесь задаются те действия, которые должны быть выполнены при работе данной программы. Раздел операторов начинается служебным словом BEGIN, а заканчивается служебным словом END и точкой. Операторы отделяются друг от друга точками с запятыми, перед служебным словом END точка с запятой не ставится.

 

ПРОСТЕЙШИЕ ПРОГРАММЫ НА ПАСКАЛЕ.

Рассмотрим примеры программ на Паскале.

ПРИМЕР 1.

Напишите программу вычисления функции: z=ln(x2+y2+1)

ПРОГРАММА 1.

PROGRAM Primer 1; {Программа вычисления функции z=ln(x2+y2+1)}

USES Crt; {Раздел модулей}

VAR X,Y:Real; {Раздел переменных}

BEGIN {Раздел операторов}

ClrScr;

GotoXY(5,2);

Write ('Вычисление функции z=ln(x*x+y*y+1)');

GotoXY(1,5);

Write('Bведите X:');

Readln(X);

Write('Bведите Y:');

Readln(Y);

Writeln;

Writeln('Z=',LN(X*X+Y* Y+1))

END.

В фигурных скобках размещены комментарии к программе. Они могут быть опущены, так как при работе компилятора пропускаются. ClrScr - процедура очистки экрана в Турбо Паскале. Процедура GotoXY(N,M) устанавливает курсор в позицию N строки М. Процедура Writeln с пустым списком вывода переводит строку. Процедуры ClrScr, GotoXY описаны в модуле Crt, а процедуры Write, Read, Writeln, Readln в модуле System.

ПРИМЕР 2.

Напишите программу, вычисляющую площадь трапеции по заданным длинам оснований и высоты.

ПРОГРАММА 2.

PROGRAM Trap;

USES Crt;

VAR A,B,H,S:Real;

BEGIN

ClrScr;

GotoXY(8,3);

Write ('Вычисление площади трапеции');

GotoXY(1,5);

Write('Bвeдитe длину первого основания:');

Readln(A);

Write('Bвeдитe длину второго основания:');

Readln(B);

Write('Bвeдитe высоту:');

Readln(H);

S:=((A+B)/2)*H;

Writeln;

Writeln('Плoщaдь трапеции равна:',S)

END.

 

Типы данных в языке программирования паскаль

При решении задач выполняется обработка информации различного характера. Это могут быть целые и дробные величины, строки и др. Соответственно константы и переменные должны быть описаны как целые, дробные, строковые и т.д.

Для описания множества допустимых значений величины и совокупности операций, в которых может участвовать данная величина, используется указание ее типа данных. Тип данных (data type) - множество величин, объединенных определенной совокупностью допустимых операций.

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

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

Стандартные типы предлагаются пользователям разработчиками системы Турбо Паскаль. К ним относятся целочисленные, вещественные, литерные, булевские типы данных и указатели.

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

 

Перечень типовых данных в Турбо Паскале.

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

1. Простые типы (скалярные типы).

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

Целые типы:

byte,

shortint,

integer,

word,

longint.

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

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

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

Интервальный тип (диапазон).

Вещественные типы:

real,

single,

double,

extended,

соmр.

Ссылочный тип.

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

Строковый (string).

Регулярный (array).

Комбинированный (record).

Множественный (set).

Файловый (file).

3. Процедурные типы.

Скалярные типы данных.

К скалярным (scalar - простые) типам данных относятся типы данных таких величин, значения которых не содержат составных частей. Целочисленные типы данных

Целочисленные типы данных представляют собой значения, которые могут использоваться в арифметических выражениях и занимать в памяти от 1 до 4 байт.

Целочисленные типы данных

Контрольная работа на тему pascal

 

Вещественные тины данных

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

Вещественные тины данных

Контрольная работа на тему pascal

Вещественные значения могут изображаться в форме с фиксированной точкой, например 7.32, 456.721 или 0.015, а также в форме с плавающей точкой, т.е. парой чисел вида <мантисса>Е<порядок>.

Числа из предыдущего примера в форме с плавающей точкой будут записаны так: 7.32Е+00, 4.56721Е+02, 1.5Е - 02.

Литерный (символьный) тин

Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПЭВМ. Каждому символу приписывается целое число в диапазоне от 0 до 255. Для кодировки используется код ASCII.

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

Пример:

var

Ch: char;

Letter, Symbol: char;

В программе значения переменных и констант типа char должны быть заключены в апострофы. Например, 'А' обозначает букву А,' ' - пробел, ';' - точку с запятой.

Над данными символьного типа определены следующие операции отношения: =,<>,<,>,<=,=>, вырабатывающие результат логического типа.

Для данных символьного типа определены следующие стандартные функции:

chr(x) - преобразует выражение х типа byte в символ и возвращает значение символа;

ord(ch) - преобразует символ ch в его код типа byte и возвращает значение кода;

pred(ch) - возвращает предыдущий символ;

succ(ch) - возвращает следующий символ.

Примеры:

ord (':') = 58

ord ('А') = 65

chr (128)= Б

pred ('Б') = A

succ ('Г') = Д

Булевский тип

Булевским типом называют тип данных, представляемый двумя значениями: True (истина) и False (ложь). Он широко применяется в логических выражениях и выражениях отношения. При описании величин этого типа указывают слово boolean. Для размещения в памяти переменной булевского типа требуется 1 байт

Пример:

var

Flag, Rezult: boolean;

Пользовательские типы

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

Данные этих типов занимают в памяти один байт, поэтому скалярные пользовательские типы не могут содержать более 256 элементов. Их применение обеспечивает семантический контроль вводимых данных, значительно улучшает наглядность программы, делает более легким поиск ошибок и экономит память. Перечисляемыи тип

Перечисляемый тип (enumerated type) - тип данных, заданных списком принадлежащих ему значений.

Объявление перечисляемого типа описывает множество идентификаторов, которые являются возможными значениями перечисляемого типа. Идентификаторы в описании типа представляют собой константы. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки. Первая константа имеет порядковый номер нуль, вторая - 1 и т.д.

Формат:

type

<имя типа> = (<значение1, значение2,..., значение n>);

var

<идентификатор,...> : <имя типа>;

Пример:

type

Gaz = (Ge, С, О, N);

Metall 1 = (Na, К, Li, Си, Zn);

var

G1, G2, G3 : Gaz;

Met1, Met2 : Metall;

Season: (Winter, Spring, Summer, Autumn);

 

Интервальный тин (диапазон)

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

Обе константы должны принадлежать одному из стандартных типов (напомним, что тип real здесь недопустим). Значение первой константы должно быть обязательно меньше значения второй.

Формат:

type

<имя типа> = <константа1>. .<константа2>;

var

<Идентификатор,...> : <имя типа>;

Пример.

type

Days = 1..31;

var

RabDay, BolnDay : Days;

В этом примере переменные RabDay и BolnDay имеют тип Days и могут принимать любые значения из диапазона 1..31. выход из диапазона вызывает программное прерывание.

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

const

Min = 1; Max = 31;

type

Days = Min .. Max;

var

RabDay, BolnDay : Days;

 

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

Основная часть программы на Турбо Паскаль представляет собой последовательность операторов, каждый из которых производит некоторое действие над данными. Разделителем операторов служит точка с запятой. Все операторы языка Турбо Паскаль подразделяются на две группы : простые и структурные.

 

Простые операторы

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

 

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

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

Формат оператора:

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

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

1) NOT

2) *, /, DIV, MOD, AND

3) +, -, OR, XOR

4) =, <>, <=, <,>, >=, IN.

Операции одинакового старшинства выполняются слева направо. С помощью скобок можно задать любой желаемый порядок вычислений.

Переменная и выражение должны иметь одинаковый тип. Исключение составляет случай, когда тип переменной REAL. Тогда тип выражения может быть INTEGER.

Пусть, например, заданы следующие описания переменных:

VAR I,J,K:INTEGER;

A,B,C:REAL;

BOOL:BOOLEAN;

CH1,CH2:CHAR;

Тогда возможны следующие операторы присваивания:

I:= I DIV J + К

А:= В/С

BOOL:=A=B

СН1:=СН2

 

Оператор безусловного перехода

Оператор безусловного перехода предоставляет возможность изменять порядок выполнения операторов. С его помощью естественный порядок выполнения программы (т.е. оператор за оператором) прерывается и указывается, что дальнейшее выполнение программы должно продолжаться с оператора, помеченного меткой, которая использована в данном операторе перехода. Формат оператора:

GOTO <метка>

В качестве меток используются целые числа без знака из отрезка от 0 до 9999. В Турбо Паскале в качестве метки может быть использован любой идентификатор.

Примеры операторов перехода и помеченных операторов:

GOTO 25

GOTO M1

25: IF X>0 THEN X:=X*X

M1:I:=0

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

При использовании оператора GOTO необходимо помнить, что областью действия метки является только тот блок, в котором она описана. Передача управления в другой блок запрещена.

 

Оператор вызова процедуры

Оператор вызова процедуры служит для активизации предварительно определенной пользователем или стандартной процедуры. Например:

ClrScr;

InitWork(True);

Writeln('Hello');

1.4. Пустой оператор.

Пустой оператор никак не обозначается и не вызывает никаких действий. Пустой ператор - это просто лишняя точка с запятой в программе. Чаще всего пустой оператор встречается с меткой и ставится в конце составного оператора или в конце программы.

BEGIN

. . .

GOTO Metka; {переход в конец блока}

. . .

Metka: {пустой оператор помечен меткой}

END;

 

Структурные операторы

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

 

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

Составной оператор объединяет некоторую последовательность операторов в единый оператор путем заключения этой последовательности в операторные скобки - служебные слова BEGIN и END.

Формат оператора:

BEGIN <оператор 1>;<оператор 2>;..(оператор N> END

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

Примеры составных операторов:

BEGIN I:=0 END

BEGIN Y:=X/2; Х:=Х+Н END

 

Условные операторы

В Турбо Паскале имеются два условных оператора IF и CASE. Рассмотрим оператор IF. С помощью оператора IF выбирается и выполняется один из операторов, входящих в его состав. Формат оператора: IF <логическое выражение> THEN <оператор1> ELSE <оператор2>

Выполнение такого условного оператора происходит так: если логическое выражение истинно, то выполняется первый оператор, если ложно, то второй.

Условный оператор используется также в сокращенной форме:

IF <логическое выражение> THEN <оператор>

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

По синтаксису после THEN и ELSE может стоять только один оператор, поэтому если необходимо выполнить несколько операторов, то их объединяют в составной оператор.

Примеры условных операторов:

IF Х<0 THEN I:=I+1 ELSE К:=К+1

IF (X<Y) AND D THEN BEGIN X:=SIN(X); Y:=Y+1 END

Во втором примере D - логическая переменная.

Рассмотрим оператор CASE.

Часто в программе бывает необходимо проверять достаточно много условий и в зависимости от них выполнять те или иные действия. Для этого можно использовать многократно вложенные друг в друга условные операторы. Однако в этом случае программа становится громоздкой и ее трудно понимать. Считается, что число уровней вложения не должно превышать двух-трех. Если же необходимо выбирать из большего числа условий, то целесообразным становится применение оператора варианта.

Формат оператора:

CASE <селектор варианта> OF

<константа варианта 1>:<оператор 1>;

<константа варианта 2>:<оператор 2>;

'...

<константа варианта n>:<оператор n>

END

Селектор варианта может быть любого простого типа, за исключением типа REAL. Константы варианта должны быть того же типа, что и селектор варианта.

При выполнении оператора варианта сначала вычисляется значение селектора варианта, а затем выполняется тот оператор, который отмечен константой варианта, имеющей данное значение. Если подходящей константы нет, то возникает ошибка. Чтобы избежать этого в Турбо Паскале предусмотрена следующая конструкция:

CASE <селектор варианта> OF

<константа варианта 1>:<оператор 1>;

...

<константа варианта n>:<оператор n>;

ELSE <оператор>

END

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

Для того чтобы пометить оператор в списке выбора можно использовать несколько констант варианта, а также диапазоны. Например:

CASE СН OF

'А','В','Е','I':СН1 :=SUCC(CH1);

'K'..'R':CH1:=PRED(CH1)

END;

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

 

Примеры программ

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

Пример 3.1.

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

Контрольная работа на тему pascal

Значения х вводятся оператором READ.

Программа 3.1.

PROGRAM PR31;

LABEL 1,2;

VAR I: INTEGER;

X,Y:REAL;

BEGIN

I:=l;

1: IF I>10 THEN GOTO 2;

WRITE('X=');

READ(X);

IF X<0 THEN Y:=ABS(X)

ELSE

IF X<=1 THEN Y:=EXP(X)

ELSE Y:=1/(2*X+1);

WRITELN ('Y=',Y);

I:=I+1;

GOTO 1;

2:END.

Пример 3.2.

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

Программа 3.2.

PROGRAM PR32;

LABEL 1,2,3;

VAR I: INTEGER;

X,S:REAL;

BEGIN

S:=0;

I:=0;

1 :READLN(X);

IF X<0 THEN GOTO 2;

IF X=0 THEN GOTO 3;

S:=S+X;

I:=I+1;

GOTO 1;

2:WRITELN ('Недопустимое значение X');

GOTO 1;

3:IF I>0 THEN WRITELN ('Среднее арифметическое равно',S/I)

ELSE WRITELN ('Пустая последовательность')

END.

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

Операторы цикла заставляют выполнять входящие в их состав операторы несколько раз.

В Паскале существует три вида операторов цикла: оператор цикла с параметром, оператор цикла с предусловием, оператор цикла с постусловием.

 

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

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

for V:=E1 to Е2 do S

где V - переменная порядкоавого типа , E1, Е2 - выражения того же типа, S - оператор, называемый телом цикла. Выражения Е1 и Е2 вычисляются один раз при входе в цикл. Параметр V принимает сначала значение Е1 затем непосредственно следующее за ним (SUCC(V)) и т.д. до достижения Е2. При каждом значении V выполняется оператор S. Если в теле цикла необходимо выполнить несколько операторов, то их объединяют в один с помощью составного оператора.

Если конечное значение Е2 меньше начального Е1, то оператор S не выполняется ни разу.

Оператор цикла с параметром применяется также в следующем виде:

for V:=E1 downto Е2 do S

В отличии от первого случая V изменяется от Е1 до Е2, переходя от V к pred(V).

Отметим, что если V, E1, Е2 типа INTEGER, то в первом случае это цикл с шагом +1, а во втором с шагом -1.

 

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

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

while В do S

где В - логическое выражение, S - оператор. Оператор S будет выполняться пока условие В будет истинно. Выполнение оператора цикла завершится когда выражение В впервые примет значение false.

 

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

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

repeat S until В

где В - логическое выражение, S - оператор. Оператор S выполняется до тех пор, пока В не станет истинным. Оператор REPEAT выполняется по крайней мере один раз, так как проверка истинности условия В осуществляется после выполнения оператора S.

Служебные слова REPEAT и UNTIL уже играют роль скобок, поэтому операторные скобки BEGIN и END являются необязательными.

 

Примеры программ

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

Программа 2.1.1. Цикл с параметром (шаг +1)

PROGRAM FACTORIAL 1;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('BBEДИТЕ N');

READLN(N); F:=1;

FOR I:=l TON DO F:=F*I;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН',F)

END.

Программа 2.1.2. Цикл с параметром (шаг -1)

PROGRAM FACTORIAL2;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1;

FOR I:=N DOWNTO 1 DO F:=F*I;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН',F)

END.

Программа 2.2. Цикл с предусловием

PROGRAM FACTORIAL3;

VAR I,N:INTEGER;

F:REAL;

BEGIN

WRITE('ВВЕДИТЕ N');

READLN(N); F:=1; I:=1;

WHILE I<=N DO

BEGIN

F:=F*I;

I:=SUCC(I)

END;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН',F)

END.

Программа 2.3. Цикл с постусловием

PROGRAM FACTORIAL4;

VAR I, N:INTEGER;

F:REAL;

BEGIN

WRITE('BBEДИTE N');

READLN(N); F:=1; I:=1;

REPEAT

F:=F*I;

I:=SUCC(I)

UNTIL I>N;

WRITELN ('ФАКТОРИАЛ ОТ ',N,' РАВЕН',F) END.

 

Массивы в языке программирования паскаль

 

Понятие массива

Массив представляет собой упорядоченное множество однотипных элементов. В Турбо Паскале массив описывается переменной сложной структуры. При описании необходимо указать:

- способ объединения элементов в структуру;

- число элементов;

- тип элементов.

Общий вид описания массива: <имя массива>: ARRAY [тип-диапазон индексов] OF <тип элементов массива>;

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

 

Одномерные массивы

В математике одномерному массиву соответствует n-мерный вектор, например:

Контрольная работа на тему pascal, где

Xi - компонента (координата) вектора;

i-номер компоненты;

n-число компонент.

Описание одномерного массива

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

<имя массива>: ARRAY [m1 ..m2] OF < тип элементов>;

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

ml ..m2 - диапазон значений индекса.

Тип элементов в массиве может быть любым: простым (REAL, INTEGER, CHAR), структурным (ARRAY), строковым (STRING).

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

Var

X: array [1..5] of real;

будет выделяться область из пяти последовательных ячеек для записи значений элементов вещественного типа.

Индексные переменные

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

Контрольная работа на тему pascal - индексная переменная (элемент массива);

х-имя массива;

i-индекс (номер элемента массива).

В качестве индекса используются:

- целые константы, например, Контрольная работа на тему pascal;

- целые переменные, например, Контрольная работа на тему pascal;

- индексные выражения, например,Контрольная работа на тему pascal.

Замечание. Индексными выражениями являются арифметические выражения целого типа.

Индексная переменная, как и простая, может стоять в левой части оператора присваивания, например:

Контрольная работа на тему pascal;

 

Ввод-вывод одномерных массивов

Ввод-вывод массивов осуществляются поэлементно с помощью оператора цикла FOR, в котором в качестве параметра используется индекс.

Пример 1.

Организовать ввод с клавиатуры массива:

А = (1.2; 5; -6.8; 14)

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

Var

A: array [1 ..4] of real;

i: integer;

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

Begin {начало программы}

writeln('Введите массив А');

for i := 1 to 4 read(a[i]);

На клавиатуре набирается:

1.2 5 6.8 14 < Enter >.

 

Пример 2.

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

В программе надо записать следующие операторы:

for i := 1 to 4 do write(a[i]:5:1);

writeln;

Вид выводимого массива на экране:

1.2 5.0 -6.8 14.0

Оператор WRITELN без списка служит для перевода курсора к началу следующей строки.

Обработка одномерных массивов

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

Задача 1.

Организация счетчика.

Определить количество элементов заданного целочисленного массива Контрольная работа на тему pascal, которые делятся на 3 без остатка.

Program ОМ_1;

Var

В: array [1... 20] of integer;

i, L: integer;

Begin

writeln('Введите массив В');

for i :=1 to 20 do read(b[i]);

L := 0;

for i :=1 to 20 do

if (b[i] MOD 3) = 0 then L := L+1;

writeln ('L =' L);

End.

Задача 2.

Накопление суммы и произведения.

Дано целое число n и массив вещественных чисел Контрольная работа на тему pascal. Вычислить среднее арифметическое и среднее геометрическое чисел массива, используя формулы:

Контрольная работа на тему pascal; Контрольная работа на тему pascal.

Program ОМ_2;

Var

X: array [1... 100] of real;

n, i: integer;

S, P: real;

Begin

writeln('Введите размер массива n');

read(n);

writeln('Введите массив X');

for i := 1 to n do read(x[i]);

S := 0;

P:= 1;

for i := 1 to n do

begin

S :=S + x[i];

P := P * x[i];

end;

S := S/n;

P := exp(1/n * ln(P));

writeln('S =', S:6:2);

writeln('P =', P: 10:2);

End.

Задача 3.

Поиск минимального и максимального элементов массива.

Дан вещественный массив Контрольная работа на тему pascal.

Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена.

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

Введем обозначения:

min - минимальный элемент;

imin - индекс минимального элемента;

max - максимальный элемент; imax - индекс максимального элемента.

Program ОМ_З;

Var

T: array [1... 10] of real;

i, imin, imax: integer;

min, max: real;

Begin

writeln(‘Введите массив T’);

for i := 1 to 10 do read(t[i]);

min := + 1E6;

max := -1E6;

for i := 1 to 10 do

begin

if t[i]<min then

begin

min := t[i];

imin := i;

end;

if t[i]>max then

begin

max := t[i];

imax := i;

end;

end;

t[imin]:= max;

t[imax]:= min;

for i := 1 to 10 do write(t[i]:6:2);

writeln;

End.

 

Двумерные массивы

Двумерные массивы в математике представляются матрицей:

Контрольная работа на тему pascal

или сокращенно можно записать:

Контрольная работа на тему pascal, где

m - число строк;

n-число столбцов;

i, j - индексы (номера) текущих строки и столбца, на пересечении которых находится элемент аij

Описание двумерного массива

Описание матрицы в разделе VAR задается структурным типом вида:

<имя массива>: ARRAY [m1..m2, n1..n2] OF <тип элементов>;

m1..m2 - диапазон значений индекса i, определяющий число строк;

n1..n2 - диапазон значений индекса], определяющий число столбцов.

По описанию матрицы во внутренней памяти компьютера выделяется область из (mxn) последовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:

Var

A: array [1..3, 1..5] of real;

в памяти компьютера выделяется область, состоящая из 3x5 = 15 последовательных ячеек, для записи элементов матрицы вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов.

Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами, например:

Контрольная работа на тему pascal.

 

Ввод-вывод двумерного массива

Для поэлементного ввода и вывода матрицы используется двойной цикл FOR. Если задать индекс i как параметр внешнего цикла, а индекс j как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется по строкам.

Пример 1.

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

Контрольная работа на тему pascal/

Описание матрицы вместе с текущими индексами имеет вид:

Var

М: array [1..2, 1..3] of integer;

i,j: integer;

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

Begin {начало программы}

writeln(‘Введите матрицу М’);

for i := 1 to 2 do

for j := 1 to 3 do read(m[i, j]);

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

1 2 3 <Enter>

4 5 6 <Enter>

Пример 2.

Организовать вывод матрицы М на экран.

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

for i := 1 to 2 do

begin

for j := 1 to 3 do write(m[i,j]:3);

writeln

end;

Вид матрицы на экране будет следующим:

1 2 3

4 5 6

 

Обработка матриц

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

1. Алгоритмы реализуются при обработке всех элементов матрицы.

2. Алгоритмы реализуются внутри каждой строки или каждого столбца матрицы.

Реализация алгоритмов для задач первого типа

Задача 1.

Дана матрица вещественных чисел Контрольная работа на тему pascal. Вычислить значение Контрольная работа на тему pascal, где Р1 и Р2 - произведения положительных и отрицательных элементов матрицы соответственно.

Program DM_1;

Var

A: array [1..4, 1..6] of real;

i, j: integer;

P1, P2, Z: real;

Begin

writeln(‘Введите матрицу А’);

for i := 1 to 4 do

for j := 1 to 6 do read(a[i,j]);

P1:=1;

P2 := 1;

for i := 1 to 4 do

for j :=1 to 6 do

begin

if a[i,j]>0 then P1 := P1 * a[i,j];

if a[i,j]<0 then P2 := P2 * a[i,j];

end;

Z := P1/abs(P2);

writeln(‘Z=’, Z:10:2);

End.

Задача 2.

В квадратной целочисленной матрице Контрольная работа на тему pascal вычислить модуль разности между числом нулевых элементов, стоящих ниже главной диагонали, и числом нулевых элементов, стоящих выше главной диагонали.

Введем обозначения:

L1 - число нулевых элементов ниже главной диагонали;

L2 - число нулевых элементов выше главной диагонали;

L= |L1-L2|.

Program DM 1_2;

Var

B: array [1..5, 1..5] of integer;

i, j, LI, L2, L: integer;

Begin

writeln(‘Введите матрицу B’);

for i := 1 to 5 do

for j := 1 to 5 do read(b[i,j]);

L1 := 0;

L2 := 0;

for i := 1 to 5 do

for j := 1 to 5 do

if b[i,j]=0 then

begin

if i>j then L1 := L1+1;

if i<j then L2 :=L2+1;

end;

L := abs(L1 - L2);

writeln(‘L=’, L);

End.

Реализация алгоритмов для задач второго типа

Задача 1.

В матрице Контрольная работа на тему pascal вещественных чисел первый элемент каждой строки поменять местами с минимальным элементом этой строки. Вывести матрицу X после обмена.

Program DM2_1;

Var

X: array [1..3,1..6] of real;
i, j, jmin: integer;
min: real;
Begin
writeln(‘Введите матрицу X’);
for i:= 1 to 3 do
for j := 1 to 6 do read(x[i,j]);
for i:=1 to 3 do
begin
min:=+1E6;
for j:=1 to 6 do
if x[i,j]<min then
begin
min:=x[i,j];
jmin:=j;
end;
x[i,jmin]:=x[i,1];

x[i,1]:=min;
end;
for i:=1 to 3 do
begin
for j:=1 to 6 do write (x[i,j]:6:1);
writeln;
end;
End.

Задача 2.

Дана матрица вещественных чисел Контрольная работа на тему pascal. Вычислить среднее арифметическое каждого столбца. Результат оформить в виде одномерного массива Контрольная работа на тему pascal.

Program DМ2_2;
Var
C: array [1..8, 1..4] of real;
S: array [1..4] of real;
i, j: integer;
Begin
writeln(‘Введите матрицу C’);
for i := 1 to 8 do
for j := 1 to 4 do read(c[i,j]);
for j := 1 to 4 do
begin
s[ j ] := 0;
for i := 1 to 8 do s[ j ]:= s[ j ] + c[i,j];
s[ j ] := s[ j ]/8;
end;
for j := 1 to 4 do write(s[ j ]:8:2)
writeln;
End.

В данной программе следует обратить внимание на то, что при вычислении каждого элемента s[j] организован двойной цикл, в котором индекс j является внешним параметром цикла, а индекс i-внутренним. Это обеспечивает обработку элементов матрицы по столбцам.

 

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

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

 

Описание процедуры и обращение к ней

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

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

Для обращения к описанию процедуры используется оператор процедуры. Он состоит из имени процедуры и списка фактических параметров. Фактические параметры отделяются друг от друга запятыми, а весь список заключается в круглые скобки. Между формальными и фактическими параметрами устанавливается взаимооднозначное соответствие путем их пересчета слева направо. Число фактических параметров должно равняться числу формальных параметров. Типы фактических параметров должны соответствовать типам формальных параметров.

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

Пример 1.1.

Пусть например задано следующее описание процедуры (эта процедура подает несколько раз звуковой сигнал ВЕЕР):

PROCEDURE BEEP(N:INTEGER);

VAR I:INTEGER;

BEGIN

FOR I:=1 TO N DO WRITE(CHR(7))

END;

Тогда для вызова этой процедуры в разделе операторов можно применять ее оператор в следующих видах:

ВЕЕР(10);

ВЕЕР(К);

ВЕЕР(I+10);

где I, К - целые числа.

 

Параметры - значения и параметры - переменные

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

Рассмотрим использование параметров-значений и параметров-переменных.

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

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

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

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

Пример 2.1

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

Программа 2.1

program multmatr;

{ Умножение матриц }
USES CRT;
const n=3;
type matr=array[1..n,1..n] of integer;
var a,b,c:matr;
procedure multmatr(x,y:matr;var z:matr);
{ Процедура умножения матриц }
var i,j,k,s:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do
s:=s+X[i,k]*Y[k,j];
Z[i,j]:=s
end
end;
procedure inpmatr(var x:matr);
{ Процедура ввода матрицы }
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
write('Введите x[',i,',',j,']:');
readln(x[i,j])
end
end;
procedure outmatr(x:matr);
{ Процедура вывода матрицы }
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(x[i,j],' ');
writeln
end
end;
{ Основная программа }
begin
clrscr;
writeln(' ***** ПРОИЗВЕДЕНИЕ МАТРИЦ A и B *****');
writeln;

writeln('Введите матрицу А:');
writeln;
inpmatr(a);
writeln;
writeln('Введите матрицу B:');
writeln;
inpmatr(b);
multmatr(a,b,c);
clrscr;
writeln('Произведение матриц');
writeln;
writeln('A:');
outmatr(a);
writeln;
writeln('и B:');
outmatr(b);
writeln;
writeln('равно:');
outmatr(c)
end.

 

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

 

Описание функции и обращение к ней

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

Рассмотрим пример описания функции:

FUNCTION А(Х:Т1;Y,Z:T2;VAR B,C,D:T3):T;

<тело функции А>;

здесь А - имя функции; X - формальный параметр-значение типа T1; Y,Z-формальные параметры-значения типа Т2; B,C,D - формальные параметры-переменные типа ТЗ; Т - тип значения функции.

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

1) описание начинается со служебного слова FUNCTION;

2) в заголовке функции указывается имя типа значения описываемой функции;

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

Пример 1.1.

Описать функцию, вычисляющую максимум двух чисел.

FUNCTION MAX(X,Y:REAL):REAL

BEGIN

IF X>Y THEN MAX:=X ELSE MAX:=Y

END;

Эту функцию в программе можно применять в следующих видах:

Z:=MAX(X,Y);

A:=MAX(0.5,SIN( 1));

WRITE('MAKCИМУM=',MAX(C,D));

 

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

 

Литерный тип (CHAR) в языке программирования Паскаль

Литерный (символьный) тип обозначается именем CHAR, он является стандартным и в программе не описывается. Значениями этого типа являются элементы набора литер (символов), определяемого реализацией языка. Некоторые из литер не имеют графического представления - это управляющие литеры. Все литеры перенумерованы, начиная с 0. Полный набор литер в Турбо-Паскаль состоит из 256 элементов с номерами от 0 до 255.

Все литеры фиксированы и упорядочены. Отношение порядка между ними такое же, как и между их порядковыми номерами. Так 'А'>'0', потому что номер 'А' - 65, а номер '0' - 48.

Две стандартные функции дают отображение литер на их номера и наоборот. Это следующие функции: ORD(C), где С - литера. Значением этой функции является номер литеры С; CHR(N), где N - целое число от 0 до 255. Значением этой функции является литера с номером N.

Эти функции являются обратными по отношению друг к другу, то есть CHR(ORD(C)) = С и ORD(CHR(N)) = N.

Для элементов типа CHAR выполнимы также стандартные функции PRED и SUCC.

 

Строковый тип (STRING) в языке программирования Паскаль

Строки в языке программирования Паскаль - это последовательности литер. В качестве ограничителя строк-констант используются апострофы, например: 'PASCAL', 'компьютер', '25'.

В языке Турбо-Паскаль определен стандартный строковый тип STRING. В определении строкового типа должна быть указана в квадратных скобках максимальная длина строки данного типа. Максимальная длина - целочисленная константа в диапазоне от 0 до 255.(В старших версиях Турбо-Паскаля разрешено не указывать N, в этом случае считается, что N=255.)

Примеры:

TYPE ABC = STRING[100];

SCREENLINE = STRING[80];

XYZ=STRING;

Строковые выражения состоят из строковых констант, переменных, имен строковых функций и операторов. Знак "+" используется для слияния (конкатенации) строк. Если длина результата больше 255 символов, то возникает ошибка. При сравнении двух строк истина получается тогда и только тогда, когда сравниваемые строки совпадают по-символьно и имеют одинаковую длину (то есть принадлежат одному и тому же типу).

Типы STRING[N] для различных N и CHAR совместимы. Строки и символы могут употребляться в одних и тех же выражениях.

Строковая переменная занимает в памяти место, равное в байтах максимальной длине плюс один. Тип STRING[N] в Турбо-Паскале представляется как ARRAY[0..N] OF CHAR.

К любому элементу строки так же, как к элементу одинарного массива. В результате получается величина типа CHAR.

Например, если

VAR A:STRING[8];

и A:='COMPUTER',

то А[3] равно'М', А[5] - 'U'

В компоненте строки с индексом 0 находится символ, номер которого есть текущая длина строки. То есть ORD(A[O]) есть текущая длина строки. Например, если A:='DAY' то ORD(A[0])=3.

 

Строковые процедуры и функции в Турбо-Паскале

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

 

Процедура DELETE.

Синтаксис:

DELETE(var S:String;Pos,Len:Integer);

Убирает из строки S Len символов начиная с Pos. Если Len больше длины S то ничего не происходит . Если Pos+Len больше длины строки то удаляются все символы до конца строки .

 

Процедура INSERT.

Синтаксис :

INSERT(S: String;var D: String;Pos:Integer);

Вставляет строку S в строку D начиная с символа с номером Pos . Если Pos больше длины D то S и D сливаются . Если длина результата при этом больше максимальной длины D то в D записываются только самые левые символы .

 

Процедура STR.

Синтаксис:

STR(I:Integer;var S:String);

STR(R:Real;var S:String);

Преобразует I или R из числа в строку и записывает эту строку в S.

ВНИМАНИЕ! Процедура Str не дожна входить в функции, вызываемые в процедурах WRITE и WRITELN .

 

Процедура VAL.

Синтаксис :

VAL(S:String;var R:Real;var P:Integer);

VAL(S: String; var I,P:Integer);

Преобразует строковую переменную S в число ( тип зависит от типа переменной I или R соответственно ) . Если в строке S ошибок нет, то Р равно 0, иначе значение R (или I) неопределено, а Р присваевается номер первого ошибочного символа .

 

Функция CONCAT.

Синтаксис:

CONCAT(S1 ,S2,...,Sn:String):String;

Возвращает строку , полученную конкатенацией (слиянием) строк S1,...,Sn. Если длина результата больше 255 то возникает ошибка времени выполнения .

 

Функция COPY.

Синтаксис:

СОРY(S: String;Pos,Len: Integer): String;

Возвращает строку, полученную из Len символов строки S начиная с позиции Pos. Если Pos больше, чем длина строки S то возвращается пустая строка . Если Pos + Len больше, чем длина строки S то возвращаются только символы, принадлежащие строке S.

 

Функция LENGTH.

Синтаксис :

LENGTH(S:String):Integer;

Возвращает длину строки S .

 

Функция POS.

Синтаксис:

POS(Pattern,Sourse:String): Integer;

Возвращает номер символа, начиная с которого Pattern входит в Sourse. Если вхождения нет, то возвращается 0 .

 

Примеры программ

Пример 4.1.

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

Программа 4.1.

PROGRAM PR;

USES CRT;

VAR A,B:STRING[10];

I,N:INTEGER;

BEGIN

CLRSCR;

WRITELN('Введите строку длиною не более 10 символов:');

READLN(A);

N:=LENGTH(A);

B:='';

FOR I:=1 TO N DO

B:=B+A[N+1-I];

WRITELN(B)

END.

Пример 4.2.

Подсчитать число вхождений некоторого слова в заданный текст.

Программа 4.2.

PROGRAM PR42;
USES CRT;
TYPE TEXT=STRING[100];
WORDS=STRING[10];
VAR A,B:TEXT;
C:WORDS;
P,N,D:INTEGER;
BEGIN
CLRSCR;
WRITELN('Введите текст длиною не более 100 символов');
READLN(A);
B:=A;
WRITELN('Введите слово длиною не более 10 символов');
READLN(C);
N:=0;
D:=LENGTH(C);
P:=POS(C,B);
WHILE P>0 DO
BEGIN
N:=N+1;
DELETE(B,P,D);
P:=POS(C,B)
END;
WRITELN;
WRITELN('Число вхождений слова "',C,'" в текст :');
WRITELN;
WRITELN(A);
WRITELN;
WRITELN('равно ',N)
END.