powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / множество [pascal]
6 сообщений из 6, страница 1 из 1
множество [pascal]
    #36057166
m9c1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написать программу, в которой для конечных упорядоченных множеств реализовать все основные операции (Объединением,Пересечением,Разностью,Симметрической разностью) с помощью алгоритма типа слияния . Допустима организация множеств в виде списка или в виде массива.
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.
...
Рейтинг: 0 / 0
множество [pascal]
    #36057230
MAXHATbIu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не помню в паскале типа CHAT
Процедуры создаешь с параметрами, а вызываешь по-сишному, без параметров, но с ()
Судя по всему, данная программа полностью так ни разу и не запускалась ;)

Запускай по частям и отлаживай. Отдельно логику, отдельно интерфейс.
А чтоб не вводить каждый раз множества руками, задай их пока константами.
...
Рейтинг: 0 / 0
множество [pascal]
    #36057236
MAXHATbIu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С. и вообще, с каких пор процедуры стали возвращать значение?:)
...
Рейтинг: 0 / 0
множество [pascal]
    #36057901
m9c1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При вызове функции '1': obyedinenie('C',third_set); vyvod('C',C);end; пишет несоответствие типа. Подскажите как исправить.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
Program dm1;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B: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;
   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_set); 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.
...
Рейтинг: 0 / 0
множество [pascal]
    #36058408
m9c1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процедура объявлена след. образом
procedure obyedinenie(first_set,second_set:simvol; var tird_set:simvol);
Как правильно записать вызов процедуры obyedinenie ?
...
Рейтинг: 0 / 0
множество [pascal]
    #36062592
NightDriver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот моя версия проги:

Program Night;Uses crt;
Const n=5;
Type
Simvol =Set of 'A'..'Z';
Var
A,B,C:Simvol;
y,i,key:Integer;
x:Char;
Procedure vvod(name_set:Char; Var num_elem:Integer; Var one_set:Simvol);
Begin
Writeln('Vvedite ',num_elem,' element mnojestva ',name_set);
Readln(x);
x:=UpCase(x);
If x in one_set Then
Begin
Writeln(x,' uje soderjitsya v mnojestve',name_set);
num_elem:=num_elem-1;
End
Else
Begin
Writeln(x,' pomeschon v mnojestvo',name_set);
one_set:=one_set+[x];
End;
End;
Procedure vyvod(name_set:Char; one_set:simvol);
Begin
Write(name_set,'=[');
for x:='A' to 'Z' do
If x in one_set Then Write(x,',');
Writeln('];');
end;
Procedure obyedinenie(Var third_set:simvol);
Begin
third_set:=A+B;
End;
Procedure perese4enie(Var third_set:simvol);
Begin
third_set:=A*B;
End;
Procedure raznost1(Var third_set:simvol);
Begin
third_set:=A-B;
End;
Procedure raznost2(Var third_set:simvol);
Begin
third_set:=B-A;
End;
Begin
For i:=1 to n do
vvod('A',i,A);
For i:=1 to n do
vvod('B',i,B);
Clrscr;
Repeat
Writeln('Ishodnoe mnozhestvo');
vyvod('A',A);
vyvod('B',B);
Writeln('===========================');
Writeln('1: obyedinenie');
Writeln('2: perese4enie');
Writeln('(3: simmetr. raznosty)');
Writeln('4: raznosty(A-B)');
Writeln('5: raznosty(B-A)');
Writeln('0: vyhod');
Write('->');
Readln(key);
Case key of
1: obyedinenie(C);
2: perese4enie(C);
{3:Я не понял, что значит симметрия разности...}
4: raznost1(C);
5: raznost2(C);
End;
Clrscr;
vyvod('C',C);
Writeln('===========================');
Until Key=0;
End.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / множество [pascal]
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]