AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin



Samankaltaiset tiedostot
C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Java-kielen perusteet

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

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

Ohjelmoinnin perusteet Y Python

Lyhyt kertaus osoittimista

Ohjelmoinnin peruskurssi Y1

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

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmointi 1 Taulukot ja merkkijonot

4. Lausekielinen ohjelmointi 4.1

Osoittimet ja taulukot

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin peruskurssi Y1

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

5. HelloWorld-ohjelma 5.1

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

P e d a c o d e ohjelmointikoulutus verkossa

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Ohjelmoinnin peruskurssi Y1

Tietueet. Tietueiden määrittely

ITKP102 Ohjelmointi 1 (6 op)

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

Metodien tekeminen Javalla

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Ohjelmointiharjoituksia Arduino-ympäristössä

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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

Ohjelmoinnin perusteet Y Python

4. Luokan testaus ja käyttö olion kautta 4.1

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä Projektiryhmä Keimo

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

Ohjelmointi 1 / syksy /20: IDE

ITKP102 Ohjelmointi 1 (6 op)

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Ohjelmoinnin perusteet Y Python

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

MITÄ JAVASCRIPT ON?...3

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

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Tietotyypit ja operaattorit

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

7/20: Paketti kasassa ensimmäistä kertaa

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Taulukot. Jukka Harju, Jukka Juslin

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Java-kielen perusteita

Ohjelmoinnin peruskurssi Y1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

7. Näytölle tulostaminen 7.1

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Palautetta viime luennosta

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Kielioppia: toisin kuin Javassa

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Ohjelmoinnin perusteet Y Python

2. C-kieli ja ongelmanratkaisu

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

ITKP102 Ohjelmointi 1 (6 op)

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet Y Python

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

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

4. Lausekielinen ohjelmointi 4.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Transkriptio:

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

1 C-kielen ohjelmointi ja toiminta Ohjelman kääntäminen, ajaminen ja debuggaus C-kielen syntaksi ja rakenne 2 Muuttujat ja tietotyypit C-kielessä 3 Kehitystyökalut Käännösaikaiset työkalut Ajonaikaiset työkalut

C-ohjelmointi

Toiminnallisia eroja C-ohjelmat pitää kääntää ja ajaa erikseen C-kielessä on staattinen tyypitys eval toiminnallisuutta ei ole missään muodossaan Käytännössä mahdotonta toteuttaa Kaikki funktion parametrit välitetään arvoina Kaiken ohjelmakoodin on oltava funktioiden sisällä Ainoastaan määritelmät ja esittelyt on sallittu funktioiden ulkopuolella

Kääntäminen Python ohjelmat ajetaan yleensä tulkilla ja C-ohjelmat käännetään C-ohjelma pitää kääntää jokaiselle kohdealustalle erikseen Pythonissa tulkki mahdollistaa hyvän ajonaikaisen virheenkäsittelyn C-ohjelmaa ei voi ajaa kääntämättä C:ssä ei ole hyvää ajonaikaista virheenkäsittelyä Sellainen on kuitenkin mahdollista saavuttaa erillisillä ohjelmilla C-ohjelman kääntämisessä on kolme päävaihetta 1 Esikääntäminen 2 Varsinainen kääntäminen 3 Linkkaus

Ohjelman ajaminen Ohjelma voidaan ajaa kirjoittamalla oikeassa hakemistossa./ohjelma Pythonissa: python ohjelma.py Sellaisenaan, ohjelma ajetaan suoraan käyttöjärjestelmän alla Ajonakainen debuggaus on mahdollista erillisillä ohjelmilla gdb valgrind gcov

Kertaus C-kielen syntaksista Toisin kuin Pythonissa, välilyönnit ja rivinvaihdot ovat hyvin pitkälle pelkkä tyylikysymys C-kielessä Pakollisia ainoastaan muutamassa kohdassa Sisennys on C-kielessä täysin tyyliseikka Kääntäjä ei välitä tai saa välittää sisennyksistä missään osassa koodia Yleisesti, C-kielen syntaksi sisältää enemmän erikoisia merkkejä kuin mitä Pythonissa on Lause ja lohkorajat ilmaistaan niille varatuilla merkeillä

Puolipiste C-kielessä puolipiste lopettaa lauseen Joissain tapauksissa kuten if- ja while-rakenteissa, lause on rajattu sulkujen sisälle Monet syntaksivirheet ovat puuttuvia puolipisteitä tai puolipisteitä kummallisissa paikoissa Puolipisteellä ja kaksoispisteellä ei ole mitään tekemistä keskenään

Lohkot Lohkojen toimintaperiaate on Pythonissa ja C-kielessä hyvin samanlainen Useamman lauseen tai rakenteen kokonaisuus C-kielessä lohkot ilmaistaan aina aaltosulkeilla { ja } Sisennyksellä tai välilyönneillä ei ole mitään merkitystä Lohkossa voi olla yksi tai useampia lauseita C-kielessäkin sisennys yleensä noudattaa lohkorakenteita Lohko voi olla koodissa myös ilman mitään ohjausrakannetta Kaksoispisteellä on oma merkityksensä C-kielessä switch-case-rakenteissa ja goto:n kanssa

Olio-ohjelmoinnista ja olioista C-kielessä Ei ole olioita missään muodossa Ei ole jäsenfunktioita, eli missään asiassa itsessään ei ole toiminnallisuutta mukana C-kielessä tieto ja toiminnallisuus ovat täysin erillään toisistaan Pistettä käytetään tietuiden kenttien ilmaisemiseen Hieman sama ajatus kuin olioilla mutta erittäin merkittävillä eroilla Käsitellään myöhemmin tarkemmin Pistettä ei kannata käyttää vielä mihinkään

Tulosteen muotoilu Python 1 print " Arvo on %d" % 4 2 print "%d+%d=%d" % (1,2,3) 3 print " Liukuluku %.2 f" % (2.0 / 3.0) C 1 printf (" Arvo on %d", 4); 2 printf ("%d+%d=%d", 1,2,3); 3 printf (" Liukuluku %.2 f", 2.0 / 3.0);

Tulosteen muotoiluista Pythonin print ja C-kielen sprintf toimivat näennäisesti samalla tavalla Näissä on kuitenkin merkittäviä eroja: C-kielessä tulosteen muotoilun tekee printf-funktio Pythonissa tulosteen muotoilu on merkkijonon ominaisuus C-kielen merkkijonoissa tällaista toiminnallisuutta ei ole Käytännössä suurin ero on kuitenkin vain syntaktinen Syötteen lukeminen tapahtuu lähes kuten tulostaminen Erona &-merkki parametreissa Tiettyjä eroja muotoilumääreessä

Muuttujien määrittely Python 1 var1 = 17 2 var2 = 4.5 3 var3 = "a string " C 1 int var1 = 17 2 double var2 = 4.5 3 const char * var3 = "a string "

Muuttujien määrittelystä Muuttujilla on C-kielessä aina tyyppi Tyyppi on aina mainittava määrittelyissä ja on muuttumaton C-kielessä alaviivalla ( ) alkavia muuttujannimiä ei yleensä käytetä Täysin tavallisia muuttujia mutta varattu muuhun käyttöön C-kielessä merkkijonot toimivat hyvin eri tavalla kuin Pythonissa Käsitellään myöhemmin Osa tyypeistä on keskenään yhteensopivia mutta suurin osa ei ole Tyyppijärjestelmän voi käsittää palikkatestinä Tyyppimuunnos on mahdollista pakottaa mutta se ei yleensä kannata

Tyyppimuunnokset Python 1 var1 = int (1.4) # 1 2 var2 = float (4) # 4.0 3 var3 = int ("12") # Legal C 1 int var1 = ( int )1.4 2 double var2 = ( double )4 /* Implicit */ 3 int var3 = ( int )"12" /* Legal but will fail */

Tyyppimuunnoksista Syntaktinen ero Python: tyyppi(arvo) C: (tyyppi)arvo Arvon ympärillä voi tarvittaessa olla myös sulut C-kielen tyyppimuunnoksissa ei ole merkittävästi toiminnallisuutta Varsinkaan kokonaisluku-merkkijonomuunnosta ei voi tehdä tyyppimuunnoksilla Kääntäjä päästää muunnoksen läpi mutta lopputulos voi olla yllättävä Yleisesti tyyppimuunnoksia kannattaa välttää

Tietotyypeistä C-kielen perustietotyypeissä ei ole itsessään toiminnallisuutta Käytännössä lukuarvoja ja osoitinmuuttujia Yksinkertainen ajattelutapa on käsittää muuttujat numeroina Kokonaislukuina tai reaalilukuina Toimii tavallaan myös osoitinmuuttujille

Kehitystyökaluista Kurssilla ei käytetä integroitua kehitysympäristöä (IDE) Kokoelma erilaisia työkaluja: Editori koodin kirjoittamiseen Yllättävän merkittävä osa ohjelmointia Kääntäjä Ajonaikaiset työkalut

Yleisimmät tekstieditorit

Tekstieditorin merkitys Tekstieditori kannattaa valita oman maun mukaan Ilman aiempaa kokemusta emacs ja vim kannattaa jättää rauhaan Tärkeimmät tekstieditorin ominaisuudet ohjelmoinnissa Rivinumerointi Koodin värjäys Vastinsulkujen esitys Koodin sisennys Esittelyssä Kate tekstieditori ja sen suositellut asetukset

Kääntäjän merkitys Kääntäjä kannattaa nähdä kaverina eikä vihollisena Varoitukset ovat käytännössä aina virheitä ohjelmassa Ennakoivat ajonaikaisia virheitä Kääntäjän virheilmoitusten laatu vaihtelee merkittävästi Osa on hyvin selkeitä Toiset taas eivät Kaikki käännösvaroitukset kannattaa korjata Esittelyssä Yleisimpien GCC käännösvirheiden tulkinta, syy ja korjaus

Ajonaikaiset työkalut Debuggeri GDB Interaktiivinen työkalu Mahdollistaa ohjelman suoritukset tutkimisen ja muuttamisen Valgrind Valvottu hiekkalaatikko Tuottaa raportin ohjelman suorituksesta GCov Tuottaa kattavuusanalyysin ohjelman suorituksesta U2 yhteydessä on erityinen kehitystyökaluluento Pikaesittelyssä Valgrindin käyttö ja virheiden tulkinta

GCov Kattavuusanalyysi Mitkä ohjelman rivit suoritetaan ajossa Käytetään testauksen apuna ja harjoitustehtävissä Testiohjelman tarkoituksena on testata ohjelman koko toiminnallisuus Suorittaa kaikki ohjelman rivit ainakin kerran Vaatii käännösoptiot: -fprofile-arcs -ftest-coverage Ohjelma pitää myös ajaa kerran gcov <lähdekooditiedosto> tulostaa kattavuusanalyysin Esittelyssä GCov käyttö