Работа с множествами |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Работа с множествами |
rov4 |
12.01.2005 12:31
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Привет всем!
Обращаюсь к вам за помощью, так как самой выполнить задания, видимо не дано... Необходимо написать программы к следующим заданиям: 1. Дана непустая последовательность символов. Требуется построить и напечатать множество, элементами которого являются встречающиеся в последовательности: цифры от ‘0’ до ‘9’. 2. Постановка задачи: Задан список объектов, включающий в зависимости от варианта названия ЭВМ или видов спорта. Известно, что в каждом институте имеется определенный набор вычислительных машин, а учащиеся каждой группы занимаются определенными видами спорта. Необходимо задать конкретные наборы ЭВМ (перечни видов спорта) для каждого института (каждой группы). Количество институтов(групп) указано в варианте. Введя исходные данные, необходимо построить и распечатать множество, удовлетворяющее указанному в варианте условию. Вариант задания: Задано множество вычислительных машин, которыми может быть обеспечен институт: IBM-386, IBM-486, Pentium, Macintosh, APPLE, ACER. Известен набор машин, имеющихся в каждом институте. Количество институтов (N) указано в варианте: требуется построить и распечатать множество, включающее в себя вычислительные машины: • которыми обеспечены все институты (N=10). • которые имеют хотя бы один институт. • которых нет ни водном институте. Пожалуйста, помогите, чем сможете. Заранее спасибо! |
volvo |
12.01.2005 12:50
Сообщение
#2
|
Гость |
rov4
Насчет задачи №2: эту же задачу (немного в другой вариации - про магазины и продукты) я решал здесь |
-rov4- |
21.02.2005 9:22
Сообщение
#3
|
Гость |
Итак, я написала программы для этих 2-х заданий, и вот что получилось:
Для № 1: Код program lab; Uses crt; TYPE SetType = set of char; const Length = 255; var m1, m2 : array [1..Length] of Char; i, a : Integer; Myset:Settype; Begin ClrScr; Randomize; For i:=1 to Length do m1[i]:=Chr(32+Random(255-32)); Myset:=['0'..'9']; a:=1; For i:=1 to Length do if m1[i] in Myset then Begin m2[a] := m1[i]; Inc(a); End; writeln('Множество:'); For i:=1 to Length do Write(m1[i],' '); writeln; writeln('В множество входят следующие цифры от 0 до 9:'); For i:=1 to a-1 do Write(m2[i],' '); writeln; writeln('Программа закончена , нажмите Enter.'); ReadLn; End. Для № 2: Код Program lab; Uses Crt; Type Comps = (i386, i486, Apple, Pentium, Acer, Macintosh); TComps = set of Comps; Const All_comps : TComps = [i386, i486, Apple, Pentium, Acer, Macintosh]; Inst_1 : TComps = [i386,Acer, Pentium]; Inst_2 : TComps = [Acer, Pentium]; Inst_3 : TComps = [Apple, Pentium ]; Inst_4 : TComps = [Pentium, Acer, i486]; Inst_5 : TComps = [i386,Acer, Pentium]; Inst_6 : TComps = [Acer, Pentium]; Inst_7 : TComps = [Apple, Pentium ]; Inst_8 : TComps = [Pentium, Acer, i486]; Inst_9 : TComps = [Apple, Pentium ]; Inst_10 : TComps = [Pentium, Acer, i486]; Var All_Comps_In, NotInst_1, NotInst_2, NotInst_3, NotInst_4, NotInst_5, NotInst_6, NotInst_7, NotInst_8, NotInst_9, NotInst_10 : TComps; Procedure OutPut(s : TComps); Begin If i386 in s then Write('i386 '); If i486 in s then Write('i486 '); If Pentium in s then Write('Pentium '); If Apple in s then Write('Apple '); If Acer in s then Write('Acer '); If Macintosh in s then Write('Macintosh '); End; Begin ClrScr; All_Comps_In := Inst_1 + Inst_2 + Inst_3 + Inst_4+Inst_5 + Inst_6 + Inst_7 + Inst_8+Inst_9 + Inst_10; Write('машины, которыми обеспечены все институты:'); NotInst_1 := All_Comps_In-Inst_1; NotInst_2 := All_Comps_In-Inst_2; NotInst_3 := All_Comps_In-Inst_3; NotInst_4 := All_Comps_In-Inst_4; NotInst_5 := All_Comps_In-Inst_5; NotInst_6 := All_Comps_In-Inst_6; NotInst_7 := All_Comps_In-Inst_7; NotInst_8 := All_Comps_In-Inst_8; NotInst_9 := All_Comps_In-Inst_9; NotInst_10 := All_Comps_In-Inst_10; OutPut(All_Comps_In-(NotInst_1 + NotInst_2 + NotInst_3 + NotInst_4+ NotInst_5 + NotInst_6 + NotInst_7 + NotInst_8+NotInst_9 + NotInst_10)); WriteLn; Write('машины, которые имеет хотя бы один институт:'); OutPut(All_Comps_In); WriteLn; Write('машины, которых нет ни в одном институте:'); OutPut(All_Comps - All_Comps_In); WriteLn; While not KeyPressed Do; End. Пока всё работает... :thanks: |
volvo |
21.02.2005 11:36
Сообщение
#4
|
Гость |
Что это? Я про задание №2 ... А можно несколько вопросов? В скольки местах программы нужно производить изменения, если изменятся входные данные для программы?
Случай 1: изменилось количество институтов (увеличилось на N). Нужно добавить как минимум 2*N переменных, плюс к этому - изменить параметры, передаваемые в OutPut ... Вероятность ошибки - высокая (достаточно забыть изменить в одном месте и результат уже будет неверным) Случай 2: изменилось количество типов компьютеров (например, добавился еще PentiumIV). Нужно не забыть изменить OutPut, иначе новый тип компьютеров просто не будет печататься ... Вероятность ошибки - довольно высокая, если добавляется несколько типов, можно что-то упустить ... А если делать вот так: Код Uses Crt; Type Comps = (i386, i486, Apple, Pentium, Acer, Macintosh); TComps = set of Comps; Const names: array[Comps] of string = ('i386', 'i486', 'Apple', 'Pentium', 'Acer', 'Macintosh'); All_comps : TComps = [i386, i486, Apple, Pentium, Acer, Macintosh]; maxInst = 10; Inst: array[1 .. maxInst] of TComps = ( [i386,Acer, Pentium], [Acer, Pentium], [Apple, Pentium ], [Pentium, Acer, i486], [i386,Acer, Pentium], [Acer, Pentium], [Apple, Pentium ], [Pentium, Acer, i486], [Apple, Pentium ], [Pentium, Acer, i486] ); Var one, all: TComps; Procedure OutPut(s : TComps); Var i: Comps; Begin For i := low(Comps) To High(Comps) Do If i in s then write(names[i] + ' '); Writeln End; Var i: integer; Begin ClrScr; one := []; all := all_comps; For i := 1 To maxInst Do begin one := one + Inst[i]; all := all * inst[i]; end; Write('машины, которыми обеспечены все институты:'); output(all); Write('машины, которые имеет хотя бы один институт:'); OutPut(one); Write('машины, которых нет ни в одном институте:'); OutPut(All_Comps - one); While not KeyPressed Do end. Что изменилось? Случаи те же: 1. (изменилось количество институтов). Изменяем maxInst. Теперь, пока необходимое количество данных не будет добавлено в массив (единственный !!!), программа просто не скомпилируется... Двлее в программе ничего менять не нужно... 2. (изменилось количество типов компьютеров). Добавляем новый тип в Comps... Аналогично, пока все необходимые данные не будут откорректированы, программа не запустится. Вероятность ошибочных результатов = 0 ... ;) |
-rov4- |
21.02.2005 11:48
Сообщение
#5
|
Гость |
volvo,
Когда я просила помочь мне решить эти задачи, никто не откликнулся, пришлось просить помощи у других. И уж что получилось, то получилось. Для меня было главное - решить задачу и получить ответ. (Экспериментировать и сравнивать я не могу, так как только начала изучать Паскаль и очень слабо в этом разбираюсь.) Но спасибо за подсказку. Конечно, твоё предложение лучше. ;) |
volvo |
21.02.2005 11:55
Сообщение
#6
|
Гость |
Цитата(-rov4- @ 21.02.05 10:48) volvo, Когда я просила помочь мне решить эти задачи, никто не откликнулся Правда? А что, так трудно было сходить по ссылке, которую я выложил через 19 минут после того, как был задан вопрос, и пройдя по которой почти всю вторую задачу можно найти решенной? Цитата(-rov4- @ 21.02.05 8:22) Итак, я написала программы для этих 2-х заданий Правда? http://www.asu.pstu.ac.ru/book/pol/progs/pr22.htm |
Altair |
21.02.2005 14:32
Сообщение
#7
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
offtop
ух какие все злые rov4, соглашайся во всем, и заходи еще к нам end offtop -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Текстовая версия | 8.06.2024 4:12 |