Тема: Реалізуйте меню. Помилка в функції add__pos (С++)
Попередня назва: допоможіть(С++)
Реалізуйте меню.
Написати функцію, яка:
Створює двовимірний динамічний масив.
Заповнює масив випадковими числами.
Виводить масив на екран.
Добавляє рядок в кінець масиву.
Добавляє рядок напочаток масиву.
Добавляє рядок у вказану позицію.
Добавляє декілька рядків починаючи зі вказаної позиції.
Видаляє рядок зкінця масиву.
Видаляє рядок з початку масиву.
Видаляє двовимірний масив.
ось мій код
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
void func(int**&ar, int m, int n);
void set(int** ar, int m, int n);
void print(int** ar, int m, int n);
void add_end(int** &ar, int &m, int n);
void add_p(int** &ar, int &m, int n);
void add_pos(int** &ar, int &m, int n, int pos);
void add__pos(int** &ar, int &m, int n, int pos, int num);
void del_end(int** &ar, int &m, int n);
void del_p(int** &ar, int &m, int n);
void delet(int** ar, int &m, int &n);
void main() {
setlocale(LC_ALL, "ru");
srand(time(0));
int m, n, choice, pos, num;
cout << "Введiть кiлькiсть рядкiв: ";
cin >> m;
cout << "Введiть кiлькiсть стовпцiв: ";
cin >> n;
int** ar = nullptr;
func(ar, m, n);
set(ar, m, n);
print(ar, m, n);
cout << "1 - створити двовимiрний масив \n2 - заповнити масив \n3 - вивести масив на екран \n4 - добавити рядок в кiнець масиву \n5 - добавити рядок на початок масиву \n6 - добавити рядок в вибрану позицiю \n7 - добавити декiлька рядкiв в вибрану позицiю \n8 - видалити рядок з кiнця масиву \n9 - видалити рядок з початку масиву \n10 - видалити двовимiрний масив \n0 - вийти \nВведiть вибiр:";
cin >> choice;
for (; choice ;) {
switch (choice) {
case 1:
func(ar, m, n);
break;
case 2:
set(ar, m, n);
break;
case 3:
print(ar, m, n);
break;
case 4:
add_end(ar, m, n);
break;
case 5:
add_p(ar, m, n);
break;
case 6:
cout << "Введiть позицiю: ";
cin >> pos;
add_pos(ar, m, n, pos);
break;
case 7:
cout << "Введiть позицiю: ";
cin >> pos;
cout << "Введiть кiлькiсть: ";
cin >> num;
add__pos(ar, m, n, pos, num);
break;
case 8:
del_end(ar, m, n);
break;
case 9:
del_p(ar, m, n);
break;
case 10:
delet(ar, m, n);
break;
}
cout << "1 - створити двовимiрний масив \n2 - заповнити масив \n3 - вивести масив на екран \n4 - добавити рядок в кiнець масиву \n5 - добавити рядок на початок масиву \n6 - добавити рядок в вибрану позицiю \n7 - добавити декiлька рядкiв в вибрану позицiю \n8 - видалити рядок з кiнця масиву \n9 - видалити рядок з початку масиву \n10 - видалити двовимiрний масив \n0 - вийти \nВведiть вибiр:";
cin >> choice;
}
system("pause");
}
void add__pos(int** &ar, int &m, int n, int pos, int num) {
int** p = new int*[m + num];
for (int i = 0; i < pos; i++) {
p[i] = ar[i];
}
for (int i = pos + num; i <= m + num; i++) {
p[i] = ar[i - 1];
}
for (int i = pos; i < pos + num; i++) {
p[i] = new int[n];
for (int j = 0; j < n; j++) {
p[i][j] = rand() % 101 - 50;
}
}
delete[]ar;
ar = p;
m += num;
}
void add_pos(int** &ar, int &m, int n, int pos) {
int** p = new int*[m + 1];
p[pos] = new int[n];
for (int i = 0; i < n; i++) {
p[pos][i] = rand() % 101 - 50;
}
for (int i = 0; i < pos; i++) {
p[i] = ar[i];
}
for (int i = pos + 1; i <= m; i++) {
p[i] = ar[i - 1];
}
delete[]ar;
ar = p;
m++;
}
void del_p(int** &ar, int &m, int n) {
m--;
int** p = new int*[m];
for (int i = 0; i < m; i++) {
p[i] = ar[i + 1];
}
delete[]ar;
ar = p;
}
void add_p(int** &ar, int &m, int n) {
int** p = new int*[m + 1];
p[0] = new int[n];
for (int i = 0; i < n; i++) {
p[0][i] = rand() % 101 - 50;
}
for (int i = 1; i <= m; i++) {
p[i] = ar[i - 1];
}
delete[]ar;
ar = p;
m++;
}
void del_end(int** &ar, int &m, int n) {
m--;
int** p = new int*[m];
for (int i = 0; i < m; i++) {
p[i] = ar[i];
}
delete[]ar;
ar = p;
}
void add_end(int** &ar, int &m, int n) {
int** p = new int*[m + 1];
for (int i = 0; i < m; i++) {
p[i] = ar[i];
}
p[m] = new int[n];
for (int i = 0; i < n; i++) {
p[m][i] = rand() % 101 - 50;
}
delete[]ar;
ar = p;
m++;
}
void delet(int** ar, int &m, int &n) {
for (int i = 0; i < m; i++) {
delete[] ar[i];
}
delete[] ar;
m = n = 0;
ar = nullptr;
}
void print(int** ar, int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; 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 = 0; j < n; j++) {
ar[i][j] = rand() % 101 - 50;
}
}
}
void func(int**&ar, int m, int n) {
ar = new int*[m];
for (int i = 0; i < m; i++) {
ar[i] = new int[n];
}
}
в Добавляє декілька рядків починаючи зі вказаної позиції.
коли добавляє декілька то вибиває помилка коли 1 то працює нормально допоможіть вирішити цю проблему,ось код цієї функції(якщо комусь лінь шукати в цілому коді)
void add__pos(int** &ar, int &m, int n, int pos, int num) {
int** p = new int*[m + num];
for (int i = 0; i < pos; i++) {
p[i] = ar[i];
}
for (int i = pos + num; i <= m + num; i++) {
p[i] = ar[i - 1];
}
for (int i = pos; i < pos + num; i++) {
p[i] = new int[n];
for (int j = 0; j < n; j++) {
p[i][j] = rand() % 101 - 50;
}
}
delete[]ar;
ar = p;
m += num;
}