22.02.2010, 01:42 | #1 (permalink) |
Member
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
|
Уникальный элемент массива
Я не прошу готового решения. Сам решить хочу, не получается. Как это реализовать ? Получаестя, каждый элемент массива надо сравнить с другими элементами этого массива ? Если он уникален то его вывести. Придумал вот, вставить такой "счетчик", который увеличивается каждый раз если, какой-то отдельный элемент не равен другому. И если значение счетчика, будет равно "количеству элементов в массиве минус один" то, тот конкретный элемент уникален, и его вывести. Прекрасно понимаю, что решение далеко не оптимальное. Но и оно не хочет работать. Код:
const n=10; var a:array[1..n] of integer; p,k,i,j:integer; begin p:=n; for i:=1 to p do begin for j:=2 to p do begin if a[i]<>a[j] then k:=k+1; if k=n-1 then writeln(a[j-1]); end; k:=0; end; |
22.02.2010, 01:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите, в данных обсуждениях может находиться нужная информация Не понимаю как, в Паскале найти второй нечетный элемент двумерного массива Приобрести элемент Пельтье Логический элемент ИЛИ-НЕ |
22.02.2010, 10:04 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
const n=10; var a:array[1..n] of integer; k,i,j:integer; begin for i:=1 to n do begin Write('a[',i:2,']= '); Readln(a[i]); end; for i:=1 to n do begin k:=0; for j:=1 to n do if a[i]<>a[j] then k:=k+1; if k=n-1 then writeln(a[i]); end; readln; end. |
|
22.02.2010, 16:15 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Например, так:
Код:
const n=10; var a:array[1..n] of integer; i,j:integer; b:boolean; begin for i:=1 to n do begin Write('a[',i:2,']= '); Readln(a[i]); end; for i:=1 to n do begin b:=true; for j:=1 to i-1 do if a[i]=a[j] then b:=false; for j:=i+1 to n do if a[i]=a[j] then b:=false; if b then writeln(a[i]); end; Readln; end. |
22.02.2010, 16:28 | #5 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Технически, счетчик остался - суть программы не изменилась.
Вариант такой: отсортировать массив. Тогда, если соседние элементы равны, имеются повторы. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
22.02.2010, 16:56 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Можно, конечно, и так. А это через MaxValue, или можно проще? Но в любом случае - муторное дело. Но если Linka хочет, пусть попробует.
|
22.02.2010, 17:00 | #7 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
В современных реализациях языков имеются готовые массивы сортировщики-сортировка реализуется одной строчкой.
Кроме этого, сортировка имеет меньшую вычислительную сложность, чем двойной перебор, и да по этому поводу есть годный том Кнута. |
22.02.2010, 17:20 | #9 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
Его трехтомник сейчас активно рекомендуют школьникам, конкретнее - тем кто занимается олимпиадами по информатике.
Без знания хотя бы содержания этих книг квалифицированного программиста быть не может. |
23.02.2010, 04:10 | #10 (permalink) |
Member
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
|
Тот же массив, но надо вывести все числа, которые встречаются несколько раз.
Код:
const n=10; var a:array[1..n] of integer; k,i,j:integer; begin for i:=1 to n do begin Write('a[',i:2,']= '); Readln(a[i]); end; for i:=1 to n do begin for j:=1 to n do if a[i]=a[j] then k:=k+1; if k>=2 then writeln(a[i]); k:=0; end; readln; end. З.Ы. А есть в паскале оператор "преждевременного" выхода из цикла ? Или надо использовать GOTO label ? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|