Циклы в паскаль: repeat until for
При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции –циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (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, одна звездочка все равно будет напечатана.
Задачи к данной теме
Возведение числа в степеньВывод на экран таблицы ASCIIВычисление суммы ряда чиселЗаполнение массива и вычисление суммы элементовЗаполнение массива и его вывод на экранПеревод римских чисел в арабские. Пример автоматного распознавателяПрограмма "Угадай число"Таблица умножения на ПаскалеФильтр строкиФункции вычисления площади геометрических фигурФункция, вычисляющая наибольший общий делитель‹ Вложенные конструкции if-elseВверхОператоры goto, break, continue и прекращения программы ›ЦиклыВерсия для печати
Добавить комментарийКомментарии
чт, 12/19/2013 - 14:40 — Гость
Цикл со счетчикомМне нужна помощь. Программа нахождения скорости, времени и расстояния. Как использовать цикл со счетчиком чтобы программа завершалась не только при одном из выбранных действий но и после сразу трех т.е при нахождении скорости времени расстояния
program variant4;
uses crt;
var n:integer;{ввод переменных}
t,v,s:real;
begin
ClrScr;
writeln('1.Вычислить расстояние.');
writeln('2.Вычислить скорость.');
writeln('3.Вычислить время.');
readln(n);
case n of
1:begin
write('Введите скорость:');readln(v);
write('Введите время:');readln(t);
S:=t*v;
writeln('Расстояние = ',s:5:2);
end;
2:begin
write('Введите расстояние:');readln(s);
write('Введите время:');readln(t);
v:=s/t;
writeln('Скорость = ',v:5:2);
end;
3:begin
write('Введите расстояние:');readln(s);
write('Введите скорость:');readln(v);
t:=s/v;
writeln('Время = ',t:5:2);
end;
end;
readln;
end.
ответитьПнд, 12/17/2012 - 19:13 — Гость
У основания столбика высотойУ основания столбика высотой L см сидит улитка.Днем (с 7:00 до 20:00) она проползает вверх К см. Ночью - улитка спит, поэтому сползает вниз на Н см.Определите и выведите на экран на какие сутки улитка доберется до вершины столбика, при условии, что полностью восстановить силы за ночь ей не удается, и каждые новые сутки ее продвижение вверх уменьшается на М см. А может это ей и вовсе не удасться?Значения L, К, Н и М - целые числа, которые вводятся с клавиатуры и лежат в пределах от 0 до 1000 включительно.
ответитьср, 09/04/2013 - 15:22 — Гость
Решениеvar
L, K, H, M, S, i: integer;
begin
S:=0;
write ('Введите высоту столба: ');
readln (L);
write ('Введите сколько за день проползет улитка: ');
readln (K);
write ('Введите на сколько за ночь сползет улитка: ');
readln (H);
write (Введите на сколько улитка будет уставать каждый день: ');
readln (M);
begin
i := 0;
repeat
S:=S+K-H-M*(i);
i := i + 1
until (S >= L) or (S<0);
end;
If S >= L then
write ('Улитке нужно', i,' дней что бы добраться до верха')
Else
write ('Улитка через', i,' дней сползет до земли');
readln
end.
ответитьВтр, 11/27/2012 - 20:08 — Гость
Построить таблицуПостроить таблицу соответствий между мерами, используя цикл с постусловием (repeat....until). Начальное и конечное значения меры, шаг изменение этого значения задать самостоятельно в режиме диалога. Оформить таблицу применяя форматы вывода. Количество строк в таблице (10-15).
1 чейн строительный = 30.48м. =100 футов
ответитьср, 11/14/2012 - 22:09 — Гость
чашке находится n микробы ихчашке находится n микробы их количество с каждой минутой удваивается составить программу нахождения количества микробов за время t
ответитьвс, 05/13/2012 - 14:36 — Гость
старинная задачадано 100 рублей на эти 100 рублей мужику надо купить 100 голов скота теленок стоит 0.5 рубля корова 5 рублей бык 10 рублей. решить надо с помощью цикла
ответитьср, 11/28/2012 - 11:16 — Гость
uses crt;var b,k,t,s:uses crt;
var b,k,t,s: integer;
zb,zk,zt: real;
begin
zb:=10; zk:=5; zt:=0.5;
for b:=0 to 100 do
for k:=0 to 100 do
for t:=0 to 100 do
if ((b*zb)+(k*zk)+(t*zt)=100) and
(b+t+k=100) then writeln(b,' быков, ',k,' коров, ',t,' телят');
end.
ответитьпт, 01/24/2014 - 07:11 — Гость
s: integer;s - для чего?
ответитьср, 03/28/2012 - 18:23 — Гость
Задачи нужно решить тремя способами (циклы)Все задачи нужно решить тремя способами:1)счетчик (for to do)2)предпроверка условия (while do)3)постпроверка условия (repeat until)
Задача№1В бригаде, работающей на уборке сена, имеется N сенокосилок. Первая сенокосилка работала m часов, а каждая следующая на 10 минут больше, чем предыдущая. Сколько часов проработала вся бригада?
Задача№2На воду опущен шар радиуса r, изготовленный из вещества плотности p (p<1). Найти расстояние от центра шара до поверхности воды. Указание. При составлении программы воспользоваться формулой объема шарового сегмента высоты h: V = пи*h^2 (3r - h)/3, где r - радиус шара, h - высота шарового сегмента.
В первой задачке нужно узнать время всей бригады - это время первой сенокосилки + время второй: м1+м2+м3.....+мn например всего 3 косилки, время 1-ой косилки 5 часов + время второй 5 часов 10 минут + время третьей 5 часов 20 минут=15 часов 30 минут.
у меня есть 2 варианта решения но у меня не получается сложить время каждой неправильно высчитывает пробовал и в 1-ый и во второй вариант решения добавить сложение
begin
Writeln('Vvedite kollichestvo senokosilok:');
readln(n);
Writeln('Vvedite vremya raboti 1-oy senokosilki:');
readln(m);
m:=m*60;
for i:=2 to n do
m:=m+10;
m:=m/60;
Writeln('Vremya raboti vsey brigadi=',m,' chasa(ov)');
readln;
end.
и
begin
Writeln('Vvedite kollichestvo senokosilok:');
readln(n);
Writeln('Vvedite vremya raboti 1-oy senokosilki:');
readln(m);
t:=m;
for i:=2 to n do
t:=t+1/6+i+i;
Writeln('Vremya raboti vsey brigadi=',t:0:2,' chasa(ov)');
readln;
end.
10 мин это 1/6 часа
помогите пожалуйста если несложно никак не получается решение этих двух задач.
ответитьср, 11/20/2013 - 16:49 — Гость
program z1;varprogram z1;
var n,m,i:integer;
begin
writeln('введите N');
readln(N);
writeln('введите m в минутах');
readln(m);
i:=1;
repeat
m:=m+10;
i:=i + 1
until (i=N);
writeln (m);
end.
ответитьвс, 05/20/2012 - 23:32 — Гость
В первой задаче ты простоВ первой задаче ты просто добавляешь по 10 минут с каждой итерацией. Если внимательно прочесть задачу, то можно заметить, что каждая следующая работала НА 10 минут больше предыдущей.Мой вариант программы без перевода в часы:
program seno;
var a,n,b,i:integer; m:real;
begin
write('kosilok:');
readln(a);
write('1 rabotala:');
readln(b);
n:=a*60;
for i:=1 to a-1 do
begin
n:=n+10;
m:=n+m;
end;
write('otvet:',m:3:2,' minut');
end.
ответитьчт, 05/03/2012 - 15:19 — Гость
for i:=2 to n dofor i:=2 to n do BEGIN
m:=m+10;
m:=m/60; END;
ответитьср, 04/04/2012 - 19:31 — Гость
вот 3program tech;
var n,i: integer; m,j: real;
begin
writeln('Vvedite kollichestvo senokosilok');
readln(n);
writeln('Vvedite vremya raboti 1-oy senokosilki');
readln(m);
j:=0;
for i:=1 to n do
begin m:=m+j;
j:=j+(1/10);
end;
writeln('Vremya raboti vsey brigadi=',t:0:2,' chasa(ov)');
readln;
end.
ответитьср, 04/04/2012 - 19:29 — Гость
Вот еще вариантprogram tech;
var n,j: integer; m,k: real;
begin
writeln('Vvedite vremya raboti 1-oy senokosilki:');
readln(n);
writeln('Vvedite vremya raboti 1-oy senokosilki:');
readln(m);
k:=0;
j:=0;
while J<n do
begin
m:=m+k;
k:=k+(1/10);
j:=j+1;
end;
writeln('Vremya raboti vsey brigadi=',m:2:2,' chasa');
readln;
end.
ответитьвс, 04/22/2012 - 15:35 — Гость
Вот вариант у мня работает может кому пригодится.program senokos;
uses crt;
var n, m, i :integer;
begin
writeln('Введите количество сенокосилок n ');
readln(n);
writeln('Введите время работы первой сенокосилки m ');
readln(m);
m:=m*60;
for i:=1 to n-1 do
m:=m+10;
writeln('Общее время работы бригады= ',m);
readln
end.
ответить