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

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

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

Комментарии

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

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

Заданы 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
ПОМОГИТЕ!!!!

Найти число под заданным

Найти число под заданным номером в ряду чисел, состоящих из цифр 0 и 5

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

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

спасибо

спасибо

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

1. Ввести производительности работы трёх труб, которые наполняют бассейн, и время их работы. Сколько воды набрано в бассейне?
2. Вычислить медиану ma и биссектрису Wa/
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 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 nreadln;
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] [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 then exit;
    writeln('Вводите числа:');
    min_pos := MAXINT+1;
    for i:=1 to k do begin
        readln(n);
        if (n ) 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] ) and (arr[i] > 0) then
            min_pos := arr[i];
    end;
    if min_pos = MAXINT then
        writeln('Нет положительных чисел')
    else
        writeln('Минимальное положительное: ',min_pos);
end.

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

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

Задания непонятно

Задания непонятно сформулированы.

Массивы

Вот такое ДЗ дают в Политехе)
Попробую сформулировать как сам понимаю)
1)Задать одномерный массив от 1 до 20, где данные вводятся любым способом и подсчитать, сколько раз в нём встречаются пара элементов (1-й элемент сравнивают со 2, потом с 3 и так до конца; потом 2 элемент с 1, затем с 3 и так до конца и т.д), среди которых, тот что левее больше, например: пара рядом элементов: 20 и 21, если 20 (стоит слева) больше 21 (правого) то счетчик изменяется на 1 (в конце он выводится и это ответ), а если 20 и 15 то пропустить (левый меньше правого)...Фух... трудная вещь(
...

2) Найти самую длинную серию нулевых элементов! (Задать одномерный массив от 1 до 20, где данные вводятся любым способом и вывести на экран самую длинную серию 0 элементов, например: дан массив
1, 2,0,0,4,0,0,0,5,0,0,0,0 в нём самая длинная серия это 4 нуля (!!!нули должны идти друг за другом!!!) и в конце вывести ответ самую длинную серию нулей: 0,0,0,0 или просто: 4 нуля.

Как бы теперь всё это реализовать(

Первая задача решена не так

Первая задача решена не так как вы описали, а проще:

const N = 10;
var
    arr: array[1..N] of integer;
    i, count: byte;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(50) - 25;
        write(arr[i],' ');
    end;
    writeln;
    count := 0;
    for i:=1 to N-1 do
        if arr[i] > arr[i+1] then
            count := count + 1;
    writeln(count);
end.

Пример вывода:

21 7 22 16 -24 -24 -3 -25 -19 -5 
4

Здесь 21 > 7? да. увеличиваем счетчик
7 > 22? нет. пропускаем
22 > 16? да. увеличиваем счетчик
и т. д.

Вторая задача:

const N = 30;
var
    arr: array[1..N] of integer;
    i, max, count: byte;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(3);
        write(arr[i],' ');
    end;
    writeln;
    max := 0;
    count := 0;
    for i:=1 to N do
        if arr[i] = 0 then
            count := count + 1
        else begin
            if count > max then
                max := count;
            count := 0;
        end;
 
    writeln(max);
end.

Если же надо вывести именно количество нулей, то делаете цикл от 1 до max, в теле которого выводится 1 ноль. Однако это не лучшее решение с точки зрения универсальности кода. Лучше запоминать индексы откуда последовательность начинается и где заканчивается. Это сложнее. Пример здесь: https://pas1.ru/id-range

Спасибо!

Спасибо огромное!

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

Помогите, пожалуйста. Требуется составить программу, вычисляющую произведение 10 целых двузначных чисел , введенных с клавиатуры. Здесь нужно как-то использовать счетчик, совсем ничего не понимаю :С

var i: byte; n:

var
    i: byte;
    n: integer;
    mult: longint;
begin
    mult := 1;
    for i:=1 to 10 do begin
        readln(n);
        mult := mult * n;
    end;
    writeln(mult);    
end.

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

помогите надо вывести на

помогите надо вывести на экран 56 символовc"&"

var i: integer; begin for

var i: integer;
begin
    for i:=1 to 56 do 
        write('&');     
    writeln;
end.

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

помогите написать программу y=5+x/2x + 10/x^2

var x, y: real; begin

var x, y: real;
begin
    readln(x);
    y := 5 + x / (2*x) + 10 / (x*x);
    writeln(y:5:2);
end.

Прошу помогите плииз

1) каждое задание переписывается, под ним пишется «Блок-схема» и «Программа:» и следуют блок-схема и текст программы, решающей задание, ответ;
2) каждая программа должна быть набрана в среде программирования QBasic

1)Дано число. Если оно нечетное, не кратное 7 и кратное 15, то увеличить его в 16 раз.
Как это сделать в visual basic 2010

Это на Basic-256. В остальном

Это на Basic-256. В остальном помочь не можем.

input n
if n%2  0 and n%7  0 and n%15 = 0 then
        print n*16
endif

Для проверки работы программы можно ввести число 45.

напишите, пожалуйста,

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

var n: longint; sum:

var 
    n: longint;
    sum: integer;
begin
    readln(n);   
    sum := 0;
    while n > 0 do begin
        if n mod 10 mod 2  0 then
            sum := sum + n mod 10;
        n := n div 10;
    end;    
    writeln(sum);
end.

циклический алгоритм

помогите пожалуйста, не понимаю совсем. составить программу:
1) а(а-1)(а-2)(а-3)....(а-п)
2) 1/а + 1/(а+1)+ ....+1/(а+п)

var a,n,i: integer;

var 
    a,n,i: integer;
    mult: longint;
begin
    write('Введите a: ');
    readln(a);
    write('Введите n: ');
    readln(n);
    mult := a;
    for i:=1 to n do
        mult := mult * (a - i);
    writeln(mult);
end.

var 
    a,n,i: integer;
    sum: real;
begin
    write('Введите a: ');
    readln(a);
    write('Введите n: ');
    readln(n);
    sum := 0;
    for i:=0 to n do
        sum := sum + 1/(a + i);
    writeln(sum:5:2);
end.

напечатайте таблице

напечатайте таблице соответствия между длиной в метрах и сантиметрах.

а*5=в*6

допоможіть розвязати

я точной формулировки не

я точной формулировки не помню. Вообщем нужно вести число а в цикл от 1 до 7 и вывести его квадрат в массиве. Как-то так)

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

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

вклад

var
vklad, deposit, perc: real;
k, years: integer;

begin
writeln('введите сумму нчального вклада');readln(vklad);
writeln('введите процент годовых');readln(perc);
writeln('введите количество лет');readln(years);
writeln((vklad + years * vklad / 100 * perc):7:2, ' за ', years,' лет');

deposit := vklad;
while deposit begin
deposit := deposit + vklad / 100 * (perc / 12);
k := k + 1;
end;
writeln(trunc(k/12),' лет ',k mod 12, ' месяцев и составит ',deposit:7:2);
end.

Цикл со счетчиком

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

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.

Очень просто. Возми все в в

Очень просто.
Возми все в в цикл repeat until
Условие выхода нажатие какото клавиши

Решение

Uses crt;
begin
 Repeat
  Write ('x');
 Until KeyPressed;
end.

У основания столбика высотой

У основания столбика высотой L см сидит улитка.
Днем (с 7:00 до 20:00) она проползает вверх К см. Ночью - улитка спит, поэтому сползает вниз на Н см.
Определите и выведите на экран на какие сутки улитка доберется до вершины столбика, при условии, что полностью восстановить силы за ночь ей не удается, и каждые новые сутки ее продвижение вверх уменьшается на М см. А может это ей и вовсе не удасться?
Значения L, К, Н и М - целые числа, которые вводятся с клавиатуры и лежат в пределах от 0 до 1000 включительно.

Решение

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= L then write ('Улитке нужно', i,' дней что бы добраться до верха') Else write ('Улитка через', i,' дней сползет до земли'); readln end.

Построить таблицу

Построить таблицу соответствий между мерами, используя цикл с постусловием (repeat....until). Начальное и конечное значения меры, шаг изменение этого значения задать самостоятельно в режиме диалога. Оформить таблицу применяя форматы вывода. Количество строк в таблице (10-15).

1 чейн строительный = 30.48м. =100 футов

чашке находится n микробы их

чашке находится n микробы их количество с каждой минутой удваивается составить программу нахождения количества микробов за время t

  • 1
  • 2
  • следующая ›
  • последняя »