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

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

Войти
Регистрация
Восстановить пароль
 
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
#1

Массивы. Движение при сравнении значений индекса - C++

06.02.2011, 21:13. Просмотров 666. Ответов 11
Метки нет (Все метки)

Задание: Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран.
Поиском находил задачи, но там либо мне было непонять их, либо через динамические массивы.

Вроде ничего сложного, но чего то не хватает.
Вот основной код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main(){
    const int a_size=8;
    int a[a_size]={1,5,7,2,7,3,5,7};
    for(int i=0;i<a_size;i++){
        if(a[i]==a[i]){
            cout<<""<<a[i];
        }
    }
    cout<<"\n";
}
при выполнении на экран выводится просто значения массива.
Но указав в условии какой индекс сравнивать он выдает правильный результат.
Например:
C++
1
2
3
if(a[2]==a[i]){
            cout<<""<<a[i];
        }
выводит на экран "777", как и положено.
Проблема в том, что я не знаю как сделать так, чтобы он проверял не указанный индекс, а все.


Спасибо за уделенное мне время.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2011, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы. Движение при сравнении значений индекса (C++):

Зацикливание при сравнении строк - C++
Добрый вечер. У меня возникла проблема при сравнивании строк, после сравнивания происходит расчет по циклу и далее по идее должно...

Ошибка при сравнении символов - C++
1) НЕ могу понять в чем ошибка при сравнении символов вот пример одной: Энтропия.cpp(18): error C2446: ==: нет преобразования &quot;const...

Зацикливание при сравнении двоичных чисел - C++
На вход идет текстовый файл с 1 целым числом. Это число нужно перевести в двоичную систему счисления и биты сдвигать вправо до тех...

Проблемы с кодировкой при сравнении строк - C++
Здравствуйте! Мне, нужно сравнить две строки: одну получаю get запросом(на сайте кодировка windows 1251), а вторая указывается...

Ошибка при сравнении типа char - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; int main(int argc, char...

Ошибка при сравнении введённых данных - C++
Я очень долго пытался решить эту трабл но так и не понял даже ее суть( Суть данного компонента в том что есть 2 массива из которых...

11
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2011, 21:28 #2
можно сделать вложенный цикл..
C++
1
2
3
4
5
6
        for(int i=0;i<a_size;i++){
                for(int j=0;j<a_size;j++){
                if(a[i]==a[j]){
                        cout<<""<<a[j];
                }}
        }
что то вроде этого ..
0
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
06.02.2011, 21:37  [ТС] #3
NiRamz, там не понятный результат выводит, так что, думаю, не то. Как я понял, цикл for(j) введен для продвижения правой части условия.
Я только учусь, но, предполагаю что, при введении доп. значения индекса a[j], они будут смешиваться с a[i]. Думаю, что изза этого и не понятный результат.
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2011, 21:38 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main(){
        const int a_size=8;
        int count;
        int a[a_size]={1,5,5,2,5,1,2,7};
        for(int i=0;i<a_size;i++){
            count=0;
                for(int j=0;j<a_size;j++){
                if(a[i]==a[j]){
                    count++;
                    if(count>1){ cout<<""<<a[i];break;}
                }}
                
        }
        cout<<"\n";
    system("pause");
}
попробуйте ..
0
romedal
54 / 54 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
06.02.2011, 21:42 #5
Для альтернативы, я бы сначала отсортировал массив, например функцией qsort :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
qsort(mas,x,sizeof(int),compare); // сдесь x - размер массива, mas - имя масиива.
int compare (const void* a, const void* b) {
 
        int *af = (int*)a;
 
        int *bf = (int*)b;
 
        if((*af)<(*bf)) return -1; 
 
        if((*af)==(*bf)) return 0;
 
        if((*af)>(*bf)) return  1;
        }
0
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
06.02.2011, 21:43  [ТС] #6
romedal, сортировать я еще не умею
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2011, 21:49 #7
heydayнемного поправил..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main(){
        int count;
        int a[]={1,2,1,3,4,5,4};
        for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
            count=0;
                for(int j=0;j<sizeof(a)/sizeof(a[0]);j++){
                if(a[i]==a[j]){
                    count++;
                    if(count>1){ cout<<a[i]<<" ";break;}
                }}
                
        }
        cout<<"\n";
    system("pause");
}
1
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
06.02.2011, 21:53  [ТС] #8
NiRamz, вроде получилось. Сортировку бы добавить, чтобы в ответе цифры распологались рядом.
C++
1
2
3
4
5
6
 count=0;
                for(int j=0;j<a_size;j++){
                if(a[i]==a[j]){
                                        count++;
                                        if(count>1){ cout<<""<<a[i];break;}
                }}
если не затруднит, скажите зачем это ввели.

Добавлено через 1 минуту
NiRamz, все хорошо, только стало еще непонятней
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2011, 21:57 #9
C++
1
2
3
4
5
6
 count=0; // счетчик, который считает сколько раз встречается число
                for(int j=0;j<a_size;j++){ // цикл, который перебирает правое значение
                if(a[i]==a[j]){ // если это равенство верно, в след строке счетчик увеличивается на единицу
                                        count++;
                                        if(count>1){ cout<<""<<a[i];break;} если значение больше единицы, то выводим элемент и выходим из сложенного цикла
                }}
0
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
06.02.2011, 22:01  [ТС] #10
NiRamz, а операция sizeof(), если я правильно понял, недает циклу выходить за пределы размера массива?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
06.02.2011, 22:09 #11
да. sizeof - ф-ция, которая возвращает размер массива в байтах, что бы получить количество элементов массива необходимо разделить на объем, который занимает один элемент в байтах..
C++
1
sizeof(mas)/sizeof(mas[0])
0
heyday
0 / 0 / 0
Регистрация: 05.02.2011
Сообщений: 13
06.02.2011, 22:12  [ТС] #12
Спасибо за помощь.
0
06.02.2011, 22:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2011, 22:12
Привет! Вот еще темы с ответами:

Не верно работает strcmp при сравнении двух слов - C++
Добрый вечер уважаемые программисты! В общем проблема в следующем, надо из файла F1 скопировать все строки в F2 в которых нет повторяющихся...

Не срабатывает условие при сравнении строк типа string - C++
Здравствуйте! Не срабатывает условие if() при сравнении двух строк типа string, использую функцию strcmp() Т.е. если выполнится этот код:...

Ошибка при сравнении элемента динамического массива с числом - C++
Здравствуйте! При попытке сравнения элемента двухмерного динамического массива с числом возникает критическая ошибка в момент выполнения...

Некоректный инкремент переменной цикла for при сравнении элементов массива - C++
Нашёл проблему в коде, но никак не могу догнать, в чём дело. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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