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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 22:45   #1
ArturYukhnevich
 
Аватар для ArturYukhnevich
 
Регистрация: 03.12.2012
Сообщений: 4
По умолчанию C++. Сжатие массива путем отбрасывания повторяющихся элементов.

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

Вот что на данный момент написал(Code::Blocks 12.11 MinGW):

Код:
#include <iostream>
#include <clocale>

using namespace std;

int main()
{
 setlocale(LC_ALL, "");
 int i, j, n;
 bool povt;
 cout << "Введите размерность массива n=";
 cin >> n;
 int *a=new int[n], *b=new int[n];
   for (i=0;i<n;i++) {
        cout << "Элемент массива №" << i+1 << " ";
        cin >> a[i];}
  cout << "\nПолучен массив a = ";
    for (i=0; i<n;i++) cout << a[i] << " ";

    for (i=0;i<n;i++){
     temp=a[i];
       for (j=0;j<n+1;j++){povt=false;
       if (temp == a[j]) povt=true;}
     if (povt==false) b[i]=temp;}
                         cout << "\n";

    for (j=0; j<n;j++) cout << b[j] << " ";
 return 0;
}

Последний раз редактировалось ArturYukhnevich; 12.12.2012 в 23:08.
ArturYukhnevich вне форума Ответить с цитированием
Старый 12.12.2012, 23:31   #2
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Код:
#include <iostream>
#include <clocale>

using namespace std;

void  main()
{
	setlocale(LC_ALL, "");
	int i, j, n, count;
	bool povt;
	cout << "Введите размерность массива n=";
	cin >> n;
	int *a=new int[n], *b=new int[n];
    for (i=0;i<n;i++) 
	{
        cout << "Элемент массива №" << i+1 << " ";
        cin >> a[i];
	}

	cout << "\nПолучен массив a = ";
    for (i=0; i<n;i++) 
		cout << a[i] << " " ;
	count = 0;
	cout << endl;
    for (i=0;i<n;i++)
	{
		povt = false;
		for (j = 0; j <i; j++)
		{
			if (a[i] == a[j])
				povt = true;
		}
		if (!povt) 
		{
			b [count] = a[i];
			count ++;
		}
	}
	for (i = 0; i < count; i++)
		cout << b[i] << " ";
}
Вот, набросал тут. Но если радикально подходить к решению задачи - это не сжатие, ибо изначально мы ввели размерность массива а , и сразу захватили память под массив b , но массив должен быть b <= a, т.е его размер будет известен после прохода массива а.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 12.12.2012, 23:43   #3
ArturYukhnevich
 
Аватар для ArturYukhnevich
 
Регистрация: 03.12.2012
Сообщений: 4
По умолчанию

Просто я как не пробовал никак не получается... вот и решил сделать так:
1) Создать второй массив. (т.к. нужно в конце будет ввести исходный массив и полученный)
2) Записать в него элементы которые не повторяются.
и на этом этапе я остановился... так как они туда никак не записываются=)
оптимизация уже будет потом. после того как разберусь с основным вопросом!
ArturYukhnevich вне форума Ответить с цитированием
Старый 13.12.2012, 02:52   #4
ArturYukhnevich
 
Аватар для ArturYukhnevich
 
Регистрация: 03.12.2012
Сообщений: 4
По умолчанию

Уважаемые модераторы!
Закройте пожалуйста тему, сам во всем разобрался.
ArturYukhnevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти количество повторяющихся элементов массива в C maxwel6064 Помощь студентам 7 16.11.2012 19:33
Найти количество повторяющихся элементов. xEk Помощь студентам 3 14.05.2012 23:08
Спираль! Не решать путем МАССИВА!!! ZHaN_IK Паскаль, Turbo Pascal, PascalABC.NET 1 31.10.2011 19:23
Сжатие массива ramezz Общие вопросы C/C++ 8 23.09.2010 19:07
количество повторяющихся элементов в массиве Андрей.12 Помощь студентам 1 28.01.2010 23:57