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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2015, 21:14   #1
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию Найти число в массиве.

Здравствуйте уважаемые форумчанины. Хочу узнать, есть ли какой нибудь метод, функция или процедура для того чтобы определить, есть ли заданной число среди элементов массива?
Например, у меня есть число 5 и массив из 10 элементов. Хочу узнать имеет ли какой нибудь из элементов значение 5.
ЦИКЛ НЕ ИСПОЛЬЗОВАТЬ!!!
За ранее спасибо.
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 24.11.2015, 21:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Если не цикл то кот
То-есть рекурсия...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2015, 21:51   #3
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию

Короче, вот задача, которого нужно решать:
Даны два неупорядоченных набора целых чисел (может быть, с повторениями). Выдать без повторений в порядке возрастания все те числа, которые встречаются в обоих наборах.

Я сделал, но код получилась слишком большой для такова задачка. А хочется сделать по проще.

Код:
var masM, MasN, MasX: array of integer;
    m,n,i,j,h,x,y:integer;
begin
    read(n,m);
    setlength(MasN,n);
    for i:=0 to n-1 do
    read(MasN[i]);    
    setlength(MasM,m);
    for i:=0 to m-1 do
    read(MasM[i]);    
    for i:=0 to n-1 do
    begin
      x:=MasN[i];
      for j:=0 to m-1 do
      begin
        if MasM[j]<>x then continue;
         if y=0 then
          begin         
              inc(y);
              setlength(MasX,y);
              MasX[y-1]:=x;
          end else
              begin
                for h:=0 to y-1 do
                if Masx[h]=x then break else
                if h=y-1 then
                 begin         
                    inc(y);
                    setlength(MasX,y);
                    MasX[y-1]:=x;
                 end
              end;
      end;         
    end;
    for i:=0 to y-1 do
      for j:=i to y-1 do
      if masx[j]<masx[i] then 
          begin
            x:=masx[i];
            masx[i]:=masx[j];
            masx[j]:=x;
          end;    
    for i:=0 to y-1 do
    write(MasX[i],' ');    
end.
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 25.11.2015, 10:28   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

С массивами длинный код + циклы
Код:
uses crt;
const n=10;m=15;
var a,b,c:array[1..n+m] of byte;
    l    :byte;
procedure readdata;
var i,j:byte;
begin
randomize;
for i:=1 to n+m do
  begin
     if i<=n then a[i]:=random(21);
     if i<=m then b[i]:=random(21);
  end;
end;
procedure outdata;
var i:byte;
begin
write('A: ');
for i:=1 to n do write(a[i]:3);
writeln;
write('B: ');
for i:=1 to m do write(b[i]:3);
writeln;
write('C: ');
for i:=1 to l do write(c[i]:3);
end;
procedure compare;
var i,j,k:byte;
    f:boolean;
begin
  l :=0;
  for i:=1 to n do
    for j:=1 to m do
        if a[i]=b[j] then
         begin
          f:=false;
          for k:=1 to l do
            if c[k] = a[i] then begin f:=true; break; end;
          if not(f) then begin inc(l); c[l]:=a[i]; end
         end;
  for i:=1 to l-1 do
   for j:=i+1 to l do
    if c[i]>c[j] then
     begin
     c[j]:=c[i]+c[j];
     c[i]:=c[j]-c[i];
     c[j]:=c[j]-c[i];
    end;
end;
BEGIN
clrscr;
readdata;
compare;
outdata;
readln;
END.
если разценивать
Цитата:
два неупорядоченных набора целых чисел
как множества, тогда не выполним условие
Цитата:
(может быть, с повторениями)
Код:
var a,b,c: set of byte;
   i,j:byte;
begin
   randomize;
   i:=random(15);
   for j:=1 to i do
    begin
     a := a + [random(21)];
     include(b,random(21));
    end;
    c:=a*b;
end.
мб надо изголяться с рекурсией как и предложил Stilet
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.11.2015, 11:18   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Я бы их в один массив бы слил:
Код:
program Project1;
const
  a:array[1..5] of integer=(1,2,3,4,5);
  b:array[1..5] of integer=(1,7,3,9,5);
var
  x:array[1..10] of integer;

procedure arrange(i:integer);
begin
  if i>5 then exit;
  x[i]:=a[i];
  x[i+5]:=b[i]; inc(i);
  arrange(i);
end;
procedure wri(i:integer);
begin
  if i>10 then exit;
  if seek(i,x[i]) then write(x[i]:5); inc(i);
  wri(i);
end;
begin
  arrange(1);wri(1); readln;
end.
А потом бы уже в нем и сортировал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо Паскаль. Дано действительное число х и массив А. В массиве найти два члена,среднее арифметическое которых ближе всего к x Хайзенберг777 Паскаль, Turbo Pascal, PascalABC.NET 2 22.04.2015 17:42
Найти в массиве наиболее часто встречающееся число. с++ lbvflbvf Общие вопросы C/C++ 52 23.05.2010 22:34
Найти в массиве число наиболее близокое к целому числу Willow Помощь студентам 2 16.01.2010 13:33
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46