Ошибка в программе(((
Добавлено: 23 окт 2012, 11:15
Нужно добавить в двумерный массив строку или столбец в любое место по выбору пользователя
ДОЛЖНО СМЕЩАТЬ.... А ПОЛУЧАЕТЬСЯ ЧТО УДАЛЯЕТСЯ И ВЫНОСИТСЯ В КОНЕЦ МАССИВА НАБОРОМ ЦИФР... ПОДСКАЖИТЕ ПЛИЗ ГДЕ Я ПРОСЧИТАЛСЯ
[ATTACH]1525[/ATTACH]
Все помогли )))
Теперь код полностью рабочий))
Код: Выделить всё
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void print(int **arr, int nrow, int ncol)
{
for(int i = 0; i < nrow; i++)
{
for(int j = 0; j < ncol; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
}
int main()
{
srand(unsigned (time(NULL)));
int nrow, ncol, n1 = 0, n2 = 0, n3 = 0;
int i, j;
int position;
bool flag = false;
cout << "Enter amount row: ";
cin >> nrow;
cout << endl << "Enter amount column: ";
cin >> ncol;
// Объявляется переменная типа "указатель на указатель на int"
// и выделяется память под массив указателей на строки массива
int **arr = new int*[nrow];
//Цикл выделяет память под каждую строку массива
for (i = 0; i < nrow; i++)
//Каждому элементу массива указателей на строки присваевается адресс начала участка памяти
arr[i] = new int [ncol];
cout << "Fill in array: " << endl << "1. Random" << endl << "2. Manual" << endl << "Make your choice: ";
cin >> n1;
switch(n1)
{
case 1:
for(int i = 0; i < nrow; i++)
for(int j = 0; j < ncol; j++)
arr[i][j] = rand()%100;
cout << endl << "Generated array: " << endl;
print(arr, nrow, ncol);
break;
case 2:
cout << endl << "Enter elements array: " ;
for(int i = 0; i < nrow; i++)
for(int j = 0; j < ncol; j++)
cin >> arr[i][j];
cout << "Your array: " << endl;
print(arr, nrow, ncol);
break;
default :
cout << "Your choice is not correct" << endl;
break;
}
cout << "What is parametr add in array?" << endl << "1. Row" << endl << "2. Column" << endl << "Make your choice: ";
cin >> n2;
if (n2 == 1)
{
int **parr = new int*[nrow + 1];
for (i = 0; i < nrow + 1; i++)
parr[i] = new int [ncol];
cout << "What is position choice for row" << " (max position = " << nrow + 1 <<"): ";
cin >> position;
--position;
for (i = 0; i < nrow + 1; i++)
{
for (j = 0; j < ncol; j++)
{
if (position == i)
{
for(int k = 0; k < ncol; k++)
{
parr[i][k] = 1;
}
flag = true;
}
else
{
parr[i][j] = flag? arr[i-1][j]:arr[i][j];
}
}
}
//вывод на экран нового массива
for (i = 0; i < nrow + 1; i++)
{
for (j = 0; j < ncol; j++)
{
cout<<parr[i][j]<<"\t";
}
cout<<"\n";
}
delete[]parr;
}
// ОШИБКА ГДЕ ТО ВНИЗУ
if (n2 == 2)
{
int **parr = new int*[nrow];
for (i = 0; i < nrow; i++)
parr[i] = new int [ncol + 1];
cout << "What is position choice for column" << " (max position = " << ncol + 1 <<"): ";
cin >> position;
--position;
cout << "Fill in column: " << endl << "1. Random" << endl << "2. Manual" << "Make your choice: ";
cin >> n3;
if (n3 == 1)
{
for (i = 0; i < nrow; i++)
{
flag = false;
for (j = 0; j < ncol + 1; j++)
{
if (position == j && !flag)
{
for(int k = 0; k < nrow; k++)
{
parr[k][j] = 1;
}
flag = false;
}
else
{
parr[i][j] = flag? arr[i][j-1]:arr[i][j];
}
}
}
//вывод на экран нового массива
for (i = 0; i < nrow; i++)
{
for (j = 0; j < ncol + 1; j++)
{
cout<<parr[i][j]<<"\t";
}
cout<<"\n";
}
delete[]parr;
}
}
for (int i = 0; i < nrow; i++)
delete[]arr[i];
delete[]arr;
}
[ATTACH]1525[/ATTACH]
Все помогли )))
Теперь код полностью рабочий))