Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2016, 08:58   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Убрать из массива повторяющиеся элементы

В заданной матрице V найти максимальное из чисел, встречающееся более одного раза.
Исходную матрицу вывести в общепринятом виде.
Повторяющиеся элементы матрицы вывести в виде строки. Результат вывести в произвольной форме.


Правильно выводит повторяющиеся элементы, но если в массиве их встречается более 2х раз происходит вот что: http://prntscr.com/absef3

Как можно очистить массив от повторов? Есть функция наподобие unique из matlab?
Можно ли как-то поправить мой алгоритм, чтобы таких ошибок не было?

Код:
program MaxMat;
var i,j,i2,j2,mx: integer;
type mas=array [0..100] of real;
type mat=array [0..5,0..5] of real;
var M0:mas;
var V:mat;

//Ввод матрицы
begin
for i:=0 to 5 do
begin
for j:=0 to 5 do
begin
V[i,j]:=random(100);
end;
end;

//Вывод исходной матрицы
writeln('Исходная матрица:');
writeln;
mx:=0;
for i:=0 to 5 do
begin
for j:=0 to 5 do
begin
write(V[i,j],' ');

//Запись повторяющихся элементов в одномерный массив
for i2:=0 to i-1 do
begin
for j2:=0 to j-1 do
begin
if (V[i,j]=V[i2,j2]) then
begin 
M0[mx]:=V[i,j];
mx:=mx+1;
end;
end;
end;


end;
writeln;
end;
writeln;

//Вывод элементов матрицы М0
writeln('Повторяющиеся элементы:');
writeln;
for i:=0 to mx-1 do
write(M0[i],' ');
writeln;
writeln;


end.
jirtreck вне форума Ответить с цитированием
Старый 07.03.2016, 15:31   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,881
По умолчанию

Код:
if (V[i,j]=V[i2,j2]) then
begin 
// цикл по всему массиву М0
  for my := 0 to mx do
  begin
    // если дошли до конца цикла
    if my = mx then 
    // значит дубль не найден - запомним значение
    begin
      M0[mx]:=V[i,j];
      mx:=mx+1;
    end
    else
    // иначе идя по циклу прерываем его при дубле
    if M0[my] = V[i,j] then
      Break;
  end;      
end;
Примерно так
phomm вне форума Ответить с цитированием
Старый 08.03.2016, 02:10   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию



Ввел новую переменную и заменил мою конструкцию если.
jirtreck вне форума Ответить с цитированием
Старый 08.03.2016, 10:18   #4
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Представить матрицу в виде массива (мысленно - только преобразованием индексов), отсортировать по возрастанию (или убыванию). А дальше искать в "массиве" максимальное число, у которого сосед равен ему же.
FPaul вне форума Ответить с цитированием
Старый 12.03.2016, 08:33   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
var i,j,i2,j2,i3,mx: integer;
type mas=array [0..100] of real;
type mat=array [0..5,0..5] of real;
var M0:mas;
var V:mat;
    d:boolean;
begin
   for i:=0 to 5 do
   begin
      for j:=0 to 5 do
      begin
         V[i,j]:=random(100);
      end;
   end;

   writeln;
   mx:=0;
   for i:=0 to 5 do
   begin
      for j:=0 to 5 do
      begin
         write(V[i,j]:2:0,' ');
         
         for i2:=0 to 5 do
         begin
            for j2:=0 to 5 do
            begin
               if (V[i,j]=V[i2,j2]) and (i<>i2) and (j<>j2) then
               begin
                  d:=false;
                  For i3:=0 to mx-1 do
                  If M0[i3]=V[i,j] then
                  begin
                     d:=true;
                     Break;
                  end;
                  If not d then
                  begin
                     M0[mx]:=V[i,j];
                     mx:=mx+1;
                  end;
               end;
            end;
         end;

      end;
      writeln;
   end;
   writeln;

   writeln;
   for i:=0 to mx-1 do
      write(M0[i]:2:0,' ');
   writeln;
   writeln;
   readln;
end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 12.03.2016, 17:48   #6
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Работает, благодарю за помощь!

Правда, алгоритм в коде не до конца понял, буду разбираться.

Нету способа избавить от повторов уже имеющийся массив? Вот к примеру: дан массив 12314551, просят избавить его от повторяющихся цифр, чтобы осталась только одна из них, как это сделать? Порядок вывода неважен.

Последний раз редактировалось jirtreck; 12.03.2016 в 17:50.
jirtreck вне форума Ответить с цитированием
Старый 12.03.2016, 18:10   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
var i,j:integer;
    s:string;
    d:boolean;
begin
   Write('s = ');Readln(s);
   Writeln;
   Write('s1 = ');
   For i:=1 to Length(s) do
   begin
      d:=true;
      For j:=1 to i-1 do
         If s[i]=s[j] then
            d:=false;
      If d then
         Write(s[i]);
   end;
   Writeln;
   Readln;
end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 13.03.2016, 02:42   #8
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Про перевод в string не подумал, хотя раньше так делал в формах. Спасибо
jirtreck вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти в массиве повторяющиеся элементы и записать только уникальные элементы в новый массив из первого массива REztor C# (си шарп) 0 20.06.2015 16:55
Составить программу ,позволяющую выяснить,имеются ли в столбцах двумерного массива a(n,m) повторяющиеся элементы. Swetic Помощь студентам 0 24.05.2013 10:35
Сформировать новый массив, содержащий повторяющиеся элементы массива A. Элементы в новом массиве не повторяются(Pascal) mad_putin Помощь студентам 0 13.12.2012 00:09
Повторяющиеся элементы одномерного массива, чистый СИ Immoralist Помощь студентам 1 11.05.2012 12:49
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31