Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Найти количество эл.меньших ср.арифм.всех элементов и сортировка (https://javascript.ru/forum/misc/84109-najjti-kolichestvo-ehl-menshikh-sr-arifm-vsekh-ehlementov-i-sortirovka.html)

dakus 04.06.2022 00:10

Найти количество эл.меньших ср.арифм.всех элементов и сортировка
 
Добрый день! Возникли трудности с задачей. Я так понимаю нужно задать один массив,и реализовать 3 функции которые будут обрабатывать массив,но я не понимаю как реализовать эти функции,может кто поможет,наброски прилагаю.
Условие: Ввод вектора должен осуществляться в текстовое поле через разделитель или запятую. Вывод результатов в текстовую область или консоль.(Одномерный qмассив)
Для реализации каждой из трёх условий должны быть обязательно использованы отдельные функции:
1) Дан вещественный вектор А(n). Найти количество элементов вектора, меньших
среднего арифметического всех его элементов.
2) Получить новый вектор путем умножения элементов стоящих перед минимальным элементом на максимальный элемент вектора. На печать выдавать исходный вектор, максимальный, минимальный элементы и полученный вектор.
3) Отсортировать его элементы методом линейного выбора.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>JavaScript</title>
</head>
<body>
<script>
var R = prompt("Введите размерность массива");
if (R.replace(/\s/g, '').length === 0 || isNaN(R) || R < 0) {
  alert('ERROR!! ERROR!!');
  exit();
}
var mass = [];
var oi
for(var i=0; i < R; i++) {
    oi=i+1;
     mass[i] = +prompt("Введите значение "+ oi +"-ого элемента массива");
        if (mass[i].toString().replace(/\s/g, '').length === 0 || isNaN(mass[i])) {
  alert('ERROR!! ERROR!!');
  exit();
        }
        }
var sum = 0;
for (var i=0; i<R; i++){
sum=sum + mass[i];
}
document.write("Сумма элементов массива: "+sum);
 document.write("<br>")
arif=sum/R;
document.write("Среднее арифметическое элементов массива: "+arif);
 document.write("<br>")
document.write("Полученный массив: ");
for(var i=0; i < R; ++i) {
    document.write(mass[i]+" ")
}
 document.write("<br>")
  var a = +prompt("Нажмите 1 для нахождения элементов меньше среднего ")
if (a.toString().replace(/\s/g, '').length === 0 || (isNaN(a))){
  alert('ERROR!! ERROR!!');
  exit();}
switch (a){
  case 1:
  document.write("Элементы массива меньшие среднего арифметического: ");
for (var i=0; i<R; i++){
if (mass[i] < arif)
document.write(mass[i]+" ")
}
 
  }
</script>
</body>
</html>

рони 04.06.2022 00:52

dakus,
<body>
 <script>
function middle(arr)
{
  let sum = 0;
  for (let x of arr) sum += x;
  let midpoint = sum / arr.length;
  let count = 0;
  for (let x of arr) count += x < midpoint ;
  return count;
}

let arr = [1, 2, 3, 4, 5]
document.body.append(middle(arr))
</script>
<br>
<script>
function maxMin(arr)
{
  let max = arr[0], min = arr[0];
  for (let x of arr) {
  if(x > max) max = x;
  if(x < min) min = x;
  }
  let clone = [], up = true;
  for (let x of arr) {
  if(x == min) up = false;
  if(up) x *= max;
  clone.push(x);
  }
  return {arr, clone, max, min};
}

let ar = [3, 2, 1, 4, 5];
document.body.append(JSON.stringify(maxMin(ar)));
</script>

</body>

dakus 04.06.2022 09:33

Цитата:

Сообщение от рони (Сообщение 545886)
dakus,
<body>
 <script>
function middle(arr)
{
  let sum = 0;
  for (let x of arr) sum += x;
  let midpoint = sum / arr.length;
  let count = 0;
  for (let x of arr) count += x < midpoint ;
  return count;
}

let arr = [1, 2, 3, 4, 5]
document.body.append(middle(arr))
</script>
<br>
<script>
function maxMin(arr)
{
  let max = arr[0], min = arr[0];
  for (let x of arr) {
  if(x > max) max = x;
  if(x < min) min = x;
  }
  let clone = [], up = true;
  for (let x of arr) {
  if(x == min) up = false;
  if(up) x *= max;
  clone.push(x);
  }
  return {arr, clone, max, min};
}

let ar = [3, 2, 1, 4, 5];
document.body.append(JSON.stringify(maxMin(ar)));
</script>

</body>

Спасибо вам большое! Не подскажете, как в данной задаче можно сделать ручной ввод массива? Например через консоль или текстовую область:)

рони 04.06.2022 09:53

Цитата:

Сообщение от dakus
Не подскажете, как в данной задаче можно сделать ручной ввод массива?

кто писал код #1? там много лишнего, но всё есть, для формирования массива.

dakus 04.06.2022 10:18

Цитата:

Сообщение от рони (Сообщение 545894)
кто писал код #1? там много лишнего, но всё есть, для формирования массива.

Это были мои попытки :-?
Ваш вариант в разы лучше и не такой обьемный) Только не понимаю как сделать ручной ввод массива

рони 04.06.2022 10:20

dakus,
<body>
 <script>
function createArr()
{  const arr = [];
   let elem;
   while ((elem = prompt(`Введите значение ${arr.length + 1}-ого элемента массива`)) !== null) arr.push(Number(elem)||0);
   return arr
}

function middle(arr)
{
  let sum = 0;
  for (let x of arr) sum += x;
  let midpoint = sum / arr.length;
  let count = 0;
  for (let x of arr) count += x < midpoint ;
  return {arr, midpoint, count};
}

let arr = createArr();
document.body.append(JSON.stringify(middle(arr)))
</script>
<br>
<script>
function maxMin(arr)
{
  let max = arr[0], min = arr[0];
  for (let x of arr) {
  if(x > max) max = x;
  if(x < min) min = x;
  }
  let clone = [], up = true;
  for (let x of arr) {
  if(x == min) up = false;
  if(up) x *= max;
  clone.push(x);
  }
  return {arr,  max, min, clone};
}

let ar = createArr();
document.body.append(JSON.stringify(maxMin(ar)));
</script>

</body>

dakus 06.06.2022 19:52

Цитата:

Сообщение от рони (Сообщение 545897)
dakus,
<body>
 <script>
function createArr()
{  const arr = [];
   let elem;
   while ((elem = prompt(`Введите значение ${arr.length + 1}-ого элемента массива`)) !== null) arr.push(Number(elem)||0);
   return arr
}

function middle(arr)
{
  let sum = 0;
  for (let x of arr) sum += x;
  let midpoint = sum / arr.length;
  let count = 0;
  for (let x of arr) count += x < midpoint ;
  return {arr, midpoint, count};
}

let arr = createArr();
document.body.append(JSON.stringify(middle(arr)))
</script>
<br>
<script>
function maxMin(arr)
{
  let max = arr[0], min = arr[0];
  for (let x of arr) {
  if(x > max) max = x;
  if(x < min) min = x;
  }
  let clone = [], up = true;
  for (let x of arr) {
  if(x == min) up = false;
  if(up) x *= max;
  clone.push(x);
  }
  return {arr,  max, min, clone};
}

let ar = createArr();
document.body.append(JSON.stringify(maxMin(ar)));
</script>

</body>

Здравствуйте! Я извиняюсь,а как в данной задаче реализовать сортировку методом линейного выбора? Либо я что-то не так делаю,компирилирую,ввожу массив,печать есть,находит среднее арифметическое,сортировки не вижу

рони 06.06.2022 20:27

dakus,
не копируйте сообщения целиком, если в этом нет особой надобности.
<body>
    <script>
        function createArr() {
            const arr = [];
            let elem;
            while ((elem = prompt(`Введите значение ${arr.length + 1}-ого элемента массива`)) !== null) arr.push(Number(elem) || 0);
            return arr
        }
    </script>
    <br>
    <script>
        function sort(arr) {
            const {
                length
            } = arr;
            for (let i = 0; i < length; i++) {
                let min = arr[i], k = i;
                for (let j = i + 1; j < length; j++) {
                    let el = arr[j];
                    if (el < min) {
                        min = el;
                        k = j
                    }
                }
                [arr[i], arr[k]] = [arr[k],arr[i]]
            }
            return arr;
        }
        let ar = createArr();
        document.body.append(JSON.stringify(sort(ar)));
    </script>
</body>


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