Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Рекурсивная фунукция и множества

Автор: $rvr4vr 16.12.2006 1:53

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 16.12.2006 2:00

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

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 16.12.2006 2:09


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 16.12.2006 2:09

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

Автор: Malice 16.12.2006 2:11

А что надо ?

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


Автор: $rvr4vr 16.12.2006 2:19

Цитата

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


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

ввел такое множество [5, 8, 23, 1,121] выдало ошибку переполнения стека. все так же как и в моих вариантах

Автор: Malice 16.12.2006 2:19

Вон чего, тогда смотри, я свой пост поправил..

Автор: $rvr4vr 16.12.2006 2:24

Вот! теперь все по теме! спасибо! give_rose.gif Респект

Автор: volvo 16.12.2006 2:28

$rvr4vr, учись задавать вопросы, договорились... Не надо путать ни себя, ни других. Если У ТЕБЯ просили

Цитата
Описать функцию card(A), подсчитывающую количество элементов, в множестве А типа М.
, то какого ... ты пытался сделать функцию, получающую параметр типа L ???

Автор: $rvr4vr 16.12.2006 2:46

Ладно я постараюсь. Перепутал слегка буквы и всех заморочил.

Автор: $rvr4vr 18.01.2007 17:21

не получается нормально сделать ввод множества. делал так:

э
...
while ch<>#27 do
begin
ch:=readkey;
readln(p);
include(d,p);
end;
...


работает мягко говоря коряво

Автор: volvo 18.01.2007 18:23

Я так понимаю, ты хочешь сделать следующее: если пользователь ввел число, то добавить во множество это число, а если был нажат Esc, то просто закончить ввод? Тогда придется чуть-чуть доработать вот это:
http://forum.pascal.net.ru/index.php?s=&showtopic=2361&view=findpost&p=38136