Avatar
pavell9
Člen
Avatar
pavell9:

Dobrý den a zase mám problém

Dostal jsem zadání:
na vstupu jsou dány prvky množiny A oddělené čárkou a prvky množiny B oddělené čárkou. Prvky množin mohou být písmena a číslice.
Určete:
zda se množiny rovnají
sjednocení množin AB
rozdíl množin AB

Zkoušel jsem to následovně: Vytvořil jsem si novou proměnou type mnozina: = string[20];
Potom jsem si nadeklaroval: var a:set od mnozina;
A pak už v programu jsem použil proceduru copy abych z komponenty edit zkopíroval ty prvky do množiny a, ale nefunguje to tak jak jsem si představoval, protože to vůbec nefunguje. Potřeboval bych poradit, jestli má někdo jiný nějaký nápad jak by se to dalo nějak udělat:). Doufám že to půjde hlavně přes to set od abych na ty operace mohl použít jen operátory =, +, -
Pak jsem měl ještě jiný nápad, ale ten tady už rozepisovat nebudu, protože ten byl úplně ztracenej

Předem díky za dobré nápady

 
Odpovědět 5.5.2015 21:28
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na pavell9
David Novák:

Jdeš na to nějak divně.. Doporučuju nastudovat základy programování ;)

Jinak to s těmi set of string[20] - to je naprosto zbytečné.. vytvořil bys tak množinu dvacetiznakových stringů. Použij normálně set of char.
V Pascalu jsem ale dlouho nic nedělal, takže konkrétněji ti moc poradit nemůžu.. Najdi si někde, jak funguje set of a funkce k tomu..

A to kopírování z edit.text je blbost - to nemůže fungovat. Budeš si to muset rozparsovat. Tj. projet cyklem a rozřezat po čárkách a přiřazovat do množiny po jednotlivých znacích.

Nahoru Odpovědět 5.5.2015 22:26
Chyba je mezi klávesnicí a židlí.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na pavell9
Martin Dráb:

Množiny jsem už dlouho nepoužil, ale dost pochybuju, že se ti zkompiluje ten set of string[20]. Myslím, že množiny mohou být odvozeny jen od ordinálních typů (celá čísla, znak, boolean, interval, výčet a asi ještě něco dalšího) a jejich maximální velikost je 255 prvků. Interní implementace je podle mě pomocí bitových polí. Pro každý prvek, který potenciálně může být v množině, obsahuje množina bit, který je nastaven na 1, je-li onen prvek v ní a na 0, není-li tomu tak. V takovém případě by množina dvacetiznakových ANSI stringů zabírala 25620 bitů, což není zrovna málo.

Ale možná se to od dob, kdy jsem to zkoumal (ještě v Pascalu, ne v Delphi) změnilo. Ale řekl bych, že tyhle konstrukty jazyka zůstaly +- stejné, už kvůli kompatibilitě.

Novější Delphi (tak od 2010?) obsahuje generické kontejnery, kde snad je i množina (TSet<TypPrvku>). Zkus se podívat do unity Generics.Collec­tions.

Nahoru Odpovědět 6.5.2015 2:57
2 + 2 = 5 for extremely large values of 2
Avatar
pavell9
Člen
Avatar
Odpovídá na David Novák
pavell9:

Ale když udělám tadytoto tak to taky nefunguje, hází to: Incompatible types got "char" expected "set od char"
Var a: set od char;
i:integer;
Begin
for i:=1 to length(edit1.text) do
If edit1.text <> ',' then
a:=edit1.text[i];

 
Nahoru Odpovědět 7.5.2015 7:22
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na pavell9
Martin Dráb:

a je množina, takže k ní přičítej (resp. do ní přiřazuj) zase množinu.

Var
  a: set od char;
  i:integer;
Begin
for i:=1 to length(edit1.text) do
  If edit1.text <> ',' then
    a:= a + [edit1.text[i]];
Nahoru Odpovědět 7.5.2015 7:28
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.