Автор: rov4 12.01.2005 16:31
Привет всем!
Обращаюсь к вам за помощью, так как самой выполнить задания, видимо не дано...
Необходимо написать программы к следующим заданиям:
1. Дана непустая последовательность символов. Требуется построить и напечатать множество, элементами которого являются встречающиеся в последовательности: цифры от ‘0’ до ‘9’.
2. Постановка задачи: Задан список объектов, включающий в зависимости от варианта названия ЭВМ или видов спорта. Известно, что в каждом институте имеется определенный набор вычислительных машин, а учащиеся каждой группы занимаются определенными видами спорта. Необходимо задать конкретные наборы ЭВМ (перечни видов спорта) для каждого института (каждой группы). Количество институтов(групп) указано в варианте.
Введя исходные данные, необходимо построить и распечатать множество, удовлетворяющее указанному в варианте условию.
Вариант задания: Задано множество вычислительных машин, которыми может быть обеспечен институт: IBM-386, IBM-486, Pentium, Macintosh, APPLE, ACER. Известен набор машин, имеющихся в каждом институте. Количество институтов (N) указано в варианте:
требуется построить и распечатать множество, включающее в себя вычислительные машины:
• которыми обеспечены все институты (N=10).
• которые имеют хотя бы один институт.
• которых нет ни водном институте.
Пожалуйста, помогите, чем сможете.
Заранее спасибо!
Автор: volvo 12.01.2005 16:50
rov4
Насчет задачи №2: эту же задачу (немного в другой вариации - про магазины и продукты) я решал http://forum.pascal.net.ru/index.php?showtopic=3618&view=findpost&p=32394
Автор: -rov4- 21.02.2005 13:22
Итак, я написала программы для этих 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 15:36
Что это? Я про задание №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 15:48
volvo,
Когда я просила помочь мне решить эти задачи, никто не откликнулся, пришлось просить помощи у других. И уж что получилось, то получилось. Для меня было главное - решить задачу и получить ответ. (Экспериментировать и сравнивать я не могу, так как только начала изучать Паскаль и очень слабо в этом разбираюсь.) Но спасибо за подсказку. Конечно, твоё предложение лучше. ;)
Автор: volvo 21.02.2005 15:55
Цитата(-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 18:32
offtop
ух какие все злые
rov4, соглашайся во всем, и заходи еще к нам
end offtop