Паскаль цикл чтобы числа не повторялись

Паскаль цикл чтобы числа не повторялись thumbnail

Оператор повтора (цикла) предназначен для неоднократного повторения выполнения отдельного участка кода.

Существует три различных цикла: FOR, WHILE и REPEAT, каждый из которых работает с постусловием (REPEAT) и предусловием (FOR, WHILE ). Цикл с предусловием означает, что программа выполняет цикл только после проверки условия, а для цикла с постусловием условие проверяется только после выполнения цикла. Условие в цикле необходимо для его завершения. Чтобы прервать любой цикл во время выполнения, необходимо внутри него поместить функцию BREAK (с англ. “прервать”). Однако BREAK предназначена для остановки лишь одного цикла, следовательно, чтобы непременно остановить два вложенных цикла необходимо внутрь каждого из них поместить BREAK.

Цикл FOR

Структура цикла FOR следующая:


for i:=1 to 10 do
s:=s+10;

Вначале ставим ключевое слово FOR. Переменная I – счетчик (всегда целый (INTEGER) числовой тип переменной). В данном примере счетчик увеличивается с 1 до 10. При этом переменная S каждый раз увеличивается на 10. Чтобы данный цикл уменьшать с большего числа до меньшего, вместо TO поставим DOWNTO:


for i:=10 downto 1 do
s:=s+1;

Вторая строка в примере повторяется десять раз. Чтобы повторять несколько действий нужно поставить BEGIN:


for i:=1 to 10 do
begin
if i=5 then
break;
writeln(i);
end;

В данном примере цикл выведет числа в порядке возрастания от 1 до 4. Во время пятого повторения цикла, он прервется функцией BREAK.

Цикл WHILE

Структура цикла WHILE следующая:

while a<b do

begin

a:=a+1;


while a<10 do
a:=a+1;

Вначале ставим ключевое слово WHILE. Затем прописываем условие, при котором будет выполняться цикл и ставим ключевое слово DO, после которого прописываем действия, которые необходимо повторить. Как только логическое значение условия станет FALSE (ложь), цикл автоматически завершится. В данном примере действие A:=A+1 будет повторяться до тех пор, пока переменная A не станет больше 10.

Вообще цикл WHILE (с англ. “пока”), чтобы не запутаться, можно читать следующим образом: “Пока переменная A меньше десяти, выполнить следующее действие: в переменную A присвоить значение A плюс один” (или “… значение переменной A увеличить на единицу”). Следовательно, как только значение переменной A станет больше, либо равным 10, цикл сразу же завершится.

Цикл REPEAT

Структура цикла REPEAT следующая:


repeat
a:=a+1;
until a=10;

Вначале ставим ключевое слово REPEAT. Затем выполняется часть кода до ключевого слова UNTIL, после которого задается условие. Между REPEAT и UNTIL BEGIN и END, в отличие от циклов FOR и WHILE, ставить не нужно. В данном примере  цикл завершается только тогда, когда значение переменной A станет равным 10.

Для представления структур трех циклов рассмотрим следующую таблицу, в которой каждый цикл находит сумму пяти чисел, начиная с двух:


a:=1;
s:=0;
n:=0;
while n<>5 do
begin
a:=a+1;
s:=s+a;
n:=n+1; end;

a:=1;
s:=0;
for i:=1 to 5 do
begin
a:=a+1;
s:=s+a;
n:=n+1;
end;

a:=1;
s:=0;
n:=0;
repeat
a:=a+1;
s:=s+a;
n:=n+1;
until n=5;

Задания:

  • Найти квадрат нечетных чисел.
  • Вывести на экран среднее арифметическое вводимых чисел, сколько введено чисел и их сумму.
  • Найти сумму делителей числа A.
  • Проверить, является ли число совершенным (равным сумме всех его делителей).
  • Выяснить, является ли введенное число неполным (делится только на себя и на единицу).

Ответы к заданиям предыдущей статьи:

  • Написать программу, отображающую на экране времена года, при вводе номера месяца.

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

Времена года на Паскаль

  • Написать программу преобразования цифр (0-10) в слова.

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

Pascal Преобразование цифр в слова

  • Составить программу, которая меняла бы окончания, в зависимости от возраста человека (“мне 1 год”, “мне 4 года”, “мне 75 лет”).

Программа "Сколько лет" на Паскаль

Перед составлением программы необходимо проанализировать, в каком случае окончание предложения будет “год”, в каком “года”, а в каком “лет”. После тщательного перебора цифр было выяснено, что всегда, когда последняя цифра возраста становится “1”, мы говорим “год”: “двадцать один год”, “пятьдесят один год”… Если цифра возраста находится в диапазоне от 2 до 4, мы говорим “года”: “тридцать три года”, “шестьдесят два года”… В остальных случаях мы говорим “лет”: “сорок лет”, “семьдесят восемь лет”… Однако исключением стал возраст от 10 до 20 лет. Нельзя сказать, что мне одиннадцать год, или мне тринадцать года. Таким образом, используя case, обрабатываем данное исключение: от 5 до 20 пишем “лет”.

Напоминаю, что после оператора case begin ставить не нужно. Но его нужно обязательно закрыть (end). Чтобы не запутаться с end, я решил выделить только ту часть программы, которая принадлежит case, немного отодвинув ее вправо. Сама программа при этом не изменится. Просто таким образом программа станет более наглядной для каждого программиста и с ней будет проще разобраться.

Читайте также:  Этапы реализации производственного цикла

<<Предыдущая статья                                     Следующая статья >>

Опубликовано: 2011-12-04 16:50:18

Источник

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

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

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

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

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

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, …, n

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

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

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

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

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

WHILE   DO
        begin
                
        end;

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

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

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

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

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

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

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

Пример:

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

program example-while;

var
   sum:real;
   n:real;
BEGIN
   sum:=0;
   n:=1;
   while n

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

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

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

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

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

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

REPEAT

UNTIL  ;

Program test2;
Var b:Real;
Begin
b:=100;
Repeat b:=b/2;
Until b

Выводы:

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

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

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

Предыдущий урок

Дата: 2012-01-06 19:31:43   Просмотров: 272135

Теги: Паскаль Pascal циклы уроки

Источник

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

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

Блок схемы циклов

Цикл for

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

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

Читайте также:  Элементы управленческого цикла это

Цикл for существует в двух формах:

for счетчик:=значение to конечное_значение do
тело_цикла;
for счетчик:=значение downto конечное_значение do
тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

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

var
i, n: integer;
 
begin
write (‘Количество знаков: ‘);
readln (n);
 
for i := 1 to n do
write (‘(*) ‘);
 
readln
end.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

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

var
i, n: integer;
 
begin
write (‘Количество знаков: ‘);
readln (n);
 
i := 1;
while i <= n do begin
write (‘(*) ‘);
i := i + 1
end;
 
readln
end.

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

var
i, n: integer;
 
begin
write (‘Количество знаков: ‘);
readln (n);
 
i := 1;
repeat
write (‘(*) ‘);
i := i + 1
until i > n;
 
readln
end.

В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.

Источник

Циклы

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

Циклы

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

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

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

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

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

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

while < условие> do <оператор 1>;  {Пока … делай ….}

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

Решение задачи.

program example_while;

var
i, N: integer; { объявляем переменные }

begin
i := 1; { Присваиваем i значение 1 }
readln(N); { Считываем последнее число }
while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) }
begin {Открываем операторные скобки}
write(i, ‘ ‘); {Выводим i}
Inc(i); {увеличиваем i на один.}
end; { закрываем скобки }
end.

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

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

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

repeat { повторяй … }
<оператор 1>;
< оператор 2>;

until {до…} <условие>

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

Решение задачи.

program example_repeat;

var
i, N: integer;{ объявляем переменные }

begin
i := 1; { Присваиваем i значение 1 }
readln(N); { Считываем последнее число }
repeat {после repeat не требуется begin и end }
write(i, ‘ ‘); {Выводим i}
Inc(i); {увеличиваем i на один.}
until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.}
end.

Читайте также:  Как показать операционный цикл предприятия

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

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

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

Первая форма

for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;

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

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

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

И <счетчик1>, и <конечное_значение>, и <значение1> —  переменные целого типа.

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

Вторая форма

for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;

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

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

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

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

for

Решение задачи:

program example_for;

var
i, N: integer;

begin
read(N); {предположим, что мы ввели 10}
for i := 1 to N do write(i, ‘ ‘); {количество итераций – 10 – 1 + 1 = 10}
end.

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

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

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

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

program for1;

var
K, N, i: integer;

begin
read(K, N);
for i := 1 to N do write(K, ‘ ‘); {Пишем К через пробел }
end.

For2. Даны два целых числа A и B (A < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

program for2;

var
A, B, i, count: integer;

begin
read(A, B);
for i := A to B do write(i, ‘ ‘); {выписываем числа от меньшего к большему}
count := B – A + 1; {считаем количество чисел}
writeln;
write( ‘Количество чисел – ‘, count);
end.

For9. Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.

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

program for9;

var
A, B, i, S: integer;

begin
read(A, B);
S := 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную}
for i := A to B do S := S + Sqr(i); {складываем все квадраты}
writeln;
write( ‘Сумма квадратов – ‘, S);
end.

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

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

program for13;

var
N, A, i: integer;
S: real;

begin
Write(‘N = ‘);
readln(N);
S := 1.1;
A := 1; {Сначала положительное}
for i := 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2}
begin
A := -A; {Теперь отрицательное}
S := S + A * (1 + i / 10); {Складываем}
end;
Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо}
end.

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

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

program while1;

var
A, B: integer;

begin
readln(A, B);
while (A – B) >= 0 do A := A – B; {Пока разница положительная, вычитаем. Необходимо предусмотреть вариант с кратностью А и B, поэтому >=}
write(A);
end.

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

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

program while4;

var
N: integer;

begin
readln(N);
while N mod 3 = 0 do N := N div 3; {Пока остаток от деления на три равен нулю, делим N нацело }
writeln(N = 1); {логическое выражение}
end.

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

Источник