Составить программу обработки матрицы размерности NxN.Ввод,вывод матрицы и оформить в виде процедур или функций. Выполнить программу для N=3. Определить имеются ли равные столбцы в матрице(если да то сколько)

Составить программу обработки матрицы размерности NxN.Ввод,вывод матрицы и оформить в виде процедур или функций. Выполнить программу для N=3. Определить имеются ли равные столбцы в матрице(если да то сколько)
Гость
Ответ(ы) на вопрос:
Гость
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 procedure MatInput(a:array[,] of integer); begin   Writeln('Вводите элементы матрицы построчно, в конце нажимая Enter');   for var i:=0 to Length(a,0)-1 do begin     Write(i+1,': ');     for var j:=0 to Length(a,1)-1 do Read(a[i,j]);     end end; procedure MatPrint(a:array[,] of integer); begin   for var i:=0 to Length(a,0)-1 do begin     for var j:=0 to Length(a,1)-1 do Print(a[i,j]);     Writeln     end end; function IsEqual(a:array[,] of integer; j1,j2:integer;   flag:array of boolean):boolean; // равны ли столбцы с индексами j1 и j2 begin   if flag[j2]=False then begin     Result:=True;     for var i:=0 to Length(a,0)-1 do       if a[i,j1]<>a[i,j2] then begin Result:=False; Break end;     flag[j2]:=Result     end end; begin   var n:=ReadInteger('Задайте число строк (столбцов) матрицы:');   var a:array[,] of integer;   var m:=ArrFill(n,False);   SetLength(a,n,n);   MatInput(a);   Writeln('*** Принятая матрица ***');   MatPrint(a);   var k:=1;   for var i:=0 to n-2 do     for var j:=i+1 to n-1 do       if IsEqual(a,i,j,m) then Inc(k);   if k>1 then Writeln('Количество совпадающих столбцов равно ',k)   else Writeln('нет совпадающих столбцов') end. Тестовое решение Задайте число строк (столбцов) матрицы: 3 Вводите элементы матрицы построчно, в конце нажимая Enter 1: 1 2 2 2: 3 5 5 3: 2 2 2 *** Принятая матрица *** 1 2 2 3 5 5 2 2 2 Количество совпадающих столбцов равно 2
Гость
/*задача дурацкая для n > 3, ибо не понятно, что делать: 1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать. 2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему 3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1. Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...) В общем, решил делать как во втором пункте. Ответ в любом случае будет верным.*/ #include using namespace std; int n, result = 0; int **ar;//указатель на указатель для создания динамического двумерного массива bool *Flag;//указатель на первый элемент массива флагов void create(int n)//создание динамического массива {    ar = new int*[n];    for (int i = 0; i < n; i++)       ar[i] = new int[n];    Flag = new bool[n];    for (int i = 0; i < n; i++)       Flag[i] = false; } void inp(int n) //ввод элементов массива {    cout << "Input rows of matrix:\n";    for (int i = 0; i < n; i++)    {       cout << i + 1 << ": ";       for (int j = 0; j < n; j++)          cin >> ar[i][j];    } } void outp(int n) //вывод элементов массива {    cout << "Elements of matrix:\n";    for (int i = 0; i < n; i++)    {       for (int j = 0; j < n; j++)          cout << ar[i][j] << " ";       cout << endl;    } } bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов {    bool res = true;    for (int i = 0; i < n; i++)    {       if (ar[i][j1] != ar[i][j2])       {          res = false;          break;       }    }    if (res)//если столбцы равны     Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/    return res; } void calculate(int n)//считаем количество совпадающих столбцов {    int k = 1;    for (int j1 = 0; j1 < n; j1++)     if (!Flag[j1])     {       k = 1;       for (int j2 = j1 + 1; j2 < n; j2++)        if (!Flag[j2] && isEqual(n, j1, j2))           k++;       if (k > 1)//имеется k одинаковых стобцов по типу столбца j1          result += k;//плюсует к итоговому результату     } } int main(){    cout << "Input n: ";    cin >> n;    create(n);    inp(n);//ввод массива    outp(n);//вывод массива    calculate(n);//расчет того, что требуется    if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/       cout << "The number of columns, coinciding with at least one other column, is " << result << endl;    else //все столбцы разные       cout << "There is no matching columns\n";    return 0; }
Не нашли ответ?
Ответить на вопрос
Похожие вопросы