Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.10.2017
Сообщений: 206
1

Динамическое выделение памяти под массив

21.05.2018, 20:46. Просмотров 542. Ответов 3
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под размер двухмерного массива, и динамическое выделение памяти под одномерный массив, в который переписываются значения больше С.
Задание было такое, нужно сделать двухмерный массив макс размером 15х25 и из матрицы выписать числа большие С в одномерный массив если таких числе нет то выписываем 0.
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <stdlib.h>     // srand(), rand()
#include <time.h>       // time()
// размеры массива зададим константами:
#define K 15
#define L 25
 
void input (int *k,int *l,int *c)
{
    do {
        printf("Strok: ");
        scanf("%d", k);
        printf("Stolb: ");
        scanf("%d", l);
    }while (*k>15 && *l>25);
    printf("Chislo: ");
    scanf("%d", c);
}
 
int massiv (int a[K][L],int b[K],int c)
{
 
    /* чтобы не вводить 375 значений с клавиатуры, заставим трудиться рнд */
    srand(time(NULL));      // новая точка отсчета рнд
    int i,j,m = 50;         // переменные-счетчики, максимум рнд
    for (i=0; i<K; i++)     // заполним массив a[][] случайными числами
        for (j=0; j<L; j++)
            a[i][j] = rand() %m;    // случайное число от 0 до m-1
 
    // находим первые числа, больше с и записываем их в массив b[]:
    for (i=0; i<K; i++)
    {
        for (j=0; j<L && a[i][j]<=c; j++)
            ;   // пустой цикл до первого элемента больше с
        if (j<L) b[i] = a[i][j];
        else b[i] = 0;
    }
 
    // находим первые числа, больше с и записываем их в массив b[]:
    for (i=0; i<K; i++)
    {
        for (j=0; j<L && a[i][j]<=c; j++)
            ;   // пустой цикл до первого элемента больше с
        if (j<L) b[i] = a[i][j];
        else b[i] = 0;
    }
    
    return a[K][L];
}
 
int output (int a[K][L],int b[K],int k,int l,int c, int i, int j)
{
    // напечатаем массив a[][] на экран:
    for (i=0; i<K; i++)
    {
        for (j=0; j<L; j++)
            printf("%3d", a[i][j]);
        printf("\n");
    }
 
    // выведем на экран получившийся массив b[]:
    printf("\narray b[]:\n");
    for (i=0; i<K; i++)
        printf("%3d", b[i]);
    printf("\n");
 
    // конец программы
    return b[K];
}
 
int main (void)
{
    int a[K][L];int b[K];int k;int l;int c; int i; int j;
    input(&k,&l,&c);
    massiv(a,b,c);
    output (a,b,k,l,c,i,j);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2018, 20:46
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер...

Динамическое выделение памяти под массив структур
Подскажите, пожалуйста, как верно выделить память под массив структур, размер которого вводится в...

Динамическое выделение памяти под двумерный массив
Доброго времени суток, есть программа которая создаёт двумерный массив, вопрос такой как можно...

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

3
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
22.05.2018, 11:27 2
Вот пример выделения динамической памяти для одномерного и двумерного массивов,
заполнения их случайными данными и распечатки:
Кликните здесь для просмотра всего текста

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void createArray(int** array1, int*** array2) {
    int n = 15;
    int m = 25;
    *array1 = (int*) malloc(n * sizeof(int));
    *array2 = (int**) malloc(n * sizeof(int*));
    for (int i = 0; i < n; i++) {
        (*array1)[i] = rand() % 10;
        (*array2)[i] = (int*) malloc(m * sizeof(int));
        for (int j = 0; j < m; j++) {
            (*array2)[i][j] = rand() % 10;
        }
    }
}
 
void printArray(int** array1, int*** array2) {
    int n = 15;
    int m = 25;
    printf("array1:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", (*array1)[i]);
    }
    printf("\n");
    printf("array2:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", (*array2)[i][j]);
        }
        printf("\n");
    }
}
 
 
int main() {
    srand(time(NULL));
    int* array1;
    int** array2;
    createArray(&array1, &array2);
    printArray(&array1, &array2);
}
1
0 / 0 / 0
Регистрация: 12.10.2017
Сообщений: 206
05.07.2018, 09:27  [ТС] 3
dopleref, а почему тройной указатель ? И для чего он нужен ?
0
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
23.07.2018, 07:11 4
https://www.cyberforum.ru/showthread.php?t=2260580 - в этой теме такой подход резонно раскритиковали.

Но вообще тут так сделано, потому что, чтобы изменить указатель на указатель в функции, необходимо
передать тройной указатель, так как функция malloc возвращает переменной новый адрес, а если мы хотим
изменить значение переменной в функции мы должны передать ее через указатель.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2018, 07:11

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

Динамическое выделение памяти под массив строк
Программа выполняет конкатенацию произвольного количества строк. Но видимо я не правильно выделяю...

Динамическое выделение памяти под многомерный массив
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику. ...

Динамическое выделение памяти под структуры
Такая ситуация. Необходимо написать функцию ввода структуры c консоли void vvod(student &amp;man). Так...

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


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

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

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