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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2008, 19:14   #1
LyaLya
 
Регистрация: 27.11.2008
Сообщений: 8
Счастье Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент

Люди добрые, помогите, плизззз, завтра зачет, а я эту задачку никак не могу решить!!!!!

Даны одномерные массивы А(состоит из 20 элементов) и В(из 10). Сформировать массивы, состоящие из элементов:
1) равных и в А, и в В
2) А, которых нет в В
3) В, которых нет в А

Сформировать массивы А и В я вот смогла:
PROGRAM pr;
uses crt;
const n = 20;
m = 10;
var
a, c : array [1..n] of real;
b : array [1..m] of real;
t, r, j, i ,k, pr : integer;

BEGIN
clrscr;
k:=1;

for i:=1 to n do
begin
a[i]:=random(50);
write (a[i]:5:0);
end;

readln; writeln;

for j:=1 to m do
begin
b[j]:=random(30);
write (b[j]:5:0);
end;

readln; writeln;

но дальше возникла проблемка))
LyaLya вне форума Ответить с цитированием
Старый 27.11.2008, 20:33   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
PROGRAM pr;
uses crt;
const n=20;
m= 10;
var
a,c:array [1..n] of integer;
b:array [1..m] of integer;
i,j,t,r,k,l,ks:integer;

BEGIN
clrscr;
randomize;
writeln('Massiv A:');
for i:=1 to n do
   begin
     a[i]:=random(10);
     write (a[i],' ');
    end;
writeln;
writeln('Massiv B:');
for j:=1 to m do
   begin
     b[j]:=random(10);
     write (b[j],' ');
   end;
writeln;
k:=0;t:=n;r:=m;{присвоим размеры исходных массивов другим переменным, 
т.к. они будут уменьшаться, а константы изменять нельзя}
i:=1;
while i<=t do
  begin
   j:=1;ks:=0;{совпадений нет}
   while j<=r do
     begin
      if a[i]=b[j] then {если есть совпадение}
        begin
          k:=k+1;{считаем его}
          ks:=1; {фиксируем, что совпадение есть}
          c[k]:=a[i]; {записываем в новый массив}
          for l:=i to t-1 do {сдвигаем массив влево, удаляем 
совпавший элемент из обоих массивов}
          a[l]:=a[l+1];
          t:=t-1; {уменьшаем длину массива}
          for l:=j to r-1 do {то же со вторым массивом}
          b[l]:=b[l+1];
          r:=r-1;
        end
      else j:=j+1;{если не совпало идем дальше по второму массиву}
     end;
   if ks=0 then i:=i+1;{если ни одного совпадения, переходим к другому числу 
в первом массиве}
 end;
writeln('Massiv C:');{выводим всю красоту на экран}
for i:=1 to k do
write(c[i],' ');
writeln;
writeln;
writeln('Massiv A:');
for i:=1 to t do
write(a[i],' ');
writeln;
writeln;
writeln('Massiv B:');
for i:=1 to r do
write(b[i],' ');
readln
end.
puporev вне форума Ответить с цитированием
Старый 27.11.2008, 20:53   #3
LyaLya
 
Регистрация: 27.11.2008
Сообщений: 8
По умолчанию

Хм, суть задания состоит чуть-чуть в другом. Эта прога получает массивы
Massiv A:
4 1 4 2 8 9 7 3 9 9 6 7 3 9 5 7 8 0 0 8
Massiv B:
6 7 5 0 0 5 6 3 6 8
Massiv C:
8 7 3 6 5 0 0

Massiv A:
4 1 4 2 9 9 9 7 3 9 7 8 8

Massiv B:
5 6 6,
а необходимо получить
Massiv C:
8 7 3 6 5 0

Massiv A:
4 1 2 9 7 3 8

Massiv B:
5 6 .

Как это сделать?
LyaLya вне форума Ответить с цитированием
Старый 27.11.2008, 21:43   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Надо писать, что повторяющиеся элементы должны быть удалены.
Предварительно удалите повторяющиеся жлементы из массивов А и В также, как потом удаляем совпадающие из А и В

Последний раз редактировалось puporev; 27.11.2008 в 21:51.
puporev вне форума Ответить с цитированием
Старый 27.11.2008, 22:31   #5
LyaLya
 
Регистрация: 27.11.2008
Сообщений: 8
По умолчанию

а с помошью флага можно это как-то сделать? тогда бы повторяющихся элементов не было

Последний раз редактировалось LyaLya; 27.11.2008 в 22:36.
LyaLya вне форума Ответить с цитированием
Старый 27.11.2008, 22:50   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Можно вручную массив вводить без повторяющихся, можно программно сделать чтобы повторяющиеся не попадали в массив типа:
Код:
procedure MyRandom(n:integer;var a:Tmass);
var m,i,j,x:integer;f:Boolean;
begin
m:=2;
Randomize;
for i := 1 to n do
  begin
    repeat
      f:=false;
      x:=Random(n+1);
      for j:=1 to m do
      if a[j]=x then f:=true;
    until f=false;
    a[i]:=x;
    m:=m+1;
  end;
end;
puporev вне форума Ответить с цитированием
Старый 27.11.2008, 22:56   #7
LyaLya
 
Регистрация: 27.11.2008
Сообщений: 8
По умолчанию

можно, но препод только флаги требует, причем белый не помогает
LyaLya вне форума Ответить с цитированием
Старый 27.11.2008, 23:04   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Так тут же с флагом
puporev вне форума Ответить с цитированием
Старый 27.11.2008, 23:16   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот вариан рабочий но без флагов. Закомментированное можно убрать, это я для проверки делал.
Код:
PROGRAM pr;
uses crt;
const n=20;
m= 10;
var
a,c,d,e:array [1..n] of integer;
b:array [1..m] of integer;
i,j,t,r,k,l,ks:integer;

BEGIN
clrscr;
randomize;
writeln('Massiv A:');
for i:=1 to n do
   begin
     a[i]:=random(10);
     write (a[i],' ');
    end;
writeln;
t:=n;
i:=1;
while i<=t do
  begin
   for j:=t downto i+1 do
   if a[j]=a[i] then
      begin
        for l:=j to t-1 do
        a[l]:=a[l+1];
        t:=t-1;
      end;
   i:=i+1;
 end;
{writeln('NewA:');
for i:=1 to t do
write (a[i],' ');
writeln;}
writeln('Massiv B:');
for j:=1 to m do
   begin
     b[j]:=random(10);
     write (b[j],' ');
   end;
writeln;
writeln;
r:=m;
i:=1;
while i<=r do
  begin
   for j:=r downto i+1 do
   if a[j]=a[i] then
      begin
        for l:=j to r-1 do
        b[l]:=b[l+1];
        r:=r-1;
      end;
   i:=i+1;
 end;
{writeln('NewB:');
for i:=1 to r do
write (b[i],' ');
writeln;}
k:=0;
i:=1;
while i<=t do
  begin
   j:=1;ks:=0;
   while j<=r do
     begin
      if a[i]=b[j] then
        begin
          k:=k+1;
          ks:=1;
          c[k]:=a[i]; {Ґбвм ў Ђ Ё ‚}
          for l:=i to t-1 do
          a[l]:=a[l+1];
          t:=t-1;
          for l:=j to r-1 do
          b[l]:=b[l+1];
          r:=r-1;
        end
      else j:=j+1;
     end;
   if ks=0 then i:=i+1;
 end;
writeln('Massiv C:');
for i:=1 to k do
write(c[i],' ');
writeln;
writeln;
writeln('Massiv A:');
for i:=1 to t do
write(a[i],' ');
writeln;
writeln;
writeln('Massiv B:');
for i:=1 to r do
write(b[i],' ');
readln
end.
puporev вне форума Ответить с цитированием
Старый 27.11.2008, 23:18   #10
LyaLya
 
Регистрация: 27.11.2008
Сообщений: 8
По умолчанию

не, флаг должен использоваться где-то вроде этого


k:=0;
for i:=1 to n do
for j:=1 to m do
begin
if a[i]=b[j] then
begin
pr:=0;
for l:=1 to k do
if a[i]=c[l] then pr:=1;
if pr=0 then
begin k:=k+1;
c[l]:=a[i];
end;
end;
end;
LyaLya вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++/ Одномерные массивы BennyBenassy Общие вопросы C/C++ 6 23.02.2009 14:27
Одномерные массивы - Pascal W_P Помощь студентам 8 27.02.2008 19:24
Паскаль. 1.Даны массивы.2 Дан X найти... Stelix Помощь студентам 7 20.11.2007 21:08