Форум программистов, компьютерный форум CyberForum.ru

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

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

C++ Сообщение о ошибке при заполнении массива
C++ Ошибка при заполнении массива малыми числами
Глюк при заполнении массива C++
C++ ошибка при заполнении массива
Ошибка при заполнении массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
29.06.2014, 09:49     Некорректное значение числа при заполнении массива рандомными действительными числами #2
код?
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
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;}
Но это уже код Си,а не плюсов
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
29.06.2014, 10:10     Некорректное значение числа при заполнении массива рандомными действительными числами #4
(float)(rand()%512)/(float)(rand()%256) может давать деление на ноль.
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
29.06.2014, 10:18  [ТС]     Некорректное значение числа при заполнении массива рандомными действительными числами #5
C++
1
arr[i][j]=((float)(rand()%512)+0.1)/((float)(rand()%256)-2);
а если так?Дело в том,что может полученное выражение делится на 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, то будет значение, которое не является числом.
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
29.06.2014, 11:16  [ТС]     Некорректное значение числа при заполнении массива рандомными действительными числами #7
Спасибо!Теперь понятно.Вероятней всего выходило так: 0/число <>0. В исправленном коде 0 больше не должен получаться.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
29.06.2014, 11:26     Некорректное значение числа при заполнении массива рандомными действительными числами #8
а если так?Дело в том,что может полученное выражение делится на 0?Поэтому вывод некорректно?
(float)(rand()%256)-2 тоже может дать ноль. Я бы сделал либо (rand()%100500)/256.0 (равномерное распределение), либо (rand()%512-256)*pow(2.0,rand(%256)-128) (х.з. какое распределение, зато размах больше).
Jewbacabra
1791 / 1506 / 540
Регистрация: 24.04.2014
Сообщений: 4,238
29.06.2014, 11:58     Некорректное значение числа при заполнении массива рандомными действительными числами #9
Цитата Сообщение от OverDozero Посмотреть сообщение
Вероятней всего выходило так: 0/число <>0
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
aleks_tar
2 / 2 / 0
Регистрация: 19.06.2014
Сообщений: 17
29.06.2014, 12:23     Некорректное значение числа при заполнении массива рандомными действительными числами #10
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
Приведите ссылку на материал по математике, где пишется, что 0/0 будет равно нулю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 12:57     Некорректное значение числа при заполнении массива рандомными действительными числами
Еще ссылки по теме:

C++ Даны два массива А и В с действительными числами. Получить матрицу С
Заполнение элементов вектора рандомными числами без повторений C++
C++ Заполнить матрицу рандомными числами. Почему то прога не заполняет

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

Или воспользуйтесь поиском по форуму:
Jewbacabra
1791 / 1506 / 540
Регистрация: 24.04.2014
Сообщений: 4,238
29.06.2014, 12:57     Некорректное значение числа при заполнении массива рандомными действительными числами #11
aleks_tar, читай внимательней, ноль делить на НЕ ноль
Yandex
Объявления
29.06.2014, 12:57     Некорректное значение числа при заполнении массива рандомными действительными числами
Ответ Создать тему
Опции темы

Текущее время: 17:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru