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

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

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

> Выборка из массива!
Дмитрий
сообщение 14.12.2005 19:28
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

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


Доброго времени суток! Мне необходимо написать программу, которая заносит в массив С элементы, которые присутствуют в нескольких экземплярах в массиве А и отсутствуют в массиве В. Никак не могу придумать нормальный алгоритм. Пока написал следующее:
Код

procedure moveit(var nc:integer; var c:arr);
var i,y,g,m,n:integer;
      flag,flag2:boolean;
begin
y:=y+1;
       for i:=1 to na do begin
            flag:=false;
            flag2:=false;
              for g:=1 to na do begin
                 if (a[i]=a[g]) and (i<>g) then
                 begin
                    while (m<=nb) and not(flag) do begin
                       if (a[i]=b[m]) then begin
                          flag:=true;
                        end;
                     m:=m+1;
                     end;
                        if flag=false then begin
                         c[y]:=a[i];
                          y:=y+1;
                           nc:=nc+1;
                        end;
                   end;
             end;
        end;
end;

na,nb,nc - длина массивов a,b,c соответственно.
a,b,c:arr; - сами массивы (type arr = array [1..20] of integer;)

Данная программа не заносит элементы в массив С =((

До этого добился что программа заносит нужные элементы, но возникла проблема что в массив С заносятся одинаковые элементы(т.к. в массиве А их несколько). По условию задачи это неприемлемо.
Правда к сожалению этот вариант выложить на данным момент не могу, т.к. он остался на дискете, которая безвременно умерла =((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
klem4
сообщение 14.12.2005 19:40
Сообщение #2


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

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

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


элементы записываются по одному разу ?
то есть
a = (1,2,3,4,1,2);
b = (7,8,9,0,0,2);

-> c=(1)

?

+ используй поиск, такая задача уже решалась ... обманул. не здесь она решалась smile.gif)))

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


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


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

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


Элементы должны записываться по одному разу, а записываются по несколько. В приведенном вами примере они запишутся 2 раза!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Volvo-
сообщение 17.12.2005 15:53
Сообщение #4


Гость






Дмитрий, ты про это:
const
size_a = 10;
a: array[1 .. size_a] of integer =
(1, 2, 6, 5, 2, 8, 3, 8, 9, 1);

size_b = 10;
b: array[1 .. size_b] of integer =
(0, 3, 6, 8, 3, 5, 5, 7, 7, 7);

var
c: array[1 .. size_a] of integer;
ix_c: integer;

i, j, check, count: integer;
found: boolean;

begin
ix_c := 0;

for i := 1 to size_a do begin
check := a[i]; count := 1;
for j := i + 1 to size_a do
if a[j] = check then inc(count);

if count > 1 then begin

found := false;
j := 1;
while (j <= size_b) and (not found) do
if b[j] = check then found := true else inc(j);

if not found then begin
for j := 1 to ix_c do
if c[j] = check then found := true;

if not found then begin
inc(ix_c); c[ix_c] := check;
end;
end;

end;

end;

Writeln('Array C:');
for i := 1 to ix_c do
write(c[i]:4);
writeln;

end.

?
 К началу страницы 
+ Ответить 
Дмитрий
сообщение 28.12.2005 17:38
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

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


Да, именно оно! Спасибо огромное!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 22.06.2025 6:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"