Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/30: Рейтинг темы: голосов - 30, средняя оценка - 4.50
105 / 103 / 52
Регистрация: 07.04.2011
Сообщений: 619
1

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

25.06.2014, 19:55. Просмотров 5524. Ответов 7
Метки нет (Все метки)

Набросал код:
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;}
Нужно создать массив вещественных числе.Не выходит именно заполнение массива рандомными вещественными числами.
Подскажите как заполнить динамический массив рандомными вещественными числам(не обязательно положительными)
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2014, 19:55
Ответы с готовыми решениями:

Динамический массив из вещественных чисел
Добрый день! Как заполнить динамический массив вещственными числами, учитывая что пользователь...

Создать динамический массив вещественных чисел.
Создать динамический массив вещественных чисел. (С++) На каждый вопрос создавайте по одной теме...

Вывести на экран двумерный массив вещественных чисел
вот такой кодик...числа в массиве - произвольные...выбивает такие ошибки error LNK2019: unresolved...

построить двумерный массив вещественных чисел. (Нужно написать программу!)
Нужно построить двумерный массив вещественных чисел. Определить местоположение максимальных...

7
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
25.06.2014, 20:01 2
OverDozero, Случайные ВЕЩЕСТВЕННЫЕ числа
1
105 / 103 / 52
Регистрация: 07.04.2011
Сообщений: 619
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
Что не правильно я сделал?
При ручном заполнении массива тоже ошибки.Вручную не могу заполнить.
У меня проблема с заполнением массива,или с самим динамическим выделением памяти?

Спасибо за ответ
0
Модератор
8164 / 6038 / 803
Регистрация: 14.02.2011
Сообщений: 20,936
25.06.2014, 20:43 4
Цитата Сообщение от OverDozero Посмотреть сообщение
float**arr=(float**)malloc(n*m*sizeof(float));
расскажи что ты хотел сделать этой строчкой? и как ты её понимаешь?
0
105 / 103 / 52
Регистрация: 07.04.2011
Сообщений: 619
25.06.2014, 21:05  [ТС] 5
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи что ты хотел сделать этой строчкой? и как ты её понимаешь?
выделить под двумерный массив память)))
Вещественный двумерный массив=выделение памяти размерностью (заданное m*заданное n*размер типа флоат)
Допустим размерность 5 на 5
Память=5*5*4 байта=100 байт мне надо памяти
Или так нельзя сделать?как правильно будет?
0
Модератор
8164 / 6038 / 803
Регистрация: 14.02.2011
Сообщений: 20,936
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;
1
105 / 103 / 52
Регистрация: 07.04.2011
Сообщений: 619
25.06.2014, 21:44  [ТС] 7
Цитата Сообщение от ValeryS Посмотреть сообщение
правильно так
C++
1
arr[i][j]=mas;
Да я уже понял что Си это не паскаль)И не Дельфи.
А что означает в коде
C++
1
float**arr=(float**)malloc(n*sizeof( float*))
* в последнем флоат?
0
Модератор
8164 / 6038 / 803
Регистрация: 14.02.2011
Сообщений: 20,936
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)
и считываем значение четвертого элемента второй строчки
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2014, 21:57

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

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

Создать динамический двумерный массив типа int. Ввести таблицу из 5x5 чисел. Полсчитать количество положительн
Создать динамический двумерный массив типа int. Ввести таблицу из 5x5 чисел. Полсчитать количество...

Двумерный динамический массив
Выскакивает ошибка Ошибка C2440 =: невозможно преобразовать &quot;int *&quot; в &quot;int...

Динамический двумерный массив
Здравствуйте, начал недавно учить с++, смотрю видеоуроки. Дошел до этой темы и столкнулся с...


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

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

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