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

Двумерный динамический массив вещественных чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
25.06.2014, 19:55     Двумерный динамический массив вещественных чисел #1
Набросал код:
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
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
 int m=0,n=0,V=0;//n ñòðîê n-ñòîáöîâ
 float mas=0; 
 int i,j;
 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*m*sizeof(float));
    srand(time(NULL));
    if (V==1)
        for (i=0;i<n;i++)
        for (j=0;i<m;i++){
    arr[i,j]=random()%99-25);
     printf("%f\n ",arr[i,j]);    }
  getch();
  return 0;}
Нужно создать массив вещественных числе.Не выходит именно заполнение массива рандомными вещественными числами.
Подскажите как заполнить динамический массив рандомными вещественными числам(не обязательно положительными)
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
25.06.2014, 20:01     Двумерный динамический массив вещественных чисел #2
OverDozero, Случайные ВЕЩЕСТВЕННЫЕ числа
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
25.06.2014, 20:40  [ТС]     Двумерный динамический массив вещественных чисел #3
Проблема была не в генерации чисел,а именно их записи в массив.Не так поставил вопрос.
Сделал такую генерацию:
C++
1
mas=(float)(rand()%512)/(float)(rand()%256);
записываю в массив
C++
1
2
3
4
5
6
7
for (i=0;i<n;i++){
        for (j=0;j<m;j++)
        {
        mas=(float)(rand()%512)/(float)(rand()%256);
        printf("%.2f ",mas);
        arr[i,j]=mas;//запись в массив      }
        printf("\n");}
Ругается на строку записи:cannot convert `float' to `float*' in assignment
Что не правильно я сделал?
При ручном заполнении массива тоже ошибки.Вручную не могу заполнить.
У меня проблема с заполнением массива,или с самим динамическим выделением памяти?

Спасибо за ответ
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
25.06.2014, 20:43     Двумерный динамический массив вещественных чисел #4
Цитата Сообщение от OverDozero Посмотреть сообщение
float**arr=(float**)malloc(n*m*sizeof(float));
расскажи что ты хотел сделать этой строчкой? и как ты её понимаешь?
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
25.06.2014, 21:05  [ТС]     Двумерный динамический массив вещественных чисел #5
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи что ты хотел сделать этой строчкой? и как ты её понимаешь?
выделить под двумерный массив память)))
Вещественный двумерный массив=выделение памяти размерностью (заданное m*заданное n*размер типа флоат)
Допустим размерность 5 на 5
Память=5*5*4 байта=100 байт мне надо памяти
Или так нельзя сделать?как правильно будет?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
25.06.2014, 21:41     Двумерный динамический массив вещественных чисел #6
Цитата Сообщение от OverDozero Посмотреть сообщение
выделить под двумерный массив память)))
двумерных массивов не бывает, это все обманка, память линейна
и посему или выделяй память под одномерный массив(что ты и делаешь) или делай массив указателей на указатели
C++
1
2
3
 float**arr=(float**)malloc(n*sizeof( float*));
   for(int i=0;i<n;i++)
      arr[i]=(float*)malloc(m*sizeof( float));
удалять в цикле указатели, потом указатель на указатель
но поелику мы в плюсах, то лучше воспользоваться new

C++
1
2
3
 float**arr=new float* [n];
   for(int i=0;i<n;i++)
      arr[i]=new float[m];
удалять так
C++
1
2
3
4
 
   for(int i=0;i<n;i++)
     delete[] arr[i];
   delete [] arr;
вот теперь сможешь пользоваться конструкцией
arr[i][j]

Добавлено через 2 минуты
Цитата Сообщение от OverDozero Посмотреть сообщение
arr[i,j]=mas;
правильно так
C++
1
arr[i][j]=mas;
OverDozero
 Аватар для OverDozero
98 / 98 / 6
Регистрация: 07.04.2011
Сообщений: 517
25.06.2014, 21:44  [ТС]     Двумерный динамический массив вещественных чисел #7
Цитата Сообщение от ValeryS Посмотреть сообщение
правильно так
C++
1
arr[i][j]=mas;
Да я уже понял что Си это не паскаль)И не Дельфи.
А что означает в коде
C++
1
float**arr=(float**)malloc(n*sizeof( float*))
* в последнем флоат?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2014, 21:57     Двумерный динамический массив вещественных чисел
Еще ссылки по теме:

C++ вывести на экран двумерный массив вещественных чисел
Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 записать суммы элементов по с C++
C++ Двумерный динамический массив

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
25.06.2014, 21:57     Двумерный динамический массив вещественных чисел #8
Цитата Сообщение от OverDozero Посмотреть сообщение
* в последнем флоат
Правильный вопрос
вот в этом то и есть тонкости работы с памятью в Си и сила и слабость одновременно
float* означает указатель на данные типа float

давай по шагам
Цитата Сообщение от ValeryS Посмотреть сообщение
float**arr=(float**)malloc(n*sizeof( float*));
выделим память под массив указателей
т.е в первой ячейке будет лежать адрес первой строчки во второй второй и так далее
сам float** означает указатель на указатель т.е в ней будет лежать адрес массива в котором лежат указатели
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i=0;i<n;i++)
arr[i]=(float*)malloc(m*sizeof( float));
выделяем память для каждой строчки и адрес выделенной памяти присваиваем ячейке массива указателей
при обращении допустим arr[1][3] происходит следующее
в переменной arr лежит адрес массива указателей допустим 100
мы идем по адресу 100 добавляем к этому адресу 4(размер указателя, в других системах может и по другому)
и попадаем во вторую ячейку(массивы в Си начинаются с 0)
там считываем адрес второй строчки допустим 200
переходим по адресу 200 добавляем к этому адресу 12( 3 элемент *4 размер float)
и считываем значение четвертого элемента второй строчки
Yandex
Объявления
25.06.2014, 21:57     Двумерный динамический массив вещественных чисел
Ответ Создать тему
Опции темы

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