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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 15:00   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Функция

Всем добрый день.
Возникла проблема с заданием...что то совсем запутался.
Написать функцию, принимающую массив целого типа.
Функция должна искать элементы с одинаковыми значениями и выводить их индексы и значения на экран.

Создать массив целого типа на 50 элементов и заполнить его значениями от 1 до 10.
Вызвать функцию для поиска одинаковых значений.
Код:
#include<iostream>
using namespace std;
void show (int [],int);
const int size=50;

int main()
{
setlocale(LC_ALL,"Russian");
int mas[size];

show(mas,size);


cin.get();
return 0;
}

void show(int arr[],int size)
{
	int arr2[50];
	for(int i=0;i<size;i++)
	{
		arr[i]=rand()%10+1;
	}
	for(int i=0;i<size;i++)
	{
		arr2[i]=0;
	}
		cout<<"Массив имеет такие числа "<<endl;
	for(int i=0;i<size;i++)
	{
		
		if(arr[i]==arr[i])
			arr2[i]=arr[i];
		
		
		cout<<"Индекс "<<i<<"  Число  "<<arr[i]<<endl;
		
	}
	cout<<"\nПовторы имеются в таких индексах и числах  "<<endl<<endl;
	bool change;
	
		do{
			change=false;
			
				for(int i=0;i<size-1;i++)
				{
					if(arr2[i]>arr2[i+1])
					{
						int tmp=arr2[i];
						arr2[i]=arr2[i+1];
						arr2[i+1]=tmp;
						change=true;
					}
				}
		}while(change);
		
	
	

	for(int i=0;i<size;i++)
	{
		
			cout<<"Индекс "<<i<<"  Число "<<arr2[i]<<endl;
	
	}
	
}
revaldo666 вне форума Ответить с цитированием
Старый 09.02.2011, 19:01   #2
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

Короче, все плохо , программа делает не то и не так.

1) (не самое главное). Программа не удовлетворяет поставленным условиям. В задании ясно сказано:

Цитата:
Создать массив целого типа ... и заполнить его значениями ...
Вызвать функцию ...
У вас и инициализация, и счет в одной ф-ии show().
Лечится просто - выносим инициализацию (и, возможно, печать исходного массива) в main()

2) Код

Код:
if(arr[i]==arr[i])
Что за странная проверка?


Код:
do{
			change=false;
			
				for(int i=0;i<size-1;i++)
				{
					if(arr2[i]>arr2[i+1])
					{
						int tmp=arr2[i];
						arr2[i]=arr2[i+1];
						arr2[i+1]=tmp;
						change=true;
					}
				}
		}while(change);
Что здесь происходит? Очень не хватает комментария. Похоже на сортировку пузырьком. Если это на самом деле так, то идея здравая, но а) почему пузырек, а не, скажем qsort() ? б) навсегда теряется связь индекса в исходном массиве и значения.

3) В результате на выходе получаем отсортированный (?) массив значений. А это не то, что требовалось

Есть 2 пути решения

1. В лоб
Код:
for(int i=0; i<size-1; ++i) {
  if( ... /* индекс уже вывели раньше */) continue;
  for(int j=i+1; j<size; ++j) {
    if(arr[i] == arr[j]) {
      if( ... /* индекс i еще не выводился */)
        cout <<"Value: " << arr[i] << "Indexes: " << i;
      cout << j;
    }
  }
}
2. Сортировкой
Заводим массив структур вида
struct { int index, int value };

Заполняем его из входного массив
Сортируем по value
Бежим по массиву и, как только value сменился, выводим группу индексов.

Второй метод лучше по производительности : O(n * log n ) против O (n^^2) у первого
Д_М вне форума Ответить с цитированием
Старый 09.02.2011, 19:21   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Товарищ пишет на C++, так что лучше не qsort, а sort.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция sanya94 Общие вопросы C/C++ 3 24.11.2010 16:32
C++.функция. savva Помощь студентам 8 05.07.2010 22:28
Функция timyr1997 Общие вопросы Delphi 3 05.07.2010 08:58
Функция Get DarkDante Общие вопросы C/C++ 2 26.03.2010 22:23
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50