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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 20:54   #1
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
По умолчанию В трехмерном массиве найти элементы, встречающиеся однажды

Здравствуйте! Приведу пример для ясности)
Есть массив a[i,j,z], где i,j=2, z=n (n<=4)
a[1,1]=1,2,3,4
a[1,2]=1,2,3
a[2,1]=1,3
a[2,2]=1,5
В нем числа 5 и 4 встречаются всего 1 раз
вот мой код
Код:
for i:=1 to 2 do
  for j:=1 to 2 do
   s:=s+mas[i,j]; {в mas храним n для каждого i и j) 
   for k:=1 to 2 do
     for r:=1 to 2 do
      for z:=1 to mas[k,r] do
      begin
      q:=0; {счетчик, который считает сколько раз мы сравнивали данный элемент с остальными, когда мы прошлись по каждому элементу и не нашли данного - то значит мы нашли искомые элементы (по моему алгоритму)}
      for i:=1 to 2 do
       for j:=1 to 2 do
        for e:=1 to mas[i,j] do
        begin
           if not ((i<>k) and (j<>r)) and (a[i,j,e]=a[k,r,z]) then
           break;
         inc(q);
       {что дальше?}
Подскажите, пожалуйста, как нужно дописать этот код.
Если есть идеи получше, то обязательно напишите
Slap вне форума Ответить с цитированием
Старый 18.08.2011, 20:59   #2
Кодокопатель
 
Регистрация: 15.08.2011
Сообщений: 6
По умолчанию

Объясни подробнее что нужно сделать.
Кодокопатель вне форума Ответить с цитированием
Старый 18.08.2011, 21:13   #3
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Кодокопатель Посмотреть сообщение
Объясни подробнее что нужно сделать.
Ну я же привел пример) В том примере числа 5 и 4 не повторяются в остальных элементах трехмерного массива, в отличие от цифр 1, 2 и 3, которые встречаются в массиве 4,2 и 3 раза соответственно. Нужно найти не повторяющиеся числа. Сложность в том, что размерность массива n (третьего внутри трехмерного) не постоянная. Поэтому для каждой ячейки приходится хранить ее размерность в другом массиве (mas).
Теперь понятно?)
Slap вне форума Ответить с цитированием
Старый 18.08.2011, 21:25   #4
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
По умолчанию

Все, сам уже разобрался. Ну все равно спасибо
Slap вне форума Ответить с цитированием
Старый 18.08.2011, 21:58   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Slap
1) что у Вас за Паскаль? TurboPascal 7.x ?..

2) приведите, пожалуйста, пример объявления данных

3) а почему не решились выложить пример с заполнением массивов тестовыми данными?..

4) зачем Вы считаете длину сумму s:=s+mas[i,j] ?

Алгоритм здесь простой, как топор.
взяли I,J,E-й элемент. вызвали функцию перебора.
В ней перебрали все элементы с 1,1,1 до 2,2,ZZZ, исключая элемент с текущими индексами (I,J,E) - если значение совпало - сразу прерываем цикл, выходим из функции и возвращаем false. Если дошли до конца цикла - возвращаем из функции true
В основном цикле печатаем найденное значение, как уникальное. (при желании тут же можно и индексы напечатать)
примерно так это будет
Код:
type 
  Arr3d = array[1..2,1..2,1..20] of integer;
  ArrMas = array[1..2,1..2] of integer; 

var a : Arr3d;
  mas : ArrMas;
  i,j,e : integer;

function ElementIsUniq(x0,y0,z0 : integer) : boolean;
var x,y,z : integer;
begin
  ElementIsUniq := false;
  for x:=1 to 2 do
    for y:=1 to 2 do
      for z:=1 to mas[x,y] do
        if (x<>x0) or (x<>y0) or (z<>z0) then
          if a[x0,y0,z0] = a[x,y,z] then 
               {не уникальное - выходим}
               Exit;
  {если прошли цикл и не вышли - значит значение уникальное
    возвращаем TRUE}
  ElementIsUniq := true;
end; {конец функции}

begin
  {тут заполнение исходных данных....}
   

  {поиск уникальных значений}
  for i:=1 to 2 do
    for j:=1 to 2 do
      for e:=1 to mas[i,j] do
        if ElementIsUniq(i,j,e) then 
          WriteLn('Found uniq value = ', a[i,j,e], ' with indexes: ',i,j,e);
  readln;
end.

добавлено
значит я зря всё это писал?...

Последний раз редактировалось Serge_Bliznykov; 18.08.2011 в 22:04.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти в массиве отрицательные элементы и уменьшить их вдвое Настя22 Паскаль, Turbo Pascal, PascalABC.NET 1 15.02.2011 07:38
В массиве T(k) найти первый и последний нулевые элементы farrrell Фриланс 4 07.04.2010 20:47
элементы в массиве, встречающиеся трижды anksunamun Фриланс 7 28.01.2010 21:35
Скажите в чем ошибка, как в массиве найти арифметическую прогрессию и вывести элементы на экран? Lodyr Помощь студентам 0 21.12.2009 16:32
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23