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
Stránky: 1
e dán počet hodnot posloupnosti, poté posloupnost čísel a1,...an. Čísla posloupnosti na vstupu nejsou nijak uspořádána, hodnoty se mohou opakovat, na výstupu májí být vypsána čísla této posloupnosti ale žádné z nich v output nesmí být dvakrát. Na pořádí nezáleží.
Např. pro vstup
4
8 7 7 4
bude správným výsledkem posloupnost hodnot
8 7 4
Program má být pomocí polí a já nemám ani páru jak začít, budu vděčnej za každou pomoc kterou mi můžete poskytnout
Offline
↑ ho77a:
Nejdříve je potřeba si ujasnit, zda se vstupní hodnoty budou číst z nejakého souboru nebo je budeš zadávat sám. Pokud je budeš zadávat sám, tak je ještě třeba u té posloupnosti vědět, zda je budeš opravdu psát ty nebo se třeba budou generovat náhodně (v nějakém rozsahu) a zda ta čísla budou celá (kladná i záporná nebo jenom přirozená) nebo to mohou být i desetinná čísla.
Až odpovíš na tyto otázky, pak můžeme pokračovat dále.
Offline
↑ ho77a:
Sice nevím, proč jsou čísla až tak velká, ale budiž.
Pak tedy můžeš začít:
1.Natypovat pole, kam budeš načítat zadanou posloupnost, a tu výstupní posl.
2.Zavést proměnné (pro počt členů, ta pole posloupností, i pro cyklus)
Zatím si zkus naprogramovat, abys mohl zadávat a pak vypsat zadanou posloupnost (to jen pro kontrolu, jestli jsi to načetl dobře)
Kdybys nevěděl, tak podívej
Offline
mohlo by to jít takhle ale potřebuju aby si ta funkce pamatoval ty hodnoty z pole.
jak by jsi to udělal ty ?
program posl;
const MaxN= 10000;
var posloupnost: array [1..MaxN] of integer;
var i,n: integer;
function Opakovani (X: integer): boolean;
var cislo, predchozi: integer;
begin
cislo := X;
predchozi :=0;
opakovani :=true;
if cislo=predchozi then opakovani:=false;
cislo := predchozi;
end;
begin
writeln ('Zadej pocet cisel, ktere bude posloupnost obsahovat:');
readln (n);
writeln ('Zadej cisla posloupnosti:');
for i:= 1 to n do
read (posloupnost[i]);
for i:= 1 to n do
if opakovani(posloupnost[i]) then write (posloupnost[i],' ');
end.
Offline
↑ ho77a:
Jenom taková poznámka:
To bych chtěl vidět jak budeš zadávat 10 000 položek pole (že ho máš nadefinované tak dlouhé)
Aby si ta funkce pamatovala ty hodnoty z pole, tak si ty použité třeba ukládej do výstupního pole a pak vždy každé další číslo vstupu porovnávej po řadě se všemi čísly výstupního pole
Protože číslo může být i 0 (na vstupu), tak bych doporučil abys na začátku to vstupní pole naplnil takto: první prvek = první prvek vstupního pole a dále od indexu 2 až po n třeba číslem (-1)
Výpis výstupního pole udělej až na konci třeba pomocí cyklu while.
Já jsem to udělal třeba takto:
Offline
rozsah měl být od 0 do 10000
jenom bych měl dotaz co znamenají ty tečky tam něco chybí?
jinak asi nic jinýho bych nevymyslel co jsi udělal protože stačí mi ten učitel tam něco kecá a nedívá se na nás jestli tomu rozumíme a potom dá úkol
Offline
proč to dělat jednoduše, když to jde i složitě, že? přitom stačí něco jako
uzBylo[0..10000]:boolean;
read(n);
for i:=1 to n begin
read(x);
if(uzBylo[x]=false) write(n);
uzBylo[x]:=true;
end;
syntaxi pascalu už si moc nepamatuju, ale myšlenka je snad jasná
Offline
↑ ho77a:
1. Rozšířit deklaraci pole UzBylo: array[0..10000] of Boolean; na
UzBylo: array[0..20000] of Boolean;
2.Zavést proměnnou y:
Tedy sekce proměnných by vypadala takto:
var i,n,x: Integer;
UzBylo: array[0..20000] of Boolean;
3.část programu
for i := 1 to n do //cyklus pro vsechna zadana cisla
begin
Read(x); //cte postupne zadana cisla
if not UzBylo[x] then //v poli se vyhleda misto s indexem (x) daneho cisla
//a kdyz je tam False
begin
Write(x:3); //tak toto cislo vypise
UzBylo[x] := True; //a v poli UzBylo se na index cisla zapise True (1)
end; //pokud je uz na indexu (x) True, tak se zadne cislo nevypise
end;
předělat takto:
for i := 1 to n do
begin
Read(x);
if x<0 then
y := 10000+abs(x)
else
y := x;
if not UzBylo[y] then
begin
Write(x:3);
UzBylo[y] := True;
end;
end;
Offline
Stránky: 1