Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
114 / 110 / 54
Регистрация: 07.04.2011
Сообщений: 673
1

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

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

Заполняю массив рандомными действительными числами.Иногда выходит такое значение числа,как в вложенном изображении.Строка 4,столбец 1:1.#J.И так как данная строка стоит в выводе-значит данный элемент максимальный по строке и стоит на 1 позиции(по условию задачи).Только почему отображается таким образом?
0
Миниатюры
Некорректное значение числа при заполнении массива рандомными действительными числами  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2014, 09:02
Ответы с готовыми решениями:

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

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

Заполнение двумерного массива рандомными числами
Здравствуйте! Стоит задача заполнить двумерный массив случайными значениями, для этого я...

Заполнение массива рандомными числами без повторений
Здравствуйте! Пытаюсь заполнить массив рандомными числами без повторений, в коде есть проверка на...

10
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,040
29.06.2014, 09:49 2
код?
0
114 / 110 / 54
Регистрация: 07.04.2011
Сообщений: 673
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
2683 / 1855 / 552
Регистрация: 05.06.2014
Сообщений: 5,344
29.06.2014, 10:10 4
(float)(rand()%512)/(float)(rand()%256) может давать деление на ноль.
0
114 / 110 / 54
Регистрация: 07.04.2011
Сообщений: 673
29.06.2014, 10:18  [ТС] 5
C++
1
arr[i][j]=((float)(rand()%512)+0.1)/((float)(rand()%256)-2);
а если так?Дело в том,что может полученное выражение делится на 0?Поэтому вывод некорректно?
0
2 / 2 / 2
Регистрация: 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
114 / 110 / 54
Регистрация: 07.04.2011
Сообщений: 673
29.06.2014, 11:16  [ТС] 7
Спасибо!Теперь понятно.Вероятней всего выходило так: 0/число <>0. В исправленном коде 0 больше не должен получаться.
0
2683 / 1855 / 552
Регистрация: 05.06.2014
Сообщений: 5,344
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
Эксперт PHP
4255 / 3471 / 1472
Регистрация: 24.04.2014
Сообщений: 10,307
29.06.2014, 11:58 9
Цитата Сообщение от OverDozero Посмотреть сообщение
Вероятней всего выходило так: 0/число <>0
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
0
2 / 2 / 2
Регистрация: 19.06.2014
Сообщений: 17
29.06.2014, 12:23 10
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
Приведите ссылку на материал по математике, где пишется, что 0/0 будет равно нулю.
0
Эксперт PHP
4255 / 3471 / 1472
Регистрация: 24.04.2014
Сообщений: 10,307
29.06.2014, 12:57 11
aleks_tar, читай внимательней, ноль делить на НЕ ноль
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2014, 12:57

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

Ошибка заполнения динамического массива рандомными числами
По сути, код рабочий, массив заполняется, сортируется и выводится. Но! Если посмотреть программно,...

Даны два массива А и В с действительными числами. Получить матрицу С
даны два массива А и В с действительными числами. Получить матрицу С, элементы которой равны ...

Как заполнить двумерный массив рандомными действительными числами
double A = new double; Random random = new Random(); for (int i = 0; i &lt;...

Индекс находился вне границы массива при заполнении случайными числами
есть код на фото, выдает ошибку не пойму из-за чего, вроде все правильно же делаю


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

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

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