31214-1 (Паскаль. Отладка программ)

2016-07-31СтудИзба

Описание файла

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

Онлайн просмотр документа "31214-1"

Текст из документа "31214-1"

ТурбоПаскаль7.0. Логические операторы и операторы цикла. Отладка программ.

Укороченная форма оператора if

В операторе if часть, начинающаяся словом else, может отсутствовать. Часть, следующая за словом then, выполняется, если логическое условие, стоящее после слова if, имеет значение true. Если это логическое выражение имеет значение false, непосредственно выполняется оператор, следующий за if.

Наша программа может быть переписана с применением укороченной формы оператора if. Алгоритм сводится к последовательности проверок попадания переменной Аде в различные диапазоны значений. Приведем измененный текст программы:

Program Dialog; {расширенный диалог — второй вариант) const

Question =' What is your name?';

Rep(y1 =

'Паскаль — прост, но первый компилятор Паскаля был написан на Паскале';

Reply21 = 'Вас ждет удивительное путешествие';

Reply22 = 'сквозь джунгли особенностей и возможностей языка';

Reply3 =

'Паскаль — разумный компромисс между желательным и эффективным';

Reply4 = 'Паскаль академически элегантен';

var

Name: string;

Age: byte;

begin

WriteLn(Question); ReadLn(Name); {Ввод имени} WriteLn('Hello,', Name,'!'); {Вывод приветствия} WriteLn('How old are you?'); {Вопрос о возрасте} ReadLn(Age); {Ввод возраста} if 12 < Age then WriteLn(Reply1 );

if (12 <= Age) and (Age < 20) then begin

WriteLn (Reply21);

WriteLn (Reply22) end;

if (20 <= Age) and (Age < 40) then WriteLn(Reply3);

if Age >= 40 then WriteLn(Reply4) end.

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

Оператор выбора case

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

Общий вид этого оператора:

case of : ;

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

< альтернатива N >: else < оператор части Else> end;

Case и of — зарезервированные слова, которые являются отличительным признаком оператора множественного ветвления. Селектор — это переменная или выражение порядкового типа. В зависимости от значения данного выражения или переменной происходит ветвление программы. После заголовка оператора идет перечисление различных альтернатив, по которым может выполняться программа. Альтернативы отделяются друг от друга точкой с запятой. Альтернатива состоит из метки, двоеточия и исполняемого оператора данной альтернативы. Используемая в операторе case метка может состоять из констант и диапазонов. Диапазоны значений в Паскале — это два крайних значения, написанные через двоеточие. Такая запись эквивалентна перечислению всех целых чисел в данном диапазоне. В общем случае метка может состоять из различных констант и диапазонов, разделенных запятыми, например, допустима такая метка: 4, 8..10, 12, 14.. 16. В качестве селектора нельзя использовать логические результаты сравнения чисел (условия), поэтому использованные в операторах if неравенства здесь неприменимы.

Часть оператора case, состоящая из слова else и последнего альтернативного варианта, является необязательной, она выполняется в том случае, если вычисленный в программе селектор не соответствует ни одной из перечисленных выше альтернатив. Если эта часть оператора case отсутствует, а селектор не подходит ни под одну из альтернатив, то оператор case не выполнит никаких действий. Завершается оператор case обязательным словом end;

Пример. С использованием оператора case наша программа приобретает следующий вид

Program Dialog;

const

Question =' What is your name?';

Replyl =

'Паскаль — прост, но первый компилятор Паскаля был написан на Паскале';

Reply21 = 'Вас ждет удивительное путешествие';

Reply22 = 'сквозь джунгли особенностей и возможностей языка';

ReplyS =

'Паскаль — разумный компромисс между желательным и эффективным';

Reply4 = 'Паскаль академически элегантен';

var

Name: string;

Age: byte;

begin

WriteLn(Question); ReadLn(Name);

WriteLn('Hello,', Name,'!');

WriteLn('Howold are you?'); ReadLn(Age);

case Age of

0..11 :WriteLn(Reply1);

12..19 : begin WriteLn (Reply21); WriteLn (Reply22) end;

20..39: WriteLn(Reply3);

40..150:WriteLn(Reply4)

else WriteLn('Bbi ошиблись при вводе')

end

end.

Переменная Age играет роль селектора. В зависимости от значения данной переменной происходит дальнейшее ветвление программы. В нашем примере в качестве альтернатив применяются диапазоны значений, поскольку нельзя использовать результаты сравнения чисел, как в предыдущей программе. Исходные неравенства заменены диапазонами. Например, проверка логического условия Age < 12 заменена проверкой принадлежности диапазону 0..11.

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

If Ready then Exam_ok := true;

Идеальная логика эквивалентности:

If Ready then Exam_ok := true else Exam_ok := false;

Управление вычислительным процессом, цикл for

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

Естественный алгоритм для решения такой задачи:

(1) обозначим искомую сумму S и присвоим ей значение, равное нулю;

(2) последовательно N раз вычислим слагаемые ряда и прибавим их к переменной S.

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

for < счетчик цикла> := to < последнее значение> do

;

for < счетчик цикла> :=

downto < последнее значение> do ;

Счетчик цикла — это переменная одного из порядковых типов (из порядковых типов мы пока знаем только целые и логический тип, в главе 7 понятие порядкового типа будет расширено). Назначение этой переменной очевидное — она хранит число повторений операторов тела цикла, следующего за словом do. Значение счетчика цикла изменяется автоматически от первого до последнего значения и увеличивается на единицу для первой формы записи (с оператором to) или уменьшается на единицу для второй формы записи (с оператором downto). Дополнительные изменения значения счетчика цикла в части, обозначенной здесь как , запрещены. В качестве первого и последнего значения могут использоваться конкретные числа, другие переменные целого типа, вычисленные ранее, и выражения, имеющие значения целого типа.

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

Программа с циклом for, которая вычисляет сумму N членов гармонического ряда1:

Program Sum; {сумма N членов гармонического ряда}

var x: byte; {счетчик цикла}

s : real; {сумма ряда}

N : byte; {число членов ряда}

begin

Write('N = '); ReadLn(N); {ввод числа членов ряда}

s := 0; {начальное значение суммы}

тогх:= 1 toNdos:=s+ 1/х; {подсчет суммы}

WriteLn( 'S = ', s); {вывод результата}

ReadLn {ожидание нажатия клавиши Enter}

end.

Оператор, следующий после слова do, может быть составным (представлять собой группу операторов).

Пример. Найти нечетные и кратные трем числа в диапазоне от 30 до 60 включительно. Распечатать их в порядке убывания.

Условие нечетности целого числа — Odd(J). Условие кратности трем — равенство нулю остатка от деления i mod 3=0. Нас интересуют числа, удовлетворяющие обоим условиям, то есть числа, для которых истинно Odd(i) and (i mod 3 = 0). Убывающий порядок следования чисел обеспечивает оператор for.. downto. Таким образом, программа будет иметь вид

Program Sample;

var i: byte;

begin

for i := 60 downto 30 do {цикл по убывающей от 60 до 30}

if Odd(i) and (i mod 3=0) then WriteLn(i) end.

В результате выполнении программы получим в столбик значения 57, 51,45,39, 33.

В приведенном примере многократно повторялся один оператор, однако во многих случаях необходимо повторять группу операторов. Вспомним, что говорилось в предыдущей главе о вложенности операторов друг в друга. Чтобы использовать вместо одного оператора группу, нужно эту группу превратить в один сложный оператор. Осуществляется это с помощью так называемых “программных скобок” — операторов begin и end.

begin

;

;

end;

Любая группа операторов, начинающаяся со слова begin и кончающаяся словом end в любой конструкции языка Паскаль может использоваться как один сложный оператор. Сложный оператор, в свою очередь, может иметь в своем составе сложные операторы следующего уровня вложенности и так далее. Операторы begin и end подобны открывающим и закрывающим скобкам, и на их употребление накладываются те же ограничения, что и на обыкновенные скобки в арифметических выражениях: каждой “открывающей скобке” begin должна соответствовать “закрывающая скобка” end. Слово end не может предшествовать парному ему слову begin. При компиляции программы проверяется правильность расстановки скобок и дается сообщение об ошибке. Это сообщение не всегда попадает в то место, где действительно нужна скобка, поэтому не спешите вставлять операторы туда, куда предлагает компилятор, а тщательно проанализируйте Вашу программу.

Пример. Имеется логическое выражение not a and b xor с. Требуется вывести на печать значения логических переменных а, Ь, с, при которых данное выражение истинно. Мы предлагаем перебор всех возможных значений а, b, с с проверкой выполнения условия для каждого сочетания значений.

Program Sample;

Vara, b, с : boolean;

begin

for a := false to true do

for b := false to true do

for с := false to true do

if not a and b xor с then

begin

Write('a=',a);

Write('b=',b);

WriteLn('c=',c)

End

End.

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

a =FALSE

b =FALSE

с =TRUE

a =FALSE

b =TRUE

с =FALSE

a =TRUE

b =FALSE

c =TRUE

a =TRUE

b =TRUE

с =TRUE

Программа состоит из одного сложного оператора for a := false to true do, в который вложены последовательно еще два оператора for и оператор if. Часть then последнего содержит сложный оператор, состоящий из трех простых операторов, охваченных программными скобками begin и end.

Циклы с логическими условиями

Введенный в предыдущей главе оператор цикла for обеспечивает выполнение цикла заданное количество раз, однако часто циклические действия заканчиваются по условию, то есть выполняются до достижения определенного результата. В Паскале есть два таких оператора цикла, отличающиеся тем, что в одном из них условие проверяется в начале цикла (while...do), а в другом — в конце цикла (repeat...until).

Оператор while.. do

Оператор цикла while (пока, в то время как) имеет вид:

While do ;

Цикл While обеспечивает выполнение тела цикла, следующего за словом do до тех пор, пока условие имеет значение true (истина). В качестве тела цикла может использоваться простой или сложный оператор. Условие проверяется перед началом каждого выполнения тела цикла, поэтому, если до первого выполнения цикла условие имеет значение false (ложь), оператор не выполняется ни одного раза (рис. 5.2).

Пример. Необходимо преобразовать значение угла в градусах к стандартному диапазону ±180° путем исключения полных оборотов окружности ±360°. Эта процедура может быть выполнена с помощью оператора цикла

While abs(Angle) > 180 do

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее