Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2010, 14:39   #1
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию Программа, которая находит в массиве значения, повторяющиеся два и более раз

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

Проблема в том, что мое решение находя повторяющееся значение выводит его на экран один раз а потом дойдя до повторяющегося значения в масиве, снова выводит его на экран. Подскажите как поправить код чтобы повторяющиеся значения выводились только по разу.
Решение:
Код:
#include <iostream>

using namespace std;
int main ()
{

        const int size=10;
	int *mas=new int [size];
	int rep=0;
	int a=0;
	for (int i=0;i<size;i++)
	{
		cout<<"Enter digit: ";
		cin>>mas[i];
	}
	cout<<"\n\n";
	for (int i=0;i<size;i++)
	{
		rep=mas[i];
                a=0;
		for (int j=0;j<size;j++)
		{
			if (rep==mas[j])
				a++;

		}
		if (a>=2)
			cout<<rep<<"\n";
	}
        delete [] mas;
    return NULL;
}
yugik вне форума Ответить с цитированием
Старый 21.04.2010, 15:18   #2
romec1
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 50
По умолчанию

мм.. посмотри вот... может поможет, программа будет выводить сколько единиц, двоек.. и т.д.. у тебя в массиве.. при желании можно переделать под твое задание
#include <iostream>
#include <conio>
#include <iomanip>
using namespace std;
int main ()
{

const int size=10;
int *mas=new int [size];
int mas1[100]={0};
for (int i=0;i<size;i++)
{
cout<<"Enter digit: ";
cin>>mas[i];
}
cout<<"\n\n";
for (int i=0;i<size;i++)
{
++mas1[mas[i]];
}
cout<<"Outputting count of elements\n";
for (int i=0;i<size;i++)
{
cout<<i+1<<setw(15)<<mas1[i]<<" "<<endl;
}
getch();
delete [] mas;
return NULL;
}
я сильно к твоей проге не присматривался, может там continue влепить надо..
Я не волшебник.. я только учусь

Последний раз редактировалось romec1; 21.04.2010 в 15:33.
romec1 вне форума Ответить с цитированием
Старый 21.04.2010, 15:43   #3
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию

Вот немного переработанный вариант, но тоже с проблемой ратотает правильно только если значение повторяеться один раз, если одинаковых значений в массиве больше 2-х то не срабатывает.
Код:
#include <iostream>
using namespace std;

int main ()
{
	setlocale(LC_ALL,"rus");
        const int size=10;
	int *mas=new int [size];
	int *temp=new int [size];
	int rep=0;
	int k=0, a=0;
	for (int i=0;i<size;i++)
	{
		cout<<"Enter digit: ";
		cin>>mas[i];
	}
	cout<<"\n\n";
	for (int i=0;i<size;i++)
	{
		rep=mas[i];
                a=0;
		for (int j=0;j<size;j++)
		{
			if (rep==mas[j])
				a++;
		}
		if (a>=2)
		{
			temp[k]=rep;
			k++;
		}
	}
	
	cout<<"\n\n";
	for (int i=0;i<k/2;i++)
	{
		cout<<temp[i]<<" ";
	}
        delete [] mas;
		delete [] temp;
    return NULL;
}
yugik вне форума Ответить с цитированием
Старый 21.04.2010, 17:01   #4
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Ниже реализация Вашей задачи с помощью динамических массивов.

Код:
#include <iostream>

using namespace std;

const int cArrSize = 10;

int main( void )
{
	int* pNums;
	int* pRepeatedNums;
	bool find;

	pNums			= new int[cArrSize];
	pRepeatedNums	= new int[cArrSize];

	for (int i = 0; i < cArrSize; ++i)
	{
		cout << "Enter number " << (i + 1) << ": ";
		cin >> pNums[i];

		find = false;

		for (int j = 0; j < i; ++j)
			if (pNums[j] == pNums[i])
			{
				++pRepeatedNums[j];
				find = true;
			}

		if (!find)
			pRepeatedNums[i] = 1;
	}

	for (int i = 0; i < cArrSize; ++i)
	{
		if (pRepeatedNums[i] > 1)
			cout << endl << pNums[i] << ": " << pRepeatedNums[i];
	}
		
	delete [] pNums;
	delete [] pRepeatedNums;


	system( "pause" );

	return 0;
}
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Старый 21.04.2010, 17:07   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

А я бы отсортировал массив и потом нашел элементы с одинаковыми соседями - это и будут повторяющиеся значения.
pu4koff вне форума Ответить с цитированием
Старый 21.04.2010, 18:58   #6
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Руслантус Посмотреть сообщение
Ниже реализация Вашей задачи с помощью динамических массивов.
Спасибо огромное, работает на ура! Единственное, вот пытаюсь понять алгоритм решения. Зачем там переменная bool find и какова её роль здесь. Да и получаеться в первом цикле мы вводим цифры в массив и тут же этот массив проверяем, так?
----
Впринципе разобрался, щас еще отладчиком пройдусь пару раз и пойму до конца. Спасибо

Последний раз редактировалось yugik; 21.04.2010 в 19:07.
yugik вне форума Ответить с цитированием
Старый 08.03.2013, 18:14   #7
Boderman
Новичок
Джуниор
 
Аватар для Boderman
 
Регистрация: 08.03.2013
Сообщений: 1
По умолчанию

Ёщё проще:

#include<iostream>
#include <conio.h>
using namespace std;
void main()
{setlocale (LC_ALL,"rus");
const int mas=10;
int st[mas];
for (int i=0;i<mas;i++)
{
cout<<"Ведите елемент массива\n";
cin>>st[i];
}
cout<<"\n\n";
for (int i=0;i<mas;i++)
{

for (int j=i+1;j<mas;j++)
{if (st[i]==st[j])
{cout<<st[i]<<"\n\n";}
}
}
cout<<"\n\n";

getch();

}
Boderman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу которая находит индекс числа в массиве случайных чисел MadNikys Помощь студентам 9 03.03.2010 20:52
Ввести строку, вывести на экран символы, повторяющиеся в строке более 2 раз. bibl2008 Помощь студентам 4 01.03.2009 13:30
программа, которая с точностью определяет значения функции y=ln(1-x),а модуль х<1, АлександрFRONT Паскаль, Turbo Pascal, PascalABC.NET 2 10.12.2008 01:37
программа, которая сохраняет веб страницы раз в час на сайте в определённой папке SeregaKo Общие вопросы Delphi 7 24.07.2008 16:10