Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изминение размера массива 
:(
    Опции темы
alexeikom
Дата 7.12.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Всем привет,
Вопрос у меня такой. Мне дан массив, я должен найти в нем одинаковые элементы, 
и соответственно их ликвидировать. Теперь мне нужно сократить размер массива (так как он уже без дублей).
Как мне это сделать? а то в размере массива надо обязательно указывать константу.
Помогите плиз...прога на си(программку я сделал, только вот с новым размером массива застрял).

Заранее благодарен.
PM MAIL   Вверх
Dmi3ev
Дата 8.12.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



работайте через указатели, в чем проблема?


--------------------

PM MAIL   Вверх
Remiznik
Дата 8.12.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



перепиши в другой масив с меньшим размером !! иначе думаю не получиться ) 
PM MAIL   Вверх
Dmi3ev
Дата 8.12.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

int *p;
p=(int *) malloc (100*(sizeof(int)));

как пример выделение памяти для 100 целых чисел

Добавлено @ 00:10
Цитата

перепиши в другой масив с меньшим размером !! иначе думаю не получиться )  

Remiznik, хорошо, а как задать размер этого массива??? Заранее ведь неизвестно, сколько будет дублей )))

Это сообщение отредактировал(а) Dmi3ev - 8.12.2008, 00:11


--------------------

PM MAIL   Вверх
alexeikom
Дата 8.12.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Цитата

работайте через указатели, в чем проблема?

А можно плиз пример, а то я в танке... smile 
Цитата

перепиши в другой масив с меньшим размером !! иначе думаю не получиться ) 


Вот в этом и проблема. Как его создать, когда его размер зависит от результата. Тоесть у меня был массив из 20 элементов. 4 ушло. Надо создать массив из 16. Так вот эти 16 мне заранее не известны (так-как это зависит от числа дублированных элементов массива).
PM MAIL   Вверх
Remiznik
Дата 8.12.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



Цитата(alexeikom @ 8.12.2008,  00:10)
Вот в этом и проблема. Как его создать, когда его размер зависит от результата. Тоесть у меня был массив из 20 элементов. 4 ушло. Надо создать массив из 16. Так вот эти 16 мне заранее не известны (так-как это зависит от числа дублированных элементов массива).

вот тут и используешь указатели ... когда получиш значение сколько осталось элементов создаёшь новый масив такоко размера и переписываешь туда значения!
PM MAIL   Вверх
Dmi3ev
Дата 8.12.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

int n;
cout<<"Enter n: ";
cin>>n;
int *p=new int [n];

а можно вот так, а обращаться потом вот так:
Код

for (int i=0; i<n; i++)
*(p+i)=1;

должно быть ясно, а вообще можно и почитать немного.




--------------------

PM MAIL   Вверх
alexeikom
Дата 8.12.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



http://forum.vingrad.ru/topic-189118.html
самые первый пример с так называемым динамическим массивом, когда его размер задается не-константой. Такое возможно?

Добавлено через 9 минут и 33 секунды
Вообщем я так понял без указателей никак?
PM MAIL   Вверх
Dmi3ev
Дата 8.12.2008, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Последняя версия стандарта языка Си позволяет создавать автоматические динамические массивы

Тебе же говорят тут русским языком. Ты попробовал? не получилось? => Надо действовать так, как дальше в статье говорится или как я посоветовал, что одно и тоже))

Добавлено через 13 минут и 46 секунд
Цитата

Вообщем я так понял без указателей никак?

мне на ум это пришло срузу))) динамический массив - значит указатели. Это очень удобно, хотя немного мудренно кажется по началу, я Вас прекрасно понимаю))) Но надо не бояться использовать их в таких ситуациях.


--------------------

PM MAIL   Вверх
alexeikom
Дата 8.12.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Цитата

мне на ум это пришло срузу))) динамический массив - значит указатели. Это очень удобно, хотя немного мудренно кажется по началу, я Вас прекрасно понимаю))) Но надо не бояться использовать их в таких ситуациях.

Я и хотел это узнать...с указателями я понял...Просто мы в институте еще указатели не проходили, и я подумал, что может можно обойтись без них...но если нет, то все ок...

Большое спасибо за помощь! smile  
PM MAIL   Вверх
Rickert
Дата 8.12.2008, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Если вы в институте ещё не проходили указатели, а вас попросили написать такую программу, ты вы неверно поняли задание. наверное оно звучало примерно так: "Найти в массиве все одинаковые значения и вывести на экран массив уже без них, т.е. с одной копией каждого числа." В таком случае у вас нет необходимости работать с дин. массивами, всё что вам нужно - это создать два одинаковых по размеру массива, первый - изначальный, а второй - который будет содержать все элементы в одном экземпляре. Очевидно, что второй массив юудет либо равен, либо меньше по размеру первого.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bsa
Дата 8.12.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



А зачем вообще менять размер массива? Кто и где это сказал? Надо лишь переставить элементы так, чтобы массив был непрерывным. А это делается примерно так:
Код
const int size = 100;
int array[size];
int i, j;
//...
//где-то заполняем массив
//...
for(i = 1, j = 1; i < size; ++i) {
   int k;
   if (i != j) // если были дубликаты, то копируем
      array[j] = array[i];
   //ищем дубликаты
   for(k = 0; k < i; ++k)
      if (array[k]) == array[i])
         break;
   if (k == i) //если дубликаты не найдены увеличиваем j
     ++j;
}

PM   Вверх
REZiaMIX
Дата 8.12.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: 1
Всего: 4



Странно , обычно везде кричат , буст , стл. Почему до сих пор никто не предложил использовать контейнеры stl ??? erase - и нету элемента.
Да и удаление дубликатов обойдется в пару строк. Если конечно не стоит четкая задача использовать массивы.


--------------------
user posted image
PM MAIL   Вверх
Dmi3ev
Дата 8.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



REZiaMIX, я, допустим, не знаю, есть ли все эти прелести в си, поэтому и не предлагал использовать контейнеры vector, list и тд


--------------------

PM MAIL   Вверх
bsa
Дата 9.12.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



а я уверен, что их там нет  smile 

REZiaMIX, читай внимательно первый пост - там русским языком написано, каким языком человек пользуется.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.