Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

5. Вложенные циклы

Предыдущий раздел:

Следующий раздел:

Задание 5: Вложенные циклы

1. Из мат. анализа известно, что последовательность сумм вида:

s_n=x-\frac{\displaystyle x^3}{\displaystyle 3!}+\frac{\displaystyle x^5}{\displaystyle 5!}-\ldots+(-1)^{n+1}\frac{\displaystyle x^{2n-1}}{\displaystyle (2n-1)!}

сходится к функции \sin(x). Исследуйте зависимость от x точности приближения синуса десятым членом последовательности. Для этого рассчитайте величину |\sin(x)-s_{10}(x)| в 20 точках в диапазоне от 0 до 2\pi.

2. «Рисование» символами.

(а) Выведите на экран числа в следующем виде:

  1
  2  2
  3  3  3
  4  4  4  4
  5  5  5  5  5

и т.д.

(б) Выведите на экран числа в следующем виде:

  7  6  5  4  3  2
  6  5  4  3  2
  5  4  3  2
  4  3  2
  3  2
  2

(в) Выведите на экран числа в следующем виде:

  1
  3
  2  2
  4  4
  3  3  3
  5  5  5
  4  4  4  4
  6  6  6  6

(г) Выведите звездочки «полуелочкой» (рис. справа).

(д) Превратите «полуелочку» в полную елочку.

*
* *
* * *
*
* *
* * *
* * * *
*
* *
* * *
* * * *
* * * * *
и т.д.
Заданное количество раз.

Следующий раздел:

Предыдущий раздел:

29 комментариев

  1. Anton

    Ёёёёлочка %)

  2. mikhail

    taras viktorovich,zdrastvuyte,podskagite,a skolko ziklov nado ispolzovat dlya postroenia elockia,zadanie 2 (g),pitalsya cheres 2 ne sovsem vihodit ta elka kotoraya nugna,drug podskazal chto tam nugno 3 zikla,eto tak?

  3. Taras

    Да, тремя проще всего.

  4. Anton

    rfr ltkfnm

  5. Taras

    {jhjifz pflfxf ))

  6. Константин

    Половинку ёлки сделал вот так :/

    program elo4ka;

    var
    x, y, c, z, u, f: integer;

    begin
    for x := 1 to 3 do
    begin
    for y := 1 to x do
    begin
    write(x, ‘ ‘);
    end;
    writeln;
    end;
    begin
    for c := 1 to 6 do
    begin
    for z := 1 to c do
    begin
    write(c, ‘ ‘);
    end;
    writeln;
    end;
    end;
    begin
    for u := 1 to 9 do
    begin
    for f := 1 to u do
    begin
    write(u, ‘ ‘);
    end;
    writeln;
    end;
    end;
    end.

    Есть ли способ попроще?)

  7. Taras

    Полуёлочка у тебя получается трехярусная. По заданию она должна иметь произвольное количество ярусов (см. фразу «и т.д. заданное число раз»). Я думаю, если ты этого добьешься, то одновременно упростишь программу.

  8. Игорёк

    program zd35;
    var x,m,n,k,i,b,c:integer;
    begin
    writeln(‘Введите n’);
    readln(n);
    for k:=1 to n do
    begin
    for i:=1 to 3 do
    begin
    for m:=1 to i do
    write(x ,’ ‘);
    writeln
    end;
    end;

    end.

    Чего именно здесь не хватает? Цикла ещё одного ? чтобы, начиная новый цикл на одну строчку становилось больше.

  9. Игорёк

    всё, нашёл решение. for i:=1 to 3+k-1 do. Вместо строчки с i

  10. Влад

    Как сделать первый номер?

  11. Taras

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

  12. Аноним

    Полуёлочка:


    Был текст программы.

  13. Taras

    Хорошая полуелочка. Но как на счет полной?

  14. Аноним

    А куда делся текст программы?

    Ёлочка:
    program yolochka;
    var
    x, y, z, n, h:integer;
    begin
    readln(x);
    x:=x+2;
    for y:= 3 to (x) do
    begin
    for z:= 1 to y do
    begin
    for n:= 1 to (x-z) do
    write(‘ ‘);
    for h:= 1 to (2*z) do
    write(‘*’);
    writeln;
    end;
    end;
    end.

    Полуёлочка (второй вариант):
    program yolochka1;
    var
    x, y, z, n, h:integer;
    begin
    readln(x);
    x:=x+2;
    for y:= 3 to (x) do
    begin
    for z:= 1 to y do
    begin
    for n:= 1 to (x-z) do
    write(‘ ‘);
    for h:= 1 to z do
    write(‘*’);
    writeln;
    end;
    end;
    end.

  15. Taras

    В полной елочке хотелось бы, чтоб на вершине была только одна звездочка, а не две. Будет красивее.

    >> А куда делся текст программы?

    Это была хорошая программа. Чтобы не мешать другим людям находить собственные решения, я все хорошие из комментариев стираю.

  16. Аноним

    Можно и так:
    program yolochka;
    var
    x, y, z, n, h:integer;
    begin
    readln(x);
    x:=x+2;
    for y:= 3 to (x) do
    begin
    for z:= 1 to y do
    begin
    for n:= 1 to (x-z) do
    write(‘ ‘);
    for h:= 1 to (2*z)-1 do
    write(‘*’);
    writeln;
    end;
    end;
    end.

  17. Taras

    Теперь — хорошо.

  18. Аноним

    Понравились задачи на Ёлочки. очень интересные. Однако версия елочки от анонима мне не понравилась, там нет пробелов между «*». вот моя ёлочка:

    var i,j,p,n,c,s,g:integer;
    begin
    write (‘kol-vo stupeney elo4ki:’);readln(n);s:=3;g:=n;
    while n0 do begin
    p:=g*2+2;
    c:=1;
    for i:=1 to s do begin
    For j:=1 to p do write (‘ ‘);
    for j:=1 to c do write (‘* ‘);
    writeln;
    p:=p-2;
    c:=c+2;
    end;
    s:=s+1;
    n:=n-1;
    end;
    end.

  19. Taras

    Пусть цветут сто цветов!

        *             *                           *                                             * 
       ***          * * *                     *   *   *                                   *  *  *  *  * 
      *****       * * * * *               *   *   *   *   *                         *  *  *  *  *  *  *  *  * 
        *             *                           *                                             * 
       ***          * * *                     *   *   *                                   *  *  *  *  * 
      *****       * * * * *               *   *   *   *   *                         *  *  *  *  *  *  *  *  * 
     *******    * * * * * * *         *   *   *   *   *   *   *               *  *  *  *  *  *  *  *  *  *  *  *  * 
        *             *                           *                                             * 
       ***          * * *                     *   *   *                                   *  *  *  *  * 
      *****       * * * * *               *   *   *   *   *                         *  *  *  *  *  *  *  *  * 
     *******    * * * * * * *         *   *   *   *   *   *   *               *  *  *  *  *  *  *  *  *  *  *  *  * 
    ********* * * * * * * * * *   *   *   *   *   *   *   *   *   *     *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *
        *             *                           *                                             *
        *             *                           *                                             *
  20. АленА

    Такая елочка может быть?
    program zadacha_2d;
    var
    i, n, r, z, m, k, l: integer;
    begin
    write (‘введите количество ярусов елочки ‘);
    read (r);
    for m:= 1 to r do
    begin
    for n:= 1 to 2+m do
    begin
    for z:= 2+r-n downto 1 do
    write(‘ ‘);
    for i:=1 to n do
    write(‘* ‘);
    writeln;
    end;
    end;
    for l:= 1 to 2 do
    begin
    for k:= 1 to r+1 do
    write (‘ ‘);
    write(‘*’);
    writeln;
    end;
    end.

  21. АленА

    Не пойму в первой задаче, где взять 20 точек, если от 0 до 2Pi только 6. Почему-то программа во второй точке (x=2), должна показывать 0, а показывает не правильно:
    при x=1 ответ 1
    x=2 4.05231403988182E-14
    x=3 2.85887999234244
    x=4 32.2159870228703
    x=5 352.944528309944
    x=6 4203.29851213808

  22. АленА

    Поняла откуда 20 точек. Ошибки выдает из-за ограниченности программы в больших числах.
    Например, S6(6)=-2.06025974025981 — примерно правильно, а уже S7(6)=4.69974664101275 , хотя должно быть +/- 0,….
    Задаю integer
    Как поступить при работе с большими цифрами?

  23. АленА

    Вернулась еще к первой задачи, вместо real использовала double и все вывело правильно. Кому интересно:

    program zadacha_1;
    var
    x, r, i: integer;
    a, b: double;
    function f(n:double): double;
    begin
    if n<=1 then f:=1
    else f:=n*f(n-1); {вычисление n!}
    end;
    function s(n:double): double;
    begin
    s:=exp(ln(x)*n); {вычисление x в n степени}
    end;
    function k(n:double): double;
    begin
    k:=2*n-1; {вычисление степени и знаминателя факториала}
    end;
    begin
    for x:= 1 to trunc(2*pi) do
    begin
    r:=20;
    a:=0;
    b:=0;
    for i:= 1 to r div 2 do
    begin
    a:=s(k(i))/f(k(i));
    if i mod 2 = 0 then
    b:=b-a else
    b:=b+a;
    end;
    writeln(abs(sin(x)-b):2:3);
    end;
    end.

  24. David

    program zadacha5_2_e;
    var
    x,y,z,k,n,l:integer;
    begin
    write(‘Enter the number of storeys of Christmas tree’);
    readln(n);
    for l:=1 to 2*(4+(n-1))-1 do
    begin
    write(‘ ‘);
    end;
    write(‘*’);
    writeln;
    for x:=1 to n do
    begin
    for y:=1 to 4+(x-1) do
    begin
    for k:=y to n+2 do
    begin
    write(‘ ‘);
    end;
    for z:=1 to 2*y do
    begin
    write(‘*’,’ ‘);
    end;
    writeln;
    end;
    end;
    end.

  25. Darkhan

    var {elochka}
    a, b, c, d, e, f, n:integer;
    begin
    readln(n);{chislo iarusov}
    for a:=1 to n+2 do
    if a<=n then
    begin
    for b:=1 to a+2 do
    begin
    for c:=4*n-b downto 1 do
    write(' ');
    for d:=1 to 2*b-1 do
    begin
    write('*',' ');
    end;
    writeln;
    end;
    end else
    begin
    for e:=4*n-1 downto 1 do
    write(' ');
    write('x');
    writeln;
    end;
    end.

  26. Ruslan

    //Задание 5: Вложенные циклы
    //1. Из мат. анализа известно, что последовательность сумм вида:

    //сходится к функции sin(x). Исследуйте зависимость от x точности приближения синуса десятым членом последовательности.
    //Для этого рассчитайте величину |sin(x)-s_{10}(x)| в 20 точках в диапазоне от 0 до 2pi.
    //Не пользуясь командами, которые мы еще не проходили.
    program a51;
    var
    c, cc, z, h, i: integer;
    r, yy, sn, a, x, y: real;
    begin
    a:=-1;
    y:=1;
    c:=1;
    cc:=1;
    x:=2;
    for h:=1 to 614 do
    begin
    x:=h/195;
    for i:=1 to 10 do
    begin
    a:=(-1)*(1)*a;
    y:=x*y;
    yy:=y;
    y:=x*y;
    if i=1 then
    begin
    cc:=1;
    end else
    begin
    c:=cc*(i+i-2);
    cc:=c*(i+i-1);
    end;
    sn:=sn+a*(yy/cc);
    end;
    r:=abs(sin(x)-sn);
    writeln (‘Для x равным ‘, x, ‘ точность приближения синуса десятым членом последовательности к формуле равно ‘, r);
    end;
    end.

  27. Ruslan

    //(а) Выведите на экран числа в следующем виде:
    // 1
    // 2 2
    // 3 3 3
    // 4 4 4 4
    // 5 5 5 5 5
    //и т.д.
    program a52а;
    var
    h, i,: integer;
    begin
    for i:=1 to 5 do
    begin
    for h:=1 to i do
    begin
    write (i, ‘ ‘)
    end;
    writeln;
    end;
    end.

  28. Ruslan

    //(в) Выведите на экран числа в следующем виде:
    // 1
    // 3
    // 2 2
    // 4 4
    // 3 3 3
    // 5 5 5
    // 4 4 4 4
    // 6 6 6 6
    program a52в;
    var
    h, i: integer;
    begin
    for i:= 1 to 4 do
    begin
    for h:=1 to i do
    begin
    write(i);
    end;
    writeln;
    for h:=1 to i do
    begin
    write(i+2);
    end;
    writeln;
    end;
    end.

  29. Сергей

    program задача2_д;
    var
    i, n, k, x, q, q1, z, z1, z2: integer;
    begin
    write(‘Введите количество ярусов: ‘);
    readln(q1);
    q:=q1+1;
    for x:=2 to q do
    begin
    for i:=1 to x do
    begin
    for n:=x div (q+1) downto i-q do
    write(‘ ‘);
    for k:=1 to i*2-1 do
    write(‘* ‘);
    writeln;
    end;
    end;
    z2:=q*2;
    for z:=1 to 2 do
    begin
    for z1:=1 to z2 do
    write(‘ ‘);
    write(‘*’);
    writeln;
    end;
    end.

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