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

Запускай по частям и отлаживай. Отдельно логику, отдельно интерфейс.
А чтоб не вводить каждый раз множества руками, задай их пока константами.
...
Рейтинг: 0 / 0
24.06.2009, 12:33:46
    #36057236
MAXHATbIu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
множество [pascal]
П.С. и вообще, с каких пор процедуры стали возвращать значение?:)
...
Рейтинг: 0 / 0
24.06.2009, 15:57:20
    #36057901
m9c1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
множество [pascal]
При вызове функции '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
24.06.2009, 19:00:21
    #36058408
m9c1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
множество [pascal]
процедура объявлена след. образом
procedure obyedinenie(first_set,second_set:simvol; var tird_set:simvol);
Как правильно записать вызов процедуры obyedinenie ?
...
Рейтинг: 0 / 0
27.06.2009, 04:21:19
    #36062592
NightDriver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
множество [pascal]
Вот моя версия проги:

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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / множество [pascal] / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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