Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Циклы, сумма и среднее арифметическое (https://javascript.ru/forum/misc/69673-cikly-summa-i-srednee-arifmeticheskoe.html)

Tanya51 11.07.2017 12:46

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


мой js:

label: for (var i=0;;i++){
var user = Number (prompt("введите число"));
if(user){
var amount =+amount+user;
continue label;
}else {
break;
}
}
var average = amount/i;
document.write(i+''); //количество введенных чисел
document.write('сумма:'+' '+amount);
document.write('среднее арифметическое:'+' '+average);

Помогите посчитать сумму чисел и их среднее арифметическое. Среднее арифметическое вроде правильно пишу, а вот с суммой что-то не так и не понимаю что. У меня в конце цикла получается переменная amount=NaN.

SergeyERjs 11.07.2017 13:30

amount не инициализирована.
Попробуйте добавить в самом начале:
*!*var amount =0;*/!*
label: for (var i=0;;i++){
...

Tanya51 11.07.2017 16:04

спасибо. Получилось)

Tanya51 11.07.2017 16:17

а с этой задачей поможете?

Используя вложенные циклы, сформируйте строку чередованием символов . и # таким образом, чтобы получилась шахматный узор. Для перевода строки используйте символ \n. Код должен поддерживать легкое изменение размеров доски.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#


одну строку ".#.#.#.#.#.#"получается сделать, но дальше не получается.Не знаю как можно сделать

for (var j = 0; j < 1; j++) {
if (j % 2===0){
var w='.';
document.write(w);
}else if(j % 2===1){
var k='#';
document.write(k);
}
}

j0hnik 11.07.2017 18:32

По харду ;)
var a=8, b=8, str=''; // b-строки, a-столбцы
 while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';
 console.log(str);


если вы используете document write по переход на следующую строку <br>

Tanya51 11.07.2017 20:45

а можете эту строчку расписать?
while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';

Потому что так не совсем понятно. Слишком много знаков вопроса))

Tanya51 11.07.2017 20:49

и так он получается выводит 8 символов в строку и 8 строк.
А надо 12 символов в строку и 5 строк)

j0hnik 11.07.2017 22:47

var a=12, b=5, str=''; // b-строки, a-символы
 while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';
 console.log(str);

можете указывать любое количество строк и символов.

while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';


while(b--) //запускаем цикл b раз
str += //в котором за каждую итерацию добавляем в строку
(b%2?'#.':'.#').repeat(a/2) // если строка нечетная (тоесть процент от остатка равен 1, а 1 это true) '#.' - это кусок строки повторяем a-раз деленные на 2 т.к. в строке два символа. если четная то '.#' то же самое.
+((a%2)?b%2?'#':'.':'') // этот кусок кода только для нечетного количества символов если из будет 12 его можно вообще убрать.
+((a%2)?b%2?'#':'.':'') // если количество символов нечетное и строка нечетная то добавляется символ '#' если строка четная то символ '.' если же количество символов в строке четное, то добавляется пустая строка (тоесть ничего не добавляется) сделано это потому что .repeat повторяет целую строчку. пополам он ее не делит, проще говоря округляет число до целого как Math.floor.
Если что непонятно, почитайте про .repeat, тернарный оператор и цикл while

рони 11.07.2017 23:44

:)
Конкурс извратов

рони 12.07.2017 01:14

:lol: шифровка из центра ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body{
     font-weight: 600;
  }

  </style>

</head>

<body>

<script>
function fn(a, d) {
    for (var c = "", b = 0; b < a * d; b++) c += b % 2 ^ (a % 2 || b % (2 * a) < a) ? "." : "#", (b + 1) % a || (c += "<br>");
    return c
};
for (var i=8; i<13; i++)  {
document.write("<h4>"+[i,i-7]+"</h4><br>"+fn(i,i-7)+"<br>")
}
  </script>
</body>
</html>

j0hnik 12.07.2017 01:37

Рони,
если скучно вот вам задачка!
Дана таблица с цифрами. По нажатию на кнопку в последний ряд таблицы в каждую ячейку запишите сумму чисел в столбце таблицы, расположенном над определенной ячейкой.

Tanya51 12.07.2017 09:31

спасибо)

рони 12.07.2017 10:14

Цитата:

Сообщение от j0hnik
По нажатию на кнопку

усложним задачу, без нажатия :)
сумма в каждом столбце динамической таблицы

рони 12.07.2017 10:38

шахматное чередование строк
 
:lol:
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body{
     font-weight: 600;
  }

  </style>

</head>

<body>

<script>
function fn(a, d) {
    var e = [".","#"],c = "", b = 0;
    d *= a;
    for (; b < d; b++) c += e[b % 2], (b + 1) % a || (c += "<br>",!(a % 2) && e.reverse());
    return c
};
for (var i=8; i<13; i++)  {
document.write("<h4>"+[i,i-7]+"</h4><br>"+fn(i,i-7)+"<br>")
}
  </script>
</body>
</html>

j0hnik 12.07.2017 15:03

Цитата:

Сообщение от рони (Сообщение 458275)
усложним задачу, без нажатия :)
сумма в каждом столбце динамической таблицы

не то, рони таблица из tr-ок, тут подумать надо, если добавить в таблицу строк или столбцов все должно работать!

рони 12.07.2017 16:12

Цитата:

Сообщение от j0hnik
тут подумать надо,

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

j0hnik 12.07.2017 16:57

Цитата:

Сообщение от рони (Сообщение 458304)
если убрать инпуты, то предложенный алгоритм никак не изменится.

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $(document).on("input", ".mat_count input", function() {
        var count = $('[id^="count"]').val(0),
            len = count.length;
        $(".mat_count input").each(function(i, el) {
            i %= len;
            count[i].value -= -(+el.value || 0)
        })
    })
});
  </script>
</head>

<body>

<table>
   <tr>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
</tr>
<tr>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
 </tr>
... Строк может быть любое количество...

<tr>
<td>Сумма 1 столбца</td>
<td>Сумма 2 столбца</td>
<td>Сумма 3 столбца</td>
</tr>
</table>
</body>
</html>

:no:
Рони, без адишников!
так чтобы строк и столбцов можно было добавлять любое количество и не лезть при этом в скрипт

рони 12.07.2017 17:09

j0hnik,
:-? кликнуть по слову сумма
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $(document).on("click", "tr:last", function() {
        var count = $('td',this).text(0),
            len = count.length;
        $("td.mat_count").each(function(i, el) {
            i %= len;
            count[i].textContent -= -(+el.textContent || 0)
        })
    })
});
  </script>
</head>

<body>

<table>
   <tr>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
</tr>
<tr>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
<td class="mat_count">50</td>
 </tr>
... Строк может быть любое количество...

<tr>
<td>Сумма 1 столбца</td>
<td>Сумма 2 столбца</td>
<td>Сумма 3 столбца</td>
</tr>
</table>
</body>
</html>

j0hnik 12.07.2017 17:23

рони,
:victory:

Dilettante_Pro 12.07.2017 17:29

шахматное чередование строк

Внесу свою лепту
var e = [".","#"], rows = 5, cols = 12, str = "";
for(var i = 0; i < rows; i++) {
   for(var j = 0; j < cols; j++) {
     str += e[(i+j)%2];
   };
   str += "\n";
};
alert(str);

j0hnik 12.07.2017 17:36

Цитата:

Сообщение от Dilettante_Pro (Сообщение 458314)
шахматное чередование строк

Внесу свою лепту
var e = [".","#"], rows = 5, cols = 12, str = "";
for(var i = 0; i < rows; i++) {
   for(var j = 0; j < cols; j++) {
     str += e[(i+j)%2];
   };
   str += "\n";
};
alert(str);

Тот-кто писал такие задачки наверняка рассчитывал именно на такой ответ.

Dilettante_Pro 12.07.2017 17:43

j0hnik,
Но его почему-то так и не было


Часовой пояс GMT +3, время: 10:10.