Skip to content

19.09.2011

4

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

Следующие задания (лекция):

1. Нарисовать закрашенный прямоугольник со сторонами a и b.
2. Нарисовать контурный прямоугольник со сторонами a и b.
3. Нарисовать закрашенный треугольник со сторонами a и b.
4. Найти сумму всех делителей заданного целого числа. Например:
для числа 12 summa = 1 + 2 + 3 + 4 + 6 + 12;
для числа 16summa = 1 + 2 + 4 + 8 + 16.
5. Распечатать в столбик все цифры заданного целого числа:
а) начиная с младшей;
б) начиная со старшей.
6. Решить вторую задачу с http://projecteuler.net/


№1:
Нарисовать закрашенный прямоугольник со сторонами a и b.
На лекции уже разобрали функции, поэтому будем писать именно в них.

<script>
function lin(a)
{
  for (i = 0; i < a; i++)
    document.write("*");
  document.write("</br>");
}
function prm(a, b)
{
for(i=0; i < b; i++)
  lin(a);
}
</script>

Ох и намучился я с этим кодом сейчас). А все из-за плохого javascripta который все переменные делает глобальными, гад. Убил бы). В нормальных языках они по умолчанию локальные. В общем javascript — зло! Я уже в своих силах разуверился. Итак правильный код:

<script>
function PaintLine(a)
{
  for (i = 0; i < a; i++)
    document.write("*");
  document.write("</br>");
}
function PaintPrm(f, g)
{
  for(k=0; k < g; k++)
    PaintLine(f);
}
PaintPrm(10, 10);
</script>

№2:

2. Нарисовать контурный прямоугольник со сторонами a и b.

Создадим новую функцию, которая будет выводить строки типа «*___*».

<script>
function PaintLine(a)
{
  for (i = 0; i < a; i++)
    document.write("*");
  document.write("</br>");
}
function PaintLinePust(t)
{
  s = "";
  for (c = 0; c < t; c++)
    if ((c == 0) || (c == t-1))
      document.write("*");
    else
      document.write("&nbsp&nbsp");  //по середине строки печатаем пробелы(&nbsp), к сожалению пробелы по физическому 
  document.write("</br>");  //размеру меньше чем "*", поэтому пришлось использовать "_", подсказали что два
}                           //пробела по ширине равны ширине *. Поэтому меняем на &nbsp&nbsp
function PaintPrm(f, g)
{
  for(k=0; k < g; k++)
  {  
    if ((k == 0) || (k == g - 1))
      PaintLine(f);
    else
      PaintLinePust(f);
  }
}
PaintPrm(15, 5);
</script>

итак и эта задача решена, тут переменные с одинаковыми именами изначально не использовались, что очень облегчило решение)

№3:
3. Нарисовать закрашенный треугольник со сторонами a и b.

Пришлось напрячь мозг, и вот результат :

<script>
function PaintLine(a)
{
  for (i = 0; i < a; i++)
    document.write("*");
  document.write("</br>");
}

function PaintTri(x, y)
{
  for(k=1; k <= y; k++)
  {
     PaintLine(x);
     dlina = x/(y-k);
     x = x - dlina.toFixed();
  } 
}
PaintTri(10, 10);
</script>

На сегодня все, остальные задачи не успеваю решить (укр мова зовет! )= ). Остались не сложные задачи, они легко решаются.

4 Comments Post a comment
  1. John
    Сен 20 2011

    для обсуждения решения задач есть другие сайты, тот же проект Эйлера. Задания — они на то и задания, что б каждый сам их решал, а ты тут свои решения выкладываешь.. зачем?

    Ответить
    • Сен 21 2011

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

      Ответить
      • John
        Сен 21 2011

        Чтоб самому лучше понимать — решай на бумажке.

      • Сен 22 2011

        На бумажке не интересно

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments