Форум программистов, компьютерный форум CyberForum.ru

Исправить небольшой код - C++

Восстановить пароль Регистрация
 
RampKiller
4 / 4 / 0
Регистрация: 09.03.2011
Сообщений: 52
15.03.2011, 23:52     Исправить небольшой код #1
В общем никак не получается правильно написать небольшой кусок программы.

Дана матрица nxn.
Нужно сравнить между собой все строки поэлементно, и если элементы не равны, то счётчик count2 увеличить на 1. Вот мой вариант, нужно исправить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int count1=0, count2=0;
       int i, j, k;
    for (i=0; i<n; i++)
    {
        for (k=i+1; k<n; k++)
        {
            for (j=0; j<n; j++)
            {
                if (matrix[i][j]!=matrix[k][j])
                    count1+=1; // если элементы не равны, то счетчик увеличивается на 1
            }
            if (count1==n) // если счетчик равен кол-ву эл-в в строке, то счетчик2 увел-ся на 1
                count2+=1;
            count1=0;
        }
    }
Здесь должно быть так, чтобы сначала 1-я строка сравнивалась со следующими, потом 2-я со следующими и так, пока предпоследняя с последней не сравнится. Помогите исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2011, 23:52     Исправить небольшой код
Посмотрите здесь:

C++ Исправить код
исправить на код С C++
C++ Исправить код
исправить код C++
C++ Исправить код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2011, 23:57     Исправить небольшой код #2
Матрица квадратная? Как задается вторая размерность? Ну предположим, квадратная.
Вот построчное поэлементное сравнивание.
C
1
2
3
4
for (i = 0; i < n - 1; ++i)
  for (j = 0; j < n; ++j)
    if (matrix[i][j] != matrix[i + 1][j])
      ++count2;
RampKiller
4 / 4 / 0
Регистрация: 09.03.2011
Сообщений: 52
16.03.2011, 00:26  [ТС]     Исправить небольшой код #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Матрица квадратная? Как задается вторая размерность? Ну предположим, квадратная.
Вот построчное поэлементное сравнивание.
C
1
2
3
4
for (i = 0; i < n - 1; ++i)
  for (j = 0; j < n; ++j)
    if (matrix[i][j] != matrix[i + 1][j])
      ++count2;
Да, квадратная 5 на 5.

Спасибо, но в вашем коде, сравнивается 0-я строка с 1-й, а потом 1-я со 2-й и так далее.

А нужно, чтобы 0-я с 1-й, потом 0-я со 2-й, 0 - 3, 0 - 4.
Затем, 1-я со 2-й, 1-я с 3-й, 1 - 4.
2 - 3, 2 - 4.
3 - 4.

В этом я и не могу разобраться, поэтому и вводил ещё один цикл с k. Help.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
16.03.2011, 00:37     Исправить небольшой код #4
RampKiller, легко исправить, всего лишь подставь:
C++
1
2
3
4
for (i = 0; i < n - 1; ++i)
  for (j = 0; j < n; ++j)
    if (matrix[1][j] != matrix[i + 1][j])
      ++count2;
RampKiller
4 / 4 / 0
Регистрация: 09.03.2011
Сообщений: 52
16.03.2011, 00:42  [ТС]     Исправить небольшой код #5
Цитата Сообщение от instagib Посмотреть сообщение
RampKiller, легко исправить, всего лишь подставь:
C++
1
2
3
4
for (i = 0; i < n - 1; ++i)
  for (j = 0; j < n; ++j)
    if (matrix[1][j] != matrix[i + 1][j])
      ++count2;
Этот вариант вообще только 1-ю строку с остальными сравнит и всё
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,066
16.03.2011, 00:45     Исправить небольшой код #6
Цитата Сообщение от RampKiller Посмотреть сообщение
for (j=0; j<n; j++)
{
if (matrix[i][j]!=matrix[k][j])
count1+=1; // если элементы не равны, то счетчик увеличивается на 1
}
if (count1==n) // если счетчик равен кол-ву эл-в в строке, то счетчик2 увел-ся на 1
count2+=1;
count1=0;
у тебя получается если все элементы строк не равны друг с другом то счетчик 2 увеличивается
но если даже не равны 2 элемента строки не равны
по этому 3 цикл
C++
1
2
3
4
5
6
7
8
for (j=0; j<n; j++)
                        {
                                if (matrix[i][j]!=matrix[k][j])
                                        {
                                         count2++ // если элементы не равны, то счетчик увеличивается на 1
                                         break;// выход из цикла элементы не равны значит строки не равны нечего крутить
                                         } 
                        }
и первый цикл сделай так
C++
1
 for (i=0; i<n-1; i++)
не зачем ему ходить до последней строки
/*Alexander*/
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
16.03.2011, 00:46     Исправить небольшой код #7
Проверяй) ТОка скажешь правельно иль нет , я сам не проверял, но должно быть правельно)
C++
1
2
3
4
5
for(i=0;i<5;i++)
for(k=i+1;k<5;k++)
for(j=0;j<5;j++)
if(matrix[i][j]!=matrix[k][j])
count1++;
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,066
16.03.2011, 00:52     Исправить небольшой код #8
Цитата Сообщение от RampKiller Посмотреть сообщение
count2
должен показать количество элементов не равных
или количество строк?
RampKiller
4 / 4 / 0
Регистрация: 09.03.2011
Сообщений: 52
16.03.2011, 00:55  [ТС]     Исправить небольшой код #9
Цитата Сообщение от ValeryS Посмотреть сообщение
должен показать количество элементов не равных
или количество строк?
2 строки не равные, если абсолютно все элементы этих строк не равны между собой.

count2 - количество строк, не равных друг другу.

Например, 0-я строка не равна 1-й, значит count2=2 , т.е. 2 строки не равны между собой. Если 0-я будет не равна со 2-й строкой, то count2 будет равен уже 4.
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,066
16.03.2011, 01:08     Исправить небольшой код #10
Цитата Сообщение от RampKiller Посмотреть сообщение
2 строки не равные, если абсолютно все элементы этих строк не равны между собой
странные понятия о равности
т.е
12345
12354
считаются равными??
но ладно если так то в своем примере поправь
count2+=2;
и будет тебе щастье
RampKiller
4 / 4 / 0
Регистрация: 09.03.2011
Сообщений: 52
16.03.2011, 01:09  [ТС]     Исправить небольшой код #11
Цитата Сообщение от ValeryS Посмотреть сообщение
странные понятия о равности
т.е
12345
12354
считаются равными??
но ладно если так то в своем примере поправь
count2+=2;
и будет тебе щастье
Всё правильно я написал
12345
12354
Не равные.

Действительно

C++
1
2
3
4
5
6
7
8
9
10
11
int count1=0, count2=0;
    for (i=0; i<n; i++) 
        for (k=i+1; k<n; k++)
        {
            for (j=0; j<n; j++)
                if (matrix[i][j]!=matrix[k][j])
                    count1+=1;
            if (count1>0)
                count2+=2;
            count1=0;
        }
Правильный вариант.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2011, 01:17     Исправить небольшой код
Еще ссылки по теме:

C++ исправить код
перевести небольшой код с паскаля на с C++
C++ Переделать небольшой код из С в С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,066
16.03.2011, 01:17     Исправить небольшой код #12
Цитата Сообщение от RampKiller Посмотреть сообщение
абсолютно все
Цитата Сообщение от RampKiller Посмотреть сообщение
12345
12354
Не равные.
первые три пары элементов равны между собой
объясни , не понятно
Yandex
Объявления
16.03.2011, 01:17     Исправить небольшой код
Ответ Создать тему
Опции темы

Текущее время: 15:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru