Реферат

Реферат Цикл с постусловием на языке Паскаль

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 22.11.2024





МОУ лицей №27 имени героя Советского Союза

И. Е. Кустова
Кафедра естественно-научных дисциплин
Исследовательская работа по информатике

на тему «Цикл с постусловием на языке Паскаль»
Выполнила:

Ананьева Марина,

ученица 9 «Л» класса
Научный руководитель:

Путренок Наталья Николаевна,

учитель информатики
г. Брянск

2010

Содержание
Введение………………………………………………………………………….3

Паскаль сегодня………………………………………………………………….4

Основные понятия. Основная структура программы…………………………9

Цикл……………………………………………………………………………...11

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

Практическая часть……………………………………………………………..19

Заключение……………………………………………………………………...20

Список литературы……………………………………………………………..21
Введение
Моя исследовательская работа посвящена языку программирования Pascal. Еще 10 лет назад этот язык был едва ли не самым популярным среди программистов. Сегодня его влияние заметно уменьшилось, по крайней мере, многие так думают. Тем не менее, и сегодня тысячи организаций работают в программах написанных на Паскале, либо же на его наследнике – Borland Delphi. Это база, классика программирования, а классика никогда не теряет своей актуальности.
Паскаль - один из самых простых и в то же время самых ёмких языков программирования. Главное, знать, как его использовать. Он будет полезным Вам настолько, насколько вы сможете его применить – от решения простых уравнений до сложнейших статистических проектов, от бегущих точек на экране до полноценных оконных программ.
Программа Turbo Pascal - замечательная возможность познакомиться с основными принципами программирования, получить базу для дальнейшего продвижения и просто получить удовольствие от изучения этого языка.
Паскаль сегодня.
Паскаль, разработанный в 1970-х гг. Никлаусом Виртом как язык обучения программированию, претерпел за прошедшее время довольно много изменений в лучшую сторону. Основная заслуга в этом принадлежит фирме Borland International, долгое время выпускавшей линейку Turbo Pascal. Одно из основных усовершенствований, внесенных ею, — дополнение языка разнообразными и мощными средствами ввода-вывода. Другое связано с языком Модула-2 (автором которого также стал Н. Вирт): фирма Borland отказалась от распространения компилятора этого языка, применив вместо этого модульный принцип построения в Turbo Pascal. Кроме того, в Паскаль были введены средства непосредственного доступа к портам и ячейкам памяти, а позднее — возможность включать в текст программы фрагменты, написанные на ассемблере. Все это превратило Паскаль из средства обучения в достаточно мощный универсальный язык.
Сейчас признанными лидерами в области профессионального программирования стали Си-подобные языки. В течение долгого периода Паскаль был, пожалуй, почти единственной альтернативой им в качестве универсального языка. Однако когда труд большинства профессиональных программистов стал практически сводиться лишь к манипуляциям с вызовами более или менее стандартного API-инструментария (Application Programming Interface — интерфейс прикладного программирования), остро встал вопрос выбора единственного языка программирования, на котором (и для которого) будет писаться этот API. Вследствие различных причин — как объективных, так и субъективных — выбор пал на Си/Си++. Во-первых, Си, как и Паскаль, оказался одним из первых языков высокого уровня (ЯВУ), разрешившим проблему «курицы и яйца»: его компилятор был написан на нем же. Во-вторых, компиляторы для Си делать, пожалуй, легче, чем для любого другого языка (что, собственно, и было одной из целей его разработки), поэтому именно их выпуск экономически наиболее целесообразен. Впрочем, не обошлось и без субъективных факторов: значительную долю сегодняшнего API производит фирма Microsoft, уже давно разграничившая с фирмой Borland «сферы влияния» в этой области. Сейчас Borland не выпускает компиляторы для Бейсика и Фортрана, а Microsoft – для Паскаля, и, естественно, не ориентирует свои API на те языки, компиляторы которых сама не выпускает.
Поэтому лидерство Си в области профессионального программирования обусловлено в основном тем, что только на нем можно использовать новый API-интерфейс сразу же после его выхода, тогда как программистам, работающим на других языках, приходится либо ждать, когда появятся нужные интерфейсные модули, либо самостоятельно их писать.
Однако в области создания СУБД Паскаль до сих пор входит в число лидеров, поскольку продолжается разработка инструментального ПО для работы с объектными версиями этого языка (Delphi). Кроме того, Паскаль и его диалекты зачастую применяются в качестве «внутреннего» языка СУБД.

Сильные стороны Паскаля
Посмотрим на Паскаль, а также на Си и Бейсик с точки зрения обучения программированию. О дидактической несостоятельности языка Си уже много написано. Бейсик также мало подходит для обучения из-за отсутствия общепринятого стандарта и «беспорядочности» стиля работы, который он прививает. Основным преимуществом Бейсика была чрезвычайная нетребовательность к ресурсам компьютера, что стало уже неактуальным. Раньше, когда были ПК с 16–64-Кбайт оперативной памятью и ЗУ в виде магнитофона, можно было говорить, что Бейсик — лучший ЯВУ, поскольку не было выбора. При наличии 640-Кбайт памяти и дисковода такой выбор появился.
Итак, сегодня практически весь рынок программных продуктов ориентирован на многозадачные операционные системы (Windows, UNIX и др.) и интенсивно использует API-инструментарий, а также визуальные средства программирования.
Это, конечно, удобно, но вряд ли рационально для обучения, ведь нужно научиться разрабатывать и/или воплощать алгоритм, а не просто «складывать программу из кирпичиков». Кроме того, любой начинающий сталкивается с довольно значительным объемом информации, которую необходимо запомнить, прежде чем начинать программирование. Да и процесс постоянного обновления API затрудняет работу и преподавателя, и ученика. Текстовый интерфейс командной строки, принятый в DOS, дает возможность, не особенно заботясь о вводе-выводе, уделять основное внимание разработке и реализации алгоритма. А те, кто уже немного разобрался с компьютером, могут осваивать основы компьютерной графики, не изменяя платформы.
Медицинские рецепты принято выписывать на латыни. От всех живых языков она отличается тем, что уже не изменяется. К тому же медики, на каком бы языке они ни говорили, имеют в латыни общий язык. То же самое можно сказать и про DOS. Его API достаточно лаконичен и практически перестал изменяться. Кроме того, все операционные системы (на платформе Intel) позволяют работать с программами DOS, а вот программа, написанная, скажем, для Linux, в Windows уже не запустится.
Рассмотрим Паскаль для DOS. В сфере образования до сих пор широко используется последняя 7-я версия Паскаля фирмы Borland, созданная более восьми лет назад. Со своей основной задачей компилятор Паскаля справляется, однако зачастую даже школьники, постигшие азы программирования, натыкаются на его ограничения. Одним из основных недостатков компилятора является его 16-разрядность. Ограничение в 64 Кбайт на все статические данные выглядит слишком жестким при типичных сегодня 32–128 Мбайт оперативной памяти. То же касается и графических режимов: максимальное разрешение, с которым способен работать Turbo/Borland Pascal, требует лишь 150-Кбайт видеопамяти, в то время как появляются видеоадаптеры, несущие «на борту» уже 64 Мбайт.

Сравнение компиляторов Паскаля
В нашей стране все большее внимание стало уделяться легальному использованию программных продуктов. Так что теперь за Turbo/Borland Pascal приходится платить и частным лицам, и общеобразовательным учреждениям. И мало кто знает о том, что есть 32-разрядные компиляторы Паскаля, бесплатные для некоммерческого применения и к тому же более полно использующие оперативную память компьютера и возможности видеоадаптера
Среди компиляторов, достигших определенной степени «зрелости», — TMT Pascal и Free Pascal Compiler.
В числе других проектов стоит упомянуть P32V Джона Принса (surf.to/p32) и Virtual Pascal, недавно ставший бесплатным. Последний, пожалуй, наиболее тщательно проработан, но в исходном виде не позволяет делать DOS-приложения.
Примечательно, что в разработке TMT и Free Pascal участвовали наши соотечественники.
Версия 3.50 компилятора ТМТ производит впечатление вполне отлаженного продукта — большая часть выявленных ошибок устранена, сам он и его интегрированная среда работают стабильно и просты в установке. Сказывается, правда, немногочисленность коллектива разработчиков: интегрированная среда как две капли воды похожа на аналогичные GUI-ориентированные IDE и обладает довольно ограниченными возможностями — она не имеет даже встроенного отладчика. Во встроенном ассемблере до сих пор нет поддержки SSE, хотя есть 3DNow! и MMX. Полные зарегистрированные версии компилятора начиная с 1.0 содержали IDE-среду в текстовом режиме, с которой из-за множества ошибок все равно нельзя было работать, а свободно распространяемые — ограничения на объем используемой памяти, но их можно было элементарно обойти. Поэтому в версии 3.50 они были сняты, а в последнюю бесплатно предоставляемую добавлена IDE-среда.
Free Pascal был разработан довольно большим коллективом энтузиастов. Он поставлялся вместе с исходными текстами, поэтому любой желающий мог принять участие в процессе его создания. Кстати, написан Free Pascal на Паскале, так что для него проблема «курицы и яйца» не возникает.
Версия компилятора обозначается не двузначным, как обычно, а трехзначным числом, поскольку значение 99 в младшей части версии появилось задолго до того, как основной было присвоено 1.0. Сейчас 1.0 наконец вышла, но она оказалась чуть ли не более сырой, чем предыдущая. Затем почти сразу же была выпущена версия 1.02, содержащая лишь исправления замеченных ошибок, а на момент написания статьи готовилась к выходу версия 1.04. В комплект поставки компилятора входит интегрированная среда, работающая в текстовом режиме. В его документации честно предупреждается о том, что это пока отладочная версия. Да и сама IDE требует настройки, которая к сожалению описана неверно. Эта IDE является по сути текстовым редактором со встроенным компилятором (почему-то не внешним), в ней отсутствует даже контекстная подсказка, не говоря об отладчике.
Оба компилятора в определенной степени напоминают диалект Turbo/Borland Pascal, хотя и есть некоторые различия. В основном они касаются усовершенствований языка: нет ограничений, связанных с 16-разрядной сегментированной моделью памяти, есть Си-подобные комментарии. Кстати, ТМТ дополнился Си-подобными операциями: «+:=», «-:=». В Free Pascal появились перегружаемые функции, а у ТМТ — перегружаемые операторы и множество усовершенствований, что отражено и в документации. У Free Pascal желаемое нередко выдается за действительное. Так, в одной из предыдущих версий он наотрез отказался компилировать MMX-инструкции, в том числе и пример из документации.
Естественно, оба компилятора не во всем схожи. У ТМТ отсутствует 64-разрядный целый тип comp. Притом, скорее всего, его введение и не предполагается, так как существует дополнительный модуль для обработки комплексных чисел, имеющий то же самое название. В Free Pascal же не предусмотрено предопределенных массивов Port и PortW, а в ТМТ есть даже PortD.
Поскольку оба компилятора используют 32-разрядную плоскую модель памяти, функция seg у обоих возвращает 0, однако в системе программирования Free Pascal неправильно работает функция ptr. Например, в выражении longint(ptr($40,$6c)^) мы можем получить все что угодно, но только не значение счетчика времени BIOS (видимо, программа прекратит работу по ошибке обращения к памяти). У TMT же такая конструкция выполняется правильно.
После компиляции минимальный размер исполняемого файла для ТМТ составляет около 15 Кбайт, а для Free Pascal — 55 Кбайт. Кроме того, второй требует еще внешнего DPMI-сервера на 20 Кбайт, тогда как у ТМТ он содержится внутри исполняемого файла.
Чтобы сравнить скорости работы исполняемых файлов, полученных с помощью этих компиляторов, можно использовать тест Ветстоуна по определению производительности системы с точки зрения выполнения операций над числами с плавающей запятой, переписанный с Фортрана на Паскаль (табл. 2 ). Значительно уступая TMT по оптимизации размера, Free Pascal работает в полтора раза быстрее. В то же время оба компилятора оставляют далеко позади Borland Pascal, особенно на современных процессорах.
Однако некоторые результаты при измерении производительности выглядят довольно странно. Написанная на ассемблере процедура поиска кратчайшего пути в графе при помощи алгоритма Дейкстры, будучи откомпилированной тем же Free Pascal, выполнялась на 20% быстрее, чем ТМТ. При заполнении таблицы весов дуг графа использовался датчик случайных чисел, измерения повторялись 1000 раз и полученные значения усреднялись, а процедуры чтения, записи и пересылки содержимого оперативной памяти выполнялись в обоих случаях с одинаковой скоростью.
Среднее время выполнения этого теста для компилятора ТМТ Pascal составило 2,20 с, а для Free Pascal — 1,81 с.
Кроме оптимизации, которую делает сам компилятор, интересно также посмотреть, насколько оптимально написаны библиотечные процедуры. Это было решено сделать на примере графической библиотеки. Следует сказать, что в обоих случаях состав процедур значительно отличался от прототипа, особенно у ТМТ. Впрочем, и Free Pascal оказался не на высоте. Хотя дисплей и видеоадаптер позволяли работать в режиме 1600x1200 точек (а среди констант, описывающих разрешение, было предусмотрено даже 2048x1536 точек), однако в действительности заявленное разрешение установить при помощи Free Pascal не удалось. Поэтому скорость вывода графических примитивов проверялась в режиме 1280x1024 точки при 256 цветах (табл. 3 ). По скорости вывода на экран заштрихованных фигур ТМТ почти на порядок превосходит своего конкурента, что, видимо, объясняется более совершенным алгоритмом. При рисовании линий ТМТ практически во всем отстает от FPC. Правда, в некоммерческой версии ТМТ, где производились измерения, в отличие от коммерческой не используется LFB, что при рисовании без экранного буфера должно приводить к ощутимой потере производительности. Возможно, что различие результатов объясняется этим.
При выводе текста ТМТ втрое отстает от FPC, однако не следует этого пугаться. Дело в том, что тогда как Free Pascal вслед за Borland применяет шрифт размером 8x8, в ТМТ резонно предположили, что при разрешениях 640x480 точек и больше гораздо лучше будет смотреться шрифт размером 8x16. Так что замедление вывода в значительной степени связано с увеличением размера шрифта вдвое.
В целом реализация графической библиотеки ТМТ производит впечатление более продуманной и отлаженной (хотя и менее полной по отношению к Borland Pascal).
Кстати, раздел документации Free Pascal, посвященный описанию различий реализации графических библиотек для разных платформ, остался пустым, а графическая программа, работавшая в DOS и перекомпилированная в графическое приложение Windows, сразу же завершилась по ошибке.
Бесплатная версия TMT Pascal позволяет делать исполняемые файлы только для DOS, зато при использовании коммерческой один и тот же текст, будучи откомпилированным и для DOS, и для Windows, работает визуально совершенно одинаково, хотя внутренний механизм для DOS реализован через VESA, а для Windows — через DirectDraw.

Рекомендации
Что же, хотя крупные фирмы и отказались от ведения разработок Паскаля для DOS, небольшие компании, коллективы энтузиастов и даже отдельные программисты весьма успешно продолжили это дело, создавая вполне достойную замену проверенному компилятору Turbo Pascal. Так что если вам нужен надежный компилятор и вы не хотите возиться с установкой и настройкой его самого и прилагаемой к нему среды, а также если при вашей работе предъявляются жесткие требования к объему кода, то лучше остановить свой выбор на ТМТ. Кстати, при применении внешнего DOS-расширителя памяти, например DOS4GW, минимальный объем исполняемого файла можно сократить до 3 Кбайт. Если же вам не терпится самому принять участие в разработке компилятора Паскаля, если вам нужен транслятор, настраиваемый на ваши конкретные задачи и вы согласны над ним поработать, то следует отдать предпочтение FPC. Впрочем, вместе с исходными текстами также поставляется Р32V, однако он в отличие от FPC компилируется в среде Borland Pascal. Правда, P32V — не полный компилятор, так как переводит текст на Паскале не в объектный код, а в текст на языке ассемблера, и поэтому потребуется внешний ассемблер. Если же вы работаете с OS/2, то целесообразнее предпочесть Virtual Pascal.
Основные понятия.
Как и любой алгоритм, являющийся, как вы помните, последовательностью инструкций, программа на языке Паскаль состоит из команд (операторов), записанных в определенном порядке и формате.
Команды позволяют получать, сохранять и обрабатывать данные различных типов (например, целые числа, символы, строки символов, т.д.). Однако кроме команд в записи программы участвуют еще так называемые "служебные слова". Это и есть элементы формальности, организующие структуру программы. Их не так много, но их значение трудно переоценить. Служебные слова можно использовать только по своему прямому назначению. Переопределять их не разрешается.



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

<Раздел описаний>

Begin

<Тело программы>

End.
Здесь слова Program, Begin и End являются служебными. Правильное и уместное употребление этих слов является обязательным.
Угловые скобки в формате указывают на то, чтожно изначально, то тело цикла не будет выполнено ни разу. Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться.
На языке Pascal структура цикла "Пока" записывается следующим образом:

While <условие> Do <оператор>;
Правда, лаконично? По-русски можно прочитать так: "Пока истинно условие, выполнять оператор". Здесь, так же как в формате условного оператора, подразумевается выполнение только одного оператора. Если необходимо выполнить несколько действий, то может быть использован составной оператор. Тогда формат оператора принимает такой вид:
While <условие> Do

Begin
<оператор #1>;

<оператор #2>;

<оператор #3>;

. . .
End;
Цикл
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Определения
Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Единичное выполнение тела цикла называется итерацией. Выражение определяющее, будет в очередной раз выполняться итерация, или цикл завершится, называется условием выхода или условием окончания цикла (либо условием продолжения в зависимости от того, как интерпретируется его истинность — как признак необходимости завершения или продолжения цикла). Переменная, хранящая текущий номер итерации, называется счётчиком итераций цикла или просто счётчиком цикла. Цикл не обязательно содержит счётчик, счётчик не обязан быть один — условие выхода из цикла может зависеть от нескольких изменяемых в цикле переменных, а может определяться внешними условиями (например, наступлением определённого времени), в последнем случае счётчик может вообще не понадобиться.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того большинство языков программирования предоставляют средства для досрочного завершения цикла, то есть выхода из цикла независимо от истинности условия выхода.

Виды циклов:
1.Безусловные циклы

Иногда в программах используются циклы, выход из которых не предусмотрен логикой программы. Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует (если позволяет синтаксис, как, например, в цикле LOOP…END LOOP языка Ада), либо заменяется константным значением (while true do … в Паскале).
2.Цикл с предусловием

Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл. На языке Pascal цикл с предусловием имеет следующий вид:
while <условие> do begin  

  <тело программы>

end;
На Си:

while(<условие>)

{

   <тело программы>

}


3.Цикл с постусловием

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until; в Си — do…while.

Pascal:

repeat

    <тело цикла>

until <условие>
Си:

do

{

    <тело цикла>

}

while(<условие>)
В трактовке условия цикла с постусловием в разных языках есть различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до»), а в Си и его потомках — как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»)…..
4.Цикл с выходом из середины

Цикл с выходом из середины — наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала маркирует точку программы, в которой начинается тело цикла, конструкция конца — точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла. Естественно, чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.
Принципиальным отличием такого вида цикла от рассмотренных выше является то, что часть тела цикла, расположенная после начала цикла и до команды выхода, выполняется всегда (даже если условие выхода из цикла истинно при первой итерации), а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации.
Легко видеть, что с помощью цикла с выходом из середины можно легко смоделировать и цикл с предусловием (разместив команду выхода в начале тела цикла), и цикл с постусловием (разместив команду выхода в конце тела цикла).
Часть языков программирования содержат специальные конструкции для организации цикла с выходом из середины. Так, в языке Ада для этого используется конструкция LOOP…END LOOP и команда выхода EXIT или EXIT WHEN:

LOOP

  ... Часть тела цикла

  EXIT WHEN <условие выхода>;

  ... Часть тела цикла

  IF <условие выхода> THEN

    EXIT;

  END;

  ... Часть тела цикла

END LOOP:
Здесь внутри цикла может быть любое количество команд выхода обоих типов. Сами команды выхода принципиально не различаются, обычно EXIT WHEN применяют, когда проверяется только условие выхода, а просто EXIT — когда выход из цикла производится в одном из вариантов сложного условного оператора.
В тех языках, где подобных конструкций не предусмотрено, цикл с выходом из середины может быть смоделирован с помощью любого условного цикла и оператора досрочного выхода из цикла (такого, как break в Си), либо оператора безусловного перехода goto.
5.Цикл cо счётчиком

Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. Например, в языке Оберон-2 такой цикл имеет вид:

 FOR v := b TO e BY s DO

   ... тело цикла

 END
(здесь v — счётчик, b — начальное значение счётчика, e — граничное значение счётчика, s — шаг).
Неоднозначен вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик. Например, если в программе на языке Паскаль встретится конструкция вида:

i := 100;

for i := 0 to 9 do begin

  ... тело цикла

end;

k := i;
возникает вопрос: какое значение будет в итоге присвоено переменной k: 9, 10, 100, может быть, какое-то другое? А если цикл завершится досрочно? Ответы зависят от того, увеличивается ли значение счётчика после последней итерации и не изменяет ли транслятор это значение дополнительно. Ещё один вопрос: что будет, если внутри цикла счётчику будет явно присвоено новое значение? Различные языки программирования решают данные вопросы по-разному. В некоторых поведение счётчика чётко регламентировано. В других, например, в том же Паскале, стандарт языка не определяет ни конечного значения счётчика, ни последствий его явного изменения в цикле, но не рекомендует изменять счётчик явно и использовать его по завершении цикла без повторной инициализации. Программа на Паскале, игнорирующая эту рекомендацию, может давать разные результаты при выполнении на разных системах и использовании разных трансляторов.
Радикально решён вопрос в языке Ада: счётчик считается описанным в заголовке цикла, и вне его просто не существует. Даже если имя счётчика в программе уже используется, внутри цикла в качестве счётчика используется отдельная переменная. Счётчику запрещено явно присваивать какие бы то ни было значения, он может меняться только внутренним механизмом оператора цикла. В результате конструкция

i := 100;

for i in (0..9) loop

  ... тело цикла

end loop;

k := i;
внешне аналогичная вышеприведённому циклу на Паскале, трактуется однозначно: переменной k будет присвоено значение 100, поскольку переменная i, используемая вне данного цикла, не имеет никакого отношения к счётчику i, который создаётся и изменяется внутри цикла. Считается, что подобное обособление счётчика наиболее удобно и безопасно: не требуется отдельное описание для него и минимальна вероятность случайных ошибок, связанных со случайным разрушением внешних по отношению к циклу переменных. Если программисту требуется включить в готовый код цикл со счётчиком, то он может не проверять, существует ли переменная с именем, которое он выбрал в качестве счётчика, не добавлять описание нового счётчика в заголовок соответствующей процедуры, не пытаться использовать один из имеющихся, но в данный момент «свободных» счётчиков. Он просто пишет цикл с переменной-счётчиком, имя которой ему удобно, и может быть уверен, что никакой коллизии имён не произойдёт.
Цикл со счётчиком всегда можно записать как условный цикл, перед началом которого счётчику присваивается начальное значение, а условием выхода является достижение счётчиком конечного значения; к телу цикла при этом добавляется оператор изменения счётчика на заданный шаг. Однако специальные операторы цикла со счётчиком могут эффективнее транслироваться, так как формализованный вид такого цикла позволяет использовать специальные процессорные команды организации циклов.
В некоторых языках, например, Си и других, произошедших от него, цикл for, несмотря на синтаксическую форму цикла со счётчиком, в действительности является циклом с предусловием. То есть в Си конструкция цикла:

for (i = 0; i < 10; ++i)

{

  ... тело цикла

}
фактически представляет собой другую форму записи конструкции:

i = 0;

while (i < 10)

{

  ... тело цикла

  ++i;

}
То есть в конструкции for сначала пишется произвольное предложение инициализации цикла, затем — условие продолжения и, наконец, выполняемая после каждого тела цикла некоторая операция (это не обязательно должно быть изменение счётчика; это может быть правка указателя или какая-нибудь совершенно посторонняя операция). Для языков такого вида вышеописанная проблема решается очень просто: переменная-счётчик ведёт себя совершенно предсказуемо и по завершении цикла сохраняет своё последнее значение.
Вложенные циклы

6.Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Вложенный цикл по отношению к циклу в тело которого он вложен будет именоваться внутренним циклом, и наоборот цикл в теле которого существует вложенный цикл будет именоваться внешним по отношению к вложенному. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности как правило не ограничивается.
Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Например взяв три вложенных друг в друга цикла, каждый по 10 итераций, получим 10 исполнений тела для внешнего цикла, 100 для цикла второго уровня и 1000 в самом внутреннем цикле.
Одна из проблем, связанных с вложенными циклами — организация досрочного выхода из них. Во многих языках программирования есть оператор досрочного завершения цикла (break в Си, exit в Турбо Паскале, last в Perl и т. п.), но он, как правило, обеспечивает выход только из цикла того уровня, откуда вызван. Вызов его из вложенного цикла приведёт к завершению только этого внутреннего цикла, объемлющий же цикл продолжит выполняться. Проблема может показаться надуманной, но она действительно иногда возникает при программировании сложной обработки данных, когда алгоритм требует немедленного прерывания в определённых условиях, наличие которых можно проверить только в глубоко вложенном цикле.
Оператор цикла с постусловием
Оператор цикла с постусловием
Оператор цикла с постусловием используется в программе в случае, когда неизвестно количество повторений в цикле и оператор в цикле должен быть выполнен хотя бы один раз.
Оператор цикла с постусловием имеет следующую конструкцию:
Repeat <тело_цикла> Until <условие>;
Здесь: Repeat, Until - зарезервированные слова (повторять до тех пор, пока не будет выполнено условие);
          <тело_цикла> - произвольная последовательность операторов Turbo Pascal;
          <условие> - выражение логического типа.
Оператор Repeat ... Until работает следующим образом. В начале выполняется тело цикла, после чего вычисляется логическое выражение следующее за словом Until, если результатом вычисления выражения является ЛОЖЬ, то операторы в теле цикла будут выполнены повторно. в противном случае, если логическое выражение имеет значение ИСТИНА, оператор цикла с постусловием прекратит свою работу.
Пример 1.
Дана последовательность целых чисел, последним элементом которой является число 100. Вычислить среднее арифметическое элементов этой последовательности.

        

Program primer1;
Var i, a, s, x : integer;
Begin
  s := 0;
  x := 0;
  Repeat
    Read (a);
    s := s + a;
    x := x + 1;
  Until a = 100;
  s := s / x;
  Write ('среднее арифметическое: ', s);
End.
Обратите внимание, что в данном случае мы не использовали логические скобки, в операторе цикла с постусловием их заменяет пара Repeat ... Until.
Практическая часть
Задача.

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

Обозначим через x, k – соответствующую цену и количество товара, через p – заданную предельную сумму, через s – общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму p. В этом случае на экран нужно вывести сообщение о превышении.
program prim1;

var c, k, p, s: integer;

begin

writeln(‘максимальная сумма-‘);

readln(p);

s:=0;

repeat;

writeln(‘цена и количество ‘);

readln(c,k);

s:=s+c*k;

writeln(‘стоимость покупки= ‘, s);

until s>p;

writeln(‘суммарная стоимость покупки прквысила максимальную сумму ‘);

readln;

end.
Заключение

Говоря об отстраненном и предвзятом отношении людей к «чужим» языкам, Вирт отмечает: «Многие относятся к стилям и языкам программирования, как к религиозным конфессиям: если вы принадлежите к одной из них, то не можете принадлежать к другой. Но это ложная аналогия, и она сознательно поддерживается по причинам коммерческого порядка».
В самом деле, противостояние двух лагерей — Си и Паскаля — все эти годы намеренно поощрялось. Между ними методично возводили высокую стену, а затем принялись уничтожать поодиночке. В лице UNIX язык Си нашел себе надежную защиту от чересчур агрессивных модернистов-реформаторов. У Паскаля же такого «панциря» не оказалось. Он продолжает свой путь во многом благодаря преданности своих почитателей, которая подчас просто поражает.

В заключение предоставим слово оппоненту Никлауса Вирта — Деннису Ритчи: «Паскаль — очень элегантный язык. Он по-прежнему жив. Он породил немало своих последователей и оказал глубокое воздействие на проектирование языков».
Список литературы

1.    http://virtual3d.narod.ru/dip/2_1.htm

2.    http://wiki.mvtom.ru/index.php/Операторы_циклов_в_языке_Паскаль

3.    http://schools.keldysh.ru/sch887/pascal.htm

4.    http://ru.wikipedia.org/wiki/Foreach#foreach

5.    http://www.5byte.ru/9/0019.php

6.    http://www.debryansk.ru/~lpsch/uchitel/konspekt/pascal/pas_lek.htm

7.    http://tolks.narod.ru/Examples/4.htm

8.    http://www.bestreferat.ru/

9.    http://pascal.sources.ru/articles/058.htm


1. Курсовая на тему Антикризисные инструменты управление ассортиментом и складскими запасами
2. Курсовая Изготовление зубчатого колеса себестоимость, эффективность проекта
3. Реферат Организация рабочих мест на примере ООО Курскжилстрой-1
4. Курсовая Организационно-правовые формы некоммерческих организаций Понятие свойства
5. Реферат на тему Dopamine Essay Research Paper Dopamine
6. Реферат Вещные права
7. Реферат на тему Diabetes Mellitus Essay Research Paper Diabetes Mellitus
8. Доклад Биография АА Блока
9. Реферат на тему Local Laws Essay Research Paper I under
10. Диплом Сравнительный анализ современных методов учета себестоимости