Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
OverDozero
99 / 99 / 50
Регистрация: 07.04.2011
Сообщений: 525
#1

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

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

Заполняю массив рандомными действительными числами.Иногда выходит такое значение числа,как в вложенном изображении.Строка 4,столбец 1:1.#J.И так как данная строка стоит в выводе-значит данный элемент максимальный по строке и стоит на 1 позиции(по условию задачи).Только почему отображается таким образом?

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

0
Миниатюры
Некорректное значение числа при заполнении массива рандомными действительными числами  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2014, 09:02
Ответы с готовыми решениями:

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

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

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

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

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

10
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
29.06.2014, 09:49 #2
код?
0
OverDozero
99 / 99 / 50
Регистрация: 07.04.2011
Сообщений: 525
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
2156 / 1515 / 461
Регистрация: 05.06.2014
Сообщений: 4,394
29.06.2014, 10:10 #4
(float)(rand()%512)/(float)(rand()%256) может давать деление на ноль.
0
OverDozero
99 / 99 / 50
Регистрация: 07.04.2011
Сообщений: 525
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 / 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
OverDozero
99 / 99 / 50
Регистрация: 07.04.2011
Сообщений: 525
29.06.2014, 11:16  [ТС] #7
Спасибо!Теперь понятно.Вероятней всего выходило так: 0/число <>0. В исправленном коде 0 больше не должен получаться.
0
Renji
2156 / 1515 / 461
Регистрация: 05.06.2014
Сообщений: 4,394
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
3234 / 2734 / 1243
Регистрация: 24.04.2014
Сообщений: 8,336
29.06.2014, 11:58 #9
Цитата Сообщение от OverDozero Посмотреть сообщение
Вероятней всего выходило так: 0/число <>0
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
0
aleks_tar
2 / 2 / 2
Регистрация: 19.06.2014
Сообщений: 17
29.06.2014, 12:23 #10
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ноль делить на не ноль? так это даст 0, но никак не неопределенность или бесконечность
Приведите ссылку на материал по математике, где пишется, что 0/0 будет равно нулю.
0
Jewbacabra
Эксперт PHP
3234 / 2734 / 1243
Регистрация: 24.04.2014
Сообщений: 8,336
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

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

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

Матрица с рандомными и повторяющимися числами
Всем привет. Как заполнить рандомными числами матрицу я знаю. Но нужно часть...


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

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

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