Matematické Fórum

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

#1 12. 11. 2013 22:54

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Posloupnost, každou hodnotu vypsat pouze jednou

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

 

#2 12. 11. 2013 23:17

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

je to program v pascalu

Offline

 

#3 13. 11. 2013 09:48

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ 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

 

#4 13. 11. 2013 10:03

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

čauu
tak budu je zadávat já budou jenom celá kladná čísla v rozsahu 0-10 000

Offline

 

#5 13. 11. 2013 12:44

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ 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


Dál si zkus rozmyslet, jak budeš hledat, když budeš mít nějaké číslo, jestli se nevyskytuje už v té výstupní posloupnosti (kterou si budeš muset také nadefinovat-stejně jako pro vstup) - nejlépe na to vytvořit funkci

Offline

 

#6 13. 11. 2013 12:50

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

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

 

#7 13. 11. 2013 13:28

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ 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

 

#8 13. 11. 2013 13:39

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

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

 

#9 13. 11. 2013 14:33

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ ho77a:
Jo tam něco chybí
Celé takto:

Offline

 

#10 13. 11. 2013 14:49

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

takže tak jak to tady je je celý program nic jinýho se tam nemusí přidávat?

Offline

 

#11 13. 11. 2013 15:53

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

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

 

#12 13. 11. 2013 17:00

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

nechápu Stýve já vidím pascal poprvý v životě a mám stvořit něco co nechápu a nerozumím tomu

Offline

 

#13 14. 11. 2013 11:25 — Editoval Honzc (16. 11. 2013 12:45)

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ Stýv:
Zdravim, to je dobra myslenka (i kdyz pro vypis ma nejaka omezeni)
↑ ho77a:
Program podle návodu ↑ Stýv:

Offline

 

#14 15. 11. 2013 22:14

ho77a
Zelenáč
Příspěvky: 19
Reputace:   
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

a jak by to bylo i pro záporný čísla?
co by se tam do toho programu muselo přidat?

Offline

 

#15 16. 11. 2013 12:59

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Posloupnost, každou hodnotu vypsat pouze jednou

↑ 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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson