Циклы в Паскале

Циклы языка программирования 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, одна звездочка все равно будет напечатана.

Задачи к данной теме

Комментарии

написать программу

которая найдет из произвольного шестизначимого числа:
1)произведение первых трех разрядов числа
2)сумму вторых трех разрядов числа

Помогите Пожалуйста

Суть задачи такова
Нужна вводить N предложение в текстовой документ и вводить A предложение для поиска. Если слова из предложения А есть в каком то предложении из текстового документа показать эти предложение а слова зачеркнуть.

Вычислить произведение: P =

Вычислить произведение:

P = 2π • lg3f • lg4f • lg5f • … • lg21f

задача помогите

по формуле s=a*t/2

помогите, пожалуйста

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

program soobsh; 
 
uses crt; 
var 
n, i, s: integer; 
 
begin 
n := 0; 
for i := 1 to 20 do 
begin 
writeln('Нажмите клавишу в течение секунды'); 
 
s:=1000; 
delay(s); 
if KeyPressed then n := n + 1; 
writeln('количество нажатий = ', n); 
delay(1000); 
end; 
 
end.

не получается подсчитать нажатие клавиш, после каждого сообщения и настроить на время

Помогите, написать программу,

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

у=x^2, x[-5;5] шаг

у=x^2, x[-5;5] шаг 1,используя цикл FOK

Помогите решить

Среди чисел cos(i^3)*sin(100+(i/100)) i=0,1,...N необходимо найти номер и значение первого по порядку числа, абсолютная величина которого меньше заданного E > 0. Число Е задать с клавиатуры. Если таких чисел нет, вывести на печать соответствующий текст.

помогите решить задачу

парихмахер тратит на стрижку волос клиента 25 мин и 35 минут, на укладку волос в прическу 1 час 15 минут. подсчитать количество возможных вариантов обслуживания клиентов за К часов

<pascal>

Решить задачу тремя способами (цикл с параметром, с предусловием, с постусловием):
Составьте программу, которая вычисляет произведение числе от 1 до N. Значение N вводится с клавиатуры.
Мой вариант цикла с параметром:

Var i,n:integer;
     p:real;
Begin
Write('Введите N= ');
Readln(n);
P:=1;
For i:=1 to n do
P:=p*i;
Writeln('Произведение= ');
End.

Прошу, напишите цикл с предусловием и с постусловием, пожалуйста!!!

program eee; var i, x, s,

program eee;
var
  i, x, s, c: integer;
begin
  write('Введите колличество чисел: ');
  readln(x);
  i := 1;
  s := 1;
  c := 1;
  while i <= x do
  begin
    i := i + 1;
    s := s * c;
    c := c + 1;
  end;
  Writeln('Произведение чисел от 1 до ', x, ' = ', s);
end.
 
program rrr;
var
  i, x, s, c: integer;
begin
  write('Введите колличество чисел: ');
  readln(x);
  s := 1;
  c := 1;
  for i := 1 to x do 
  begin
    s := s * c;
    c := c + 1;
  end;
  Writeln('Произведение чисел от 1 до ', x, ' = ', s);
end.
 
program ttt;
var
  i, x, s, c: integer;
begin
  write('Введите колличество чисел: ');
  readln(x);
  i := 1;
  s := 1;
  c := 0;
  repeat
    c := c + 1;
    s := s * c;
    i := i + 1
  until i > x;
  Writeln('Произведение чисел от 1 до ', x, ' = ', s); 
end.

Помогите решить задачки плиз,срочно

Скласти програму розкладу числа на прості множники.
1)x²-4cosx²
2)x³+2x•e в степени x

Помогите решить задачу

Занят завершил нулевые натуральных чисел. Найти число четное число элементов. 5 соотношение

Помогите решить задачу

5. Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет.

лдл

program l;
Var
a,b,c:real;
begin 
 
writeln('сколько стоит кило ?');
readln(a);
Writeln('какой вес у тебя ?');
read(b);
 
c:=a*b;
writeln(c);
 
end.

var

var a,b,k,i:real;
 
 
 
begin
read(a);
b:=1;
i:=1.2;
k:=1.2;
while i<2 do
begin
b:=a*k;
k:=k+0.2;
i:=i+0.2;
writeln(b);
 
end;
 
 
 
 
end.

Цикл. Программа с меню

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

program номер3;
var a,b,c,n,s,ot,p,r:real;
menu:real;
BEGIN
 
writeln('Выберите действие');
writeln('1.Расчёт площади прямоугольника');
writeln('2.Расчёт площади треугольника');
writeln('3.Расчёт площади круга');
writeln('4.Выход');
readln(menu);
 
 
Loop:=true;
if menu=1 then
begin
writeln('Введите стороны прямоугольника');
readln(n);
if 
(n=1)
then
writeln('Введите стороны прямоугольника');
readln(a,b);
if
(a<=0) or (b<=0)
then
writeln('Некорректный ввод,a или b')
else
writeln('Площадь прямоугольника равна',s);
s:=a*b;
writeln('Продолжить вычисления(Y/N)?');
readln(ot);
if 
(ot=N)
then
end;
 
if menu=2 then
begin
writeln('Введите стороны треугольника');
readln(n);
if 
(n=2)
then
writeln('Введите стороны треугольника');
readln(a,b,c);
if 
(a<=0) or (b<=0) or (c<=0)
then
writeln('Некорректный ввод,a,b или c')
else
p:=(a/2+b/2+c/2);
s:=sqrt(p*(p-a)*(p-b)*(p-c));
writeln('Площадь треугольника равна:',s);
writeln('Продолжить вычисления(Y/N)?');
readln(ot);
if
(ot=N)
then
end;
 
 
if menu=3 then
begin
readln(n);
if 
(n=3)
then
writeln('Введите радиус круга');
readln(r);
if 
(r<=0) 
then
writeln('Некорректный ввод,r');
 
s:=3.14*r*r;
writeln('Площадь круга равна,s');
writeln('Продолжить вычисления(Y/N)?');
readln(ot);
if
(ot=N)
then
 
end;
 
if menu=4 then
begin;
readln(n);
if 
(n=4)
then
Loop:=false;
 
 
writeln('Продолжить вычисления(Y/N)?');
end;
 
end.

lebel

А описывать через раздел меток не пробовал?

Помогите написать код программы на паскаль!!!

Нужно по выражению F(x)=cos/(1+x^2) составить все три вида алгоритма с циклической структурой.(предисловие, постусловие и со счетчиков.) и так же блок схемы к этим кодам программы.

Помогите пожалуйста

1)Среди чисел 1 2)Составить программу вычисления суммы по формуле s=sqrt2+sqrt2+sqrt2+...sqrt2

Помогите пожалуйста, уже 2

Помогите пожалуйста, уже 2 недели, ничего не получается:

Составить программу, которая вычисляет длину дуги, заданной функцией y=f(x) и
ограниченной отрезком [a,b]. Концы отрезка и приращение вычислительная машина должна запрашивать. Функция y=X*X

Даны формулы:

ДельтаY=f(x+дельтаX)-f(x)
дельтаL=Корень из дельтаX+дельтаY

Спасибо, кто поможет. Дельта - это приращение.

Помогите пожалуйста(Циклы)

Вычислить
S=1!/a + 2!/a^2 + 3!/a^4+ .. +n!/a^2n
где a,n заданы.

Вроде так.

var
    factor, s: real; a, j, i, n: longint;
 
function fact(k: longint; rez: real): real;
begin
    if k = 1 then fact := rez
    else fact := fact(k - 1, rez * k);
end;
 
begin
    readln(a, n);
    j := 2;
    for i := 1 to n do
    begin
        if i = 1 then s := s + (fact(i, 1)) / a else begin s := s + (fact(i, 1)) / (Exp(j * Ln(a)));     j := j + 2; end;
    end;
 
    writeln(s);
 
end.

Помогите пожалуйста(Циклы)

Вычислить:

S=sin(x)+sin(x)∙sin(x)+…+sin(x) …∙sin(x).
1442443
n раз.
где x, n заданы.

begin readln (n); readln

begin
 readln (n);
 readln (x);
 s:=0;
 m:=1;
 for i:= 1 to n do
 begin
  m:= x*m
  s:= s+(sin(m));
 end;

varn, i: integer;x, s, m:

var 
n, i: integer;
x, s, m: real;
begin
 readln (n);
 readln (x);
 s:=0;
 m:=1;
 for i:= 1 to n do
 begin
  m:= x*m
  s:= s+(sin(m));
 end;
readln;
end.

Помогите пожалуйста(Циклы)

writeln(n);
writeln(x);
for i:=1 to n do
 S:=sin(x)+sin(x)sin(x)++sin(x) …∙sin(x).{отредактировать}
{end for i:=1...}
writeln(S);

s := sin(x); for i:=1 to n-1

s := sin(x);
for i:=1 to n-1 do
     s := s + s*sin(x);

Помогите решить

Помогите решить пожалуйста

Заданы 3 числа A, B, C, которые обозначают число, месяц, год.
Найти порядковый номер даты, начиная отсчет с начала года

написать программу

Помогите пожалуйста написать программу на паскале:
http://pixs.ru/showimage/Xq1ZuMGd8j_6400140_15048604.jpg

var s: real; x:

var 
    s: real;
    x: integer;
    i: byte;
    j: longint;
 
function factorial(n: byte): longint;
    var i: byte;
    begin
        factorial := 1;
        for i:=2 to n do
            factorial := factorial * i;
    end;
 
begin
    readln(x);
    s := -1 * x;
    for i:=2 to 5 do begin
        j := factorial(i);
        s := s + ((-1) * i) * ((i * x) / j);
    end;
    writeln(s:5:3);
end.

задача на циклы

y=1+1/x +1/x^2+1/x^3+....
пр х изменяющемся от -2 до 4 с шагом 0,2
Спасибо

помогите

петя круглый отличник учится в школе только на отлично. Поэтому он считает числа, содержащие только цифры 0 и 5 счастливыми. Последовательность счастливых Петиных чисел в порядке возрастания: 0 5 50 55 500 505 и так далее. Найти К-ое по порядку в этой последовательности счастливое число.
input.txt 8
output.txt 555
ПОМОГИТЕ!!!!

Условие задачи - как для

Условие задачи - как для нахождения таблицы значений функции
Но дана не функция, а сумма элементов ряда. Либо должно быть просто y=1+1/x +1/x^2+1/x^3 без троеточия, либо оговариваться сколько в этом ряду элементов.

спасибо

спасибо

Помогите пожалуйста решить.

1. Ввести производительности работы трёх труб, которые наполняют бассейн, и время их работы. Сколько воды набрано в бассейне?
2. Вычислить медиану ma и биссектрису Wa/
3. Циклы. Вычислить произведение всех значений функции у, для которых справедливо неравенство 1 < у < 3,1. Определить, при каком значении х функция достигает минимума.
4. Массивы. Есть ли в массиве два элемента среди отрицательных с максимальным значением?

Нужна помощь.....

Задача- для фигур: равностороннего треугольника, квадрата, правильных 5- угольника, 6- угольника,..,N-угольника дана длина стороны А(одна и та же). вычислить площади многоугольников.
Я текст программы написал, но не знаю как сделать чтоб программа считала площадь например для 10 многоугольников ( чтоб количество изменять можно было) и я подозреваю что написал чушь полную....
вот текст программы:

Program Pr_1;
uses crt;
const pi=3.14;
var a,S: real;
      n, i: integer;
begin
 clrscr;
  write ('dlina storon=');
   readln (a);
 n:=3;
repeat
n:=n+1;
S:=((sqr(a)*n)/4)*(cos(pi/n)/sin(pi/n));
writeln ('S mnogoygolnika= ', S:10:5);
i:=i+1;
Until n>i;
readln;
end.

У меня получается бесконечный цикл.

var a,S: real; n, i:

var 
    a,S: real;
    n, i: integer;
begin
    write ('dlina storon=');
    readln (a);
    write ('max storon=');
    readln (n);
    if n < 3 then exit;
    i := 3;
    repeat
        S:=((sqr(a)*i)/4)*(cos(pi/i)/sin(pi/i));
        writeln ('S ',i,'-ygolnika= ', S:10:5);
        i:=i+1;
    until n<i;
readln;
end.

PI не обязательно объявлять. Есть встроенная константа.

Спасибо вам большое)

Спасибо вам большое)

2 задачи

Помогите пожалуйста решить 2 задачи:

1. Составить программу, которая в двумерном массиве B, в таком, что состоит из M рядов и N солбцов, подсчитывает сумму столбцов и !!!столбец!!!, с наименьшей суммой элементов обнуляет!

2. Дан одномерный массив A, который состоит из N целых чисел. Составить программу, которая подсчитывает, наибольшее кол-во чисел, тех, которые идут в нём подряд.

1-я задача:const N = 5; M =

1-я задача:

const N = 5; M = 7;
var
    matrix: array[1..N,1..M] of byte;
    col: array[1..M] of integer;
    id: byte;
    i,j: byte;
begin
    randomize;
    for i:=1 to N do begin
        for j:=1 to M do begin
            matrix[i,j] := random(10);
            write(matrix[i,j]:3);
        end;
        writeln;
    end;
 
    for i:=1 to M do begin
        col[i] := 0;
        write('---');
    end;
    writeln;
    // сумма столбцов
    for j:=1 to M do begin
        for i:=1 to N do
            col[j] := col[j] + matrix[i,j];
        write(col[j]:3);
    end;
    writeln;
    // номер столбца с min суммой
    id := 1;
    for i:=2 to M do
        if col[i] < col[id] then
            id := i;
    writeln('Минимальная сумма в столбце ', id);
    // обнуление столбца
    for i:=1 to N do
        matrix[i,id] := 0;
    // новая матрица
    for i:=1 to N do begin
        for j:=1 to M do begin
            write(matrix[i,j]:3);
        end;
        writeln;
    end;
end.

2-я задача:

const N = 10;
var
    a: array[1..N] of byte;
    i, q, max: byte;
begin
    write('Вводите ', N,' чисел: ');
    for i:=1 to N do 
        read(a[i]);
 
    max := 1;
    q := 1;
    for i:=1 to N do
        if a[i]+1 = a[i+1] then
            q := q + 1
        else begin
            if q <> 1 then
                if q > max then
                    max := q;
            q := 1;
        end;
    writeln(max);
end.

Сформулировать квадратную матрицу порядка n по данному образцу:

Добрый день! Дали такое задание ( оно после черты), но я впервые вижу такое и даже не понимаю что в нём нужно сделать и какой в нём смысл( помогите пожалуйста составить к нему код и по возможности объяснить что нужно сделать в нём)

___________________________________________________________
Сформулировать квадратную матрицу порядка n по данному образцу:

0     0     0   .   0     0     1
0     0     0   .   0     2     0
0     0     0   .   3     0     0
............
0    n-1   0   .   0     0     0
n      0     0   .   0     0     0

Я тоже не могу сделать вывод

Я тоже не могу сделать вывод по данному образцу. И не два ли здесь образца? ( над точками и под ними)
В образце над точками можно предположить, что квадратная матрица 3х3, все элементы нулевые. Потом ее меняют так, что в побочной диагонали сверху вниз пишутся номера строк. В таком случае замена нулей в побочной диагонали такая:

for i:=1 to N do 
    arr[i,N-i+1] := i; 

В образце под точками предположительно наоборот: сначала дана матрица, где побочная диагональ заполнена числами от 1 до n. Надо обнулить. Тогда:

for i:=1 to N do 
    arr[i,N-i+1] := 0; 

Однако при заполнении самой матрицы:
for i:=1 to N do 
    for j:=1 to N do
        if j = N - i + 1 then
            arr[i,N-i+1] := i
        else
            arr[i,j] := 0;

Помогите пожалуйста написать программу!!!

Мне необходимо составить программу нахождения номера минимального из положительных чисел в последовательности произвольных чисел, вводимых с клавиатуры и при этом остановить обработку при вводе заказанного кол-ва чисел.
Очень нужна эта программа. Заранее спасибо.

программа с циклами

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

var i, k: byte;

var
    i, k: byte;
    min_pos: word;
    n: integer;
begin
    write('Введите k: ');
    readln(k);
    if k < 1 then exit;
    writeln('Вводите числа:');
    min_pos := MAXINT+1;
    for i:=1 to k do begin
        readln(n);
        if (n < min_pos) and (n > 0) then
            min_pos := n;
    end;
    if min_pos = MAXINT+1 then
        writeln('Нет положительных чисел')
    else
        writeln('Минимальное положительное: ',min_pos);
end.

const N = 15; var arr:

const N = 15;
var
    arr: array[1..N] of integer;
    i, k: byte;
    min_pos: integer;
begin
    write('Введите k <= ', N, ': ');
    readln(k);
    if k > N then exit;
    write('Введите ', k, ' чисел: '); 
    min_pos := MAXINT;
    for i:=1 to k do begin
        read(arr[i]);
        if (arr[i] < min_pos) and (arr[i] > 0) then
            min_pos := arr[i];
    end;
    if min_pos = MAXINT then
        writeln('Нет положительных чисел')
    else
        writeln('Минимальное положительное: ',min_pos);
end.

Задачи по массивам!

Извините, может не там пишу)
Помогите пожалуйста решить 2 задачи:
1) Вычислить кол-во инверсий (пара элементов, где левее - больше);
2) Найти самую длинную серию нулевых элементов!
Заранее спасибо!)