1

Тема: Двовимірний динамічний масив(С++(вийшов за межі масиву))

⦁    Створити двовимірний динамічний масив трикутної форми1:
ось весь код

Прихований текст
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void print(int** ar, int m, int n);
void set(int** ar, int m, int n);
void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int m, n;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> m;
    n = 0;
    int**ar = new int*[m];
    for (int i = 0; i < m; ++i)
        ar[i] = new int[n++];
    set(ar, m, 0);
    print(ar, m, 0);
    system("pause");
}
void print(int** ar, int m, int n) {
    for (int i = 0; i < m; ++i) {
        for (int j = n++; j < m; ++j)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}
void set(int** ar, int m, int n) {
    for (int i = 0; i < m; ++i)
        for (int j = n++; j < m; ++j)
            ar[i][j] = rand() % 101 - 50;
}

а ось місьця де можливо вийшов за межі масиву

Прихований текст
for (int i = 0; i < m; ++i)
        ar[i] = new int[n++];

void print(int** ar, int m, int n) {
    for (int i = 0; i < m; ++i) {
        for (int j = n++; j < m; ++j)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}

void set(int** ar, int m, int n) {
    for (int i = 0; i < m; ++i)
        for (int j = n++; j < m; ++j)
            ar[i][j] = rand() % 101 - 50;
}

https://replace.org.ua/misc.php?action=pun_attachment&amp;item=1917&amp;download=0

Post's attachments

Без імені.png 6.78 kb, 53 downloads since 2018-10-15 

2

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

добре що це підсумкова по двовимірним масивам і більше не буду їх вчити(надіюсь) дальше стрічки підуть

3

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

ось ще код де вже немає помилки а компілюється

Прихований текст
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void print(int** ar, int m, int n);
void set(int** ar, int m, int n);
void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int m, n;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> m;
    n = 1;
    int**ar = new int*[m];
    for (int i = 0; i < m; ++i)
        ar[i] = new int[n++];
    set(ar, m, 0);
    print(ar, m, 0);
    system("pause");
}
void print(int** ar, int m, int n) {
    for (int i = 1; i < m; ++i) {
        for (int j = n++; j < m; j++)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}
void set(int** ar, int m, int n) {
    for (int i = 1; i < m; ++i)
        for (int j = n++; j < m; j++)
            ar[i][j] = rand() % 101 - 50;
}

але всерівно одного знизу невистачає

4

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

1 елемента знизу

5

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

а так

Прихований текст
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void print(int** ar, int m, int n);
void set(int** ar, int m, int n);
void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int m, n;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> m;
    n = 1;
    int**ar = new int*[m];
    for (int i = 0; i < m; ++i)
        ar[i] = new int[n++];
    set(ar, m, 1);
    print(ar, m, 1);
    system("pause");
}
void print(int** ar, int m, int n) {
    for (int i = 1; i < m; ++i) {
        for (int j = n++; j < m; j++)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}
void set(int** ar, int m, int n) {
    for (int i = 1; i < m; ++i)
        for (int j = n++; j < m; j++)
            ar[i][j] = rand() % 101 - 50;
}

1 рядка зверху невистачає, здається недойшов тепер в масивне вийшов а недойшов

6

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

якщо ввести 4 то працює а якщо ввести 5 то видає помилку

7

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

здається рядочком не дойшов а не сповпцем але точно не впевнений

8

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

тепер кількість елементів добра але останій стовпець неправильні елементи виводить так ніби вийшов за межі масиву

Прихований текст
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void print(int** ar, int m, int n);
void set(int** ar, int m, int n);
void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int m, n;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> m;
    n = 1;
    int**ar = new int*[m];
    for (int i = 0; i <= m; ++i)
        ar[i] = new int[n++];
    set(ar, m, 1);
    print(ar, m, 1);
    system("pause");
}
void print(int** ar, int m, int n) {
    for (int i = 1; i <= m; ++i) {
        for (int j = n++; j <= m; j++)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}
void set(int** ar, int m, int n) {
    for (int i = 1; i <= m; ++i)
        for (int j = n++; j < m; j++)
            ar[i][j] = rand() % 101 - 50;
}

9

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

тут при 4 і менше може правильно працювати а може помилка появитись а при 5 і більше тільки помилка

Прихований текст
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void print(int** ar, int m, int n);
void set(int** ar, int m, int n);
void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int m, n;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> m;
    n = 1;
    int**ar = new int*[m];
    for (int i = 0; i <= m; ++i)
        ar[i] = new int[n++];
    n++;
    set(ar, m, 0);
    print(ar, m, 1);
    system("pause");
}
void print(int** ar, int m, int n) {
    for (int i = 1; i <= m; ++i) {
        for (int j = n++; j <= m; j++)
            cout << setw(5) << ar[i][j];
        cout << "\n";
    }
}
void set(int** ar, int m, int n) {
    for (int i = 1; i <= m; ++i)
        for (int j = n++; j < m + 1; j++)
            ar[i][j] = rand() % 101 - 50;
}

10

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

якщо ввести 3 і менше рядка то все ідеально працює а якщо 4 то може працювати добре а може помилка появитись а при 5 і більше тільки помилка

11

Re: Двовимірний динамічний масив(С++(вийшов за межі масиву))

Parsifal написав:

добре що це підсумкова по двовимірним масивам і більше не буду їх вчити(надіюсь) дальше стрічки підуть

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

#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;

typedef int (*funcPtr)(int const);

int **allocArray2Dtriangle(int const);
void printArray1D(ostream &, int const *const, int const);
void printArray2Dtriangle(ostream &, int const *const *const, int const);
void initArray1D(int *const, int const, const funcPtr);
void initArray2Dtriangle(int *const *const, int const, funcPtr (*const)(int const));

void main() {
    setlocale(LC_ALL, "ukr");
    srand((unsigned int)time(0));
    int rowsCount;
    cout << "Введiть кiлькiсть рядкiв: ";
    cin >> rowsCount;
    int **arr = allocArray2Dtriangle(rowsCount);
    initArray2Dtriangle(arr, rowsCount, [](int const){
        return [](int const) {
            return rand() % 101 - 50;
        };
    });
    printArray2Dtriangle(cout, arr, rowsCount);
    system("pause");
}
int **allocArray2Dtriangle(int const len) {
    int **arr = new int*[len];
    for(int i(0); i < len; ++i)
        arr[i] = new int[i + 1];
    return arr;
}
void printArray1D(ostream &out, int const *const arr, int const len) {
    for(int i(0); i < len; ++i)
        out << setw(5) << arr[i];
}
void printArray2Dtriangle(ostream &out, int const *const *const arr, int const len) {
    for(int i(0); i < len; ++i) {
        printArray1D(out, arr[i], i + 1);
        out << endl;
    }
}
void initArray1D(int *const arr, int const len, const funcPtr initFunc) {
    for(int i(0); i < len; ++i)
        arr[i] = initFunc(i);
}
void initArray2Dtriangle(int *const *const arr, int const len, funcPtr (*const initFunc)(int const)) {
    for(int i(0); i < len; ++i)
        initArray1D(arr[i], i + 1, initFunc(i));
}
Подякували: Parsifal1