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

Ответы 8

  • "задача дурацкая для n > 3, ибо не понятно, что делать:" - если Вам непонятно, то это еще не повод объявлять задачу "дурацкой". На самом деле все понятно для любого целочисленного N, и в частности, для N=3, как предлагается сделать в контрольном решении.
    • Автор:

      giménez
    • 5 лет назад
    • 0
  • а Вы можете ее помочь написать только в С++?
    • Автор:

      bella75
    • 5 лет назад
    • 0
  • Ну и что выводить для N > 3? Ну, допустим, N=9. Равными столбцами являются 1,2,3 и 4,5,6,7 отдельно. В этом случае будет две группы с равными столбцами размером 3 и 4. Оставшиеся два столбца в единственном экземпляре. Можно вывести два числа: 3 и 4. Или можно вывести число столбцов, которые имеют с какими-то другими столбцами идентичность. В этом случае выведется одно число 7.
  • у нас же N=3 а не больше
  • это да)
    • Автор:

      athena14
    • 5 лет назад
    • 0
  • Читайте задание внимательно!!! "Составить программу обработки матрицы размерности NxN. ... Выполнить программу для N=3". Т.е. составить для любого N, а выполнить для N=3. Если бы речь шла только о 3х3, так и писали бы в условии без всяких N.
    • Автор:

      sheldon
    • 5 лет назад
    • 0
  • // PascalABC.NET 3.1, сборка 1250 от 28.05.2016procedure 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 и j2begin  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    endend;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Вводите элементы матрицы построчно, в конце нажимая Enter1: 1 2 22: 3 5 53: 2 2 2*** Принятая матрица ***1 2 2 3 5 5 2 2 2 Количество совпадающих столбцов равно 2
    • Автор:

      dylan18
    • 5 лет назад
    • 0
  • /*задача дурацкая для n > 3, ибо не понятно, что делать:1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать.2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1.Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...)В общем, решил делать как во втором пункте. Ответ в любом случае будет верным.*/#include <iostream>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:";   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:";   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";   return 0;}
    • Автор:

      pipershfz
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years