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

Тема в разделе "C/C++/C#", создана пользователем victory, 18 дек 2014.

  1. victory

    victory New Member

    Регистрация:
    4 ноя 2014
    Сообщения:
    4
    Симпатии:
    0
    Дан двумерный массив целых чисел размером , где 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:
     
Загрузка...
Похожие Темы - Помогите Пожалуйста Исправить
  1. victory
    Ответов:
    0
    Просмотров:
    789
  2. Ivan3333567
    Ответов:
    2
    Просмотров:
    1.413
  3. limbra
    Ответов:
    3
    Просмотров:
    46
  4. uxbmw3w
    Ответов:
    0
    Просмотров:
    68
  5. GREED
    Ответов:
    1
    Просмотров:
    536

Поделиться этой страницей