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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2010, 16:19   #1
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию сравнить 2 массива...

здравствуйте!
есть 2 массива. Найти в них разные числа, которые не совпадают и запихнуть в третий. собственно выходит какая-то муть, то верно, то 0 вылетают. через 2 цикла делал, так вообще бред вышел. что не так делаю?

Код:
var
  i, j, k, min, n: integer;
  a: array[1..10] of integer; //1mas
  b: array[1..10] of integer; //2mas
  c: array[1..10] of integer; //3 mas - rezultata unik chisel
begin
  j := 1;
  randomize;
  for i := 1 to 5 do
    a[i] := random(9);
  for i := 1 to 5 do
    b[i] := random(9);
  for i := 1 to 5 do
    write(a[i]);
  writeln;
  for i := 1 to 5 do
    write(b[i]);
  //
  for i := 1 to 5 do
    if (a[i] <> b[j]) and (a[i] <> b[j + 1]) and (a[i] <> b[j + 2]) and
      (a[i] <> b[j + 3]) and (a[i] <> b[j + 4]) then
    begin
      c[k] := a[i];
      inc(k);
    end
    else if j <> 5 then
      inc(j);
  writeln;
  for i := 1 to 5 do
    write(c[i]);
  writeln;
  //
  min := c[1];
  for i := 1 to 5 do
    if c[i] < min then
      min := c[i];
  writeln('minimalnoe=', min);
  write('press any key');
  Readln;
end.
результат :
1 мас - 03820
2 мас - 07481
3 мас - 20000,
а должно быть - 32

Последний раз редактировалось pobedin; 18.08.2010 в 16:33.
pobedin вне форума Ответить с цитированием
Старый 18.08.2010, 16:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (a[i] <> b[j]) and (a[i] <> b[j + 1]) and (a[i] <> b[j + 2]) and
(a[i] <> b[j + 3]) and (a[i] <> b[j + 4]) then
Это что?
Зачем столько условий? Оставь только (a[i] <> b[j])
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.08.2010, 16:33   #3
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от pobedin Посмотреть сообщение
Найти в них разные числа, которые не совпадают и запихнуть в третий.
А почему запихиваете только из массива a? из массива b уже не надо?
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 18.08.2010, 16:36   #4
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию

нужно только те числа из A, которых нету в массиве B.
а что мне даст одно условие, нужно будет цикл двойной. так что-то не выходит. а так я проверяю 1 число А со всем B, затем наращиваю число А и снова...
pobedin вне форума Ответить с цитированием
Старый 18.08.2010, 16:46   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

У Вас если a[i] не равно всем пяти элементам массива в[j] (в диапазоне j=1..5), то в массиве с будет пять элементов a[i], потом не известно какое значение примет индекс k массива c...
Т.е. изначально нужно инициализировать переменную k...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 18.08.2010 в 16:50.
Grag вне форума Ответить с цитированием
Старый 18.08.2010, 16:51   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нужно только те числа из A, которых нету в массиве B.
Код:
var
  i, j, k, min, n: integer;
  a: array[1..5] of integer; //1mas
  b: array[1..5] of integer; //2mas
  c: array[1..10] of integer; //3 mas - rezultata unik chisel
  bb:boolean;
begin
  j := 1;n:=1;
  randomize;
  for i := 1 to 5 do      a[i] := random(15);
  for i := 1 to 5 do      b[i] := random(15);
  {$o-}
  for i:=1 to 5 do begin  bb:=true;
   for j:=1 to 5 do begin
    if a[j]=b[i] then begin
     bb:=false;break;
    end;
   end;
   if bb then begin
    c[n]:=a[i];inc(n);
   end;
  end;

  { TODO -oUser -cConsole Main : Insert code here }
end.
Так подойдет?
Тут без вывода на экран.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.08.2010, 17:06   #7
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию

Stilet, вот результат...
0101119
5111612
3 мас - 011900
1 есть 2 двух массивах, значит в 3-ем не должно быть... =(
и иногда 1-ый массив больше 2-го - вот этого я совсем не понимаю. может делфи глюкает о_О
pobedin вне форума Ответить с цитированием
Старый 18.08.2010, 23:31   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в алгоритме Стилет была одна опечатка
надо :
Код:
    if a[i]=b[j] then begin

вот код целиком:
Код:
const Nm = 7;
var
  i, j, k, min, n: integer;
  a: array[1..Nm] of integer; //1mas
  b: array[1..Nm] of integer; //2mas
  c: array[1..Nm*2] of integer; //3 mas - rezultata unik chisel
  bb:boolean;
begin
  j := 1;n:=1;
(*  randomize;
  for i := 1 to Nm do a[i] := random(15);
  for i := 1 to Nm do b[i] := random(15);
*)
  a[1] := 0; a[2] := 1; a[3] := 0; a[4] := 1;
  a[5] := 1; a[6] := 1; a[7] := 9;

  b[1] := 5; b[2] := 1; b[3] := 1; b[4] := 1;
  b[5] := 6; b[6] := 1; b[7] := 2;

  {$o-}
  for i:=1 to Nm do begin
   bb:=true;
   for j:=1 to Nm do begin
    if a[i]=b[j] then begin
     bb:=false;break;
    end;
   end;
   if bb then begin
    c[n]:=a[i];inc(n);
   end;
  end;

  Writeln('---- rezultat. massiv C: ----');
  for i:=1 to n-1 do
     Write(c[i]:3);
  WriteLn;
  Readln;

end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2010, 09:03   #9
pobedin
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 105
По умолчанию

понятно. спасибо
pobedin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнить интегралы ai\ekcah^p Общие вопросы C/C++ 4 18.05.2009 12:47
сравнить тексты olimpus Microsoft Office Excel 27 07.11.2008 10:29
Сравнить время BlackOmen PHP 2 23.09.2008 09:04
Сравнить колонки Romuald Microsoft Office Excel 11 22.01.2008 09:28
сравнить 2 строчки oLMeR Общие вопросы Delphi 3 02.11.2007 11:51