Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекурсивная фунукция и множества
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
$rvr4vr
type M=set of 0…99 Описать функцию card(A), подсчитывающую количество элементов, в множестве А типа М.
Вот так я попытался сделать, но естественно не получилось.

type M=set of 0..99;
L=set of byte;
function card(s:L):integer;
const k:m= [];
var i,j:integer;
begin
if s=k then card:=j;
else begin
for i:=0 to 99 do
if i in s then
begin
exlude(s,i);
j:=j+1;
card:=card(s);
end;
end;
**************


может кто поможет?
volvo
Бред, конечно, работать со множествами рекурсивно, но что делать...

function card(s: L): integer;
var i: integer;
begin
if s = [] then card := 0
else begin

i := 0;
while not (i in s) do inc(i);
exclude(s, i);
card := card(s) + 1;

end;
end;
Malice

type M=set of 0..99;
L=set of byte;
function card(s:L):integer;
const k:m= [];
var i:integer;
begin
if s=k then card:=0;
else begin
i:=0;
while not (i in s) do inc (i);
exclude(s,i);
card:=card(s)+byte(i<100);
end;
end;


Типа того..
$rvr4vr
Как то она у тебя не работает. Ввожу [21,4,5,45,66,1] выдает результат 6. она просто посчитала количество элементов во множестве!
Malice
А что надо ?

Цитата
Описать функцию card(A), подсчитывающую количество элементов

$rvr4vr
Цитата

количество элементов во множестве А типа М!


Например, card([5, 8, 23, 1, 115])=4

ввел такое множество [5, 8, 23, 1,121] выдало ошибку переполнения стека. все так же как и в моих вариантах
Malice
Вон чего, тогда смотри, я свой пост поправил..
$rvr4vr
Вот! теперь все по теме! спасибо! give_rose.gif Респект
volvo
$rvr4vr, учись задавать вопросы, договорились... Не надо путать ни себя, ни других. Если У ТЕБЯ просили
Цитата
Описать функцию card(A), подсчитывающую количество элементов, в множестве А типа М.
, то какого ... ты пытался сделать функцию, получающую параметр типа L ???
$rvr4vr
Ладно я постараюсь. Перепутал слегка буквы и всех заморочил.
$rvr4vr
не получается нормально сделать ввод множества. делал так:
э
...
while ch<>#27 do
begin
ch:=readkey;
readln(p);
include(d,p);
end;
...


работает мягко говоря коряво
volvo
Я так понимаю, ты хочешь сделать следующее: если пользователь ввел число, то добавить во множество это число, а если был нажат Esc, то просто закончить ввод? Тогда придется чуть-чуть доработать вот это:
Строки
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.