Posloupnost, každou hodnotu vypsat pouze jednou – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Posloupnost, každou hodnotu vypsat pouze jednou – Pascal – Fórum – Programujte.comPosloupnost, každou hodnotu vypsat pouze jednou – Pascal – Fórum – Programujte.com

 

kejta0
Návštěvník
12. 11. 2013   #1
-
0
-

Je 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

Potřebuji pomoc, jestli s k takovému to úkolu hodí použití funkce čí procedury. A jestli používat pole. Díky za rady:)

Nahlásit jako SPAM
IP: 85.70.175.–
miHan0
Návštěvník
13. 11. 2013   #2
-
0
-

Samozřejmě, že použití funkcí, nebo procedur bude vhodné. Kdyby nic jiného, tak ti pomůžou udělat kód přehlednějším.

Co se použití pole týče ... musíš přeci použít nějakou strukturu, kam budeš hodnoty ze vstupu ukládat, aby jsi s nimi mohl pracovat. Jednou z těchto může být pole.

Nahlásit jako SPAM
IP: 46.13.193.–
kejta0
Návštěvník
13. 11. 2013   #3
-
0
-

#2 miHan 

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.

Tady je to co sem zatim stvoril, ale potrebuju vychytat aby si ta funkce pamatovala hodnoty z toho pole.

Jdou do funkce nejak dosadit ty hodnoty z pole? Opet se s poli setkavam uplne poprve.

Nahlásit jako SPAM
IP: 85.70.175.–
sleepy
~ Anonymní uživatel
422 příspěvků
13. 11. 2013   #4
-
0
-

a co takto si vytvorit metodu add(int a), ktora urobi to ze za kazdym prebehne cele pole a ak sa v poli dany prvok nenachadza tak ho supne na k-tu poziciu a k sa posunie o 1 vyssie.

Nahlásit jako SPAM
IP: 147.175.177.–
kejta0
Návštěvník
13. 11. 2013   #5
-
0
-

#4 sleepy
O takové metodě jsem ještě neslyšel, takže vůbec nevím jak funguje. Ale zřejmě se nějak zakomponuje do té funkce, ano?

Nahlásit jako SPAM
IP: 85.70.175.–
sleepy
~ Anonymní uživatel
422 příspěvků
13. 11. 2013   #6
-
0
-

#5 kejta
Metoda funkcia procedura, vsetko je to na jedno kopyto. Co som ti chel naznacit je ze si mas vytvorit funkciu na vkladanie elementou do pola, kde pouzijes jednu globalnu premennu (asi v pascale som neprogramoval uz 7 rokov tak si to vobec nepamatam). Napisem to v nejakom pseudo jazyku:

Integer cursor; // ukazuje poziciu kam sa ma vlozit dany objekt
Integer[] intArray = new Integer[MAX]; // vysledne pole prvkou

function add(Integer element) { // pridava Integer do pola
	Boolean contains = false; // premenna kde ulozis ci dane pole obsahuje alebo neobsahuje dany prvok
	for pos:=0 to cursor-1 { // iterujes po poziciu predosleho prvku
		if(intArray[pos] == element) {
			conatins = true; // ak narazis na rovanky element nastavis conatis na true
			break; // ukoncis cyklus
		}
	}
	if (! contains){ // ak pole neobsahuje dany prvok
		intArray[cursor] = element; // vlozis prvok na koniec tvojho pola
		cursor=cursor+1; // a kurzor zvysis o 1
	}
}

Je to taka zmiesanina vseli coho, ale pascal si uz naozaj nepamatam, ale malo by ti to stacit na pochopenie principu. Je to sice so zlozitostou O(n^2), ale kedze mas iba 10000 prvkove pole, je to uplne jedno.

Nahlásit jako SPAM
IP: 147.175.177.–
kejta0
Návštěvník
15. 11. 2013   #7
-
0
-

#6 sleepy
vubec nevim jak neco podobnyho napsat v Pascali

Nahlásit jako SPAM
IP: 85.70.175.–
kejta0
Návštěvník
15. 11. 2013   #8
-
0
-

spíš mě napadlo, že si udělám ještě jedno pole a do toho budu ukládet pouze ty hodnoty co chci vypsat, ale nevím jakým způsobem se dají porovnat dvě pole, jestli obsahuji nejakou hodnotu nebo ne.. 

Nahlásit jako SPAM
IP: 85.70.175.–
kejta0
Návštěvník
15. 11. 2013   #9
-
0
-

...a ještě bych potřeboval rozluštit tuto chybu - Error: Incompatible types: got "Array[1..10000] Of LongInt" expected "LongInt"

Nahlásit jako SPAM
IP: 85.70.175.–
miHan0
Návštěvník
15. 11. 2013   #10
-
0
-

#9 kejta
Mohl by jsi sem hodit kód kde ti to "vyhazuje" tu chybu?

Předpokládám, že se snažíš porovnat pole (místo dané buňky pole pomocí indexu) a proměnou typu LongInt ... ale takhle těžko říct

Nahlásit jako SPAM
IP: 62.204.249.–
kejta0
Návštěvník
15. 11. 2013   #11
-
0
-

   

program posl;

const MaxN= 10000;
var posloupnost: array [1..MaxN] of Integer;
var i,n: integer;

function Opakovani (X: integer): boolean;
var cislo, predchozi_hodnoty: integer;
begin
cislo := X;
predchozi_hodnoty := posloupnost;
opakovani :=true;

if cislo=predchozi_hodnoty then opakovani:=false;

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.
         

opravdu nevim jak nacist to pole do ty funkce..

Nahlásit jako SPAM
IP: 85.70.175.–
JoDiK
~ Anonymní uživatel
987 příspěvků
16. 11. 2013   #12
-
0
-

#11 kejta
tady se pokoušíš do jednoduché proměnné typu integer narvat celé pole 10000 celých čísel:


predchozi_hodnoty := posloupnost;
 

Vždyť ten překladač ti říká, na kterém to je řádku, jen je asi tak zmaten z toho, o co se pokoušíš, že ani neví, jak by ti tu chybu popsal...

Nahlásit jako SPAM
IP: 88.100.43.–
JoDiK
~ Anonymní uživatel
987 příspěvků
16. 11. 2013   #13
-
0
-

#11 kejta
Tohle nevím jak myslíš:

opravdu nevim jak nacist to pole do ty funkce..

To snad ani nepotřebuješ nijak "načítat", máš přece globální proměnnou pole, která je v té funkci dostupná...

Spíš si lépe promysli, co bys v té funkci chtěl dělat. Já bych to viděl třeba takhle - předáš do ní pozici zkoumaného čísla a ta funkce zjistí, jestli na všech předchozích pozících v poli to zkoumané číslo už není...

function Opakovani (pozice : integer): boolean;
var zkoumame: integer;
begin
  opakovani :=true;
  for zkoumame:=1 to pozice-1 do
    if posloupnost[pozice]= posloupnost[zkoumame] then opakovani:=false;
end;
Nahlásit jako SPAM
IP: 88.100.43.–
kejta0
Návštěvník
16. 11. 2013   #14
-
0
-

#13 JoDiK
Diky za pomoc, sice jsem na konecne reseni uplne neprisel ale treba dostanu aspon nejake body

Nahlásit jako SPAM
IP: 85.70.175.–
Mircosoft+1
Věrný člen
22. 11. 2013   #15
-
0
-

Ještě doplním jednu docela elegantní možnost: množiny.

var UzByla:set of integer;
...
UzByla:=[]; {nastavime na prazdnou mnozinu - zatim nebylo nic}
for i:=1 to pocet do
 begin
 ...nacti cislo...
 if not (cislo in UzByla) then begin {jestli tohle cislo v mnozine neni}
                               ...vypis cislo...
                               UzByla:=UzByla+cislo; {vloz cislo do mnoziny}
                               end;
 end;

Jenom nevím, jestli to bude stačit na číselný typ, který používáš - množiny mají omezený rozsah prvků. Záleží na překladači.

Nahlásit jako SPAM
IP: 194.228.20.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý