Johdanto kurssin sisältöön

Samankaltaiset tiedostot
1 Johdanto. 1.1 Terminologiaa

Tietojenkäsittelyn perusteet I kurssijärjestelyt. 3op tai 5op

Esipuhe. Kirjallisuutta

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

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

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

4. Lausekielinen ohjelmointi 4.1

Esipuhe. Kirjallisuutta

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

4. Lausekielinen ohjelmointi 4.1

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

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

1. Ohjelmoinnin peruskäsitteet ja -elementit

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Algoritmit 1. Luento 3 Ti Timo Männikkö

811120P Diskreetit rakenteet

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Tietokanta (database)

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen

1. Keskusyksikön rakenne

Ohjelmointi 1. Kumppanit

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

etunimi, sukunimi ja opiskelijanumero ja näillä

811120P Diskreetit rakenteet

811312A Tietorakenteet ja algoritmit I Johdanto

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo


8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1

Esipuhe. Kirjallisuutta

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

Käännös, linkitys ja lataus

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

TIETOJENKÄSITTELYTIETEIDEN PERUSOPINNOT (25 OP)

Koodaamme uutta todellisuutta FM Maarit Savolainen

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

1. Universaaleja laskennan malleja

2 Konekieli, aliohjelmat, keskeytykset

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

8. Kieliopit ja kielet

Tietokoneen toiminta, K Tavoitteet (4)

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Ohjelmoinnin perusteet Y Python

Turingin koneen laajennuksia

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

TIE Johdatus ohjelmointiin

Tutoriaaliläsnäoloista

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

TIETOJENKÄSITTELYTIETEIDEN PERUSOPINNOT

Algoritmit 1. Luento 10 Ke Timo Männikkö

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Integrointialgoritmit molekyylidynamiikassa

Ohjelmoinnin perusteet Y Python

Lisää pysähtymisaiheisia ongelmia

Luento 2: Tiedostot ja tiedon varastointi

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

Tarvikkeet: A5-kokoisia papereita, valmiiksi piirrettyjä yksinkertaisia kuvioita, kyniä

Algoritmit 2. Luento 8 To Timo Männikkö

11/20: Konepelti auki

KTKO104 Tieto- ja viestintätekniikka. 2. Luento - Opetussuunnitelma 2014 Tiistai

Python-ohjelmointi Harjoitus 2

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

T Ohjelmoinnin perusteet Y (Python) Opetusmoniste kevät 2010

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

KTKO104 Tieto- ja viestintätekniikka. 2. Luento - Opetussuunnitelma ja TVT Tiistai

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Muistimoduulit. Asiakirjan osanumero: Tässä oppaassa kerrotaan tietokoneen muistin vaihtamisesta ja laajentamisesta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmointi 1 / syksy /20: IDE

Muistimoduulit. Käyttöopas

Algoritmit 1. Luento 1 Ti Timo Männikkö

Toinen harjoitustyö. ASCII-grafiikkaa

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan valitseminen päätöksellä ja toistaminen silmukalla.

T Ohjelmoinnin perusteet Y (Python)

Palautetta viime luennosta

Predikaattilogiikkaa

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Verkon värittämistä hajautetuilla algoritmeilla

Transkriptio:

Johdanto kurssin sisältöön

Terminologiaa Algoritmi on jonkin tehtävän suorittamiseksi tarvittavien toimenpiteiden kuvaus Ongelman ratkaisu lasketaan suorittamalla algoritmin toimenpiteet Tietokone suorittaa sopivalla formaalilla kielellä kuvattuja algoritmeja Ohjelmointikielet ovat näitä sopivia formaaleja kieliä Ohjelma on algoritmin esitys jollain ohjelmointikielellä

Tietojenkäsittelytiede (Computer science) Tieteellinen lähestymistapa laskentaan ja ongelmanratkaisuun Ei pelkkää tietokoneen ohjelmointia Ohjelmointi ja tietokoneet ovat työkaluja 31

Esimerkki algoritmista Algoritmi kahvin keittämiseen 1. Lisää vettä kahvinkeittimeen 2. Taita suodatinpussin reunat 3. Laita suodatinpussi keittimeen 4. Lisää kahvinpuruja 5. Laita keitin päälle 6. Odota kunnes kahvi on tippunut

Algoritmista suoritukseen Algoritmi on menetelmä, jonka mukaisesti tehtävää suoritetaan Tehtävän suoritusta kutsutaan prosessiksi Tehtävän suorittajaa kutsutaan prosessoriksi Yleensä tietokoneen osa

Tietokoneen pääkomponentit Muisti Syöttö Prosessori Tulostus

Prosessori Syöttö Muisti Prosessori Tulostus Suorittaa osaamiaan perusoperaatioita Prosessorin tärkeimmät osat: Aritmeettis-looginen yksikkö (arithmetic and logic unit, ALU) Sisältää dataa käsittelevät ja muokkaavat loogiset piirit Suorittaa esim. laskutoimitukset Rekisterit Sisältävät muistista haettavan datan jota prosessori käsittelee Ovat erityisen nopeita muistipaikkoja Kontrolliyksikkö (control unit, CU) eli ohjausyksikkö Kontrolliyksikön rekisterit sisältävät koneen tarvitsemaa kontrollitietoa Pitää kirjaa missä vaiheessa ohjelman suoritus on

Muisti Syöttö Muisti Prosessori Tulostus Säilyttää tietoa (dataa) Keskusmuistissa säilytetään Suoritettavaa algoritmia Dataa, johon algoritmin operaatiot kohdistetaan Oheismuisti Tarvitaan suurten tietomäärien pitkäaikaiseen varastointiin Esim. kiintolevy, Bluray

Muisti Syöttö Muisti Prosessori Tulostus Keskusmuisti jaettu kahteen komponenttiin Pysyväismuisti (ROM, Read Only Memory) Sisältää ohjelman, jolla laitteisto alustetaan ja käyttöjärjestelmä ladataan Datan kirjoittaminen hidasta tai mahdotonta Käyttömuisti eli työmuisti (RAM, Random Access Memory) Sisältää esim. suoritettavan algoritmin ja sen tarvitseman datan Datan kirjoittaminen ja lukeminen nopeaa

Syöttö & tulostus Syöttö Muisti Prosessori Tulostus Syöttölaitteilla Algoritmi ja käsiteltävä tieto syötetään muistiin Tulostuslaitteilla Tietokone tulostaa käsittelyn tulokset Kumpikaan ei ole välttämättömiä tietokoneen toiminnalle Tosin kommunikaatiokyvytön tietokone on melko hyödytön

Väylä Näppäimistö Prosessori Aritmeettis- Looginen yksikkö Kontrolliyksikkö. Väylä Keskusmuisti Rekisterit Kiintolevy Näyttö

Väylä. Väylä (bus) on kokoelma johtimia Hoitaa tiedonsiirron Prosessorin, muistin ja laitteiden välinen data kulkee aina väylän kautta Tietokoneen toimintaperiaate (yksinkertaistettuna): Prosessori noutaa suoritettavan ohjelman (konekieliset) käskyt ja tarvittavan datan keskusmuistista Prosessori suorittaa käskyissä määritellyt toiminnot Prosessori siirtää käsitellyn datan takaisin keskusmuistiin (tai muihin muisti-/tulostuslaitteisiin)

Kahden olotilan periaate - bitit Tietokoneen toiminta perustuu kahden olotilan periaatteeseen: Kaksi vaihtoehtoa, esim. johdossa on (arvo=1) tai ei ole (arvo=0) jännitettä Kaikki data tietokoneessa esitettään arvoilla 0 ja 1, eli biteillä Kaikki data esitetään bittijonona Kokonaisluvut käyttäen 2-järjestelmän esitystä (binäärilukuja) Desimaaliluvut tallennetaan eritavalla (esim 1.0 tallennetaan eritavoin kuin kokonaisluku 1) Kuvan ja äänen käsittely tietokoneessa vaatii tiedon muuttamisen bittijonoksi (siis 0 ja 1)

Tietokoneet kaikkialla yhteiskunnassa miksi? Nopeus Tietokoneen prosessori voi suorittaa miljardeja yksinkertaisia operaatioita sekunnissa, aivojen laskentanopeus on paljon hitaampi Nopeus ei kuitenkaan yksin riitä, ja monet ihmiselle helpot tehtävät ovat koneille vaikeita (esim. motoriset toiminnot) Monet ongelmat niin vaikeita, ettei tietokoneidenkaan nopeus riitä Luotettavuus (Viattomat) tietokoneet toimivat kuten algoritmi käskee eivätkä tee virheitä Virheet johtuvat yleensä virheistä algoritmeissa (jotka ihminen ohjelmoi) Tietokone ei kykene arvioimaan tulosten järkevyyttä

Tietokoneet kaikkialla yhteiskunnassa miksi? Muisti Tietokoneet kykenevät varastoimaan rajattomasti tietoa, ihmisen muistikapasiteetti on rajallinen Paperi vie paljon tilaa, hidas hakea Kustannukset Tietokoneen käytöllä voidaan saavuttaa merkittäviä kustannussäästöjä verrattuna tehtävien suorittamiseen ihmistyövoimalla Kuitenkin ohjelmointi voi olla kallista

Ohjelmointikielet Tietokone ei pysty suorittamaan luonnollista kieltä Luonnollisissa kielissä algoritmin kannalta ongelmallista: Laaja sanasto Monimutkaiset kielioppisäännöt Lauseiden merkitys riippuu kontekstista Perustuu viime kädessä puhuttuun kieleen Käyttö vaatii maailmankuvaa Algoritmit esitetään siis formaalilla kielellä, eli ohjelmana

Ohjelmointikielet Ohjelmointikielen suunnittelussa huomioitava Helpotettava algoritmien ilmaisemista tietokoneen ymmärtämässä muodossa Helposti tietokoneen ymmärrettävissä Helposti ihmisen ymmärrettävissä Minimoitava virhemahdollisuudet ohjelmaa kirjoitettaessa Ohjelmaa tutkimalla pitäisi olla helppo vakuuttua sen oikeellisuudesta Lukuisia ohjelmointikieliä suunniteltu Kurssilla käytetään Python-ohjelmointikieltä

Esimerkki: Piet-kieli Ohjelmointi tapahtuu täyttämällä tietyn värisiä pikseleitä Helppo ymmärtää tietokoneelle, kun värejä vastaavat operaatiot on hyvin määritelty Ihmiselle?

Esimerkki: INTERCAL-kieli Kielessä pitää olla kohtelias käyttämällä tarpeeksi PLEASE avainsanaa, joka ei itsessään tee mitään Jos on kuitenkin liian nöyristelevä, suoritus voidaan lopettaa Mikä tahansa saatetaan välillä jättää suorittamatta, jos ei ilmaista, että se on tärkeä PLEASE-avainsanalla DO,1 SUB #12 <- #16 DO,1 SUB #13 <- #162 PLEASE READ OUT,1 PLEASE GIVE UP Voidaanko ohjelmaa tutkimalla vakuuttua sen oikeellisuudesta?

Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Kääntäjä Käännös Linkkaaja Konekielinen ohjelma Linkkaus Suorituskelpoinen konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Syötetiedot Suoritus Tulostiedot

Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Ongelman ratkaiseva algoritmi ohjelmoidaan käyttäen jonkin ohjelmointikielen sääntöjä Jokainen algoritmin askel esitetään ohjelmassa käskynä, lauseena Ohjelma muodostuu lausejonosta, jotka määrittävät tietokoneen suorittamat perusoperaatiot Kirjoitettua ohjelmaa kutsutaan usein lausekieliseksi ohjelmaksi Koneista riippumattomia ohjelmointikieliä Suunniteltu ihmisille helpoksi ja luontevaksi Tietokone ei ymmärrä korkean tason lausekieltä suoraan

Lausekielinen ohjelma Kääntäjä Käännös Konekielinen ohjelma Kullakin prosessorilla on sille ominainen konekieli (machine language) Kieli joka on suunniteltu toimimaan yhdessä prosessorin kanssa Voidaan kuvata vain hyvin primitiivisiä operaatioita, jotka kone osaa suorittaa Konekielellä ohjelmointi on työlästä, mutta lausekielien ansiosta harvoin tarpeellista (aiheeseen palataan kurssin II osassa) Kääntäjä (compiler) tai tulkki (interpreter) muuntaa lausekielisen ohjelman konekieliseksi ohjelmaksi Kääntäjä muuntaa koko ohjelman kerralla, tulkki lause kerrallaan sen suorituksen aikana (aiheeseen palataan kurssin II osassa)

Konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Linkkaaja Linkkaus Käännetty konekielinen ohjelma ei usein ole suorituskelpoinen Toimiakseen se tarvitsee muiden jo käännettyjen ohjelmien apua Tätä varten suoritetaan linkkaus Suorituskelpoinen konekielinen ohjelma Liitetään tarvittavat muut ohjelmat käännettyyn konekieliseen ohjelmaan Linkkaaja on liittämisen suorittava ohjelma Monissa järjestelmissä linkkaus ja suoritus voidaan tehdä yhdellä komennolla

Huomautuksia Tämä on kuitenkin vain yksi tapa, jolla algoritmi voidaan saattaa suoritettavaksi Erityisesti kääntämisvaiheessa on useita eroja Käännösvaiheita voi olla useita Käännös voidaan tehdä vaiheittain (tulkkaus) 53

Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Kääntäjä Käännös Konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Linkkaaja Linkkaus Suorituskelpoinen konekielinen ohjelma Syötetiedot Suoritus Tulostiedot

Ohjelmistot Tietokoneen ohjelmistot koostuvat Sovellusohjelmistosta (application software) Valmisohjelmia ja käyttäjien tekemiä ohjelmia Systeemiohjelmistosta (system software) Systeemitason ohjelmia kuten esim. kääntäjät ja tulkit Käyttöjärjestelmiä, jotka huolehtivat mm. syöttö- ja tuloslaitteiden hallinnasta ja tietojen pitkäaikaissäilytyksestä

Algoritminen ongelmanratkaisu Ongelman ratkaisu algoritmisesti tietokoneella voidaan kuvata algoritmilla: 1. Esitä algoritmi ohjelmana sopivalla ohjelmointikielellä 2. Suorita ohjelma tietokoneessa Vaihe 2 on usein helppo Vaiheen 1 algoritmin muodostaminen ei Vaatii luovuutta ja älyllistä ponnistelua Ei ole mahdollista kirjoittaa algoritmia algoritmin muodostamiseksi

Algoritmin perusvaatimukset Algoritmi On täsmällinen ja yksityiskohtainen kuvaus tai ohje tehtävän suoritukseen Perustuu yksikäsitteiseen ja tarpeeksi täsmälliseen tehtävän määritykseen Syötteiden ja tulosteiden tarkka kuvaus tärkeä osa Algoritmit ovat kielestä ja koneesta riippumattomia Mikä tahansa ohje ei siis ole algoritmi

Algoritmien asteittainen tarkentaminen Algoritmien suunnittelu usein vaikeaa Yleinen virhe, että algoritmi tuottaa oikean tuloksen, mutta ei juuri annettuun tehtävään - > varattava riittävästi aikaa tehtävän määrittelylle Algoritmien suunnitteluun kehitetty menetelmiä Yksi sellainen on asteittain tarkentava menetelmä (stepwise refinement) Algoritmi suunnitellaan kokonaisuudesta osiin edeten (top-down design) Jaetaan alkuperäinen prosessi pienempiin osiin, joille voidaan laatia oma algoritminsa Jaetaan osa-algoritmit jälleen pienempiin ja pienempiin osiin Riittävän pienet osa-algoritmit ratkaistaan Lopullinen ratkaisu yhdistetään alialgoritmeista

Algoritmien asteittainen tarkentaminen Algoritmin abstraktiotaso laskee jokaisella tarkentamisella Tehtävän ratkaisu suunnitellaan ensin korkealla abstraktiotasolla Konkretisoidaan asteittain, kunnes abstraktiotaso on sopiva suorittajalle (tietokoneelle) Ohjelmointi on siis ihmisen korkean abstraktiotason ajattelun muuntaminen koneelle soveltuvalle matalammalle abstraktiotasolle

Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 2. Pane kaakaojauhoja kuppiin 3. Kaada vettä kuppiin Ei tarpeeksi tarkka robotin suoritettavaksi -> tarkennetaan

Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 1. Täytä vesipannu 2. Aseta pannu liedelle 3. Lämmitä kunnes vesi kiehuu 4. Siirrä pannu lieden sivuun 2. Pane kaakaojauhoja kuppiin 3. Kaada vettä kuppiin Edelleen kaipaa tarkennusta -> tarkennetaan

Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 1. Täytä vesipannu 1. Aseta vesipannu vesihanan alle 2. Avaa vesihana 3. Odota, kunnes pannu on täynnä 4. Sulje vesihana 2. Aseta pannu liedelle 3. Lämmitä kunnes vesi kiehuu 4. Siirrä pannu lieden sivuun Tarkennusta jatketaan kunnes suorittaja (robotti) voi tulkita ja suorittaa ne