IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с множествами
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Женский

Репутация: -  0  +


Привет всем!
Обращаюсь к вам за помощью, так как самой выполнить задания, видимо не дано... sad.gif
Необходимо написать программы к следующим заданиям:
1. Дана непустая последовательность символов. Требуется построить и напечатать множество, элементами которого являются встречающиеся в последовательности: цифры от ‘0’ до ‘9’.
2. Постановка задачи: Задан список объектов, включающий в зависимости от варианта названия ЭВМ или видов спорта. Известно, что в каждом институте имеется определенный набор вычислительных машин, а учащиеся каждой группы занимаются определенными видами спорта. Необходимо задать конкретные наборы ЭВМ (перечни видов спорта) для каждого института (каждой группы). Количество институтов(групп) указано в варианте.
Введя исходные данные, необходимо построить и распечатать множество, удовлетворяющее указанному в варианте условию.
Вариант задания: Задано множество вычислительных машин, которыми может быть обеспечен институт: IBM-386, IBM-486, Pentium, Macintosh, APPLE, ACER. Известен набор машин, имеющихся в каждом институте. Количество институтов (N) указано в варианте:
требуется построить и распечатать множество, включающее в себя вычислительные машины:
• которыми обеспечены все институты (N=10).
• которые имеют хотя бы один институт.
• которых нет ни водном институте.

Пожалуйста, помогите, чем сможете.
Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






rov4
Насчет задачи №2: эту же задачу (немного в другой вариации - про магазины и продукты) я решал здесь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






blink.gif Что это? Я про задание №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 ... ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






volvo,
Когда я просила помочь мне решить эти задачи, angry.gif никто не откликнулся, пришлось просить помощи у других. И уж что получилось, то получилось. Для меня было главное - решить задачу и получить ответ. (Экспериментировать и сравнивать я не могу, так как только начала изучать Паскаль и очень слабо в этом разбираюсь.) Но спасибо за подсказку. Конечно, твоё предложение лучше. ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(-rov4- @ 21.02.05 10:48)
volvo,
Когда я просила помочь мне решить эти задачи,  angry.gif никто не откликнулся

angry.gif Правда? А что, так трудно было сходить по ссылке, которую я выложил через 19 минут после того, как был задан вопрос, и пройдя по которой почти всю вторую задачу можно найти решенной?

Цитата(-rov4- @ 21.02.05 8:22)
Итак, я написала программы для этих 2-х заданий

Правда?
http://www.asu.pstu.ac.ru/book/pol/progs/pr22.htm
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


offtop
ух какие все злые smile.gif
rov4, соглашайся во всем, и заходи еще к намsmile.gif
end offtop


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 20:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name