• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Работа с множествами

  • Автор темы Автор темы kira k
  • Дата начала Дата начала

kira k

Ученик
Регистрация
22 Май 2013
Сообщения
4
Реакции
0
Баллы
0
Работа с множествами

Даны два множества целых чисел А и В, значение элементов которых вводятся в диалоговом режиме.
Определить, являются ли множества идентичными и в случае их различия вывести несовпадающие элементы.
 
Язык программирования не указали.
 
Язык программирования не указали.
Ладно, на основании помещения в раздел будем считать, что Паскаль. Тогда так:
Код:
Var
 M1,M2,M3,M4:Set of Byte;
 i:Byte;
 YN:Char;
 b:boolean;
Begin
 M1:=[];
 M2:=[];
 Writeln('Set1:');
 Repeat
  Write('Next element: ');
  Readln(i);
  M1:=M1+[i];
  Write('Continue? (Y/N): ');
  Readln(YN);
 Until (YN='N') or (YN='n');
 Writeln;
 Writeln('Set2:');
 Repeat
  Write('Next element: ');
  Readln(i);
  M2:=M2+[i];
  Write('Continue? (Y/N): ');
  Readln(YN);
 Until (YN='N') or (YN='n');
 Writeln;
 M3:=M1-M2;
 M4:=M2-M1;
 b:=(M3<>[]) or (M4<>[]);
 If b then
  begin
   if M3<>[] then
    begin
     Writeln('Not coinciding elements of Set1:');
     for i:=0 to 255 do
      if (i in M1) and Not(i in M2) then write(i:4);
     Writeln;
    end;
   if M4<>[] then
    begin
     Writeln('Not coinciding elements of Set2:');
     for i:=0 to 255 do
      if Not(i in M1) and (i in M2) then write(i:4);
    end;
  end
 else
  Writeln('Sets coicide');
 Readln
End.
 
Ага, пользователь как появится на форуме - сюрприз устроит, скажет что на Delphi.
Ну... бывает, конечно. Но ничего страшного: паскалевская часть по сути сохраняется, а все эти формы-обвески пускай сам мастрячит.
 
спасибо...но если правда я не очень понимаю работу вашей программы.
 
спасибо...но если правда я не очень понимаю работу вашей программы.
Так, прежде всего - заметил некоторую неточность в своей программе. Исправил.
Теперь попробую объяснить, как она работает.
Прежде всего, раз речь идет о числовых множествах, вспомним, что единственным типом элементов таких множеств может быть byte (диапазон 0..255). Такие множества и объявляем. Далее начинаем вводить значения элементов обоих множеств. Поскольку число элементов множеств наперед не задается, ввод осуществляем в диалоговом режиме. Как только ответ на вопрос о продолжении становится "N" или "n", ввод прекращается.
Далее находим разности. Множество M3 представляет собой совокупность элементов, входящих в множество М1 и не входящих в М2. М4 - соответственно, наоборот. Если множества М1 и М2 совпадают, то обе разности М3 и М4 оказываются пустыми множествами, и булева переменная-флажок b получает значение false. Если хотя бы одна из разностей не пустая, то b становится true.
Если b получает значение true (множества М1 и М2 не совпадают), то выводятся несовпадающие элементы, причем порознь: сначала список элементов (если таковые имеются) множества М1, не входящих в М2, потом - наоборот. Формируются списки так: прогоняем переменную i от 0 до 255 и если какое-то из значений i имеется в М1 и не имеется в М2, это значение выводится на экран. Потом повторяем такой же цикл с перестановкой множеств М1 и М2.
Если же флажок b получает значение false, то выводится сообщение "Множества совпадают".
Всё!
 
Назад
Сверху