Помогите Пожалуйста Исправить Код

victory

New Member
04.11.2014
4
0
#1
Дан двумерный массив целых чисел размером , где m и n – заданные натуральные числа. Если в массиве есть такие две строки, что все элементы одного из них являются делителями всех элементов другого, поменять их местами (при наличии нескольких вариантов, рассматривать первые из найденных строк). Если подобных строк нет, выдать соответствующее сообщение. Воспользоваться динамическими массивами и продемонстрировать работу с указателями.
C++:
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip> 

using namespace std;

int main()
{
ifstream in("input.txt");
streambuf *cinbuf =cin.rdbuf();
cin.rdbuf(in.rdbuf());

locale::global(locale(""));

int m, n;
cout << "Введите размерность массивов (M и N)" <<endl;
cin >> m >> n;
int *mas = new int[m * n];
int *masAfterEnd = mas + m*n;
cout << "Введите значения массива построчно" <<endl;
for (int *value = mas; value < masAfterEnd; ++value)
{
cin >> *value;
}

cout << "---------------" <<endl;
for (int *value = mas, i = 1; value < masAfterEnd; ++value, ++i)
{
cout << setw(3) << *value;
if (i%m == 0)cout << endl;
}

bool isDivider;
for (int i = 0; i < n; ++i)
{
for (int j = i+1; j < n; ++j)
{
int* row1 = mas + m*i;
int* row2 = mas + m*j;
isDivider = true;
for (int* row1Value = row1, *row2Value = row2; row1Value < (row1 + m) && isDivider; ++row1Value, ++row2Value)
{
isDivider &= *row1Value%*row2Value == 0;
}
if (!isDivider)
{
isDivider = true;
for (int* row1Value = row1, *row2Value = row2; row1Value < (row1 + m) && isDivider; ++row1Value, ++row2Value)
{
isDivider &= *row2Value%*row1Value == 0;
}
}
if (isDivider)
{
// Поменяем местами строки.
for (int* row1Value = row1, *row2Value = row2; row1Value < (row1 + m) && isDivider; ++row1Value, ++row2Value)
{
int temp = *row1Value;
*row1Value = *row2Value;
*row2Value = temp;
}
goto rowDividerBreakLabel;
}
}
}

rowDividerBreakLabel:

if (isDivider)
{
cout << "---------------" <<endl;
for (int *value = mas, i = 1; value < masAfterEnd; ++value, ++i)
{
cout <<setw(3) <<*value;
if (i%m == 0)
cout <<endl;
}
}
else
{
cout << "Делителей не обнаружено" <<endl;
}

system("pause");
return 0;
}
И если можно объясните принцип работы со строками в этой программе.
Спасибо :rolleyes: