Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: множество [pascal]  (Прочитано 14401 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
m9c1k
Гость
« : 24-06-2009 08:45 » 

Написать программу, в которой для конечных упорядоченных множеств реализовать все основные операции (Объединением,Пересечением,Разностью,Симметрической разностью) с помощью алгоритма типа слияния . Допустима организация множеств в виде списка или в виде массива.
1. На вход подаются два упорядоченных множества A и B (вводятся с клавиатуры, элементы множеств – буквы латинского алфавита).
2. После ввода множеств выбирается требуемая операция (посредством текстового меню, вводом определенного символа в ответ на запрос – выбор по желанию автора).
3. Программа посредством алгоритма типа слияния определяет результат выбранной операции и выдает его на экран с необходимыми пояснениями. Одновременно с результатом на экране должны присутствовать и исходные множества.
4.Возврат на п.2 (выбор операции).
5. Завершение работы программы – из п.2 (например, по ESC).

Множества ввожу ,а дальше никак.Подскажите как правильно процедуры описать,чтобы их можно было в меню вызывать.Помогите исправить плз.

Код:
Program dm1;
uses crt;
Type
Simvol = set of 'a'..'z';
Var
A,B:simvol;
i:integer;
x,key:char;
begin
A:=[];
B:=[];
i:=1;
repeat
clrscr;
writeln(' Vvedite ',i,'-y element mnogestva A ');
readln(x);
if (x in A)
then
begin
writeln(x,' uje sodergitsya v mnogestve A ');
i:=i-1;
end
else
begin
writeln(x,' pomeschon v mnogestvo A ');
A:=A+[x];
end;
i:=i+1;
until i>5;
i:=1;
repeat
clrscr;
writeln(' Vvedite ',i,'-y element mnogestva B ');
readln(x);
if (x in B)
then
begin
writeln(x,' uje sodergitsya v mnogestve B ');
i:=i-1;
end
else
begin
writeln(x,' pomeschon v mnogestvo B ');
B:=B+[x];
end;
i:=i+1;

until i>5;
clrscr;
writeln(' mnojestvo A: ');
writeln;
for x:='A' to 'z' do if x in A then write(x,' ');
writeln;
writeln(' mnojestvo B: ');
writeln;
for x:='A' to 'z' do if x in B then write(x,' ');
procedure obyedinenie(c:chat):simvol;
begin
C:=A+B;
writeln(C);
end;
procedure perese4enie(c:chat):simvol;
begin
C:=A*B;
writeln(C);
end;
procedure raznosty(c:chat):simvol;
C:=A-B;
writeln(C);
repeat
clrscr;
writeln('===========================');
writeln('1: obyedinenie');
writeln('2: perese4enie');
writeln('3: simmetr. raznosty');
writeln('4: raznosty');
writeln('o: vyhod');
key:=readkey;
clrscr;
case key of
'1': obyedinenie();
'2': perese4enie();
'3': simmetr();
'4': raznosty();

until key='0';
end.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-06-2009 08:59 » 

Это работает? (оно даже не скомпилится)
Не верю!


5. Завершение работы программы – из п.2 (например, по ESC).
почитай про keypressed
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 24-06-2009 09:43 » 

упрощаем программу
Код:
procedure vvod (name_set:string; var num_elem:integer; var one_set:simvol);
var x:char;
begin
writeln('vvedite ', num_elem, ' element mnogestva ', name_set);
readln(x);
if (x in one_set)
then begin
writeln(x,' uje sodergitsya v mnogestve ', name_set);
end
else begin
writeln(x,' pomeschon v mnogestvo', name_set');
one_set:=one_set+[x];
num_elem:=num_elem+1;
end;
end;
И программа превращается в элегантный код

Код:
begin
A:=[];
B:=[];
i:=1;
repeat
vvod('A',i,A);
until i>5;
        i:=1;
repeat
vvod('B',i,B);
until i>5;
clrscr;
vyvod('A',A);
vyvod('B',B);
repeat
clrscr;
writeln('===========================');
writeln('1: obyedinenie');
writeln('2: perese4enie');
writeln('3: simmetr. raznosty');
writeln('4: raznosty');
writeln('o: vyhod');
writeln('->');
repeat until KeyPressed;
key:=ReadKey;
case key of
'1': begin obyedinenie();vyvod('C',C);end;
'2': begin perese4enie();vyvod('C',C);end;
'3': begin simmetr();vyvod('C',C);end;
'4': begin raznosty();vyvod('C',C);end;
end;

until ord(key)=ESC;
end.

Код:
procedure vyvod (name_set:string; var one_set:simvol);
var x: char;
begin
writeln(' mnojestvo ', name_set);
for x:='a' to 'z' do if x in A then write(x,' ');
writeln;
end;

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #3 : 24-06-2009 10:45 » 

Огромное Пасибо Sla! Теперь буду разбираться)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 24-06-2009 10:58 » 

тут я ошибся

procedure vyvod (name_set:string; var one_set:simvol);

но ошибка не сложная - связано с копипастом, думаю что разберешься и сделаешь по аналогии с
procedure vvod ...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #5 : 24-06-2009 11:25 » 

Можете помоч с этими процедурами?
obyedinenie()
perese4enie()
simmetr()
raznosty()
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 24-06-2009 11:29 » 

Код:
procedure obyedinenie(first_set,second_set:simvol; var tird_set:simvol);
begin
third_set:=first_set+second_set;
end;
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #7 : 24-06-2009 13:17 » 

Теперь ему third_set не нравится в '1': obyedinenie(['C'],third_set);
Пишет что неизвестный(



Код:
Program dm1;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B,C:simvol;
  i:integer;
  x,key:char;
  procedure vvod(name_set:string; var num_elem:integer; var one_set:simvol);
  var x:char;
  begin
          writeln('vvedite ',num_elem,' element mnojestva ',name_set);
          readln(x);
          if (x in one_set)
          then begin
                writeln(x,' uje soderjitsya v mnojestve',name_set);
          end
          else begin
                writeln(x,' pomeschon v mnojestvo',name_set);
                one_set:=one_set+[x];
                num_elem:=num_elem+1;
          end;
   end;
   procedure vyvod(name_set:string;var one_set:simvol);
   var x:char;
   begin
                writeln(' mnojestvo ',name_set);
                for x:='a' to 'z' do if x in A then write(x,' ');
                writeln;
   end;

   procedure obyedinenie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set+second_set;
   end;
   procedure perese4enie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set*second_set;
   end;
   procedure raznosty(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set-second_set;
   end;
   procedure simmetr(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=(first_set-second_set)+(second_set-first_set);
   end;
   begin
                A:=[];
                B:=[];
                i:=1;
                repeat
                        vvod('A',i,A);
                until i>5;
                i:=1;
                repeat
                        vvod('B',i,B);
                until i>5;
                clrscr;
                vyvod('A',A);
                vyvod('B',B);
                repeat
                         clrscr;
                           writeln('===========================');
                           writeln('1: obyedinenie');
                           writeln('2: perese4enie');
                           writeln('3: simmetr. raznosty');
                           writeln('4: raznosty');
                           writeln('o: vyhod');
                           writeln('->');
                           repeat until keyPressed;
                           key:=readkey;
                           case key of
                           '1': obyedinenie('C',third_setC); vyvod('C',C);end;
                           '2': perese4enie('C',third_set); vyvod('C',C);end;
                           '3': simmetr('C',third_set);     vyvod('C',C);end;
                           '4': raznosty('C',third_set);    vyvod('C',C);end;
                           end;
                    until ord(key)=ESC;
  end.

Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 24-06-2009 13:24 » 

m9c1k, так ведь правильно пишет!!!
что(какое множество) должно быть передано в качестве third_set?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #9 : 24-06-2009 13:58 » 

Пишет после vyvod(... - ошибочная ссылка Здесь была моя ладья...

Код:
'1': obyedinenie(['C'],A,B); vyvod(['C'],C);end;
                           '2': perese4enie(['C'],A,B); vyvod(['C'],C);end;
                           '3': simmetr(['C'],A,B);     vyvod(['C'],C);end;
                           '4': raznosty(['C'],A,B);    vyvod(['C'],C);end;
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 24-06-2009 14:16 » 

m9c1k, открываем учебник по паскалю, читаем про передачу параметров в процедуры и функции

процедура объявлена след. образом
procedure obyedinenie(first_set,second_set:simvol; var tird_set:simvol);

прочитав про параметры, возможно ты поймешь, почему были использованы параметры-значения и параметр-переменная

Как правильно записать вызов процедуры  obyedinenie ?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #11 : 25-06-2009 08:22 » 

Помогите исправить создание меню. Выход не работает и процедуры странно вводяться.


Код:
Program dm1;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B,C:simvol;
  i:integer;
  x,key:char;
  procedure vvod(name_set:string; var num_elem:integer; var one_set:simvol);
  var x:char;
  begin
          writeln('vvedite ',num_elem,' element mnojestva ',name_set);
          readln(x);
          if (x in one_set)
          then begin
                writeln(x,' uje soderjitsya v mnojestve',name_set);
          end
          else begin
                writeln(x,' pomeschon v mnojestvo',name_set);
                one_set:=one_set+[x];
                num_elem:=num_elem+1;
          end;
   end;
   procedure vyvod(name_set:string;var one_set:simvol);
   var x:char;
   begin
                writeln(' mnojestvo ',name_set);
                for x:='a' to 'z' do if x in one_set then write(x,' ');
                writeln;
   end;

   procedure obyedinenie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set+second_set;

   end;
   procedure perese4enie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set*second_set;
   end;
   procedure raznosty(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set-second_set;
   end;
   procedure simmetr(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=(first_set-second_set)+(second_set-first_set);
   end;
   begin
                A:=[];
                B:=[];
                i:=1;
                repeat
                        vvod('A',i,A);
                until i>5;
                i:=1;
                repeat
                        vvod('B',i,B);
                until i>5;
                clrscr;
                vyvod('A',A);
                vyvod('B',B);
                repeat
                         clrscr;
                           writeln('=======================');
                           writeln('1: obyedinenie');
                           writeln('2: perese4enie');
                           writeln('3: simmetr. raznosty');
                           writeln('4: raznosty');
                           writeln('0: vyhod');
                           writeln('=======================');
                           writeln('->');

                           repeat until keyPressed;
                               key:=readkey;
                           case key of
                           '1':begin  obyedinenie(A,B,C); vyvod('C',C);end;
                           '2':begin perese4enie(A,B,C); vyvod('C',C);end;
                           '3':begin simmetr(A,B,C);     vyvod('C',C);end;
                           '4':begin raznosty(A,B,C);    vyvod('C',C);end;
                           end;
                           readln(key);
                    until ord(key)=0;

  end.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 25-06-2009 08:29 » 

m9c1k, сделай следующее

repeat until keyPressed;
key:=readkey;
writeln('key =',key,'ord(key)=',ord(key));

  и понажимай
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #13 : 25-06-2009 08:36 » 

всеравно не выходит (

Код:
clrscr;
                vyvod('A',A);
                vyvod('B',B);
                repeat
                         clrscr;
                           writeln('=======================');
                           writeln('1: obyedinenie');
                           writeln('2: perese4enie');
                           writeln('3: simmetr. raznosty');
                           writeln('4: raznosty');
                           writeln('esk: vyhod');
                           writeln('=======================');
                           writeln('->');

                           repeat until keyPressed;
                               key:=readkey;
                               writeln('key=',key,'ord(key)=',ord(key));
                           case key of
                           '1':begin  obyedinenie(A,B,C); vyvod('C',C);end;
                           '2':begin perese4enie(A,B,C); vyvod('C',C);end;
                           '3':begin simmetr(A,B,C);     vyvod('C',C);end;
                           '4':begin raznosty(A,B,C);    vyvod('C',C);end;
                           end;
                           readln(key);
                    until ord(key)=27;

  end.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 25-06-2009 08:39 » 

m9c1k, какой результат?

напиши маленький кусочек программки (только меню) и расскажи что выводит
почему ты сравниваешь с нулем, почему...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #15 : 25-06-2009 08:44 » 

Процедуры вводятся,а выход не работает.
Меню выше отослал. Ноль на esc исправил.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 25-06-2009 10:02 » 

Меню выше отослал.

Куда отослал? и зачем?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
m9c1k
Гость
« Ответ #17 : 25-06-2009 11:36 » 

Sla спасибо за пошощь! Все работает как часики)
Код:
Program Mnojestva;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B,C:simvol;
  i:integer;
  x,key:char;
  procedure vvod(name_set:string; var num_elem:integer; var one_set:simvol);
  var x:char;
  begin
          writeln('vvedite ',num_elem,' element mnojestva ',name_set);
          readln(x);
          if (x in one_set)
          then begin
                writeln(x,' uje soderjitsya v mnojestve',name_set);
          end
          else begin
                writeln(x,' pomeschon v mnojestvo',name_set);
                one_set:=one_set+[x];
                num_elem:=num_elem+1;
          end;
   end;
   procedure vyvod(name_set:string;var one_set:simvol);
   var x:char;
   begin
                writeln(' mnojestvo ',name_set);
                for x:='a' to 'z' do if x in one_set then write(x,' ');
                writeln;
   end;

   procedure obyedinenie(first_set,second_set:simvol; var third_set:simvol);
   begin
   writeln(' obyedinenie ');
                third_set:=first_set+second_set;

   end;
   procedure perese4enie(first_set,second_set:simvol; var third_set:simvol);
   begin
   writeln(' perese4enie ');
                third_set:=first_set*second_set;
   end;
   procedure raznosty(first_set,second_set:simvol; var third_set:simvol);
   begin
   writeln(' raznosty ');
                third_set:=first_set-second_set;
   end;
   procedure simmetr(first_set,second_set:simvol; var third_set:simvol);
   begin
   writeln(' simmetr  raznosty ');
                third_set:=(first_set-second_set)+(second_set-first_set);
   end;
   begin
                A:=[];
                B:=[];
                i:=1;
                repeat
                        vvod('A',i,A);
                until i>5;
                i:=1;
                repeat
                        vvod('B',i,B);
                until i>5;
                clrscr;
                vyvod('A',A);
                vyvod('B',B);
                repeat
                         clrscr;
                           writeln('=======================');
                           writeln('  1:   obyedinenie');
                           writeln('  2:   perese4enie');
                           writeln('  3:   simmetr. raznosty');
                           writeln('  4:   raznosty');
                           writeln('esk:   vyhod');
                           writeln('=======================');
                           writeln('->');

                           repeat until keyPressed;
                               key:=readkey;
                               writeln('key= ',key);

                           case key of
                           '1':begin  obyedinenie(A,B,C); vyvod('C',C);end;
                           '2':begin perese4enie(A,B,C); vyvod('C',C);end;
                           '3':begin simmetr(A,B,C);     vyvod('C',C);end;
                           '4':begin raznosty(A,B,C);    vyvod('C',C);end;

                           end;
                               if key <> #27 then readln;
                                 until key=#27;
  end.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines