1

Тема: Допоможіть будь ласка з лабораторною

Ввести не більше 5 масивів цілих чисел. Кількість чисел у масиві задається під час
виконання програми, це число записати першим елементом масиву. Масиви розмістити в
динамічній пам'яті. Створити масив вказівників на дані масиви. У функцію зі змінним
числом параметрів передати кількість масивів і вказівники на масиви. У функції вивести на
екран всі елементи кожного масиву.

Вже другий тиждень йде як я не можу зробити це завдання, точніше я зробив але хочу удосконалити код.
Функція працює добре, використовував макроси з бібліотеки stdarg.h.
Лишень потрібно 5 разів повторювати один і той самий код(занесення масиву в динамічну пам'ять )

cout << "Введіть кількість елементів першого масиву : " << endl;
    int a;
    cin >> a;
    int* A = new int[a];
    A[0] = a;
    for (int i = 1; i < a; i++) {
        A[i] = rand() % 10;
    }
    cout << "Введіть кількість елементів другого масиву : " << endl;
    int b;
    cin >> b;
    int* B = new int[b];
    B[0] = b;
    for (int i = 1; i < b; i++) {
        B[i] = rand() % 10;
    }
    cout << "Введіть кількість елементів третього масиву : " << endl;
    int c;
    cin >> c;
    int* C = new int[c];
    C[0] = c;
    for (int i = 1; i < c; i++) {
        C[i] = rand() % 10;
    }
    cout << "Введіть кількість елементів четвертого масиву : " << endl;
    int d;
    cin >> d;
    int* D = new int[d];
    D[0] = d;
    for (int i = 1; i < d; i++) {
        D[i] = rand() % 10;
    }
    cout << "Введіть кількість елементів п'ятого  масиву : " << endl;
    int e;
    cin >> e;
    int* E = new int[e];
    E[0] = e;
    for (int i = 1; i < e; i++) {
        E[i] = rand() % 10;
    }
    cout << "Вказівники на масиви  " << endl;
    int* S[5]{ A,B,C,D,E };
    for (int i = 0; i < 5; i++) {
        cout << S[i] << "\t";

Чи можна записати цей код у вигляді одного циклу, я уявляю як це може виглядати, але не можу реалізувати .

2 Востаннє редагувалося koala (02.11.2022 07:20:58)

Re: Допоможіть будь ласка з лабораторною

Цикли й масиви створені одне для одного. Ви не можете ефективно працювати в циклі з різними іменами змінних, але можете з різними індексами масиву. Відповідно:

    const int COUNT = 5; //гарна практика - проголошувати іменовані константи. 
        // Якщо треба буде не 5,  а 10 масивів, то не треба буде по всіх циклах шукати, де там i<5.
        // Константи зазвичай позначають ВЕЛИКИМИ_ЛІТЕРАМИ

    int *arrays[COUNT]; //замість A,B,C,D,E - один масив з читаною назвою
    for(int i=0; i<COUNT; i++) {
        cout << "Введіть кількість елементів " <<(i+1)<< "-го  масиву : " << endl;
        int size;
        cin >> size;
        arrays[i] = new int[size]; //можливо, тут варто було б зробити size+1? Утім, роблю як у вас
        arrays[i][0] = size;
        for (int j = 1; j < size; j++) {
            arrays[i][j] = rand() % 10;
        }
    }
    cout << "Вказівники на масиви і масиви:" << endl;
    for (int i = 0; i < COUNT; i++) {
        cout << arrays[i] << ":\n";
        for(int j=1; j<arrays[i][0]; j++)
            cout << arrays[i][j] << "\t";
        cout << "\n";
    }

А взагалі для динамічних масивів існують вектори.

Подякували: leofun01, Q-bart, Ubermensch03