Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,439
1

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

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

Author24 — интернет-сервис помощи студентам
Заполняю массив рандомными действительными числами.Иногда выходит такое значение числа,как в вложенном изображении.Строка 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...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.06.2014, 09:49 2
код?
0
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,439
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
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
29.06.2014, 10:10 4
(float)(rand()%512)/(float)(rand()%256) может давать деление на ноль.
0
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,439
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
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,439
29.06.2014, 11:16  [ТС] 7
Спасибо!Теперь понятно.Вероятней всего выходило так: 0/число <>0. В исправленном коде 0 больше не должен получаться.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
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
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
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
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
29.06.2014, 12:57 11
aleks_tar, читай внимательней, ноль делить на НЕ ноль
0
29.06.2014, 12:57
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
Copyright ©2000 - 2024, CyberForum.ru