1

Тема: Багатовимірні масиви в сі

Допоможіть, будь ласка, реалізувати задачу мовою С.
Виділити місце для матриці розмірністю 3 * N (N >10 оголосити як макро-константу або константу мови С), елементи якої є однобайтовими числами. Перший та другий рядки матриці заповнити випадковими числами з діапазону 0..6, перші елементи цих рядків мають бути нулями. Сформовані рядки є сімковими кодами двох цілих чисел. Третій рядок треба заповнити сімковими цифрами суми цих чисел. Результат подати як додавання чисел у стовпчик.
Буду вдячний за будь-яку допомогу щодо реалізації вирішення цього завдання.

2

Re: Багатовимірні масиви в сі

яка мова?

3

Re: Багатовимірні масиви в сі

Що не вдається реалізувати?
Покажіть те що вже зроблено.

4

Re: Багатовимірні масиви в сі

Сі

5

Re: Багатовимірні масиви в сі

Що не вдається реалізувати?
Покажіть те що вже зроблено.

У тому то й справа, що не знаю з чого почати та як взагалі все це має виглядати

6 Востаннє редагувалося ur_naz (10.01.2021 15:39:30)

Re: Багатовимірні масиви в сі

почни з виділення пам'яті для динамічного масиву за допомоги функції malloc

7

Re: Багатовимірні масиви в сі

Mikel45 написав:

У тому то й справа, що не знаю з чого почати та як взагалі все це має виглядати

У такому разі почніть з читання підручника. Тоді матимете певне уявлення хоча б про те, як програми виглядають.

8 Востаннє редагувалося koala (10.01.2021 17:43:33)

Re: Багатовимірні масиви в сі

ur_naz написав:

почни з виділення пам'яті для динамічного масиву за допомоги функції malloc

Маленькі кроки пробую зробити. Підкажіть чи в правильному напрямку?

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define NR 3
#define NC 10

int main()
{
    int *a; //вказівник на масив
    int matr[NR][NC];
    int nc, // реальна кількість стовпців
        i, j; // поточні індекси
    system("chcp 1251");
    printf("\nВвведіть кількість стовпців: ");
    scanf_s("%d", &nc);
    printf("Елементи матриці [%d * %d]:\n", NR, nc);
    a = (int*)malloc(NR * nc * sizeof(int)); //виділення пам'яті

9

Re: Багатовимірні масиви в сі

Mikel45 написав:

елементи якої є однобайтовими числами

Цього немає.

Mikel45 написав:
  int nc, // реальна кількість стовпців

Де в умові сказано, що реальна кількість стовпців має відрізнятися від константи N?

А так - нормальний початок. Потім половину доведеться викидати, але це нормально. Пишіть далі. Якщо щось не виходить - ставте конкретні питання, бажано спершу підручнику і гуглу, якщо там не буде відповіді - форуму.

10

Re: Багатовимірні масиви в сі

koala написав:
Mikel45 написав:

елементи якої є однобайтовими числами

Цього немає.

А як тоді вказати, що елементи є однобайтовими?

11

Re: Багатовимірні масиви в сі

матриця - це вказівник на масив вказівників на масиви char. згідно умови.
Тож достатньо виділити пам'ять для NR елементів розміром char*.
А потім для кожного елементу масиву виділити пам'ять для  NC елементів розміром char.

Подякували: Mikel451

12

Re: Багатовимірні масиви в сі

якщо складно уявити що це і як можна розпочати з статичних масивів

int matr[NR][NC];

13

Re: Багатовимірні масиви в сі

ur_naz написав:

матриця - це вказівник на масив вказівників на масиви char. згідно умови.

Матриця - це абстрактний математичний об'єкт, таблиця чисел. А оскільки тут за умовою розмір має бути фіксованим, то цілком вистачить статичного масиву.

Mikel45, ви таким чином програму не напишете. Це - форум програмістів. Якщо ви не програміст і не збираєтеся ним бути, навіть як хоббі, то вам не треба писати програму, просто комусь заплатіть, найпростіше вашому викладачеві, а тут вам нема чого робити. Якщо ви хочете бути програмістом, то ваше питання показує, що ви не намагалися знайти на нього відповідь самостійно, а без цього ви програмістом не станете. Відповідь, так, дещо дивна, але цілком зрозуміла, просто погугліть.

Подякували: tchort, leofun012

14

Re: Багатовимірні масиви в сі

Матриця - це абстрактний математичний об'єкт

ой всьо...

цілком вистачить статичного масиву.

вони всі статичні, і ті що статичні і ті, що динамічні. різниця в тому де вони зберігаються. а динамічних масивів сі не підтримує... і с++ теж  :P

15 Востаннє редагувалося ur_naz (10.01.2021 22:12:12)

Re: Багатовимірні масиви в сі

просто комусь заплатіть, найпростіше вашому викладачеві, а тут вам нема чого робити.

Оце такої це ж стаття 369 кримінально-процесуального кодексу України...  до 8 років з конфіскацією

Це - форум програмістів.

Прихований текст

ні, це форум снобів і посіпак

16 Востаннє редагувалося tchort (10.01.2021 22:21:28)

Re: Багатовимірні масиви в сі

а динамічних масивів сі не підтримує... і с++ теж

#include <vector>
Прихований текст

Стаття 369. Пропозиція, обіцянка або надання неправомірної вигоди службовій особі:

1. Пропозиція чи обіцянка службовій особі надати їй або третій особі неправомірну вигоду, а так само надання такої вигоди за вчинення чи невчинення службовою особою в інтересах того, хто пропонує, обіцяє чи надає таку вигоду, чи в інтересах третьої особи будь-якої дії з використанням наданої їй влади чи службового становища -

караються штрафом від п’ятисот до семисот п’ятдесяти неоподатковуваних мінімумів доходів громадян або обмеженням волі на строк від двох до чотирьох років, або позбавленням волі на той самий строк.

2. Діяння, передбачені частиною першою цієї статті, вчинені повторно, -

караються позбавленням волі на строк від трьох до шести років із штрафом від п’ятисот до однієї тисячі неоподатковуваних мінімумів доходів громадян, з конфіскацією майна або без такої.

3. Діяння, передбачені частиною першою або другою цієї статті, якщо неправомірна вигода надавалася службовій особі, яка займає відповідальне становище, або вчинені за попередньою змовою групою осіб, -

караються позбавленням волі на строк від чотирьох до восьми років з конфіскацією майна або без такої.

4. Діяння, передбачені частиною першою, другою або третьою цієї статті, якщо неправомірна вигода надавалася службовій особі, яка займає особливо відповідальне становище, або вчинені організованою групою осіб чи її учасником, -

караються позбавленням волі на строк від п’яти до десяти років з конфіскацією майна або без такої.

Що ви верзете?

17 Востаннє редагувалося ur_naz (10.01.2021 22:44:29)

Re: Багатовимірні масиви в сі

москаль завжди встромить свій ніс туди де його не запрошували. навіть попри те, що не знає, що він верзе.
а не знає він такої простої речі, що, по-перше, поводиться, як москаль, а по друге, що vector або array або list або ... - це жодного разу не масив, а клас.

18

Re: Багатовимірні масиви в сі

ur_naz написав:

цілком вистачить статичного масиву.

вони всі статичні, і ті що статичні і ті, що динамічні. різниця в тому де вони зберігаються. а динамічних масивів сі не підтримує... і с++ теж  :P

tchort написав:

а динамічних масивів сі не підтримує... і с++ теж

#include <vector>
ur_naz написав:

vector або array або list або ... - це жодного разу не масив, а клас.

Відповідь

koala написав:

Матриця - це абстрактний математичний об'єкт, таблиця чисел. А оскільки тут за умовою розмір має бути фіксованим, то цілком вистачить статичного масиву.

Динамічність, статичність у даному пості - теж абстрактна.

19

Re: Багатовимірні масиви в сі

ur_naz написав:

vector або array або list або ... - це жодного разу не масив, а клас.

*FACEPALM*

ur_naz написав:

встромить свій ніс туди де його не запрошували. навіть попри те, що не знає, що він верзе.

Золоті слова.

Подякували: tchort, koala2

20

Re: Багатовимірні масиви в сі

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *p[3];

    const size_t N = 10;
    size_t row, col; // Ідентифікатори для рядів та стовпців

    /* Виділяємо місце у "КУПІ" для 3-х масивів
        та ініціалізуємо масив із 3-х вказівників, котрий
        розташований у "СТЕКУ", адресами ділянок пам'яті в "КУПІ".
            Забиваємо це все діло нулями... */
    row = 0;
    while (row < 3)
        p[row] = (char *)calloc(sizeof(char), N), ++row;

    srand(1); /* Для автоматичної ініціалізації генератор випадкових чисел
                можна srand передати параметр час...  */

    /* Повторна ініціалізація 1-го та 2-го рядка матриці пропускаючи перший елемент. */
    for (row = 0; row < 2; ++row)
    {
        printf("%3d ", *p[row]);
        for (col = 1; col < N; ++col)

            // Генеруємо числа у діапазоні від 0 до 6 та виводимо на екран.

            *(p[row] + col) = rand() % 7, printf("%3d ", p[row][col]);
        printf("\n");
    }

    // Тут у нас дії над 3-м рядком.
    col = 0;
    while (col < N)
        *(p[2] + col) = *(*p + col) + *(p[1] + col),
                 printf("%3o ", p[2][col]),
                 ++col;

    // Ну і звичайно звільняємо пам'ять... ОБОВ'ЯЗКОВО free(PTR)
    row = 0;
    while (row < 3)
        free(p[row]), ++row;

    return 0;
}

Не зовсім зрозуміло дії над 3-м рядком... Покажіть приклад.
Для наглядності у третьому рядку вивів просто суму 1 та 2 рядка у вісімковому форматі

Подякували: leofun011