Пример программы на С++ добавления строки или столбца двумерной матрицы

Задачи Олимпиады для языка C

Задача. Написать программу, которая осуществляет добавление строки или столбца в любое место двумерной матрицы по выбору пользователя.

Решение с использованием языка CPP:

/* 
 * File:   hw_lessons15_1.cpp
 * Author: darkfire
 *
 * Created on October 6, 2010, 9:33 PM
 */
 
#include <stdlib.h>
#include <iostream>
 
/* Написать программу, которая осуществляет добавление
строки или столбца в любое место двумерной матрицы
по выбору пользователя.
*/
 
/*
 вывести все в отдельные функции
 */
using namespace std;
 
int main(int argc, char** argv) {
 	int i, i2, j, j2;
        bool strnew;
 
	 // Переменные для описания характеристик массивов.
	 int m1 = 5, m2 = 6;
 
	 int **pArr = new int*[m1];
	 for (i = 0; i < m1; i++)
		pArr[i] = new int[m2];
 
         //заполнение нулями и показ на экран
	 for (i = 0; i < m1; i++)
         {
             for (j = 0; j < m2; j++)
             {
              pArr[i][j]=5;
              cout<<pArr[i][j]<<"\t";
             }
             cout<<"\n";
 
         }
         //пользовательский ввод
         int rc, pos;
         cout<<"Enter 0 -row or 1 -column:";
	 cin>>rc;
	 cout<<"Enter position:";
	 cin>>pos;
         //функция добавления столбца
         //1 -нужно создать новый массив с кол-вом столбов на единицу больше m2+1
         //2 -скопировать данные из первого массива и в новый столбец добавить единицы
         if (rc == 1)
         {
             int **pArrNew = new int*[m1];
             for (i = 0; i < m1; i++) pArrNew[i] = new int[m2+1];
 
             for (i=0,i2=0; i < m1; i++,i2++)
             {
                 for (j=0,j2=0; j2<m2+1; j++,j2++)
                 {pArrNew[i2][j2]=pArr[i][j];
 
                      if (j == pos)
                      {
                          for (int k=0;k<m1;k++) pArrNew[k][pos]=1;
                          j--;
 
                     }else pArrNew[i2][j2]=pArr[i][j];
                 }
             }
             //вывод на экран нового массива
             for (i = 0; i < m1; i++)
             {
                 for (j = 0; j < m2+1; j++)
                 {
                     cout<<pArrNew[i][j]<<"\t";
                 }
                 cout<<"\n";
             }
             //Последовательное уничтожение двумерного массива
             for (i = 0; i < m1; i++) delete[]pArrNew[i];
             delete[]pArrNew;
         }
         //функция добавления строки
         //1 -нужно создать новый массив с кол-вом строк на единицу больше m1+1
         //2 -скопировать данные из первого массива и в новую строку добавить единицы
         if (rc == 0)
         {
             int **pArrNew = new int*[m1+1];
             for (i = 0; i < m1+1; i++) pArrNew[i] = new int[m2];
             //копируем, заполняем новый массив данными
             for (i=0,i2=0; i < m1; i++,i2++)
             {
                 for (j=0,j2=0; j2<m2+1; j++,j2++)
                 {
                     if (i==pos && strnew)
                      {
                          for (int k=0;k<m1+1;k++) pArrNew[pos][k]=1;
                                  cout<<"i= "<<i<<"\n";
                                  cout<<"j= "<<j<<"\n";
 
                                  strnew=false;
                                  i--;
                                  break;
 
                     }else pArrNew[i2][j2]=pArr[i][j];
                 }
             }
             //вывод на экран нового массива
             for (i = 0; i < m1+1; i++)
             {
                 for (j = 0; j < m2; j++)
                 {
                     cout<<pArrNew[i][j]<<"\t";
                 }
                 cout<<"\n";
             }
             //Последовательное уничтожение двумерного массива
             for (i = 0; i < m1; i++) delete[]pArrNew[i];
             delete[]pArrNew;
         }
 
         //Последовательное уничтожение двумерного массива
	 for (i = 0; i < m1; i++)
		delete[]pArr[i];
	 delete[]pArr;
 
 
    return (EXIT_SUCCESS);
}