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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 16:17   #1
любаша
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 26
По умолчанию задача на множества

нужно решить задачу,в которой нужно реализовать ввод двух множеств и найти их пересечение,обьединение,разность и т.д. множества состоят из 10 элементов,в диапозоне от 1 до 100 и вводятся с клавиатуры.никак не могу сделать функцию пересечения(((как оно происходит понимаю,но в программу никак не могу записать((((помогите пожалуйста....


ввод я делала вот так:
Код:
uses
  SysUtils;

var A: array[1..100] of integer;
    B: array[1..100] of integer;
    C: array[1..100] of integer;
  x,i,g,j,y,k:integer;

begin
 write('vvedite kol-vo eelmentov: ');
readln(g);


     write('vvedite mnog A:');
x:=1;
for y:=1 to g do
begin
read(i);
if (i>=1) and (i<=100)   then
   begin
    A[x]:=i;
    x:=x+1;
    writeln(i);
   end
 else
 writeln('oshibka');
end;


   write('vvedite mnog B:');
x:=1;
for y:=1 to g do
begin
read(j);
if (j>=1) and (j<=100)   then
   begin
    B[x]:=j;
    x:=x+1;
    writeln(j);
   end
 else
 writeln('oshibka');
      end;

Последний раз редактировалось artemavd; 29.09.2010 в 18:41.
любаша вне форума Ответить с цитированием
Старый 29.09.2010, 16:58   #2
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Хм... Вообщето множества это set of.
Код:
A, B, C: set of Byte;
//пересечение множеств
C := A*B;
//объединение множеств
C := A+B;
//разность множеств
C := A-B;
Или я тебя не правильно понял?
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 29.09.2010, 17:13   #3
любаша
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 26
По умолчанию

нам сказали,что можно и через массив элементы вводить-фактически это тоже множество. я никак не могу ввести правильно условие,
фактически смысл в том,что если элемент первого равен элементу вторго множества,то мы его кладем во множество,которое и будет их пересечением...или я не правильно думаю(((((достала эта задача уже..
любаша вне форума Ответить с цитированием
Старый 29.09.2010, 18:39   #4
vlad_light
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 95
По умолчанию

Объединение:
1. Создаём массив С, размерностью m+n(m - размерность А, n - размерность B), как копию массива А.
2. Фиксируем первый элемент из В, проверяем его на равенство с каждым из А. Если данный элемент не равен ни одному из предыдущих - заносим его в массив.
3. Повторяем пункт (2) для второго, третьего, ... , n-ого элемента.
Пересечение:
1. Создаём пустой массив С, размерностью max(m,n).
2. Фиксируем первый элемент из А. Проверям его на равенство с каждым из В до тех пор, пока не найдём такой элемент. Если нашли - заносим его в массив С.
3. Повторям пункт (2) для всех элементов из множества В.
Разность:
Код:
count:=0; k:=0;
for i:=0 to m-1 do 
 begin
  for j:=0 to n-1 do if A[i]=B[j] then count:=1; 
  if count=0 then 
    begin C[k]:=A[i]; inc(k) end;
  count:=0;
 end;
vlad_light вне форума Ответить с цитированием
Старый 29.09.2010, 18:40   #5
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

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

Код:
for i:=1 to 10 do
  for j:=1 to 10 do
    if A[i] = B[j] then
    begin
      len := Length(C);
      SetLength(C, len+1);
      C[len]:=A[i];
    end;
Вот как-то так наверно. C - динамический массив
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 29.09.2010, 18:43   #6
vlad_light
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 95
По умолчанию

Кстати, ф-ция ввода по-короче:
Код:
n:=0; m:=0;
while m<=1 or m>=100 do read(m);
for i:=1 to m do read(A[i]);
while n<=1 or n>=100 do read(n);
for i:=1 to n do read(B[i]);
vlad_light вне форума Ответить с цитированием
Старый 29.09.2010, 18:46   #7
vlad_light
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 95
По умолчанию

А разве так
Код:
SetLength(C, len+1);
можно писать?
vlad_light вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на множества любаша Общие вопросы Delphi 0 22.09.2010 15:05
Задача на множества RegI Помощь студентам 15 27.05.2009 13:43
Задача на Множества! prosport91 Помощь студентам 11 22.05.2009 23:39
Задача на множества ApXoH Паскаль, Turbo Pascal, PascalABC.NET 3 11.05.2009 17:47
Задача на множества innaa639 Помощь студентам 2 09.02.2009 10:32