Страница 1 из 1

Ошибка в программе(((

Добавлено: 23 окт 2012, 11:15
fuzzyduzzy
Нужно добавить в двумерный массив строку или столбец в любое место по выбору пользователя

Код: Выделить всё

#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]

Все помогли )))
Теперь код полностью рабочий))

Re: Ошибка в программе(((

Добавлено: 25 окт 2012, 22:07
Андрей_Казаков
andrey93kz@mail.ru пиши в личку