1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем victory, 18 дек 2014.

  1. victory

    victory New Member

    Репутация:
    0
    Регистрация:
    4 ноя 2014
    Сообщения:
    4
    Симпатии:
    0
    Дан двумерный массив целых чисел размером , где m и n – заданные натуральные числа. Если в массиве есть такие две строки, что все элементы одного из них являются делителями всех элементов другого, поменять их местами (при наличии нескольких вариантов, рассматривать первые из найденных строк). Если подобных строк нет, выдать соответствующее сообщение. Воспользоваться динамическими массивами и продемонстрировать работу с указателями.
    Код:
    #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:
     
Загрузка...

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