TAMPEREEN TEKNILLINEN YLIOPISTO

Samankaltaiset tiedostot
TAMPEREEN TEKNILLINEN YLIOPISTO

Algoritmit 2. Luento 2 To Timo Männikkö

Harjoitustyön testaus. Juha Taina

TIE Tietorakenteet ja algoritmit 25

ITKP102 Ohjelmointi 1 (6 op)

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 13 Ti Timo Männikkö

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Algoritmit 2. Luento 2 Ke Timo Männikkö

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Algoritmit 1. Luento 11 Ti Timo Männikkö

Jakso 4 Aliohjelmien toteutus

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Algoritmit 1. Demot Timo Männikkö

Ohjelmiston testaus ja laatu. Testausmenetelmiä

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

1. Mitä tehdään ensiksi?

ITKP102 Ohjelmointi 1 (6 op)

Luento 5. Timo Savola. 28. huhtikuuta 2006

Algoritmit 1. Demot Timo Männikkö

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 1. Demot Timo Männikkö

Kielioppia: toisin kuin Javassa

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 8 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 6 To Timo Männikkö

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Luento 4 Aliohjelmien toteutus

Algoritmit 2. Luento 7 Ti Timo Männikkö

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Ohjelmoinnin perusteet Y Python

Jakso 4 Aliohjelmien toteutus

Lyhyt kertaus osoittimista

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Numeeriset menetelmät

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Datatähti 2019 loppu

Harjoitus 4 (viikko 47)

Ohjelmoinnin perusteet Y Python

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin perusteet Y Python

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Algoritmit 2. Luento 3 Ti Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet ja algoritmit (syksy 2015)

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Algoritmit 2. Luento 4 To Timo Männikkö

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Ohjelmoinnin perusteet Y Python

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

5 Kertaluokkamerkinnät

4. Luennon sisältö. Lineaarisen optimointitehtävän ratkaiseminen Simplex-menetelmä

Algoritmit 1. Luento 8 Ke Timo Männikkö

ITKP102 Ohjelmointi 1 (6 op)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Ohjelmointi 1 Taulukot ja merkkijonot

A TIETORAKENTEET JA ALGORITMIT

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Testiraportti - Koordinaattieditori

9 Erilaisia tapoja järjestää

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmoinnin peruskurssi Y1

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Olio-ohjelmointi Syntaksikokoelma

Ohjelmoinnin peruskurssi Y1

Mathematica Sekalaista asiaa

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 3 Ti Timo Männikkö

Transkriptio:

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3

1. TEHTÄVÄ Tehtävä oli tehdä MIPS assembly kielellä aliohjelma, joka järjestää annetun merkkijonon aakkosjärjestykseen. Tehtävässä on käytetty quick sort -algoritmia [1]. Ohjelmaa kutsutaan seuraavan C-kielisen syntaksin mukaisesti. void qsort(char *left, char *right) Parametrit left ja right ovat osoittimia merkkijonon ensimmäiseen ja viimeiseen merkkiin. Ohjelma järjestää osoittimien left ja right välissä olevat merkit ASCII -koodien mukaiseen järjestykseen. Kutsujan on huolehdittava siitä, että merkkijonon viimeisenä olevaa nollaa ei sisällytetä järjestettävään merkkijonoon. 2. ALGORITMI Kuvassa 1. on Pascal -kielinen toteutus quick sort -algoritmista. Aakkostettava merkkijono on taulukossa a. Jotta algoritmi toimisi oikein kaikissa tilanteissa, taulukon ensimmäinen alkio on aina nolla. Itse merkkijono alkaa indeksistä 1. procedure quicksort; var t, i, l, r: integer; begin if r > l then end end; begin v := a[r]; i := l - 1; j := r; repeat repeat i := i + 1 until a[i] >= v; repeat j := j - 1 until a[j] <= v; t := a[i]; a[i] := a[j]; a[j] := t; until j <= i; a[j] := a[i]; a[i] := a[r]; a[r] := t; quicksort(l, i-1); quicksort(i+1, r); Kuva 1.Quick sort -algoritmi.

Quick sort -algoritmi on rekursiivinen eli se kutsuu itse itseään. Periaatteena on valita jokin alkio ns. partitioalkioksi, jolle etsitään oikea paikka. Kaikki partitioalkiota pienemmät alkiot siirretään tämän vasemmalle puolelle ja vastaavasti suuremmat oikealle puolelle. Algoritmia toistetaan vasemmalle ja oikealle puolelle erikseen kunnes taulukon koko on nolla. Kuvan 1 algoritmissa partitioalkioksi valitaan kaikkein suurin indeksisin alkio, joka sijoitetaan muuttujaan v. Sisimmäisissä repeat silmukoissa etsitään alusta alkaen partitioalkiota suurempi alkio ja lopusta alkaen pienempi alkio, jotka vaihdetaan keskenään. Tätä toistetaan kunnes indeksit (ija j) kohtaavat. Tällöin on löydetty partitioalkiolle oikea paikka, sekä pienimmät alkiot ovat partitioalkion vasemmalla puolella ja suuremmat vastaavasti oikealla. Algoritmia kutsutaan erikseen vasemmalle ja oikealle puoliskolle. Nykyistä partitioalkiota ei tarvitse sisällyttää kutsuihin, koska se jo on oikealla paikallaan. Rekursio päättyy, kun järjestettävä taulukko on tyhjä. 3. TOTEUTUS 3.1. Rekisterin käyttö Ohjelma on MIPS assemblykielellä koodattu toteutus kuvan 1 quick sort -algoritmista. Kuvan 1 algoritmia on muutettu siten, että indeksien sijasta käytetään osoitteita (lue oppikirjan kappale 3.11). Taulukko 1. Rekisterien käyttö Rekisteri $a0 $a1 $t0 $t1 $t2 $t3 $t4 Käyttö TÄHÄN REKISTERIEN KÄYTTÖKUVAUS Parametrit välitetään rekistereissä $a0 ja $a1. Qsort-aliohjelma ei palauta mitään arvoa kutsuvalle ohjelmalle. Rekisterissä $t0

säilytetään partitioalkiota (v). Rekisterissä $t1 on indeksiä i vastaavan alkion osoite ja rekisterissä $t2 on indeksiä j vastaava osoite. Rekistereitä $t3 ja $t4 käytetään apurekistereinä alkioiden vaihdoissa. 3.2. Toiminnan kuvaus Tarkempi kuvaus ohjelman toiminnasta. Kuinka ohjelma on käytännössä toteutettu, teittekö esim. jotain erilailla kuin algoritmissa. Ei mielellään viittauksia suoraan koodiriveille. Esimerkiksi numeroitu lista ohjelman suorituksesta, kuvaus, mitä tehdään missäkin ohjelmalohkossa. Eli mitä esimerkiksi tehdään, kun hypätään symboliin.loop yms. 4. TESTAUS Jotta ohjelman toimivuus voidaan varmistaa, kannattaa miettiä miten ohjelma testataan jo ennen koodausta. Tällöin ohjelmasta voidaan tehdä helposti testattava esimerkiksi lisäämällä erilaisia testitoimintoja. Kohdat 5, 30, 40 ja 60 on lisätty pääohjelmaan helpottamaan testausta ja ne voidaan poistaa, kun ohjelman toimivuus on varmistettu. Testitapausten avulla pyritään varmistetaan, että ohjelma toimii kaikissa mahdollisissa tilanteissa. Esimerkiksi ohjelman saadessa virheelliset parametrit ohjelma ei saa seota, vaan se palauttaa kutsuvalle ohjelmalle virhekoodin. Jotta suurissa ohjelmissa testitapausten määrä ei räjähdä käsiin, kannattaa miettiä edeltä käsin mitkä testitapaukset ovat mahdollisimman kattavia. Ohjelmaa kannattaa testata ns. normaaleilla syötteillä, toiminta poikkeuksellisissa tilanteissa, virheellisillä parametreilla ym.

4.1. Testitapaukset 4.1.1. Testitapaus 1 4.1.2. Testitapaus 2 4.1.3. Testitapaus 3 4.1.4. Testitapaus 4 4.1.5. Testitapaus 5 Tässä kappaleessa on listattu testitapaukset, joilla qsort aliohjelma on testattu. Testitapaukset on pyritty laatimaan siten, että testit ovat mahdollisimman kattavat tapausten määrän kuitenkin pysyessä siedettävänä. Kustakin testitapauksesta on script komennolla otettu loki liitteessä 2. Tämä on ns. normaali tapaus, jossa merkit ovat 'satunnaisessa' järjestyksessä. Tuloksena on aakkosjärjestyksessä (ASCII koodien mukaisessa) oleva merkkijono. Merkkijono on jo valmiiksi aakkosjärjestyksessä. Tarkoituksena varmistaa, että sisäkkäisten repeat-silmukoiden vertailut toimivat. Algoritmi ei saa muuttaa merkkijonon järjestystä. Merkkijono on käänteisessä aakkosjärjestyksessä. Tarkoituksena on varmistaa, että sisäkkäisten repeat-silmukoiden vertailut toimivat. Huomaa, että tässä tapauksessa algoritmi sekoaa, jos taulukon alussa ei ole nollaa (.stopper) Qsort aliohjelman jälkeen merkkijono on aakkosjärjestyksessä. Kaikki merkkijonon merkit ovat samoja. Ohjelma ei muuta merkkijonoa. Merkkijonon pituus on yksi. Ohjelma ei muuta merkkijonoa.

4.1.6. Testitapaus 6 Merkkijonossa ei ole yhtään merkkiä, eli ohjelmaa kutsutaan parametreilla, jossa $a0 ja $ a1 ovat samoja. Ohjelma palaa välittömästi tekemättä mitään. 4.1.7. Testitapaus 7 Alku- ja loppuosoite ovat vaihtaneet keskenään paikkoja. Ohjelma palaa välittömästi tekemättä mitään. 5. VIITTEET [1] Sedgewick, R. Algorithms. 2. painos. 1988. Addison-Wesley Publishing Company, Inc. 657 s.