Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
BenJost
0 / 0 / 4
Регистрация: 01.10.2016
Сообщений: 247
1

Массив: Слишком большие числа в массиве, хотя стоят ограничения диапазона (-100,100), как мне исправить это?

12.06.2017, 23:10. Просмотров 796. Ответов 5

Доброго времени суток.
У меня выходят слишком большие числа в массиве, хотя стоят ограничения диапазона (-100,100), как мне исправить это?
условие (на картинке):
"Во всех последовательностях положительных чисел ограничить снизу значения тех элементов, значения которых меньше среднего для этой последовательности"

Отладка на картинке.
Заранее спасибо за уделенное время.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// ConsoleApplication117.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
 int Ar[200];               /* массив, который обрабатывается */
 
int main(void) {
    setlocale(0,"Russian");
 int i, j;                  /* индексы в массиве */
 int av;                    /* среднее значение */
 int nn;            /* количество эл-тов в последовательности */ 
 int ib;                /* индекс начала последовательности */
 
  rand();                /* инициализация rand */
  for (i=0; i<200; Ar[i++]=rand()-(-100) );      /* заполнение 
массива случайными числами */
  printf("Начальный массив:\n");    /* вывод начального массива */
  for (i=0; i<200; printf("%3d  ",Ar[i++]));
  putchar('\n');
  putchar('\n');
  for (nn=i=0; i<200; i++) {            /* перебор массива */
    if (Ar[i]<0) 
      
      if (!nn) {        /* обработка отрицательного элемента */
                         /* начало последовательности */
        /* запомнить индекс начала, начальное значение накопителя суммы и счетчика элементов */
        ib=i; av=Ar[i]; nn=1;
        }
      else {
        av+=Ar[i]; nn++;    /* накопление суммы,  подсчет количества */
        }           /* конец обработки отрицательного элемента */
    else                /* обработка положительного элемента */
      if (nn) { 
      /* если есть необработанная  отрицательная последовательность */
        av/=nn;                 /* усреднение */
         /* перебор всей последовательности  с ограничением */
        for (j=ib; j<i; j++)
          if (Ar[j]>av) Ar[j]=av;
            nn=0;           /* последовательность обработана */
        }               /* конец если есть необработанная... */ 
    }                    /* конец перебор массива */
  if (nn)   
/* если не обработана последняя  отрицательная последовательность */
    for (av/=nn, j=ib; j<i; j++)
      if (Ar[j]>av) Ar[j]=av;
  printf("Массив-результат:\n");        /* вывод результатов */
  for (i=0; i<200; printf("%3d  ",Ar[i++]));
  putchar('\n');
  return 0;
}
0
Миниатюры
Массив: Слишком большие числа в массиве, хотя стоят ограничения диапазона (-100,100), как мне исправить это?   Массив: Слишком большие числа в массиве, хотя стоят ограничения диапазона (-100,100), как мне исправить это?  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2017, 23:10
Ответы с готовыми решениями:

Генерировать и вывести на экран массив с целого числа n случайных чисел от -100 до 100
Генерировать и вывести на экран массив с целого числа n случайных чисел от -100...

Двумерный целочисленный массив A(m;n) задается с экрана, либо генерируется в пределах от -100 до 100. Найти числа b1,b1,.bm, равные наименьшим значен
Двумерный целочисленный массив A(m;n) задается с экрана, либо генерируется в...

Дан целочисленный массив А задается с экрана либо генерируется в пределах -100 до 100. Найти числа b1 b2 …bn равные суммам элементов строк
Дан целочисленный массив А(m,n) задается с экрана либо генерируется в пределах...

Числа до 100 десятичных знаков - это как?
Числа до 100 десятичных знаков - это как? Мне нужно написать программу для...

Из массива JJ(100) в массив NN(100) перенести числа (элементы массива) сначала нечетные, а затем четные.
Из массива JJ(100) в массив NN(100) перенести числа (элементы массива) сначала...

5
likehood
965 / 814 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.06.2017, 23:14 2
Цитата Сообщение от BenJost Посмотреть сообщение
C++
1
Ar[i++]=rand()-(-100
)
Функция rand() возвращает число от 0 до 32767 - вот отсюда и большие числа. Если нужно ограничить диапазон случайных чисел, используйте остаток от деления на длину диапазона:
C++
1
rand()%201 - 100
0
anapshy
194 / 196 / 174
Регистрация: 14.11.2016
Сообщений: 765
Завершенные тесты: 3
12.06.2017, 23:26 3
Лучший ответ Сообщение было отмечено BenJost как решение

Решение

BenJost,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <clocale>
 
#define     MAX_RAND    100
 
int Ar[200]{ 0 };               /* массив, который обрабатывается */
 
int main(void) {
    setlocale(0, "Russian");
    int i, j;                  /* индексы в массиве */
    int av;                    /* среднее значение */
    int nn;            /* количество эл-тов в последовательности */
    int ib;                /* индекс начала последовательности */
    /*__________________________| ОШИБКА БЫЛА ТУТ |____________________________________*/
    srand(size_t(time(NULL)));
    for (i = 0; i < 200; Ar[i++] = -100 + (rand() % MAX_RAND * 2 + 1));      /* заполнение массива случайными числами */
    /*_________________________________________________________________________________*/
    printf("Начальный массив:\n");    /* вывод начального массива */
    for (i = 0; i < 200; printf("%3d  ", Ar[i++]));
    putchar('\n');
    putchar('\n');
    for (nn = i = 0; i < 200; i++) {            /* перебор массива */
        if (Ar[i] < 0)
            if (!nn) {        /* обработка отрицательного элемента */
                              /* начало последовательности */
                              /* запомнить индекс начала, начальное значение накопителя суммы и счетчика элементов */
                ib = i; av = Ar[i]; nn = 1;
            }
            else {
                av += Ar[i]; nn++;    /* накопление суммы,  подсчет количества */
            }           /* конец обработки отрицательного элемента */
        else                /* обработка положительного элемента */
            if (nn) {
                /* если есть необработанная  отрицательная последовательность */
                av /= nn;                 /* усреднение */
                                          /* перебор всей последовательности  с ограничением */
                for (j = ib; j < i; j++)
                    if (Ar[j] > av) Ar[j] = av;
                nn = 0;           /* последовательность обработана */
            }               /* конец если есть необработанная... */
    }                    /* конец перебор массива */
    if (nn)
        /* если не обработана последняя  отрицательная последовательность */
        for (av /= nn, j = ib; j < i; j++)
            if (Ar[j] > av) Ar[j] = av;
    printf("Массив-результат:\n");        /* вывод результатов */
    for (i = 0; i < 200; printf("%3d  ", Ar[i++]));
    putchar('\n');
    std::cin.get();
    return 0;
}
1
likehood
965 / 814 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
13.06.2017, 09:06 4
Цитата Сообщение от anapshy Посмотреть сообщение
C++
1
Ar[i++] = -100 + (rand() % MAX_RAND * 2 + 1)
Разве так мы получим случайное число от -100 до 100?
1
anapshy
194 / 196 / 174
Регистрация: 14.11.2016
Сообщений: 765
Завершенные тесты: 3
13.06.2017, 10:29 5
likehood, ах, да, скобку не там поставил Ar[i++] = -100 + rand() % (MAX_RAND * 2 + 1);
0
likehood
965 / 814 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
13.06.2017, 10:50 6
anapshy, всё равно что-то не то получается. Я бы написал так:
C++
1
-100 + rand()%201
0
13.06.2017, 10:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2017, 10:50

Сгенерировать массив из 20 чисел в интервале 0 до 100. Определить есть ли в массиве одинаковые числа.
Сгенерировать массив из 20 чисел в интервале 0 до 100. Определить есть ли в...

Если среди элементов массива есть хотя бы одно число больше 100, то все элементы массива поделить на 100.
Дан массив действительных чисел a1,...,an. Если среди элементов массива есть...

Массив размерностью 30 заполнить случайными числами, лежащими в диапозоне от -100 до 100
Массив размерностью 30 заполнить случайными числами, лежащими в диапозоне от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru