Как найти произведение цикла в паскале

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

Содержание:

  • While в Паскале — цикл с предусловием
    • Вложенные циклы в Паскале
  • Произведение в Паскале
  • Программа возведения в степень числа в Паскале

Пример: Определить количество цифр в введенном целом числе, не превышающем 2000000.

Алгоритм: Отделяем и удаляем последовательно последнюю цифру, наращивая счетчик.

n счетчик
246 0
24 1
2 2
0 3

В чем сложность?: Заранее не определено и неизвестно, сколько цифр нужно убрать, т.е. сколько шагов необходимо сделать.
Как выполнить: Надо перестать отделять цифры, когда n = 0, т.е. надо выполнять пока n > 0

Блок-схема решения:

Блок-схема решения цикл while

Блок-схема решения

Решение примера на Паскале:
пример цикла while Паскаль
Цикл while в Паскале применяется для создания повторений с неизвестным заранее их числом. Повторения (итерации) будут осуществляться, пока истинно некоторое условие.

Блок-схема, соответствующая циклу while в Паскале:
блок-схема while в паскале

while условие do {Пока условие истинно выполняется оператор}
   оператор;
  • Здесь оператор, стоящий после служебного слова do, образует тело цикла и будет выполняться, пока значение "условия" равно true (истина).
  • Если операторов должно быть несколько, тогда необходимо применять составной оператор.
  • Условие пересчитывается каждый раз при входе в цикл.
  • Непосредственно условием цикла while может быть переменная или логическое выражение.
  • Операторы тела цикла while выполнятся только в том случае, если условие будет истинно, если условие ложно — они игнорируются, и программа продолжается с тех операторов, которые стоят уже после конструкции. Таким образом, это существенное отличие цикла с предусловием от цикла с постусловием.

Рассмотрим использование цикла while в Паскале на решенном примере:

Пример: Печатать «ноль» указанное количество раз

Показать решение:

Pascal PascalABC.NET
1
2
3
4
5
6
7
8
9
10
var i,n:integer;
begin
write ('количество знаков');
readln(n);
i:=1;
while i<=n do begin {составной оператор}
  write(0);
  i:=i+1
end;
end.
1
2
3
4
5
6
7
8
begin
var n:=readInteger('количество знаков');
var i:=1;
while i<=n do begin {составной оператор}
  write(0);
  i:=i+1
end;
end.

Задача 3. Ввести целое число и найти сумму его цифр.
Пример:

Введите целое число:
1234
Сумма цифр числа 1234 равна 10.

  
[Название файла: L3task3.pas]

  • Можно использовать сложные условия:
  • сложные условия в while

    Задача 4. Вычислять с использованием цикла while квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.

      
    [Название файла: L3task4.pas]

    Детальный разбор работы цикла While в Паскале рассмотрен в видеоуроке:

    Пример: найти сумму всех элементов последовательности:

    найти сумму всех элементов последовательности
    которые по модулю больше 0,001:

    Алгоритм:

    Блок-схема решения:

    Блок-схема решения

    Блок-схема решения

    Решение на Паскале:

    Решение на Паскале

    Решение на Паскале

    Задача 5: Вычислить сумму элементов следующей последовательности с точностью 0,001:
    Найти сумму элементов последовательности с точностью 0,001

    Результат: S = 1.157

      
    [Название файла: L3task5.pas]

    Вложенные циклы в Паскале

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

    Важно: Главным обстоятельством во вложенных циклах является использование разных переменных для счетчиков внутреннего и внешнего циклов

    Рассмотрим пример:

    Пример: Вывести таблицу умножения, используя вложенные циклы в паскале.

    Показать решение:

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const n = 9; {размер таблицы}
    var i, j :integer;
    begin
       for i:=1 to n do {номера строк}
       begin
         for j:=1 to n do {номера столбцов}
           write(i*j:4);
         writeln; {переход на новую строку}
       end;
    end.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    const n = 9; {размер таблицы}
    begin
       for var i:=1 to n do {номера строк}
       begin
         for var j:=1 to n do {номера столбцов}
           write(i*j:4);
         writeln; {переход на новую строку}
       end;
    end.

    Произведение в Паскале

    Точно также, как существует сумматор для сложения, для умножения в паскале тоже существует специальная конструкция:

    Произведение вычисляется по рекуррентному выражению:

    P=P*Y,

    где P – промежуточные произведения

    Y — сомножители

    Рассмотрим пример вычисления факториала числа в Паскале с использованием цикла while.

    Пример цикла While в Паскале для вычисления факториала 10! (10!=1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var
      fact, n : integer;
    begin
      fact := 1; {начальное значение факториала =0! }
      n := 1;    {начальное значение для условия }
      while n<=10 do     {условие }
       begin             {начало тела конструкции с составным оператором }
         fact := fact*n; {вычисление факториала n! }
         n := n + 1       {n должно меняться в теле конструкции}
       end;                {конец тела цикла }
      writeln(10!=,fact);  {вывод результата расчета }
    end.

    Здесь необходимо обратить внимание на то, что присваивание n := 1 стоит до цикла, если этого не сделать, то условие будет работать некорректно, так как переменная n будет пуста.

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

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

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

    Таким образом, возведение числа n в степень d можно выразить так:
    nd = n1 * n2 * n3 * … * nd, где нижние индексы просто указывают очередное по счету число n.

    Еще необходимо учесть следующее:

    • число в нулевой степени равняется 1
    • если показатель степени отрицателен, т.е. d < 0, то задача решается по формуле:
      nd = 1 / (n1 * n2 * n3 * … * nd)

    Т.е., решая программу на Паскале, учитываем:

    • в программе на языке Паскаль количество итераций (повторений) цикла while должно быть равно показателю степени числа по модулю;
    • если показатель степени — отрицательное число, то нужно впоследствии единицу разделить на результат.

    Задача 6. Вычислить в Паскале степень числа, используя цикл while.

      
    [Название файла: L3task6.pas]

    Задача 7. Дана последовательность вещественных чисел, признак завершения которой — число 0 (оно не считается элементом последовательности). Найти сумму всех положительных элементов этой последовательности.

    Пример результата:

    Введите член последовательности
    4
    Введите член последовательности
    -1
    Введите член последовательности
    5
    Введите член последовательности
    7
    Введите член последовательности
    0
    Сумма положительных чисел = 16

      
    [Название файла: L3task7.pas]

    0 / 0 / 1

    Регистрация: 05.03.2012

    Сообщений: 28

    1

    05.03.2012, 16:13. Показов 14734. Ответов 10


    Студворк — интернет-сервис помощи студентам

    1)Найти произведение чисел 1,2,3,4,5 через цикл while
    2)Найти произведение пяти любых чисел через цикл while
    3)Найти произведение любых чисел через цикл while



    0



    BumerangSP

    4299 / 1421 / 463

    Регистрация: 16.12.2010

    Сообщений: 2,939

    Записей в блоге: 3

    05.03.2012, 16:25

    2

    1)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    uses crt;
    var i,j: integer;
    begin
     j:=1;
     i:=5;
     while i<>0 do
      begin
       j:=j*i;
       dec(i);
      end;
      writeln('Product = ',j);
      readln;
    end.

    Добавлено через 2 минуты
    2)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    uses crt;
    var i,j,k: integer;
    begin
     k:=1;
     while i<>5 do
      begin
       readln(j);
       k:=k*j;
       inc(i);
      end;
      writeln('Product = ',k);
      readln;
    end.



    0



    0 / 0 / 1

    Регистрация: 05.03.2012

    Сообщений: 28

    05.03.2012, 16:25

     [ТС]

    3

    Нужно написать как нибудь по проще без dec и inc помогите плизз!



    0



    BumerangSP

    4299 / 1421 / 463

    Регистрация: 16.12.2010

    Сообщений: 2,939

    Записей в блоге: 3

    05.03.2012, 16:26

    4

    3)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    uses crt;
    var i,j,k,n: integer;
    begin
     k:=1;
     write('Kol-vo chisel: ');
     readln(n);
     while i<>n do
      begin
       readln(j);
       k:=k*j;
       inc(i);
      end;
      writeln('Product = ',k);
      readln;
    end.

    Добавлено через 35 секунд

    Цитата
    Сообщение от Frost007
    Посмотреть сообщение

    Нужно написать как нибудь по проще без dec

    dec(i) это то же самое, что и: i:=i-1.
    inc(i) – то же, что и: i:=i+1.



    0



    vetal0007

    29 / 29 / 3

    Регистрация: 11.02.2012

    Сообщений: 339

    05.03.2012, 16:27

    5

    1)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var n,i,p:integer;
    begin
           n:=5;
           p:=1;
           i:=2;
           while i<=n do begin
                   p:=p*i;
                   i:=i+1;
           end;
    writeln(p);
    readln;
    end.



    0



    0 / 0 / 1

    Регистрация: 05.03.2012

    Сообщений: 28

    05.03.2012, 16:30

     [ТС]

    6

    в 3 задаче произведение нужно найти любых чисел и не количества чисел!



    0



    4299 / 1421 / 463

    Регистрация: 16.12.2010

    Сообщений: 2,939

    Записей в блоге: 3

    05.03.2012, 16:32

    7

    Frost007, любых – это каких? Нужно задать количество чисел, а потом вводить эти любые числа, далее все перемножится.



    0



    Max-m

    0 / 0 / 0

    Регистрация: 05.03.2012

    Сообщений: 28

    05.03.2012, 16:32

    8

    1)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    uses crt;
    var i,j: integer;
    begin
     j:=1;
     i:=5;
     while i<>0 do
      begin
       j:=j*i;
       i:=i-1;
      end;
      writeln('Product = ',j);
      readln;
    end.

    2)

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    uses crt;
    var i,j,k: integer;
    begin
     k:=1;
     while i<>5 do
      begin
       readln(j);
       k:=k*j;
       i:=i+1;
      end;
      writeln('Product = ',k);
      readln;
    end.



    0



    0 / 0 / 1

    Регистрация: 05.03.2012

    Сообщений: 28

    05.03.2012, 16:50

     [ТС]

    9

    BumerangSP,первая задача прошла!

    Добавлено через 11 минут
    Max-m, вторая задача не проходит!!!В ней нужно читать с клавиатуры эти пять чисел и считать их произведение!!!



    0



    BumerangSP

    4299 / 1421 / 463

    Регистрация: 16.12.2010

    Сообщений: 2,939

    Записей в блоге: 3

    05.03.2012, 17:06

    10

    Frost007, моя вторая задача это и предусматривает. Ну, чтоб совсем было понятно, счас приведу код.

    Добавлено через 2 минуты

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    uses crt;
    var i,j,k: integer;
    begin
     clrscr;
     k:=1;
     while i<>5 do
      begin
       write('Vvedite ',i+1,'-e chislo: ');
       readln(j);
       k:=k*j;
       i:=i+1;
      end;
      writeln('Proizvedenie = ',k);
      readln;
    end.



    0



    0 / 0 / 1

    Регистрация: 05.03.2012

    Сообщений: 28

    05.03.2012, 17:13

     [ТС]

    11

    Всем спасибо все задачи прошли!



    0



    1. По данному натуральному числу N найдите сумму чисел 1+1/1!+1/2!+1/3!+…+1/N!. Количество действий должно быть пропорционально N.

    2. что то я не очень понимаю как решить данную задачку, решить нужно только с помощью цикла for.

    3. Геометрическая прогрессия. По данному действительному числу a и натуральному n вычислите сумму 1+a+a2+…+an, не используя формулу суммы геометрической прогрессии. Время работы программы должно быть пропорционально n.

    4. Ну тут более менее понятно, вот что пока получилось написать:

    1

    ****
    program Main;
    var
    sum, ai, a, j, n: longint;
    begin
    readln(a,n);
    ai := 1;
    for j := 1 to n do  ai := a * ai; sum := sum + ai; writeln(sum);
    end.
    

    задан 25 ноя 2011 в 7:39

    xHunter's user avatar

    var a, sum:real
    begin
        a:=1;
        sum:=a;
        for i := 1 to n do   
        begin
           a := a/i;
           sum := sum + a;
        end; 
        writeln(sum); 
    end;
    

    Nicolas Chabanovsky's user avatar

    ответ дан 25 ноя 2011 в 10:15

    renegator's user avatar

    renegatorrenegator

    3,97811 серебряных знаков7 бронзовых знаков

    var
      Sum, Fakt: Real;
      i, n: Byte;
    begin
      Write(' n = ');
      ReadLn(n);
      Sum := 1; //  при n = 0, sum = 1, так как
      Fakt := 1; // 0! = 1
      for i := 1 to n do
      begin
        Fakt := Fakt * i;  // n! = (n-1)*n, и не надо нахрен никакой рекурсии для вычисления факториала числа!!!
        Sum := Sum + 1/Fakt;
      end;
      WriteLn('Sum = ', Sum:1:9);
      ReadLn;
    end.
    

    ответ дан 25 ноя 2011 в 10:44

    toxicdream's user avatar

    toxicdreamtoxicdream

    1,1375 серебряных знаков12 бронзовых знаков

    1

       for j := 1 to n do  
        begin
          ai := a * j;// proizv 
          sum := sum + ai; // summ
          writeln(sum);
        end;
    

    вроде как-то так

    ответ дан 25 ноя 2011 в 7:57

    Artem's user avatar

    ArtemArtem

    12k1 золотой знак21 серебряный знак41 бронзовый знак

    Вот первая задача.

    Var
      Sum: Real;
      i, n: Byte;
    
    Function Fakt(n: Byte): LongInt;
    Var
      f: LongInt;
      i: Byte;
    Begin
      f:=1;
    
      If (N<2) Then
        Begin
          Fakt:=1;
          Exit;
        End;
    
      For i:=2 To N Do
        f:=f*i;
      Fakt:=f;
    End;
    
    begin
      Write(' n = ');
      ReadLn(n);
    
      Sum:=1;
      For i:=1 To N Do
        Sum:=Sum+1/Fakt(i);
    
      WriteLn('Sum = ', Sum:1:9);
      ReadLn;
    end
    

    .

    ответ дан 25 ноя 2011 в 8:03

    DelphiM0ZG's user avatar

    DelphiM0ZGDelphiM0ZG

    3,03714 серебряных знаков18 бронзовых знаков

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

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

    1) задать перед
    циклом начальное значение параметра
    цикла;

    2) изменять параметр
    перед каждым новым повторением цикла;

    3) проверять условие
    повторения цикла;

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

    В языке Паскаль
    существует 3 вида циклов:

    1) цикл с параметром
    или цикл типа for,

    2) цикл с предусловием
    или цикл типа while,

    3) цикл с постусловием
    или цикл типа repeat
    … until.

    В цикле типа for
    число повторений известно заранее, в
    циклах типа while
    и repeat
    … until
    число повторений цикла заранее неизвестно,
    производится проверка условия повторения
    цикла: в цикле типа while
    – перед циклом, в цикле типа repeat
    … until
    – после его окончания.

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

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

    Пример цикла типа
    for

    Вычисление n
    чисел Фибоначчи:

    F1=1;
    F2=1;…;
    Fn=Fn-1+Fn-2
    ,

    например F3=F2+F1=1
    + 1 = 2; F4
    = 2 + 1 = 3 и т.д.

    program
    fib;
    {Нахождение чисел Фибоначчи}

    var
    x, y, z, i, n : integer;

    begin

    writeln
    (‘Введите n’); read (n);

    x:=1;
    y:=0;

    for
    i:=1 to n do

    begin

    z:=x
    ; x:=x+y ; y:=z ;

    write
    (‘ ‘, x ) ;

    end;

    readln;

    end.

    Пример цикла типа
    while

    Cоставление
    таблицы функции y
    = a3/(a2+x2)
    для х, принадлежащих отрезку [-1; 1] с шагом
    0.1. Так как параметр цикла типа for
    должен быть целочисленным, удобнее
    использовать цикл while,
    в котором значение х можно изменять
    при каждом шаге на Dх
    = 0.1

    program
    cycl_while;

    uses
    crt;
    {вызов модуля Crt
    для управления режимом экрана}

    var

    a,
    x, y : real ; i : integer;

    begin

    clrscr
    ; {процедура очистки экрана из модуля
    Crt}

    writeln
    (‘Введите а ‘ );

    readln
    (a);

    x:=
    -1.; writeln (‘ x ‘, ‘ y ’);

    while
    do x<1.05 begin

    y:= sqr(a)*a/ (a*a+x*x);

    writeln (x:6:2, y:8:4);

    x:=x+0.1

    end;

    readln;

    end
    .

    Условие х<1.05
    соответствует каждому значению х плюс
    половина шага .

    Пример цикла типа
    repeat
    … until

    Определить число
    n,
    при котором сумма квадратов натурального
    ряда чисел от 1 до n
    не превысит величину K,
    введенную с клавиатуры. Т.е.

    S >= K,
    где S=

    program
    sum_sq;
    {Сумма квадратов натурального ряда }

    uses
    crt;

    var
    k, s, n : integer;

    begin

    clrscr
    ;

    writeln(
    ‘Введите K’ );

    readln
    (k);

    s:=0;
    n:=1;

    repeat

    s
    :=s+n*n;

    n
    := n+1;

    until
    s > k;

    writeln
    (‘N= ‘, n : 3, ‘ s= ‘ , s : 5 );

    readln;

    end.

    Цикл повторяется
    до тех пор, пока условие записанное
    после ключевого слова until,
    будет ложным (не выполняется). Как только
    это условие выполнится, происходит
    выход из цикла. После окончания цикла
    производится печать результата (оператор
    writeln).
    Отметим, что цикл с предусловием (типа
    while)
    может не выполниться ни разу, цикл с
    постусловием repeat
    … until
    выполнится по крайней мере 1 раз. Когда
    число повторений цикла неизвестно
    заранее, применяются циклы с предусловием
    или с остусловием . Когда число повторений
    цикла известно заранее, как правило,
    применяется цикл типа for.
    Но любой цикл типа for
    можно заменить циклом с предусловием
    или постусловием.

    Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

    • #
    • #
    • #
    • #
    • #
    • #
    • #
    • #
    • #
    • #
    • #

    Узнай цену своей работы

    Формулировка задачи:

    Смоделировать арифметический цикл с помощью оператора цикла for.
    Массивы не использовать.

    Для заданного n получить произведение чисел образованных по закону аi = sin2i, где i=1, 2,…n.

    Код к задаче: «Циклы. Вычислить произведение»

    textual

    Листинг программы

    var
        i, n: Word;
        mult: Extended; //Double, Real, Single
    begin
        repeat
            Write('Input n (>0): ');
            ReadLn(n);
        until (n > 0);
        mult := 1;
        for i := 1 to n do
            mult := mult * Sin(2 * i);
        Write('Answer=', mult:0:3);
    end.

    Добавить комментарий