Loendite käsitlemine ScratchisLoendi olemus ja selle loomineLoend (List) on järjestatud mäluväljade (muutujate) kogum, mis tähistatakse ühe nimega. Loendi elementidele viidatakse nime ja indeksi (järjenumbri) abil. Loendi üheks analoogiks võiks olla näiteks tabeli tulp (veerg). Näiteks võib allpool toodud statistiliste andmete tabeli iga tulpa vaadelda loendina. Loendiks võiks olla tulp Pikkus, sellele võib Scratch viidata taoliselt
Loendi elemente saab lisada, muuta ja eemalda ka nö „käsitsi“ ning sageli nii ka toimitakse. Alustades tühjast monitorist lisatakse järjest elemente, vajadusel ka parandades (muutes) ja eemaldades neid. Lisamiseks klõpsata „+“ monitori alumises servas. Ilmub tühi väli, kuhu saab sisestada väärtuse ning see salvestatakse automaatselt arvuti mälus antud loendile eraldatud piirkonnas. Elementide numeratsioon algab alati ühest ja suureneb sammuga üks. Olemasoleva elemendi muutmiseks aktiveeritakse see hiireklõpsuga ning muudetakse väärtust või sisestatakse uus. Kui klõpsata aktiivse elemendi väljas olevat ristikest, eemaldatakse element. Loendi elemendid saab importida tekstifailist ja eksportida tekstifaili. Vastavad käsud ilmuvad, kui teha paremklõps loendi monitoril. Loendi ja selle elementide omadused ning meetodid
Loendi element vastab oma olemuselt muutujale – tegemist on mäluväljaga. Oluliseks erinevuseks on, et loendi elementidel ei ole nimesid, neile vastab järjenumber, mis määrab elemendi asukoha loendis. Elemendi väärtuseks võib olla arv, tekst, tõeväärtus või objekti (sprait, heliklipp, kostüüm) nimi, st loendite elemente saab (nagu muutujaidki) kasutada ka viitamiseks objektidele. Käsuplokid tegevuste määramiseks loendite elementidega ja loenditegaNB! Plokkide eestikeelne tekst on muutmisel!
Väärtuse omistamine loendi olemasolevale elemendile (st. väärtuste muutmine programmi täitmisel) toimub plokiga [asenda ...], mis vastab omistamiskäsule [võta muutuja = avaldis] Mõned näitedNB! Loendite plokkide eestikeelne tekst võib tulevikus muutuda Näide„Keele test“
|
Andmed |
|
||
Keele test. Algoritm |
Programm teeb kindlaks elementide (sõnade) arvu loendites, kasutades loendi eesti omadust pikkus, ning omistab selle muutujale sõnu. Seejärel omistatakse algväärtused muutujatele õigeid ja nr. Korduses kuvatakse järjest sõnu loendist eesti, kasutades viitamiseks elementidele indeksit (muutujat) nr. Kasutaja vastust võrreldakse sama numbriga sõnaga loendis inglise. Kui vastus on õige, suurendatakse muutuja õigeid väärtust, vastupidisel juhul kuvatakse teade „Vale!“. Korduse lõpus suurendatakse muutuja nr väärtust ühe võrra, et järgmisel kordamisel viidata järgmisele elemendile. Kui kõik sõnad on läbitud, leitakse õigete vastuste protsent.
NB! Algoritmides kasutatakse viitamiseks loendi elementidele konstruktsiooni nimi(indeks), kus nimi on loendi nimi ja indeks on elemendi järjenumber: eesti(nr), inglise(nr).
Analoogset lähenemisviisi võib kasutada suvaliste testide ja viktoriinide koostamiseks. Ühes loendis on küsimused, teises õiged vastused. Programm kuvab järjest küsimusi esimesest loendist, loeb kasutaja vastuseid ja võrdleb teises loendis olevate vastustega.
Rakendus tõlgib sõnu inglise keelest eesti keelde. Programm loeb inglisekeelse sõna ja kuvab selle vaste eesti keeles, kui inglisekeelne sõna on sõnastikus olemas. Kasutatakse samu loendeid eesti ja inglise, mis eelmises näites.
Muutujad n – elementide arv loendites, k – elemendi järjenumber (indeks), sõna – sõna inglise keeles Tõlkimine. Algoritm |
Programm loeb inglisekeelse sõna ja omistab selle muutujale sona. Seda otsitakse loendist inglise, võrreldes elemente küsitud sõnaga alates esimesest ja võimalik, et lõpuni. Kui sõna leitakse, kuvatakse eestikeelne vaste ja skripti töö katkestatakse. Kui sõna ei leita, lõpeb kordus ja kuvatakse teade „Seda sõna sõnastikus ei ole!“
Näide demonstreerib loendi elementide järjestikust töötlemist võimaliku katkestusega. Tegemist on üsna levinud ülesandega: etteantud väärtuse otsimisega loendis (massiivis). Toodud lahendus ei ole eriti hea. Otsimiseks oleks parem kasutada eraldi skripti.
|
Võrdlemisi sarnaselt eelmiste näidetega võib organiseerida mitmesuguseid dialooge, vestlusi jmt. |
Ülevaate saamiseks taolistest rakendustest võiks tutvuda projektidega Kraps_koolis ja Vestlus_tiigriga
Enne kui skripti saab kasutada loendi elementide loomiseks, peab loend olema loodud käsuga Tee loend ning peab teada olema loendi nimi.
Varem loodud loendisse saab elemente (nii arve kui tekste) sisestada klaviatuurilt. |
Algoritmide kontrollimiseks on sageli vaja teatud andmete kogumeid. Neid saab mugavalt luua juhuarvudest. |
Rakendus demonstreerib programmi tööd loendi positiivsete elementide summa ja aritmeetilise keskmise leidmisel. Kasutaja saab valida liuguriga elementide arvu loendis (n) ja lasta luua selle elemendid juhuslikest arvudest, klõpsates nuppu Tee vektor. Enne täitmist saab loendi elemente muuta, lisada ja eemaldada. Kõpsates nuppu Arvuta, saab lasta arvutada summa ja keskmise ilma tegevuste visualiseerimiseta. Nupp Näita demontreerid sammhaaval täitmist. Muutuja paus väärtusega (0...5) saab reguleerida täitmise kiirust. Muutuja heli väärtus (1 või 0), määrab, kas korduses heli on või ei ole. See samuti mõjutab töö kiirust.
Skriptis kasutatavad andmed ja algoritm ning skripti pilt.
|
|
Rakendus demonstreerib programmi (nupp Scratch) või algoritmi (Algo) tööd loendi maksimaale elementide ja selle järjenumbri (indeksi) leidmisel. Kasutaja saab valida liuguriga elementide arvu loendis (n) ja lasta luua selle elemendid juhuslikest arvudest, klõpsates nuppu Tee loend. Enne täitmist saab loendi elemente muuta, lisada ja eemaldada. Muutuja paus väärtusega (0...5) saab reguleerida täitmise kiirust. Muutuja heli väärtus (1 või 0), määrab, kas heli on või ei ole. See samuti mõjutab töö kiirust.
Andmed |
protseduur Max_nr |
Sorteerimine seisneb väärtuse järjestamises kasvavalt või kahanevalt. Enamasti sorteeritakse kasvavas järjestuses, kuid põhimõttelist vahet siin ei ole. Reeglina toimub sorteerimine samas loendis (massiivis). Sorteerimine leiab väga sageli kasutamist andmetöötluses. Selleks on loodud palju erinevaid meetodeid ja algoritme, mille täitmise ajas võivad olla väga suured erinevused.
Siin kasutatakse ühte kõige lihtsamat algoritmi nn jadasorteerimist, mis on suurte loendite (n>1000) korral väga aeglane. Praegu meetod illusrerib eeskätt sorteerimise põhimõttet.
Jadasortimine. AndmedV – loend, mille elemente sorteeritakse (n väärtust). |
Jadasortimine. Algoritmi = 1 |
Algoritmi täitmisel toimub ca n2 võrdlust, vahetuste arv sõltub andmete sorteerituse astmest. Taoliste algoritmide kohta öeldakse, et nende keerukus on n2. Elementide arvu kasvamisel n korda, suureneb aeg n2 korda. Näiteks, kui elementide arv suureneb 10 korda, suureneb täitmise aeg 100 korda!
Vaadake täitmise demot
Muudetakse indeksi i väärtust vahemikus 1 kuni n - 1, iga i korral leitakse minimaalne element vektori osas i kuni n ja vahetatakse see elemendiga i.
Keerukus n2, 2-3 korda kiirem kui mullsortimine.
protseduur Sort_Min(V, n) |
void sordi_min(int V[], int n) // C |