Как превратить массив в двумерный

378
03 июня 2017, 17:07

Написал код по рандомному формированию массива. Теперь хочу что бы он стал двумерным. Что, где добавить?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define max_value 30
void swap(double* p1, double* p2)
{
    double tmp = *p1;
    *p1 = * p2;
    *p2 = tmp;
}
void sort(double* vector, unsigned int size)
{
    signed short int swapping = 1;
    unsigned int j = 0;
    while(swapping > 0)
    {
        swapping = -1;
        for (j = 0; j < size - 1; ++j)
            if (vector[j] > vector[j + 1])
            {
                swap(vector + j, vector + j + 1);
                swapping = 1;
            }
    }
}
int main()
{
    unsigned int size, i = 0;
    double* vector;
    srand((unsigned int)time(NULL));
    printf("Enter the size of the vector\n");
    scanf("%d", &size);
    vector = (double*)malloc(sizeof(double) * size);
    if (vector == NULL)
    {
        perror("Out of memory");
        _getch();
        return 0;
    }
    printf("Vector:\n");
    for ( ; i < size; ++i)
        printf("%4.2lf ", vector[i] = rand() % max_value);
    sort(vector, size);
    printf("\nSorting array\n");
    for (i = 0 ; i < size; ++i)
        printf("%4.2lf ", vector[i]);
    system("pause");
    free(vector);
    return 0;
}
Answer 1
unsigned int rows, cols;  // Размеры массива
double** vector;
...
vector = (double**)malloc(sizeof(double*) * rows);
for(unsigned int i = 0; i < cols; ++i)
    vector[i] = (double*)malloc(sizeof(double) * cols);
.....
// Работать как с обычным двумерным массивом - через vector[i][j]
.....
for(unsigned int i = 0; i < cols; ++i)
    free(vector[i]);
free(vector);

Только у вас просто C, никак не C++. В C++ vector - свой тип, не используйте там это имя, а то потом могут начаться неприятности. Кстати, с ним это выглядело бы так:

vector<vector<int>> arr(rows,vector<int>(cols));

И все - двумерный массив сформирован.

Answer 2
for (int i = 0 ; i < sizeVert; ++i)
{
   for (int j = 0 ; j < sizeGoriz; ++j)
   {
        printf("%4.2lf ", vector[i][j] = rand() % max_value);
   }
}

Вроде так, если я верно понял вопрос

READ ALSO
обертка над сокетами кидает исключение

обертка над сокетами кидает исключение

здравствуйте, решил написать небольшую обертку над си-шными сокетами, подскажите почему вылетает sigpipe в функции write?

329
Считывание из файла c++

Считывание из файла c++

В текстовом файле имеется информация, представленная в таком формате

360
Как это сделать [требует правки]

Как это сделать [требует правки]

Определить класс, который позволяет хранить данные об исключении объекта, который должен содержать информацию о том, что () для возвращения...

451
Как передать в главный поток строку, получаемую через командную строку?

Как передать в главный поток строку, получаемую через командную строку?

Нужно в программу передать имя файла, получаемое через открытие через командную строкуfile_name должно быть типа стринг

234