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

Не понимаю в чем ошибка. Неправильно считает количество повторений - C++

Восстановить пароль Регистрация
 
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 15:55     Не понимаю в чем ошибка. Неправильно считает количество повторений #1
Вот код. Программа должна считывать 4 числа, и выводить кол-во повторений.
Она выводит, но неправильно, когда 2 повторения выводит 6.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            if (a[i]==a[j]) {++memo;}
        }
        }
    }
    std::cout<<memo;
    getche();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 15:55     Не понимаю в чем ошибка. Неправильно считает количество повторений
Посмотрите здесь:

C++ Наследование, не понимаю в чем ошибка
C++ Наследование\перегрузка, не понимаю в чем ошибка
В чем ошибка, не считает...ответ выдает по нулям(((( C++
C++ не правильно считает сумму в чем ошибка
Неправильно считает. где ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ikol
 Аватар для Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
27.01.2014, 16:01     Не понимаю в чем ошибка. Неправильно считает количество повторений #2
Цитата Сообщение от veles123 Посмотреть сообщение
кол-во повторений.
Повторений чего? Одинаковых чисел в массиве?
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
27.01.2014, 16:04     Не понимаю в чем ошибка. Неправильно считает количество повторений #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
veles123, Если я правильно понял что ты хочешь, то вложенный цикл начинай от i + 1, а не с 0
C++
1
for (int j = i + 1 ; j < 4; ++j)
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
27.01.2014, 16:14     Не понимаю в чем ошибка. Неправильно считает количество повторений #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от veles123 Посмотреть сообщение
C++
1
2
3
for (int i = 0; i < 4; ++i) {
   for (int j = 0; j < 4; ++j) {
      if (a[i]==a[j]) {++memo;}
ты здесь считаешь( сравниваешь ) число само с собой
так при первой итерации
(a[0]==a[0])

решений несколько
первое (не самое лучшее)
сравнивать индексы между собой, если не равны то сравнивать элементы
C++
1
2
3
for (int i = 0; i < 4; ++i) {
      for (int j = 0; j < 4; ++j) {
         if ((i!=j)&&(a[i]==a[j])) {++memo;}
второй подсказал cooller_94,
но немножко расширим
первый цикл должен проходить до предпоследнего элемента( последний не с чем сравнивать)
второй должен начинатся со следующего элемента на который указывает первый цикл
первый цикл указывает на 1 элемент второй начинается со второго
C++
1
2
3
for (int i = 0; i < 3; ++i) {
    for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j]) {++memo;}
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 16:29     Не понимаю в чем ошибка. Неправильно считает количество повторений #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4];
    bool bf;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {++memo;}
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 17:16  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #6
Прошу извинения, но я немного не так выразился.
Нужно что бы выводило кол-во повторяющихся чисел. А не кол-во повторений.

Добавлено через 3 минуты
Прошу прощения, я не так выразился.
Нужно что бы выводилось количество повторяющихся чисел, а не кол-во повторений.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 17:53     Не понимаю в чем ошибка. Неправильно считает количество повторений #7
Хех
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4], b[2];
    bool bf, bf1;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {
                bf1=true;
                for (int z=0; z<memo;z++) bf1= (bf1==true && b[z]!=a[i]); 
                if (bf1) 
                {
                    b[memo]=a[i];
                    ++memo;
                }
            }
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 18:22  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #8
Этот неправильно работает.

Цитата Сообщение от mustimur Посмотреть сообщение
Хех
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <conio.h>
 
int main()
{
    int a[4], b[2];
    bool bf, bf1;
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i];
    }
    int memo=0;
    for (int i = 0; i < 4; ++i) {
            bf=false;
            for (int j = 0; j < i; ++j) if (a[i]==a[j]) bf=true;
        for (int j = i+1; j < 4; ++j) {
            if (a[i]==a[j] && !bf) 
            {
                bf1=true;
                for (int z=0; z<memo;z++) bf1= (bf1==true && b[z]!=a[i]); 
                if (bf1) 
                {
                    b[memo]=a[i];
                    ++memo;
                }
            }
        }
        
    }
    std::cout<<memo;
    std::system ("pause");
    return 0;
}

Я немного подправил свой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
int main()
{
    int a[4][2];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i][1];
    }
    int memo;
    memo=1;
    for (int i = 0; i < 3; ++i) {
 
        for (int j = i+1; j < 4; ++j) {
            if ((a[i][1]==a[j][1])&&(a[j][2]!=1)) {++memo;a[j][2]=1;}
 
        }
    }
 
 
        std::cout<<memo;
    return 0;
}
Не работает только в том случае, если все 4 числа повторяются. Просто зависает.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
27.01.2014, 18:24     Не понимаю в чем ошибка. Неправильно считает количество повторений #9
Цитата Сообщение от veles123 Посмотреть сообщение
{++memo;a[j][2]=1;}
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
int a[4][2];
куда полез, за пределы массива
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 18:28     Не понимаю в чем ошибка. Неправильно считает количество повторений #10
Цитата Сообщение от veles123 Посмотреть сообщение
Этот неправильно работает.
а что не так в нем? я могу два скриншота сделать вроде тестировал!
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 18:31  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #11
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от veles123
{++memo;a[j][2]=1;}
Сообщение от veles123
a[j][2]!=1
Сообщение от veles123
int a[4][2];
куда полез, за пределы массива
Я добавил ещ поле в массиве для проверки, была-ли проверена ячейка. Что-бы не получалось что ячейки будут несколько раз проверяться и в итоге вместо 4-х повторений получалось 7.
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
27.01.2014, 18:33     Не понимаю в чем ошибка. Неправильно считает количество повторений #12
Цитата Сообщение от veles123 Посмотреть сообщение
Я добавил ещ поле в массиве для проверки, была-ли проверена ячейка.
ты не видишь что вылазишь за пределы массива
у тебя две строчки в массиве а ты лезешь в третью

Добавлено через 50 секунд
Цитата Сообщение от veles123 Посмотреть сообщение
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
из за того что вылазишь за массив и портишь переменные цикла
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 18:42  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #13
Цитата Сообщение от mustimur Посмотреть сообщение
а что не так в нем? я могу два скриншота сделать вроде тестировал!
В любом случае показывает что повторенных чисел 1. А если их не, то 0.

Добавлено через 7 минут
j не становится больше чем 2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
int main()
{
    int a[4][2];
    for (int i = 0; i < 4; ++i) {
    std::cin>>a[i][1];
    }
    int memo;
    memo=1;
    for (int i = 0; i < 3; ++i) {
 
        for (int j = i+1; j < 4; ++j) {
            if ((a[i][1]==a[j][1])&&(a[j][2]!=1)) {++memo;a[j][2]=1;}
                }
    }
 
 
        std::cout<<memo;
    return 0;
}
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
27.01.2014, 18:48     Не понимаю в чем ошибка. Неправильно считает количество повторений #14
Цитата Сообщение от veles123 Посмотреть сообщение
j не становится больше чем 2.
внимательно смотри
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]=1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 18:53     Не понимаю в чем ошибка. Неправильно считает количество повторений #15
Цитата Сообщение от veles123 Посмотреть сообщение
В любом случае показывает что повторенных чисел 1. А если их не, то 0.
так объясняйте задачу. я понял так ряд: {1 1 2 3} = повтор. чисел 1; {1 1 1 3} = повтор. чисел 1;{1 1 1 1} = повтор. чисел 1; {3 1 1 3} = повтор. чисел 2; {5 2 1 3} = повтор. чисел 0. или как?
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 18:56  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #16
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от veles123
j не становится больше чем 2.
внимательно смотри
Сообщение от veles123
a[j][2]!=1
Сообщение от veles123
a[j][2]=1
??
Капец, я растерян. Нифига не пойму.
Вроде бы
a[j][2]!=1
это, как бы второе измерение массива что-ли.
Или нет?

Ну там
a[номер ячейки в первой строке] [номер ячейки во второй строке]
Или я не так понимаю?
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
27.01.2014, 18:59     Не понимаю в чем ошибка. Неправильно считает количество повторений #17
Цитата Сообщение от veles123 Посмотреть сообщение
a[номер ячейки в первой строке] [номер ячейки во второй строке]
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 19:08  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #18
Цитата Сообщение от mustimur Посмотреть сообщение
так объясняйте задачу. я понял так ряд: {1 1 2 3} = повтор. чисел 1; {1 1 1 3} = повтор. чисел 1;{1 1 1 1} = повтор. чисел 1; {3 1 1 3} = повтор. чисел 2; {5 2 1 3} = повтор. чисел 0. или как?

Если в строке три единицы, то должно выводить 3. Если в строке две пятерки(или лючое другое число) то должно выводить 2. И т.д.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
Охтыепт. Точно. Отсчет ведь с 0 идет.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 19:09     Не понимаю в чем ошибка. Неправильно считает количество повторений #19
Цитата Сообщение от veles123 Посмотреть сообщение
Прошу извинения, но я немного не так выразился.
Нужно что бы выводило кол-во повторяющихся чисел. А не кол-во повторений.

Добавлено через 3 минуты
Прошу прощения, я не так выразился.
Нужно что бы выводилось количество повторяющихся чисел, а не кол-во повторений.
Так это как понимать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 19:19     Не понимаю в чем ошибка. Неправильно считает количество повторений
Еще ссылки по теме:

не считает сумму ниже побочной диагонали, в чем ошибка? C++
C++ Почему неправильно считает количество повторений каждого элемента матрицы?

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

Или воспользуйтесь поиском по форуму:
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 76
27.01.2014, 19:19  [ТС]     Не понимаю в чем ошибка. Неправильно считает количество повторений #20
Цитата Сообщение от ValeryS Посмотреть сообщение
фиг вам
a[номер ячейки в строке] [номер строки]
у тебя две строки 0 и 1 а ты лезешь в 2, то бишь в третью строку коей у тебя нет
Охтыепт. Точно. Отсчет ведь с 0 идет.

Добавлено через 6 минут
Цитата Сообщение от mustimur Посмотреть сообщение
Так это как понимать?
Если кол-во повторений, то в строке 1 2 1 0, повторение одно.

А если кол-во повторяющихся чисел, то 1 2 1 0, ответ будет два.
Yandex
Объявления
27.01.2014, 19:19     Не понимаю в чем ошибка. Неправильно считает количество повторений
Ответ Создать тему
Опции темы

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