Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить есть ли в массиве одинаковые строки 
:(
    Опции темы
relike
Дата 9.12.2013, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



Дан двумерный массив A размера m x n. Определить, есть ли в A одинаковые строки. Кто может помочь?
Вот бред моего производства...
Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int i, j, n, m, k; float **A, *c; bool b = true;
    cout<<"Vvedite kol-vo strok : "; cin>>n;
    cout<<"Vvedite kol-vo stolbcov : "; cin>>m;
    c = new float [m];
    A = new float *[n];
    for(i = 0; i<m; i++){
        A[i] = new float [m];
        }
        
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++){
            cout<<"A["<<i+1<<","<<j+1<<"] = "; cin>>A[i][j];
            }
        }
    for(i = 0; i < n; i++, cout<<"\n"){
        for(j = 0; j < m; j++, cout<<"\t"){
            cout<<A[i][j];
            }
        }
    for(i = 0; i<n; i++){
        for(j = 0; j<m; j++){
            for(k = 0; k < n; k++){
                c[k] = A[i][k];
            }
            if(c[j] == A[i+1][j]) {
            cout<<"\n"<<i<<"stroka ravna "<<i+1<<"stroke";
                }
            else {
                b = false;
                }
        }
    }
    if(!b) cout<<"Odinakovyh strok net.";
    cout<<"\n";
    system("pause");
    return EXIT_SUCCESS;
}



PM MAIL   Вверх
bsa
Дата 9.12.2013, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



А std::string использовать нельзя?
PM   Вверх
feodorv
Дата 9.12.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bsa @  9.12.2013,  21:20 Найти цитируемый пост)
А std::string использовать нельзя?

В каком смысле?


Цитата(relike @  9.12.2013,  20:29 Найти цитируемый пост)
            for(k = 0; k < n; k++){
                c[k] = A[i][k];
            }

А зачем вообще нужен массив c? И почему у него размер m, тогда как ниже будет цикл от 0 до n???
И почему здесь i изменяется от 0 до m, хотя очевидно, что должно быть до n?
Цитата(relike @  9.12.2013,  20:29 Найти цитируемый пост)
    for(i = 0; i<m; i++){
        A[i] = new float [m];
        }




Цитата(relike @  9.12.2013,  20:29 Найти цитируемый пост)
    for(i = 0; i<n; i++){
        for(j = 0; j<m; j++){

Гм. А зачем одновременные циклы по строкам и столбцам???


Цитата(relike @  9.12.2013,  20:29 Найти цитируемый пост)
            if(c[j] == A[i+1][j])

Почему i+1? То есть сравнивается не какая-нибудь строка, а именно следующая за текущей? А при последней итерации цикла (когда i принимает значение n-1) у Вас очевидный выход за пределы массива A[n][...].


А что Вы делаете с переменной b? Почему изначально считается, что есть одинаковые строки, а потом при первом же неудачном сравнении значение переменной сбрасывается в false? Разве она когда-нибудь потом сможет стать true, хотя 


Итого: должно быть 2 цикла, оба по строкам. Первый соответствует строке, которую будем сравнивать, второй - с которой. Чтобы 10 раз не сравнивать одно и то же, второй цикл как раз будет отсчитываться от i+1:
Код
bool b = false;
for( i = 0; i < n; i++)
  for( k = i+1; k < n; i++)
  {
     for( j = 0; j < m; j++) if( A[i][j] != A[k][j] ) break;
     if( j == m ) 
     {
       cout << "Одинаковые строки номер " << i+1 << " и " << k+1 << endl;
       b = true;
    }
  }


Добавлено через 1 минуту и 27 секунд
Да, в условии не сказано же, что элементы массива должны быть именно float. Рекомендую перейти на int smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
relike
Дата 9.12.2013, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



feodorv, спасибо. Только у меня программа вылетает на вводе A[4,1]. В чем может быть проблема?
PM MAIL   Вверх
feodorv
Дата 9.12.2013, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(relike @  9.12.2013,  22:19 Найти цитируемый пост)
Только у меня программа вылетает на вводе A[4,1]. В чем может быть проблема? 

Не знаю. А какие n и m?

Вот это исправлено:
Цитата(relike @  9.12.2013,  20:29 Найти цитируемый пост)
    for(i = 0; i<m; i++){

???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.