Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 523
#1

Некорректное значение числа при заполнении массива рандомными действительными числами - C++

29.06.2014, 09:02. Просмотров 653. Ответов 10
Метки нет (Все метки)

Заполняю массив рандомными действительными числами.Иногда выходит такое значение числа,как в вложенном изображении.Строка 4,столбец 1:1.#J.И так как данная строка стоит в выводе-значит данный элемент максимальный по строке и стоит на 1 позиции(по условию задачи).Только почему отображается таким образом?
0
Миниатюры
Некорректное значение числа при заполнении массива рандомными действительными числами  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2014, 09:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректное значение числа при заполнении массива рандомными действительными числами (C++):

Ошибка при заполнении массива малыми числами - C++
Привет всем! В программе необходимо использовать массив с малыми числами, порядка 1.47243e-331. Элементы массива описаны как "long...

Заполнение массива рандомными числами - C++
Здравствуйте! Нужно заполнить массив float рандомными числами от 0.3 до 0.9 #define MIN 0.3 #define MAX 0.9 int...

Даны два массива А и В с действительными числами. Получить матрицу С - C++
даны два массива А и В с действительными числами. Получить матрицу С, элементы которой равны Cij=aj/(bj+5) C++/ массивы

Как заполнить массив рандомными дробными числами, если при следующем раскладе все равно выходят целые? - C++
float *pointer = new float; for (int i = 0; i < a; i++) pointer = rand() % 20 + 1; for (int i = 0; i < a; i++) { cout <<...

Заполнение списка рандомными целыми числами - C++
Доброго времени суток! Мне необходимо создать циклический одномерный список и заполнить его рандомными числами и вывести их на экран....

Вывести матрицу, заполненную рандомными числами - C++
Нужно вывести двумерный массив, заполненный рандомными числами, а выводит массив, заполненный одним рандомным числом, как это исправить? ...

10
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,027
29.06.2014, 09:49 #2
код?
0
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 523
29.06.2014, 10:03  [ТС] #3
Пожалуйста
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
57
58
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
 int m=0,n=0,V=0;//n строк m-стобцов
 float mas=0;//считываем переменную вручную 
 int i,j;//индексы массива
 float max;//макс.значение
 //float arr[5][5];
 int main ()
  {
    printf("Vvedite razmernost massiva(strok):");
     scanf("%d",&n);
    printf("Vvedite razmernost massiva(stolbcov):");
     scanf("%d",&m);
     printf("Vyberete tip zapolneniya massiva\n");
    printf("'1'-avtomati4esloe zapolnenie massiva\n");
    printf("'2'-ru4noe zapolnenie massiva\n");
    printf("Tip:");
    scanf("%d",&V);//тип заполнения массива
    float **arr=(float**)malloc(n*sizeof(float*));//память под 2хмерный
     for(int j=0;j<m;j++)
     arr[j]=(float*)malloc(m*sizeof( float));
     srand(time(NULL));
        if (V==1)
        for (i=0;i<n;++i){
        for (j=0;j<m;++j){
        arr[i][j]=(float)(rand()%512)/(float)(rand()%256)-2;
        printf("%.2f ",arr[i][j]);}
        printf("\n");}  
         else   
        for (i=0;i<n;i++)
        for (j=0;j<m;j++){
        printf("Vvedite 3lement '%d' stroki,stolbca:'%d' :",i+1,j+1);
        scanf("%f",&mas);
        arr[i][j]=mas;}                     
        //начинаем поиск максимального
        char no_max = 1; // нет строк с первым макс. элементом
printf("_____________________________________________\n");
        for ( int i = 0; i < n; i++ ){//1 open
            max=arr[i][0];
            for (j = 0; j < m; j++){//2 open
            if ( arr[i][j] > max )
                max = arr[i][j];}//2 off
            if ( max == arr[i][0] ){ // если он на первом месте, то выводим строку
                for ( int j = 0; j < m; j++){
                printf("%.2f ", arr[i][j]);}
                printf("\n");
                no_max = 0;} // помечаем что есть строки с макс. элеметом               
            }//1 off
    if ( no_max ) // сообщаем что нет строк с макс. элементом
        printf("No maximum on the first position in the string");
    for (i=0;i<n;i++)
         free (arr[i]);
         free (arr);
    getch();
  return 0;}
Но это уже код Си,а не плюсов
0
Renji
2004 / 1372 / 309
Регистрация: 05.06.2014
Сообщений: 3,906
29.06.2014, 10:10 #4
(float)(rand()%512)/(float)(rand()%256) может давать деление на ноль.
0
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 523
29.06.2014, 10:18  [ТС] #5
C++
1
arr[i][j]=((float)(rand()%512)+0.1)/((float)(rand()%256)-2);
а если так?Дело в том,что может полученное выражение делится на 0?Поэтому вывод некорректно?
0
aleks_tar
2 / 2 / 0
Регистрация: 19.06.2014
Сообщений: 17
29.06.2014, 11:12 #6
Я бы предложил сделать так:
C++
1
arr[i][j]=((float)(rand()%512)+0.1)/((float)(rand()%256)+2);
Такой вариант, по идее, не должен создать ситуацию с делением на ноль, т.к. rand()%256 - всегда число не меньше нуля, а если к нему прибавить 2, то оно будет не меньше двух. На месте двойки можно поставить и единицу.

Добавлено через 6 минут
#j - может означать либо "бесконечность" (negative/positive infinity) или значение, которое не является числом (NaN - Not a number).

В случае деления 1.0/0.0 или -1.0/0.0 - это будет "бесконечность", если 0.0/0.0, то будет значение, которое не является числом.
1
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 523
29.06.2014, 11:16  [ТС] #7
Спасибо!Теперь понятно.Вероятней всего выходило так: 0/число <>0. В исправленном коде 0 больше не должен получаться.
0
Renji
2004 / 1372 / 309
Регистрация: 05.06.2014
Сообщений: 3,906
29.06.2014, 11:26 #8
а если так?Дело в том,что может полученное выражение делится на 0?Поэтому вывод некорректно?
(float)(rand()%256)-2 тоже может дать ноль. Я бы сделал либо (rand()%100500)/256.0 (равномерное распределение), либо (rand()%512-256)*pow(2.0,rand(%256)-128) (х.з. какое распределение, зато размах больше).
0
Jewbacabra
Эксперт PHP
2661 / 2248 / 845
Регистрация: 24.04.2014
Сообщений: 6,752
29.06.2014, 11:58 #9
Цитата Сообщение от OverDozero Посмотреть сообщение
Вероятней всего выходило так: 0/число <>0
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
0
aleks_tar
2 / 2 / 0
Регистрация: 19.06.2014
Сообщений: 17
29.06.2014, 12:23 #10
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
Приведите ссылку на материал по математике, где пишется, что 0/0 будет равно нулю.
0
Jewbacabra
Эксперт PHP
2661 / 2248 / 845
Регистрация: 24.04.2014
Сообщений: 6,752
29.06.2014, 12:57 #11
aleks_tar, читай внимательней, ноль делить на НЕ ноль
0
29.06.2014, 12:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 12:57
Привет! Вот еще темы с ответами:

Заполнение действительными числами в диапозоне - C++
нужно заполнить массив случайными действительными числами в диапазоне от -4 до 8 именно через рандом for(int i=0;i&lt;n;i++) ...

Найти минимальный максимальный элемент, заполненный рандомными числами - C++
В двумерном массиве найти элемент максимальный по строке и минимальный по столбцу. Если таких нет - вывести соответствующее сообщение на...

Заполнение элементов вектора рандомными числами без повторений - C++
Требуется заполнить 15 элементов вектора числами с 1 до 15, а последний элемент нулем Главное, чтобы числа не повторялись и все это...

В си++. создал массив с рандомными числами.Дальше не могу сделать - C++
Создал массив, заполненный рандомными числами. нужно Подсчитать количество участков, которые образуют непрерывные последовательности чисел...


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

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

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