Small Basic - načtení čísel a určení MIN a MAX*

...

Moderátor: Mods_senior

Svetýlko
nováček
Příspěvky: 5
Registrován: červen 11
Pohlaví: Žena
Stav:
Offline

Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod Svetýlko » 02 čer 2011 22:13

Ahoj, potřebovala bych poradit jak mám udělat program ve Small Basicu. Program má načíst čísla a po dokončení zadávání vypsat nejmenší a největší zadané číslo. Vůbec nevím jak na to... :huh: Předem děkuju za pomoc :wink:
Naposledy upravil(a) Žbeky dne 03 čer 2011 07:50, celkem upraveno 1 x.
Důvod: Nadpis upraven. Když ti někdo řekne, Ať upravíš nadpis, tak to neznamená, že máš založit duplicitní téma. Stačí upravit první příspěvek

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: Small Basic

Příspěvekod domitea » 03 čer 2011 05:54

OT: Změň si název tématu aby byl jasný - co je se small basicem? vyprdunul se na tebe? stojí ti přede dveřmi? + špatná sekce

Přes cyklus projdeš všechny prvky v poli s tím, že porovnáváš jejich hodnoty a ta, která je největší a nejmenší si dáš do speciálních proměnných. Zkusím vyhrabat někde svůj kód, ale škola volá :smile:

Svetýlko
nováček
Příspěvky: 5
Registrován: červen 11
Pohlaví: Žena
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod Svetýlko » 03 čer 2011 07:56

To Žbeky: Děkuju za opravení, jsem tu poprvé a nevěděla jsem jak to mám dát do nové sekce, tak se omlouvám...
To domitea: Moc jsem nepochopila jak to myslíš...:( Tovíš holka z gymplu, informatika nepatří mezi mé silné stránky...takže kdybys našel kód bylo by to skvělé :)

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: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod faraon » 03 čer 2011 16:22

Ahoj, technická otázka: odkud máš ty čísla načíst a jak program pozná že už byla všechna? Předpokládám že neznáš předem jejich počet.
Nejjednodušší možnost je načítat čísla zadávaná přímo uživatelem na klávesnici, a je určená hodnota (mimo rozsah) která řadu čísel ukončuje, třeba když jde o počet kusů něčeho, tak čísla budou pouze celá kladná, takže ukončení může být buď nula nebo jakékoliv záporné.
Návod k Small Basicu v češtině najdeš tady: http://download.microsoft.com/download/ ... 0Czech.pdf Je v něm všechno potřebné pro tvůj úkol.
Lehký návrh bych si představoval takhle nějak: (zatím v lidštině :lol:)

Kód: Vybrat vše

cislo=načti.číslo()
min=cislo
max=cislo

dokud (cislo>LIMIT)
    když (cislo<min)
        min=cislo
    koneckdyž
    když (cislo>max)
        max=cislo
    koneckdyž
    cislo=načíst()
konecdokud

zobraz ("Nejmenší: ",min)
zobraz ("Největší: ",max)


Trochu upřesni zadání (a pokus se něco stvořit) ať můžeme pokračovat.
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

d1amond
člen HW spec týmu
Elite Level 12
Elite Level 12
Příspěvky: 16119
Registrován: květen 08
Bydliště: České Budějovice
Pohlaví: Muž
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod d1amond » 03 čer 2011 16:30

Jak už bylo napsáno, použiješ pole pro uložení hodnot ze vstupu. Cyklus Ti je pak jen projde a zaznamená min a max.
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?

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: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod faraon » 03 čer 2011 16:49

d1amond píše:Jak už bylo napsáno, použiješ pole pro uložení hodnot ze vstupu. Cyklus Ti je pak jen projde a zaznamená min a max.


Pro vytvoření pole potřebuješ předem znát počet těch čísel, navíc ti bude zbytečně zabírat spoustu místa v paměti, když potřebuješ pracovat vždy jen s jedním právě zadaným číslem. Mimochodem, co když těch čísel bude deset miliard? :lol: A v nejhorším případě bys tam měl dva cykly místo jednoho, prvním budeš čísla načítat do pole a druhým zase znova porovnávat, takže dvojnásobná doba zpracování, nepočítaje režii systému... :wink:
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

Svetýlko
nováček
Příspěvky: 5
Registrován: červen 11
Pohlaví: Žena
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod Svetýlko » 05 čer 2011 00:25

A kdybych to chtěla udělat podle toho návodu v tý prezentaci a zadala bych třeba 4 čísla a mělo by mi to najít to největší, tak jak by byla ta podmínka? Nějak mi to necvaklo :D Zkusila sem to takhle ale nějak se mu to nelíbí tomu Basicu :D Co je na tom špatně? :(

Kód: Vybrat vše

TextWindow.Write("Zadejte první číslo: ")
cislo1 = TextWindow.ReadNumber()
TextWindow.Write("Zadejte druhé číslo: ")
cislo2 = TextWindow.ReadNumber()
TextWindow.Write("Zadej třetí číslo: ")
cislo3 = TextWindow.ReadNumber()
TextWindow.Write("Zadej čtvrté číslo: ")
cislo4 = TextWindow.ReadNumber()

NajdiMax()
TextWindow.WriteLine("Větší číslo je: " + max)
Sub NajdiMax
  If (cislo1 > cislo2, cislo3, cislo4)
    Then
    max = cis1
    If (cislo2 > cislo1, cislo3, cislo4)
      Then
      max = cislo2
      If (cislo3 > cislo1, cislo2, cislo4)
        Then
        max = cislo3
     
  Else
    max = cislo4
  EndIf
EndSub

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: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod faraon » 05 čer 2011 09:54

Já bych řekl že se mu nelíbí ty tvoje podmínky. Ve většině programovacích jazyků můžeš porovnávat jen dvě čísla mezi sebou, například if (a > b), počítač nepochopí že mu chceš říct "když a je větší než b a c a d...". Jsou jazyky ve kterých se to dá, ale v těch se programuje úplně jinak :wink:

Nejlepší je tvořit program po malých kouscích, které budou fungovat samostatně. Tenhle se dá rozdělit na tři základní části:
1. načtení dat,
2. zpracování dat,
3. výpis výsledků.
To načtení a zpracování se dá dělat současně, ale pro přehlednost je oddělíme a budeme plýtvat pamětí i výkonem procesoru.

Takže pokud máš jistotu že ta čísla budou vždy čtyři, můžeš to načítání udělat takhle:

Kód: Vybrat vše

For i = 1 To 4
  TextWindow.Write("Zadej " + i + ". číslo: ")
  cislo[i] = TextWindow.ReadNumber()
EndFor


cislo[ ] pak nebude obyčejná proměnná, ale pole, a i udává kolikátá buňka (kolikáté zadané číslo) v pořadí se zrovna zpracovává. Je to pracovní proměnná cyklu a ukazatel do pole, i je odvozené od slova index. Pokud potřebuješ indexů víc najednou, používají se další písmena v pořadí: j, k, l...
Druhá možnost je že uživatel zná počet čísel, který zadá jako první údaj:


Kód: Vybrat vše

TextWindow.Write("Zadej počet čísel: ")
pocet = TextWindow.ReadNumber()
For i = 1 To pocet
  TextWindow.Write("Zadej " + i + ". číslo: ")
  cislo[i] = TextWindow.ReadNumber()
EndFor


Výsledek bude tentýž, pole naplněné čísly v pořadí v jakém byla zadávána.

Myslím že na takhle jednoduchou úlohu není potřeba používat podprogramy, takže Sub je trochu nadbytečný, pokud to není přímo požadováno v zadání. Druhá část programu by mohla vypadat takhle nějak, ve tvém podání s jednotlivými proměnnými:

Kód: Vybrat vše

If (cislo1 > cislo2) Then
  max = cislo1
Else
  max = cislo2
EndIf
If (cislo3 > max) Then
  max = cislo3
EndIf
If (cislo4 > max) Then
  max = cislo4
EndIf


Při použití pole to nebude tak roztahané:

Kód: Vybrat vše

max = cislo1
For i = 2 To Pocet
  If (cislo[i] > max) Then
    max = cislo[i]
  EndIf
EndFor


Na začátku se jako počáteční hodnota do max nastaví první zadané číslo, aby bylo s čím porovnávat, proto může cyklus začít až od 2. buňky pole.

Teď by mohla následovat další část programu, skoro stejná jako ta předchozí, kde budeš to pole znovu projíždět a hledat pro změnu minimální hodnotu, a nebo tuhle činnost můžeš přidat do toho předchozího cyklu jako druhou podmínku. Nezapomeň před cyklem nastavit počáteční hodnotu do proměnné min!

A na závěr se podíváme co nám vyšlo:

Kód: Vybrat vše

TextWindow.Write("Největší číslo je: " + max)


Tak si z toho vyber, pohraj si s tím, a dej vědět jak pokračuješ.
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

Svetýlko
nováček
Příspěvky: 5
Registrován: červen 11
Pohlaví: Žena
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod Svetýlko » 06 čer 2011 21:23

Tak jsem to udělala a vypadá to takhle:

Kód: Vybrat vše

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

For i = 1 To pocet
  TextWindow.Write("Zadej " + i + ". číslo: ")
  cislo[i] = TextWindow.ReadNumber()
EndFor

max = cislo[i]
For i = 2 To Pocet
  If (cislo[i] > max) Then
    max = cislo[i]
  EndIf
EndFor

TextWindow.WriteLine("Největší číslo je: " + max)


Teď mám ale problém udělat to samý ale s min. :( Když jen přepíšu max na min. tak mi to nejde :( Poraď prosím :wink:

d1amond
člen HW spec týmu
Elite Level 12
Elite Level 12
Příspěvky: 16119
Registrován: květen 08
Bydliště: České Budějovice
Pohlaví: Muž
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod d1amond » 06 čer 2011 22:56

Kód: Vybrat vše

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

    For i = 1 To pocet
      TextWindow.Write("Zadej " + i + ". číslo: ")
      cislo[i] = TextWindow.ReadNumber()
    EndFor

  max = cislo[1]
  min = cislo[1]
    For i = 2 To Pocet
      If (cislo[i] > max) Then
        max = cislo[i]
      EndIf
      If (cislo[i] < min) Then
        min = cislo[i]
      EndIf
    EndFor
  TextWindow.WriteLine("Největší číslo je: " + max)
  TextWindow.WriteLine("Nejmenší číslo je: " + min)
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?

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: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod faraon » 07 čer 2011 00:06

Svetýlko: Ale no tak, to už jsi zapomněla jaký je rozdíl mezi > a <? Na jednoduché programování nepotřebuješ víc než znalosti matematiky ze základní školy :D

Pro srovnání se podívej jak by se to dalo udělat bez toho pole a spousty zbytečně zabrané paměti:

Kód: Vybrat vše

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

For i = 1 To pocet
  TextWindow.Write("Zadej " + i + ". číslo: ")
  cislo = TextWindow.ReadNumber()
  If i = 1 Then
    max = cislo
    min = cislo
  Else
    If (cislo > max) Then
      max = cislo
    EndIf
    If (cislo < min) Then
      min = cislo
    EndIf
  EndIf
EndFor

TextWindow.WriteLine("Největší číslo je: " + max)
TextWindow.WriteLine("Nejmenší číslo je: " + min)
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

Svetýlko
nováček
Příspěvky: 5
Registrován: červen 11
Pohlaví: Žena
Stav:
Offline

Re: Small Basic - načtení čísel a určení MIN a MAX*

Příspěvekod Svetýlko » 07 čer 2011 06:50

No jooo já sem to tak zkousela, ale nešlo mi to :D Tak děkuju za radu ;)


Zpět na “Vše ostatní (sw)”

Kdo je online

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