IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Поиск максимума, Найти в списке
сообщение
Сообщение #1


Гость






Помогите плз.:
Нужно найти максимальное из чисел встрчающихся в односвязном списке более одного раза.
Мой способ(см ниже) не пашет, что не так? HE-E-E-E-LP мозг закипает :ypr:
Код

buff:=base;
 buff1:=base^.next;
 For i:=1 to n-1
   begin
     while buff1^.next<>nil do
       begin
         if buff^.data=buff1^.data then
           if buff^.data>max then max:=buff^.data;
         buff1:=buff1^.next
       end;
     buff:=buff^.next
   end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






-=Mikka=-,
Немного не так... Вот так должно быть:
max := 0; 
buff := base;
while buff <> nil do begin
count := 0;
p := buff^.next;
while p <> nil do begin
{ ищем повторы элемента buff^.data }
if p^.data = buff^.data then inc(count);
p := p^.next;
end;

{ если есть повторы, то сравниваем элемент buff^.data с текущим максимумом }
if (count > 0) and (buff^.data > max)
then max := buff^.data

buff := buff^.next;
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А как сделать тоже самое в матрице? :p2:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Katrin, пользуйтесь поиском по форуму и загляните вот cюда FAQ Массивы/Матрицы rolleyes.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






klem4, я не думаю что в FAQ что-нибудь подобное есть, потому что невозможно предусмотреть все варианты (сегодня кому-то понадобилось найти максимум в матрице, завтра понадобится найти максимальное из чисел, встречающихся в матрице ровно 3 раза, послезавтра - ...) Вариантов очень много.

-Katrin-, я бы рассматривал матрицу (1 .. M x 1 .. N) как одномерный массив размером 1 .. MxN (что очень просто реализуется директивой Absolute), сортировал бы его по убыванию каким-нибудь из быстрых алгоритмов, и искал первый элемент от начала массива, встречающийся более 1-го раза...

Так по крайней мере (если не пользоваться "пузырьком"), этого можно добиться меньше чем за (M*N)^2 операций, что гарантировано при простом поиске в матрице...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


вот такой вариант можно наверное :

uses
crt;
const
n=3;
m=4;
x:array[1..n,1..m] of integer =
((2,0,2,7),
(4,5,6,23),
(120,7,1,2)
);

var
y:array[1..n*m] of integer;
i,j:integer;
count,temp:integer;
flag:boolean;
Begin

clrscr;

count:=0;

for i:=1 to n do begin
writeln;
writeln;
for j:=1 to m do begin
write(x[i,j]:2,' ');
inc(count);
y[count]:=x[i,j]; //Заполнение массивы элементами матрицы
end;

end;



repeat // Сортировка
flag:=true;
for i:=1 to count-1 do
if not(y[i]>=y[i+1]) then begin
temp:=y[i];
y[i]:=y[i+1];
y[i+1]:=temp;
flag:=false;
end;
until flag;

writeln;

i:=1;

flag:=false;

while(i<=count-1)and not(flag) do // Поиск max элемента, встречающегося >1 раза
if y[i]=y[i+1] then flag:=true
else inc(i);

writeln;

if flag then
writeln('Result = ',y[i])
else writeln('No');


readln;

End.



ps про absolute не нашел как делать, по этому вручную заполнил массив.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Можно... Только вместо этого:
   count:=0;

for i:=1 to n do begin
writeln;
writeln;
for j:=1 to m do begin
write(x[i,j]:2,' ');
inc(count);
y[count]:=x[i,j]; //Заполнение массивы элементами матрицы
end;

end;

я бы сделал так:
type arrType = array[1 .. m*n] of integer;
var
y:arrType absolute x; { не правда ли, проще? }

и (читай внимательнее мое сообщение ;) ) не использовал бы "пузырек", лучше что-нибудь более быстрое...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


конечно проще, я же говорю не зал я как absolute делать ;)
Ну а сортировку какую угодно можно зафигачить. smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.11.2025 11:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name