Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravim,nejsem zrovna zdatný v programování, jsem na úplném začátku, takže asi se některým bude zdát tento příklad jako triviální, ale ja si s ním asi zlomím hlavu!:)prosím někoho, jestli by mi s ním nepomohl.Jedná se o vytvoření algoritmu v Delphi 7...
Program načte přirozené číslo N a dále N trojic celých čísel a pro každou zadanou trojici čísel zjistí, zda jsou shodná všechna tři, libovolná dvě nebo všechna tři různá, tj. pod každou zadanou trojici vypíše text: "shoda3", "shoda2" nebo "shoda0".
mockrát děkuju předem!každá rada bude nad zlato!:)děkuju
Offline
No, nejprve je důležité si uvědomit, kolikrát cyklus povede. Aneb, kolik kombinací existuje. Na pořadí nezáleží. :-)
No, ale je jasné, že potřebuješ 3x to projet ze zadání... To znamená AB, AC, BC. Možná tu matematici nastíní něco unikátního, ale já bych to udělal tak no. Takže cyklus a projedeš to, co jsem napsal. Potom si uděláš pomocnou proměnnou, kam budeš ukládat, zda-li se AB, AC či BC rovná. No a nakonci si zjistíš:
- pokud počet kombinací se rovná té proměnné, všechny jsou stejné
- pokud proměnná je menší jak počet kombinací, jsou ty dvě stejné
- pokud proměnná je rovna nule, ani jedno číslo není stejné
samozřejmě se toto dá demonstrovat pro více inputů (čísel). Pro 4 čísla by byl počet kombinací 6 a tak dále.
Offline
↑ RePRO: S tím zobecněním na čtyři čísla bych byl trochu opatrnější. Může se tam totiž například stát, že budou existovat dvě různé dvojice stejných čísel.
Pokud jde o trojice čísel, tak díky tranzitivitě rovnosti jde něco málo výpočetně ušetřit, ale není to nijak zvlášť podstatné. Nebude třeba žádná pomocná proměnná, která se na závěr bude muset testovat na rovnost 3, 1 a 0, jak to musíš dělat ty (BTW: nikdy nemůže být rovna 2). V nejhorším případě budu potřebovat tři porovnání (v jakémsi srozumitelném pseudokódu):
READ(N)
FOR I = 1 TO N DO
READ(A, B, C)
IF A=B THEN IF A=C THEN shoda3
ELSE shoda2
ELSE IF A=C THEN shoda2
ELSE IF B=C THEN shoda2
ELSE shoda0EDIT: Ne, že by řešení od RePRO bylo špatné, ale rozhodně není na místě tvrdit, "co je důležité si uvědomit", neboť to nemusí být pravda a dotýká se to pak tohoto. Raději bych příspěvek uvedl: "Napadlo mě toto řešení:".
Offline
↑ Spuntik: To je to, že když A=B a také A=C, tak už nemusím testovat, zda také B=C, protože to už musí být. Toho využívám při detekci shoda3.
Offline
↑ musixx:
nezlob se, třeba se mi vysměješ, ale s programováním jsem uplně na začátku.Mohl by ten algoritumus vypadat nějak takhle??
var
a,b,c,N:integer
begin
readln(N);
for i:=1 to N
readln(a,b,c);
íf a=b then if a=c then shoda 3
else shoda 2
else if a=c then shoda 2
else if b=c then shoda 2
else shoda 0;
readln;
end.Offline
Tranzitivitu jsem si vůbec neuvědomil. Je pravda, že jí tady využiješ pěkně. Jinak pro tři čísla nepotřebuješ žádnej cyklus. Tady něco máš, šlo mi to i zkompilovat:
program stejneCisla;
uses CRT;
var a, b, c, shoda : integer;
begin
a := 2;
b := 2;
c := 4;
if (a=b) then
if (a=c) then shoda := 3
else shoda := 2
else if (a=c) then shoda := 2
else if (b=c) then shoda := 2
else shoda := 0;
write('Pocet stejnych: ', shoda);
readkey;
clrscr;
end.Offline
↑ Sonic44: Co Ti na tom nevalí? Algoritmus je dobře, zkoušel jsem to.
Offline
↑ Sonic44: Je rozdíl mezi algoritmem a napsaným kódem. To, co jsem Ti napsal je pouze logická demonstrace toho, co potřebuješ. Je to napsané správně. Je přece ale naprosto jasné, že pokud můj kód nakopíruješ někam do Delphi Editoru (já jsem to psal v Pascal Editoru), tak Ti to nepovalí...
Offline