Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Вставка массивов


Автор: CatGav 6.11.2012, 21:11
Дана матрица размером 5 на 6 и два одномерных массива длинной в 6 символов, Задание вставить одномерные массивы в соответствующие строчки и столбцы матрицы (номера строки и столбца вводятся с клавиатуры) Вот что у меня вышло, помогите доофрмить цикл вставки массивов, а то ерунда выходит.


Код



#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include <time.h>

using namespace std;
int main(array<System::String ^> ^args)
{
   
    int p, q; // случ числа
    int i, j;
    int x1, y1; 
    int n = 5; // для матрицы
    int m = 6;  //  для матрицы 
    int z=6;    // для массивов x y 
              int x[6];  // массив x  
    int y[6];  // массив у
    int a[5][6];
    cout << " Isxodnaya matrica:" << endl;    
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            a[i][j]=rand() % 90 + 10;
            cout << a[i][j] << " ";
        }
        cout << endl;
    }

    cout << " Isxodnii massiv x : ";    
     srand(time(NULL));
    for (int x1 = 0; x1 < z; x1++)
    {
        x[x1]=rand() % 40 + 10;
        cout << x[x1] << " ";
        
    }
    cout <<endl;

    cout << " Isxodnii massiv y : ";    
     srand(time(NULL));
    for (int y1 = 0; y1 < z; y1++)
    {        y[y1]=rand() % 50 + 10;
        cout << y[y1] << " ";
    }
    cout <<endl;

    {
        cout << " vvedite nomer stroki ne bolee 6 ";
        cin >> p;
        if(p<=n+1)
         {    
            for(int i=n; i>=p; i--)
            for(int j=0; j<m; j++)
            a[i][j]=a[i-1][j];
            for(int j=0; j<m; j++)
    //        for (int x1 = 0; x1 < z; x1++)      цикл вставки массива записывается при этих условиях ?
            
            a[p-1][j]=x[x1]; 
            n++;
        
        }
        else cout << " neverno \n";
    }



    {
        cout << " vvedite nomer stoldca ne bolee 7 ";
        cin >> q;
        if(q<=m+1)
            {   
            for(int j=m; j>=q; j--)
            for(int i=0; i<n; i++)            
            a[i][j]=a[i][j-1];
            for(int i=0;i<n;i++) 
    //        for (int y1 = 0; y1 < z; y1++)
            
            a[i][q-1]=y[y1]; 
            m++;
                
         }
         else cout << "neverno\n";
    }
  
    cout << " Rezultat :" << endl;    
    for (int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        cout << a[i][j] << " ";
        cout << endl;
    }

    _getch();
    return 0;
}



Автор: feodorv 7.11.2012, 07:27
В итоге матрица какого размера должна получиться???
По коду я так понял, что 6 на 7: (5+один дополнительный столбец) на (6+одна дополнительная строка).
Но если так, то почему эти манипуляции производятся над матрицей с фиксированным размером 5 на 6:
Цитата(CatGav @  6.11.2012,  22:11 Найти цитируемый пост)
    int a[5][6];

Как в такую матрицу, в которой не предусмотрено место для новых строк и столбцов, можно хоть что-то добавить? Только с выходом за пределы массива.
Следовательно, изначально в матрице нужно было оставить место для вставок:
Код

    int a[6][7];

хотя и делать вид по-началу, что матрица-то 5 на 6.

После очередной вставки размеры матрицы нужно менять: n++ (после вставки столбца) и m++ (после вставки строки), а то опять ерунда выйдет)))

Автор: CatGav 7.11.2012, 18:07
Да матрица должна быть  на выходе размером 6 на 7, теперь в стрчке и столбце  вставляются первые элементы массивавов,  как я понял необходимо вводить условие для строки  for (int x1 = 0; x1 < z; x1++)   , для столбца  for (int y1 = 0; y1 < z; y1++) если да то в как это должно выглядеть.

Автор: feodorv 8.11.2012, 09:19
Цитата(CatGav @  7.11.2012,  19:07 Найти цитируемый пост)
как я понял необходимо вводить условие для строки

Да нет. Вставки как раз по 6 элементов как были, так и остаются.

Мой Вам совет: заполните матрицу не случайными значениями, а просто положительными возрастающими, а вставляемые строки и столбцы - какими-то отрицательными значениями. Тогда при печати матрицы сразу будет видно, куда и как вставились новые элементы:
Код

a[i][j]=i*10+j;
Код

x[x1]=-10*x1;
Код

y[y1]=-y1;

Автор: CatGav 8.11.2012, 15:58
Хмм, можт я что не так понял но вот то что он сейчас выдае при моих условиях заполнениях массов и матрицы. При ваших условиях он вставляет нули в соответствующие строчки и столбцы. 

http://s1.ipicture.ru/uploads/20121108/fRlyf5op.png

Автор: CatGav 8.11.2012, 22:43
С программой разабрался, спасибо за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)