Консультация № 177966
21.04.2010, 16:59
43.38 руб.
0 3 1
Доброго времени суток дорогие эксперты!

Снова обращаюсь до вас, чтобы вы решили задачу. Она одна, но необходимо решить её в 2х вариантах:
1) с использованием множества соответствующего типа;
2) с использованием массива как аналога множества со структурой вида:
set_arr2: array[0..n] of byte.


Вот сама задача

Из множества целых чисел, выделить подмножество чисел кратных минимальному числу всего множества.


Написать программу в 2х вариантах надо на ТП-7.0 ну и чтоб она тоже на ABC работала.
Спасибо за внимание к задаче, эксперты. Оставляйте поболее для коментариев, чтобы проще понималось.

Обсуждение

Неизвестный
21.04.2010, 19:29
общий
Уточним (правильно ли Вас понимаем): множество - это Set of BYTE или Set of Integer ....?
Неизвестный
22.04.2010, 03:43
общий
это ответ
Здравствуйте, Юдин Евгений Сергеевич.
Не знаю что такое "на АВС работала", но нижеприведенный код писался и проверялся в ТР-7.0
Множество в виде массива в приведенном решение ведет себя как и традиционные множества (только места в памяти больше занимает).
Обратите внимание на замечание!

Приложение:
{
Замечание:
Строго говоря множество допустимых рассматриваемых чисел должно начинаться не с 0, а с 1,
так как результат операции деления на 0 не определен.
}
Uses
Crt;
Type
TSet = Set of Byte; {Множество в стиле Паскаля}
TSetAr = Array[1..255] of byte; {Множество в виде массива}
Const
MaxCount = 20; {Число элементов в генерируемом множестве}
Var
i: Integer; {счетчик}
num, min: Byte; {генерируемое число, минимальное значение}
sSrc, sRes: TSet; {исходное и результирующее множество в традиционном представлении}
aSrc, aRes: TSetAr; {исходное и результирующее множество в виде массива}
begin
ClrScr; {Очистка экрана}
Randomize; {Инициализация счетчика псевдослучайных чисел}
{Init sets}
for i:=1 to 255 do begin {заполним множества в виде массива начальными нулями}
aSrc[i] := 0;
aRes[i] := 0;
end;
for i:=1 to MaxCount do begin {генерируем числа последовательности}
num := Random(254) + 1; {запоминаем случайное число из диапазона 1..255}
Include(sSrc, num); {делаем отметку о нем в традиционном множестве}
aSrc[num] := 1; {и поднимаем флажок в массиве}
end;
Writeln('Source set (both set and array):');
for i:=1 to 255 do begin {вывод на экран сгенерированной последовательности}
if (i in sSrc) {(aSrc[i] = 1)} then {если число в составе множества}
Write(i:4); {напишем его на экране}
end;
Writeln;
min := 0; {сперва минимальное значение не определено}
for i:=1 to 255 do begin
if (min = 0) and (i in sSrc) {(aSrc[i] = 1)} then begin
{когда встретится первое число в множестве}
min := i; {запомним его как минимальное}
Break; {и покинем цикл}
end;
end;
Writeln('min = ', min); {напишем минимальное число на экране}
{Solve - нахождение подмножества}
i := min; {установим счетчик равным минимальному значению}
While (i < 255) do begin {пока значение не больше максимально возможного}
if (i in sSrc) then begin {если значение счетчика присутствует в множестве}
Include(sRes, i); {пополним результирующее множество этим значением}
end;
if (aSrc[i] = 1) then begin {если значение счетчика присутствует в множестве}
aRes[i] := 1; {поднимем флажок в результирующем массиве}
end;
inc(i, min); {перейдем к рассмотрению следующего претендента в подмножество}
end;
Writeln('Result set (from set):'); {вывод результирующего множества из традиционного хранилища}
for i:=1 to 255 do begin
if (i in sRes) then
Write(i:4);
end;
Writeln;
Writeln('Result set (from array):'); {вывод результатов множества из массива}
for i:=1 to 255 do begin
if (aRes[i] = 1) then
Write(i:4);
end;
Writeln;
Writeln('Done. Press any key...');
readkey;
end.
Неизвестный
23.04.2010, 14:58
общий
Цитата: 422
Уточним (правильно ли Вас понимаем): множество - это Set of BYTE или Set of Integer ....?


1)байт
Форма ответа