![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
![]()
Здравствуйте!
у меня есть вопрос по поводу массива не могу разобраться.. имеется динамический массив, в котором хранятся фамилии студентов, вся проблема в том, что эти фамилии могут повторяться. Как очистить массив от повторяющихся элементов? Заранее благодарен.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 22.06.2007
Сообщений: 414
|
![]()
Берёшь первую фамилию (i) и перебираешь список от i+1 до конца, встретил одинаковую, удалил... И так далее... Это самый простой способ.
Сложнее: отсортировать (одним из алгоритмов сортировки), потом таким же способом проверять, равер или нет i+1, равен удалил неравен берм следуещий елемент массива, и так до конца.
Нет невыполнимых задач, всё дело времени...
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 103
|
![]()
А почему нельзя проверять на совпадения при добавлении элемента?
|
![]() |
![]() |
![]() |
#4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#5 | |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
![]() Цитата:
я понимаю о чем вы говорите привиду пример как делал потом вывел и все равно получил одинаковые элементы: Здесь читаю файл пока не достигнут конец begin kolmas:=kolmas+1; Выбираю из строки фамилию // Дело в том что строка имеет вид Иванов/Иван/Иванович После парсинга заношу в переменную fam фамилию Иванов После чего проверяю элементы массива for i:=0 to higth(mas) do begin if mas[i] <> fam then begin mas[kolmas] : = fam; end; end; Только после этого в массиве все равно есть одинаковые фамилии Подскажите как это исправить Спасибо.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
|
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 103
|
![]()
У тебя проверка сводится только к сравнению первого элемента массива с добавляемым элементом.
Код:
Последний раз редактировалось AlexandrSid; 22.05.2008 в 15:49. Причина: Намудрил с переменными |
![]() |
![]() |
![]() |
#7 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]() Код:
I'm learning to live...
|
![]() |
![]() |
![]() |
#8 | |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
![]() Цитата:
Спасибо за ответы но для полной ясности объясните пожайлусто почему проверка сводиться к сравнению первого элемента массива с добавляемым элементом ... для будущего ведь я же запустил цикл от 0 до higth(mas) он же должен перебрать все элементы. Может вопрос дурацкий но что-то я не понимаю Спасибо еще раз.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
|
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 103
|
![]()
Смотри ты присваиваешь переменной fram фамилию (Например 'Иванов')
Допустим твой массив mas = ('Петров','Иванов','Сидоров') запускаешь цикл for i:=0 to higth(mas) do begin if mas[i] <> fam then begin 'сравниваешь mas[i] (т.е. mas[0]) которое равно 'Петров' и fam который равен 'Иванов', соответственно они не равны и твоя процедура добавляет fam в массив' mas[kolmas] : = fam 'Но это еще не самое страшно, после этого ты продолжаешь цикл и получается что процедура добавить фалмилию (higth(mas)-количество совпадений) раз. Т.е. фамилию можно добавить только после того как ты проверил все элементы массива на совпадения, если же обнаружено совпадение то цикл необходимо прервать т.к. нет смысла сравнивать остальные элементы массива. if mas[i] = fam then begin b:=False; Break; end; Переменная b в данном случаи служит для определения добавления элемента в массив, если есть совпадения она равна False и элемент не добавляется. Лучше используй код Stilet он более правильно написан, но смысл тот же думаю сам разберешся. Последний раз редактировалось AlexandrSid; 22.05.2008 в 16:37. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 14.12.2007
Сообщений: 34
|
![]() Код:
Надо сначала проверить вхождение, если нашел, то флаг "найдено":=true. Выход из цикла. Если не нашел, то флаг "найдено":=false. Проверяешь флаг, true = > не заносишь, false = > заносишь. PS. Опоздал, блин ![]() Последний раз редактировалось Dimoney; 22.05.2008 в 16:50. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Элементы массива и старшие цифры | logistics | Помощь студентам | 4 | 22.04.2008 00:12 |
Именовать элементы массива не цифрами, а словами. | Air | Общие вопросы Delphi | 15 | 07.03.2008 18:49 |
переписать из массива в линейный двунаправленный список чётные элементы массива | Black_Ak24 | Помощь студентам | 12 | 08.01.2008 00:44 |
Как удалять элементы массива в Паскале? | Антонова Анна | Помощь студентам | 2 | 08.12.2007 17:01 |
Удалить из массива(одномерного) все повторяющиеся числа(Delphi) | Махор | Помощь студентам | 4 | 29.11.2007 23:25 |