Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Работа с матрицой


Автор: Be_Happy 5.11.2007, 13:54
Определить номера тех строк матрицы А[N][K],которые совпадают с массивом D[K], номер строки вывести на экран.

Автор: darkart 5.11.2007, 20:04
Код

#include<iostream>
#include<conio.h>
using namespace std;
const int N=3;//количество строк матрицы
const int K=4;//длина строки матрицы  массива
void InputArray(int* Arr)
//ввод массива Arr
{
    for(int i=0;i<K;i++)
        cin>>Arr[i];//ввод очередного элемента массива
}
void PrintArray(int* Arr)
//печать массива Arr
{
    for(int i=0;i<K-1;i++)//для всех элементов, кроме последнего
        cout<<Arr[i]<<" ";//печать элемента и отступ
    cout<<Arr[K-1]<<endl;//печать последнего элемента с переходом на новую строку
}
void InputMatrix(int** Matrix)
//ввод матрицы Matrix
{
    for(int i=0;i<N;i++)//для каждой строки матрицы
        for(int j=0;j<K;j++)//для каждого элемента строки матрицы
            cin>>Matrix[i][j];//ввод очередного элемента строки матрицы
}
void PrintMatrix(int** Matrix)
//печать матрицы Matrix
{
    for(int i=0;i<N;i++)//для каждой строки матрицы
    {
        for(int j=0;j<K-1;j++)//для каждого элемента строки матрицы
            cout<<Matrix[i][j]<<" ";//печать очередного элемента строки матрицы
        cout<<Matrix[i][K-1]<<endl;//печать последнего элемента строки матрицы с переходом на следующую строку
    }
}

bool IsArrayEqualMatrixString(int** Matrix, int* Arr,int iStringNumber)
//функция возвращает совпадает ли iStringNumber строка матрицы Matrix с массивом Arr
{
    int i=0;//счетчик - в начало массива
    while((i<K)&&(Matrix[iStringNumber][i]==Arr[i]))
    //пока не перешли последний элемен строки и очередной элемент строки матриы совпадает с очередным элементом массива
        i++;//увеличение счетчика - переход к следующему элементу
    return (i==K);//если перешли за конец строки(массива) то совпадение
}

int main()
{
    int* Arr;//указатель на массив
    int** Matrix;//указатель на матрицу

    Matrix=new int*[N];//выделение памяти под N указателей на указатель на массив
    for(int i=0;i<N;i++)
        Matrix[i]=new int[K];//выделение памяти под K указателей на массив 
    cout<<"Please enter a matrix["<<N<<"x"<<K<<"]:"<<endl;
    InputMatrix(Matrix);//ввод матрицы

    Arr=new int[K];//выделение памяти под массив
    cout<<"Please enter an array with "<<K<<" elements:"<<endl;
    InputArray(Arr);//ввод массива

    cout<<"Source matrix:"<<endl;
    PrintMatrix(Matrix);//печкть исходной матрицы
    cout<<"Source array:"<<endl;
    PrintArray(Arr);//печать исходного массива
    cout<<"Result:"<<endl;
    for(int i=0;i<N;i++)
        if(IsArrayEqualMatrixString(Matrix,Arr,i))//если i-ая строка матрицы равна массиву
            cout<<i+1<<endl;//выводим номер строки, считая что 0 строка первая

    delete[] Arr;//освобождение памяти

    for(int i=0;i<N;i++)
        delete[] Matrix[i];//освобождение памяти

    delete[] Matrix;//освобождение памяти

    getch();//ожидание ввода
    return 0;
}

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