Проблема с одномерным массивом.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Я до указателей пока еще не добрался, но они уже рядом. После изучения переделывать буду, как пить дать.
Albor писал(а):Четвёртое, в твоей программе есть большой недостаток, заключающийся в том, что уменьшить размер исходного массива нельзя, размер его фиксированный и где его конец после обработки неизвестно, а поскольку ты в массиве хранишь символы, то не лучше ли обратить взор на С-строки, то есть на массив, заканчивающийся символом '\0'.
Ну не совсем фиксированный.
Есть константа, определящая размер массива (const in ARRAY_SIZE=1;) .
Есть функция, которая заполняет этот массив (причем можно частично заполнить, за этот размер отвечает переменная size в функции удаления повторов): void fill(char a[], int size, int& used).
Посему конец массива после обработки хранится все в переменной size функции del. Насколько я знаю, то при объявлении массива в памяти резервируется место под указанное кол-во элементов, но передается только адрес 1 элемента (a[0]).
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

На счёт назначения переменной size понял, но из приведенного кода это не совсем очевидно. А теперь подумай над вопросом, если при заполнении массива будет добавлен символ ' ' (ты используешь пробел для "затирки", насколько я понял), ведь это реальный символ, такой же как 'a' и 'b', как отработает твоя функция? Она переместит его в конец массива и уменьшит размер на 1. Этого ли ты ожидаешь?
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Albor писал(а):На счёт назначения переменной size понял, но из приведенного кода это не совсем очевидно. А теперь подумай над вопросом, если при заполнении массива будет добавлен символ ' ' (ты используешь пробел для "затирки", насколько я понял), ведь это реальный символ, такой же как 'a' и 'b', как отработает твоя функция? Она переместит его в конец массива и уменьшит размер на 1. Этого ли ты ожидаешь?
Понял о чем речь. У меня функция, которая заполняет массив, пробел не считает. Т.е. пробел можно насильно присвоить, при объявлении массива. Тогда выявится недоработка. Выходит, что маркировка элементов на "убой" не лучший вариант.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Dragon писал(а):Выходит, что маркировка элементов на "убой" не лучший вариант.
Всё верно, маркировать чем-либо не очень хорошо. Завтра, например, дадут задание сделать то же самое, но с массивом целых чисел, чем маркировать в таком случае? Напиши копирование диапазона, как я предлагал выше. То есть логика такая: Берём элемент с индексом 1 и сравниваем с 0-м, не совпадают - переходим к индексу 2 и сравниваем с 0-м и 1-м, а если совпадают, то копируем со смещением: 2й в 1й, 3й во 2й и т.д. в конце --size.
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Albor писал(а):Всё верно, маркировать чем-либо не очень хорошо. Завтра, например, дадут задание сделать то же самое, но с массивом целых чисел, чем маркировать в таком случае? Напиши копирование диапазона, как я предлагал выше. То есть логика такая: Берём элемент с индексом 1 и сравниваем с 0-м, не совпадают - переходим к индексу 2 и сравниваем с 0-м и 1-м, а если совпадают, то копируем со смещением: 2й в 1й, 3й во 2й и т.д. в конце --size.
Спасибо. Идею понял. Проработаю.
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Маркировать можно в любом случае. Для этого создаём ещё один массив с белевым базовым типом и маркируем там. Но маркировать всё-равно плохо. Лучше удалять сразу.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответить