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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 80
Завершенные тесты: 1
#1

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

27.01.2014, 15:55. Просмотров 472. Ответов 19
Метки нет (Все метки)

Вот код. Программа должна считывать 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 15:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не понимаю в чем ошибка. Неправильно считает количество повторений (C++):

Почему неправильно считает количество повторений каждого элемента матрицы? - C++
Почему неправильно считает количество повторений каждого элемента матрицы? Помогите разобраться. #include &quot;stdafx.h&quot; #include...

Неправильно считает. где ошибка? - C++
Была задача: найти сумму минимальных значений строк квадратной матрицы (см. вложение) Считает неправильно. помогите исправить код: ...

в чем ошибка ? не считает y[n] - C++
#include &lt;iostream&gt; using namespace std; int main() { const int n = 3; double sum = 0; double A, L, U, R; double...

Не понимаю в чем ошибка - C++
задача заключается в том, чтобы ввести с клавы либо считать с файла двумерный массив вещественных чисел и вывести их на экран, так же нужно...

Наследование, не понимаю в чем ошибка - C++
Задание из Лафоре, наследование. Даже пример есть, но почему-то не работает: в консоле выводит первые 79 символов s1 и все. VS 2010 class...

не правильно считает сумму в чем ошибка - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; int fak(int K){ int s; for(s=1;K&gt;0;K--) ...

19
Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
27.01.2014, 16:01 #2
Цитата Сообщение от veles123 Посмотреть сообщение
кол-во повторений.
Повторений чего? Одинаковых чисел в массиве?
0
cooller
565 / 533 / 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)
3
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,924
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;}
1
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;
}
1
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 80
Завершенные тесты: 1
27.01.2014, 17:16  [ТС] #6
Прошу извинения, но я немного не так выразился.
Нужно что бы выводило кол-во повторяющихся чисел. А не кол-во повторений.

Добавлено через 3 минуты
Прошу прощения, я не так выразился.
Нужно что бы выводилось количество повторяющихся чисел, а не кол-во повторений.
0
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;
}
0
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 80
Завершенные тесты: 1
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 числа повторяются. Просто зависает.
0
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,924
27.01.2014, 18:24 #9
Цитата Сообщение от veles123 Посмотреть сообщение
{++memo;a[j][2]=1;}
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
int a[4][2];
куда полез, за пределы массива
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 18:28 #10
Цитата Сообщение от veles123 Посмотреть сообщение
Этот неправильно работает.
а что не так в нем? я могу два скриншота сделать вроде тестировал!
0
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 80
Завершенные тесты: 1
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.
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
0
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,924
27.01.2014, 18:33 #12
Цитата Сообщение от veles123 Посмотреть сообщение
Я добавил ещ поле в массиве для проверки, была-ли проверена ячейка.
ты не видишь что вылазишь за пределы массива
у тебя две строчки в массиве а ты лезешь в третью

Добавлено через 50 секунд
Цитата Сообщение от veles123 Посмотреть сообщение
Но теперь вложеный цикл повторяется вечно. только из-за чего о_О
из за того что вылазишь за массив и портишь переменные цикла
0
veles123
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 80
Завершенные тесты: 1
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;
}
0
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,924
27.01.2014, 18:48 #14
Цитата Сообщение от veles123 Посмотреть сообщение
j не становится больше чем 2.
внимательно смотри
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]!=1
Цитата Сообщение от veles123 Посмотреть сообщение
a[j][2]=1
0
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. или как?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 18:53
Привет! Вот еще темы с ответами:

Наследование\перегрузка, не понимаю в чем ошибка - C++
Почему в выделенных местах пишет ошибку про неопределенность? Если оставить наследование только от Counter, то все норм. Пробовал...

В чем ошибка, не считает...ответ выдает по нулям(((( - C++
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; char buf ; char*RUS(const char*text) { CharToOem(text,buf); ...

не считает сумму ниже побочной диагонали, в чем ошибка? - C++
Вот сам код,где ошибка?:( #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &lt;iomanip&gt; double **mass; int i,j,n,sum; using...

С++ неправильно считает - C++
Здраствуйте Вот часть программы: main(){ float a,b,c,d,hx,hy,x,y,f; int n; clrscr(); printf(&quot;\n Введите &quot;); scanf(&quot;%f%f&quot;,...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
27.01.2014, 18:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru