program na seřazení zadaných čísel

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

martina146
nováček
Příspěvky: 2
Registrován: červen 11
Pohlaví: Nespecifikováno
Stav:
Offline

program na seřazení zadaných čísel

Příspěvekod martina146 » 07 čer 2011 18:09

Ahoj, potřebovala bych poradit s programem, který mám vytvořit ve SMALL BASICU.
Má řadit čísla, která si uživatel zadá (k tomu jsem použila pole) od nejmenšího po největší... Pro řazení mám použít Bubble sort, ale nevím jak ho do programu zapsat...
Za každou radu budu vděčná :smile:

Reklama
Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod domitea » 07 čer 2011 18:16

Teď se to řeší zde (kód je založen na stejném principu)

P.S. Se nějak s tím small basicem roztrhl pytel, kde ten Visual Basic, C, C++ a můj oblíbený C# :smile: Jestli to takhle půjde dál, bude to chtít vlastní sekci :lol:

Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: květen 07
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod X » 07 čer 2011 18:49

Já chci vlastní sekci pro nejlepší, nejvýkonnější a uživatelsky přítulný Sam Basic a Master Basic :lol:

PŘÍKAZY SAM BASICU + SAM DOSU (MASTER BASIC + MASTER DOS ZNAČNĚ ROZŠIŘUJE PALETU PŘÍKAZŮ)
► Zobrazit spoiler

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: program na seřazení zadaných čísel

Příspěvekod faraon » 07 čer 2011 19:23

Ahoj, umíš použít cyklus For? Bubblesort neboli bublinkové řazení se jmenuje podle toho, že největší nebo nejmenší hodnoty postupně "vybublávají" na svou požadovanou pozici. Je to jednoduchý, ale zoufale neefektivní algoritmus :o

Takže například máš pole čtyř čísel p[ ] v tomhle pořadí: 8, 5, 1, 3, které se dá od nejmenšího po největší seřadit třeba tímhle způsobem:

Kód: Vybrat vše

For i = 1 To 3
    For j = 3 To i Step -1
        If p(j+1) < p(j) Then
            w = p[j]
            p[j] = p[j+1]
            p[j+1] = w
        EndIf
    EndFor
EndFor


Je to jeden z řady způsobů jak se dá Bubblesort provést, obsahuje dva vnořené cykly i a j, které běží "proti sobě".
Vnější cyklus i ukazuje kam se má hledaná hodnota umístit, pod ní je pole už setříděné.
Vnitřní cyklus j v opačném směru prohledává nesetříděný zbytek pole zhora dolů a posunuje menší čísla níž až do jejich definitivní pozice.
Pokud je hodnota o jednu buňku nad ukazatelem j menší než ta na kterou ukazuje, tak se mezi sebou prohodí, k tomu slouží pomocná proměnná w.
Když otočíš znaménko v podmínce z < na >, bude se řadit obráceně - od největšího po nejmenší číslo, zkus si to.
Tady vidíš stav během jednotlivých průchodů:

Kód: Vybrat vše

i       j  |  p[1]    p[2]    p[3]    p[4]
-----------+-------------------------------
1       3  |    8       5       1       3
1       2  |    8       1       5       3
1       1  |    1       8       5       3
2       3  |    1       8       3       5
2       2  |    1       3       8       5
3       3  |    1       3       5       8


Pro srovnání se hodí zobrazit nesetříděné pole před řazením, a potom do druhého řádku setříděný výsledek :wink: Další způsoby jak Bubblesort vyrobit včetně animací najdeš třeba na Wikipedii.




domitea: To víš, vysvědčení se blíží, je potřeba ukázat co se na gymplu naučili/y za celý rok :lol: A proč zrovna Small Basic? Protože naše školství bylo před pár lety prodáno do otroctví za třicet stříbrných :evil:

Langer-Ballmer.jpg
Langer-Ballmer.jpg (15.74 KiB) Zobrazeno 5345 x


X: Hlásím se o můj oblíbený Sinclair BASIC, však ten SAM z něj vycházel :inlove:
Naposledy upravil(a) faraon dne 07 čer 2011 19:42, celkem upraveno 1 x.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: květen 07
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod X » 07 čer 2011 19:28

To jo, ale Sinclair Basic je dost zoufalý :lol:

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: program na seřazení zadaných čísel

Příspěvekod faraon » 07 čer 2011 19:34

Ale kdeže, zoufalý byl microsoftí BASIC v.2 na Commodore 64. Sinclair BASIC na Spectru/Didaktiku dokázal úžasná kouzla, pochopitelně že jeho předchůdce na ZX-81 se s ním nemohl srovnávat, ale ten se vešel do 8 KiB!

Didaktik Gama.jpg
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: květen 07
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod X » 07 čer 2011 20:41

Tak souhlasím, že MS Basic je ještě zoufalejší :lol:

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod domitea » 07 čer 2011 20:52

On i ten Visual Basic není žádná výhra :-(

Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: květen 07
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: program na seřazení zadaných čísel

Příspěvekod X » 07 čer 2011 21:04

Jako mě fakt chybí nějaký primární Basic na PC přímo zadrátovaný v ROM, ale ne ten MS :lol:

PetrJan
nováček
Příspěvky: 14
Registrován: květen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: program na seřazení zadaných čísel

Příspěvekod PetrJan » 17 kvě 2012 18:56

Dobrý den,
mohl bych poprosit o opravu? Stále mi to vypíše akorát "5,8,5,8,8".
A mám dotaz na Faraona... Proč v jeho kodě je na konci "3,3,3,5,5,8". Proč tam není "1" a proč se tam ty čísla opakují? Potřebuji vypsat pouze ty, která jsem zadal... Díky

Kód: Vybrat vše

TextWindow.WriteLine("Kolik čísel chceš seřadit?")
pocet = TextWindow.ReadNumber()

For i = 1 To pocet
  TextWindow.WriteLine("Zadej " + i + ". číslo")
  cislo[i] = TextWindow.ReadNumber()
EndFor
   
For i = 1 To pocet-1
    For j = pocet-1 To i Step -1
        If cislo[j+1] < cislo[j] Then
            w = cislo[j]
            cislo[j] = cislo[j+1]
            cislo[j+1] = w
          EndIf
          TextWindow.WriteLine(w)
      EndFor
EndFor

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: program na seřazení zadaných čísel

Příspěvekod faraon » 17 kvě 2012 20:27

Ta čísla co vidíš v posledním sloupci jsou obsah buňky p[4] řazeného pole, takže ten tvůj program úplně správně vypisuje to, co po provedeném swapnutí proměnných zůstalo v pomocné proměnné w. Jestli chceš vidět obsah seřazeného pole, musíš na konec programu dopsat ještě jednu smyčku a nechat si ho zobrazit celé:

Kód: Vybrat vše

For i = 1 To pocet
  TextWindow.WriteLine(cislo[i])
EndFor


Pak zjistíš že ten tvůj program řadí dobře, jen ti o tom neměl jak říct...

Ten řádek TextWindow.WriteLine(w) klidně vyhoď (nebo odkomentuj), je tam zbytečný. Pokud ho nepoužíváš při ladění programu, abys věděl co se ve kterém okamžiku přesně děje, tak tě už jenom mate ;-)

A příště si založ vlastní téma.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

PetrJan
nováček
Příspěvky: 14
Registrován: květen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: program na seřazení zadaných čísel

Příspěvekod PetrJan » 17 kvě 2012 21:53

Moc jsem to nepochopil, ale funguje to. Takže díky moc.
Proč bych měl zakládat nové téma, když tohle se věnuje přesně tomuto problému?


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti