Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

While else паскаль

While else паскаль

Как мы уже говорили, в паскале существуют 3 способа организации цикла (типа):

2) Цикл с постусловием

3) Цикл с предусловием

Тело цикла выполняется пока условие ИСТИННО.

Если в теле цикла действий несколько — используются операторные скобки begin … end;

Рассмотрим пример, аналогичный рассмотренному в теме «Цикл со счетчиком», но реализуем его с помощью цикла WHILE.

Требуется на экране вывести:

Привет
Привет
Привет
Привет

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

Данный цикл будет выполнять команду writeln(‘Привет’) бесконечное число раз. Почему? Потому что переменная n не изменяется и всегда будет меньше 4. Поэтому необходимо в цикле добавить код, изменяющий переменную n. Например: n:=n+1.

Теперь переменная n будет изменяться с каждым выполнением команд тела цикла (с каждой итерацией).

Нужно запомнить: чтобы не произошло зацикливание в цикле WHILE — необходимо проследить за тем, чтобы переменная из условия изменялась в теле цикла. В цикле со счетчиком такого не случится (зацикливание), т.к. мы указываем точное число итераций.

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

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

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

Зачем два раза используем ввод числа а (readln(a);)? Первый раз вводим число а для того, чтобы войти в цикл с некоторым значением переменной a, которое будет использоваться в условии цикла WHILE. Второй раз команда readln(a) используется внутри цикла — вводим числа до тех пор, пока не введем ноль.

Даны два отрезка А и B (A>B). Не используя операции умножения и деления, определить, сколько отрезков В уместится в отрезке А.

Информатика в школе. Цикл WHILE

Т.е. из рисунка видно, что нам нужно складывать длины отрезка A до тех пор, пока сумма не станет больше длины отрезка В. В этом нам поможет цикл с предусловием — цикл while.

Рассмотрим работу программы на примере: А=5, В=21. Рассуждения запишем в таблицу:

Информатика в школе. Цикл WHILE

Используя алгоритм Евклида, найти НОД двух чисел.

Рассмотрим блок-схему алгоритма Евклида:

Запишем данной алгоритм с помощью Паскаля, опираясь на данную блок-схему. Как видим, у нас имеется цикл с предусловием (M>N). Внутри цикла еще одно условие (M>N), т.е. оператор IF… THEN.

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

Цикл While

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

Продолжим циклы. Как я уже сказал, сегодня будет цикл While, его синтаксис немного позже, а пока расскажу о том, как он применяется.

Работая с циклом FOR вы наверняка заметили, что программа повторяется всегда фиксированное количество раз — пусть даже это количество и задается в ходе выполнения программы, но изменять его в ходе выполнения цикла нельзя. Если сказано прокрутить цикл десять раз, десять раз он и прокрутиться. Наводит на мысль, что цикл For использовать удобно при подходящей ситуации — например, каких-нибудь математических расчетах или внутреннем выполнении действий. А вот если нам понадобилось внешняя работа с данными, циклически оформленными? Это например, может быть таже программа ввода строки, которая будет читать строку, пока та не будет содержать слова «end». Мы кстати писали подобную программу, она использовала в качестве зацикливания процедуру goto, переходя на новое чтение при определенных условиях. Вы замечаете разницу? Задумайтесь — чтение строки, это ведь работа с внешними данными? Так ведь? И если это чтение происходит по кругу, то это ведь цикл? Тоже верно. Но выполнение этого цикла несколько специфичное — он работает до возникновения определенных условий (опять же со стороны внешних данных).

Вот здесь как раз и будет удобо использовать цикл While. Особенностью этого цикла является то, что он будет выполнять свою работу до возникновения каких-либо условий, то есть сам он ничего не изменяет в переменных, он всего лишь что-либо проверяет. (Помните, цикл FOR изменяет переменную-счетчик?) В заголовке этого цикла стоит не диапазон значений, а собственная процедура проверки — вроде известной нам if. then. else, далее вы сами это увидите.

Ну а теперь для демонстрации этого цикла давайте напишем программу, которая и будет выполнять чтение строки до того момента, пока она не будет строкой «end». Смотрите программу:

Program N1;
var
S: String;
begin
While S <> ‘end’ do
Readln(S);
Write(‘Вот и все! Вы ввели end!’);
Readln;
end.

Запустите программу. Видите, она читает строки до того момента, пока введенная строка не будет равна «end»? Просто, не правда ли? Теперь внимательно посмотрите на программу. Здесь налицо, что вместо типичного диапазона значений цикла (как FOR — повторять от сих до сих) стоит процедура проверки, то есть «повторять пока». Кстати, while переводиться с английского как «пока». Теперь необходимые комментарии к изученному циклу.


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

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

После указания условия ставится служебное слово do.

Теперь идет само тело цикла. Здесь помните, что если в теле цикла содержиться один оператор (как в первом примере), то он указывается без дополнительных выделений. Если же идет несколько операторов, то они все заключаются в конструкицю begin-end. Это очень принципиально, не забывайте про это!

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

Это может быть использовано и в конструкции if. then. else и в цикле while. Однако рассказывать о том, как реализуются сложные конструкции сравнения я буду в следующих уроках, в частности, практических, где мы будем решать задачи.

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

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

Итак, мы решили написать калькулятор. Для его работы нужны два числа и знак действия — все это мы будем вводить по отдельности, так как пока не умеем разбивать строки на числа. Общий алгоритм таков:


    Ввести А;

Ввести знак действия;

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

Если ответ утвердительный, то начать все сначала (переход к пункту 1);

Вот исходный текст, реализующий этот алгоритм:

Program Simple_Calculator;
var
A,B,C: Integer;
Ch, Sign: Char;
begin
While UpCase(Ch) <> ‘N’ do
begin
Write(‘Введите А: ‘);
Readln(A);
Write(‘Введите B: ‘);
Readln(B);
Write(‘Введите знак действия: ‘);
Readln(Sign);
If Sign=’+’ then C := A + B;
If ‘N’ do
begin
Write(‘Введите число: ‘);
Readln(A);
While A > 0 do
begin
B := A mod 10;
Dec(A, B);
A := A div 10;
Writeln(‘Разряд: ‘, B);
end;
Write(‘Сначала? (Y/N): ‘);
Readln(Ch);
end;
Write(‘Конец программы. ‘);
Readln;
end.

Посмотрите внимательно на текст этой программы. Здесь я опять использовал незнакомые слова вроде mod и div, поэтому перед тем, как рассказывать о работе программы, разъясню, что же они делают.

Операция div — выполняет деление целых чисел (Integer, Byte, Word, LongInt — см. выпуск N4) без остатка. Работа этой операции очень проста — например, при делении числа на 10 (как в нашем случае) результат не всегда получится целым (123 div 10) и не может храниться в переменной целого типа. Эта же операция попросту откидывает остаток у получившегося значения. Вот пример:

123 / 10 = 12.3; (Результат обычного деления)

123 div 10 = 12; (Результат работы операции div)

Операция mod — получает остаток от деления целых чисел. При выполнении этой операции присходит выявление остатка от деления и именно он выноситься в результат. Вот пример:

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

Ну а теперь комментарии к программе.

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

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

Dec(A, B);
Помните такую операцию? Это эквивалентно:
A := A — B;
Вот весь ход выполнения опрерации получения последного знака:

* К примеру, мы ввели число 157:


    157 mod 10 = 7; (Вот он, последний знак!)

  • 157 — 7 = 150; (А вот мы его и отрезали!)
  • * Если мы ввели число 1:


      1 mod 10 = 1; (Опять последний знак — он же и первый)

  • 1 — 1 = 0;
    (И опять мы его отрезаем, причем число стало равным нулю — оно как бы кончилось, однозначное ведь).
  • После выполнения этих действий у имеющегося числа отсекается последняя цифра. Если вы не поняли, перечитайте все еще раз и попробуйте написать программу самостоятельно по шагам.

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

    120 div 10 = 12;
    10020 div 10 = 1002;
    10 div 10 = 1;

    Видите, число подвигается на один разряд? Это налицо, не так ли? Ну а теперь вспомните наши манипуляции с операцией mod — отсечение последнего знака. Чтоже получиться, если после того, как мы сдвинули число опять выполнить вышеописанные действия? Верно, мы снова получим остаток от деления или последний разряд.

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

    Вот такой вот алгоритм, для наглядного примера смотрите вышеприведенную программу.

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

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

    Как в Турбо Паскале написать программу для Windows?

    Для написания Windows-программ предназначена более расширенная версия языка Паскаль — Borland Pascal 7.0, кроме того, чтобы писать в нем приложения для системы Windows необходимо знание дополнительных модулей — Object Windows, а также внутренних средств операционной системы. Мы этим в ближайшее время заниматься не будем.

    Как в Паскале очистить экран?

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

    Урок 12. Циклы в Pascal: repeat, while, for

    Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.
    Если вы читали этот урок, то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать линейные и разветвляющиеся алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.
    В языке Pascal, как и в большинстве языков программирования, существует три типа циклических конструкций.

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

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

    Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.

    While, или цикл с предусловием

    Как вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.

    While имеет формат:

    while do ;

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

    Repeat, или цикл с постусловием

    Repeat — полная противоположность while. Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.

    Repeat имеет формат:

    repeat < повторяй … >
    ;
    ;

    until

    Begin и end не требуются.

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

    For — это цикл, в котором тело выполняется заданное количество раз.

    Существует две формы записи этого цикла:

    Первая форма

    После каждой итерации значение будет увеличиваться на 1.

    — это начальное значение счетчика. Это может быть переменная или число.
    : как только значение станет больше , выполнение цикла прекратится.

    Если требуется написать несколько операторов в теле цикла, используем begin и end.

    И , и , и — переменные целого типа.

    Чаще всего в качестве счетчика используется переменная i.

    Вторая форма

    После каждой итерации значение будет уменьшатся на 1.

    — это начальное значение счетчика.
    : как только значение станет меньше , выполнение цикла прекратится.

    Два важных примечания:

    1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
    2. Изменять значение счетчика внутри тела нельзя! Вот что выводит компилятор:

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

    Давайте решим пару задач.

    For1. Даны целые числа K и N (N > 0). Вывести N раз число K.

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

    For2. Даны два целых числа A и B (A — + 1.

    For9. Даны два целых числа A и B (A 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.

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

    While1°. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.

    Каждый раз вычитаем B из А, пока А — В >= 0.

    While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является — вывести False.

    Действуем следующим образом: пока N делится нацело на три, делим N нацело. Затем, если N = 1 — число является степенью тройки; если N <> 1, тогда число — не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое div и mod, и как работают логические выражения.

    На сегодня все! Не забывайте почаще заходить на наш сайт и кликать по кнопочкам, которые расположены перед комментариями.

    Паскаль — Урок 6: Циклы while, for, repeat

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

    1. Цикл с параметром в Паскале — FOR

    Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта — счетчик который обычно обозначается буквой i или j.

    Внешний вид цикла с параметром в паскале:

    После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to — это до .. в порядке возрастания, также есть downto — до .. в порядке убывания.

    Блок — схема цикла с параметром:

    2. Цикл с предусловием в Паскале — WHILE

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

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

    — логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

    — любые выполняемые операторы языка.

    Порядок выполнения цикла:

    Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

    Блок — схема цикла с предусловием:

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

    Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

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

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

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

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

    Блок — схема цикла с постусловием:

    Формат записи, структура цикла:

    Выводы:

    1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

    2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

    3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

    While else паскаль

    Как мы уже говорили, в паскале существуют 3 способа организации цикла (типа):

    2) Цикл с постусловием

    3) Цикл с предусловием

    Тело цикла выполняется пока условие ИСТИННО.

    Если в теле цикла действий несколько — используются операторные скобки begin … end;

    Рассмотрим пример, аналогичный рассмотренному в теме «Цикл со счетчиком», но реализуем его с помощью цикла WHILE.

    Требуется на экране вывести:

    Привет
    Привет
    Привет
    Привет

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

    Данный цикл будет выполнять команду writeln(‘Привет’) бесконечное число раз. Почему? Потому что переменная n не изменяется и всегда будет меньше 4. Поэтому необходимо в цикле добавить код, изменяющий переменную n. Например: n:=n+1.

    Теперь переменная n будет изменяться с каждым выполнением команд тела цикла (с каждой итерацией).

    Нужно запомнить: чтобы не произошло зацикливание в цикле WHILE — необходимо проследить за тем, чтобы переменная из условия изменялась в теле цикла. В цикле со счетчиком такого не случится (зацикливание), т.к. мы указываем точное число итераций.

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

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

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

    Зачем два раза используем ввод числа а (readln(a);)? Первый раз вводим число а для того, чтобы войти в цикл с некоторым значением переменной a, которое будет использоваться в условии цикла WHILE. Второй раз команда readln(a) используется внутри цикла — вводим числа до тех пор, пока не введем ноль.

    Даны два отрезка А и B (A>B). Не используя операции умножения и деления, определить, сколько отрезков В уместится в отрезке А.

    Информатика в школе. Цикл WHILE

    Т.е. из рисунка видно, что нам нужно складывать длины отрезка A до тех пор, пока сумма не станет больше длины отрезка В. В этом нам поможет цикл с предусловием — цикл while.

    Рассмотрим работу программы на примере: А=5, В=21. Рассуждения запишем в таблицу:

    Информатика в школе. Цикл WHILE

    Используя алгоритм Евклида, найти НОД двух чисел.

    Рассмотрим блок-схему алгоритма Евклида:

    Запишем данной алгоритм с помощью Паскаля, опираясь на данную блок-схему. Как видим, у нас имеется цикл с предусловием (M>N). Внутри цикла еще одно условие (M>N), т.е. оператор IF… THEN.

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

    Читать еще:  Itoa си реализация
    Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector
    ×
    ×