C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Samankaltaiset tiedostot
C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

5. HelloWorld-ohjelma 5.1

T harjoitustehtävät, syksy 2011

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

T harjoitustyö, kevät 2012

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

5. HelloWorld-ohjelma 5.1

4. Lausekielinen ohjelmointi 4.1

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

4. Lausekielinen ohjelmointi 4.1

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

Ohjelmointi 1. Kumppanit

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

Moduli 5: Kehittyneitä piirteitä

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Tietueet. Tietueiden määrittely

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

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

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

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

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Lyhyt kertaus osoittimista

Apuja ohjelmointiin» Yleisiä virheitä

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

TIE Principles of Programming Languages CEYLON

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

Binäärioperaatiot Tiedostot ja I/O

Osoittimet ja taulukot

Tähtitieteen käytännön menetelmiä Kevät 2009

Rakenteiset tietotyypit Moniulotteiset taulukot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

Binäärioperaatiot Tiedostot ja I/O

Ohjelmoinnin peruskurssi Y1

Harjoitus 6 (viikko 42)


Ohjelmoinnin perusteet Y Python

KYMENLAAKSON AMMATTIKORKEAKOULU

XML tehtävien työnkulku

P e d a c o d e ohjelmointikoulutus verkossa

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Luento 1 Tietokonejärjestelmän rakenne

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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 peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Harjoitus 2 (viikko 45)

Ohjelmointi 1 / syksy /20: IDE

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

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin peruskurssi Y1

Harjoitus 5 (viikko 41)

Luento 1 Tietokonejärjestelmän rakenne

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

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

Java-kielen perusteet

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

Ohjelmoinnin peruskurssi Y1

Harjoitustyö: virtuaalikone

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

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

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

CVS. Kätevä väline usein päivitettävien tiedostojen, kuten lähdekoodin, hallitsemiseen

C-ohjelmointikielen perusteet, osa 1

Ohjelmoinnin perusteet Y Python

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

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

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

Laiteläheinen C-kieli osa 1 pva

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssi Y1

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

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

Harjoitus 5 (viikko 48)

Ohjelmoinnin peruskurssi Y1

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut

Transkriptio:

C! C-ohjelmoinnin peruskurssi Pasi Sarolahti 11.1.2018

Palautteita Tällä kierroksella oli erittäin hyviä ja valaisevia tehtäviä. Hyvä ensimmäinen kierros. Ympäristön valmisteleminen vaatii aikaa ja vaivaa. Windows ja C eivät sovi yhteen, varsinkaan Valgrindin suhteen... Hankalaa oli se, että C-kielen syntaksi eroaa varsin paljon muista aiemmin oppimistani ohjelmointikielistä." Liukuvan luvun ymmärtäminen oli hieman haastavaa, sillä tietoa piti ettiä muistakin lähteistä. Myös printf-fuktion rakenne jäi epäselväksi, erityisesti %d %u tapauksissa. Muuten tekstin rakenne ja opetusjärjestys oli johdonmukainen, selkeä ja motivoiva. TIM järjestelmä oli minulle uusi, mutta se ei haitannut sillä se on tosi looginen ja intuitiivisesti interaktiivinen. Hieman olisi enemmän voinut kertoa eri ohjelmointiympäristöjen eduista ja miten ne soveltuu tälle kurssille. Jäi esimerkiksi epäselväksi,että toimiiko python1-kurssilta tuttu ja aloittelijalle hyväksitodettu Eclipse C-ohjelmoinnissa? 2

Toiveeni / Tavoitteeni kurssille Mitä haluan saavuttaa kurssilla? Voiko kurssista olla jotain hyötyä itselleni tulevaisuudessa? presemo.aalto.fi/c18 3

Mikä C? 4

Ken Thompson & Dennis Ritchie http://www.computerhistory.org/fellowawards/hall/bios/ken,thompson/ 5

C vs Python Python friends = ['john', 'pat', 'gary', 'michael'] for i, name in enumerate(friends): print "iteration {iteration} is {name}".format(iteration=i, name=name) C #include <stdio.h> int main(void) { const char *friends[] = { "john", "pat", "gary", "michael" }; for (int i = 0; i < 4; i++) { printf("iteration %d is %s\n", i, friends[i]); } } 6

C vs. Python C-lähdekoodi Python-koodi C-kääntäjä Ohjelmabinääri Käyttöjärjestelmä Tietokone Python-tulkki Käyttöjärjestelmä Tietokone 7

C vs. Python - eroja Muotoilu C-kielessä sisennyksillä tai rivinvaihdoilla ei (teknisesti ottaen) väliä - Äärimmillään koko ohjelman voi kirjoittaa (melkeinpä) yhdelle riville - Käytännössä ohjelma pitää muotoilla selkeästi Muuttujat C:ssä staattinen tyypitys: tyyppi määritellään käännösaikana Muuttujien yhteydessä niiden tyyppi on aina määriteltävä Syntaksi Puolipiste lopettaa aina lauseen: unohtaminen aiheuttaa virheen Lohkorakenteet merkitään aaltosuluilla Muistinhallinta Yms. 8

Mikä C? Pieni yksinkertainen kieli, vain muutamia kielen avainsanoja Toiminnallisuus funktioissa, data muuttujissa Ei olioita Melko matalan tason kieli Osoittimien avulla päästään tietokoneen muistin tasolle Staattinen tyypitys muuttujien tyyppi päätetään kiinteästi käännösaikana I/O, merkkijonojen käsittely, ym. monimutkaiset operaatiot toteutettu kirjastoissa Funktioita, joita kutsutaan, eivät kielen ominaisuuksia 9

Kurssin tavoitteet C-kielen perusteiden hallinta, mm. Perusrakenteet, tietotyypit ja syntaksi Osoittimet Muistinhallinta Bittien käsittely Kyky toteuttaa itsenäisesti lyhyitä C-ohjelmia Kyky löytää ja korjata virheitä omasta (ja toisten) koodista Tarvittavien koodaus- ja debugaustyökalujen tunteminen C-guruksi tullaan ohjelmoimalla ja kokemuksen kautta 5 op:n kurssi on vain alkusysäys 10

Työskentelytavat Ohjelmoimaan oppii parhaiten ohjelmoimalla Paljon ohjelmointiharjoituksia Palautus automaattiselle tarkistimelle Materiaali verkossa Vähän luentoja Tarkoitus ei toistaa verkkomateriaalin asioita sellaisenaan Ota luennolla esiin epäselviksi jääneitä asioita Voidaan tarkastella myös ajankohtaisia harjoitustehtäviä 11

Aikataulu (katso tarkemmat tiedot MyCoursesista) Kymmenen osiota & tehtäväkierrosta Määräajat pääsääntöisesti viikon välein Arviointiviikoilla tauko Ajoittuvat periodeille III ja IV Max. 1000 pistettä jaossa / 100 pistettä per kierros Periodi V: ohjelmointitehtävä ja ohjelmointikoe Määräajat perjantaisin klo 23:59 Ensimmäinen: pe 19.1. 12

Ruuhkaa? 13

Luennot Torstaisin klo 12:15 Joinain viikkoina ei luentoja, seuraa tiedotteita Alkupään luennot ja tilaisuudet To 18.1. käydään läpi työkaluja ja esimerkkejä To 1.2. Osoittimet ja merkkijonot To 2.2. Debugaustyökalut 14

Arviointi 40% Ohjelmointiharjoituksista Saatava vähintään 500 pistettä Vähintään 7 kierroksesta saatava 50 pistettä tai enemmän 20% Ohjelmointitehtävästä 40% Kokeesta Vähintään 50% tehtäväpisteistä saatava Koe tehdään koneella ja järjestetään toukokuun alkupuolella Kustakin osa-arvosana, josta painotettu keskiarvo => arvosana 15

Maarintalon harjoitukset (Ensisijaisesti Maari-A, tarvittaessa Maari-C) Mahdollisuus saada apua ongelmiin Toimintaohjeita: Ei kannata odottaa käsi pystyssä, assarit kiertävät salia järjestyksessä Kannattaa tarkistaa mitä naapuri tekee, odottaessa tehtäviä voi miettiä yhdessä Kaveria saa neuvoa Koodin kopioiminen ei ole hyödyllistä auttamista (kostautuu kokeessa) Järjestelmälliseen kopiointiin puututaan Assarit paikalla Ma 10 12 To 14 18 Svenska: Ti 14 16, Fr 10-12 Maari-C Ti 14 16 Pe 10 14 Ke 12 16 16

Assarit (kts. MyCourses) 17

Kurssimateriaali Verkossa: https://tim.aalto.fi/ Tehtävät upotettu materiaalin sekaan Tehtäväpalautus samassa Rekisteröidy ensin aalto-sähköpostiosoitteella Myös kirjallisuutta kannattaa käyttää Hyvä perinteinen kirja: Kernighan, Ritchie: The C Programming Language, 2 nd edition. Prentice Hall. - C is not a big language, and it is not well served by a big book Netissä paljon tietoa 18

Palaute Joka kierroksen lopussa pieni palautekysely 5 pistettä Palautteita käsitellään luennoilla Yhteenveto ilmestyy myös kunkin kierroksen loppuun määräajan jälkeen Lisäksi kysellään hyvää tyyppiä Onko joku ollut erityisen avulias tehtävien kanssa? Assari / toinen opiskelija / muu kaveri /. Pieniä palkintoja luvassa 19

Keskustelukanavat Suositeltu: Slack Liity: https://aalto-c.slack.com/signup Erityisesti kätevä pastebin toiminnon kanssa Voit jakaa ohjelmasi ja kysyä siihen liittyen apua 20

C - ohjelman tuottaminen

C-ohjelmoinnin vaiheet 1. Kirjoitetaan ohjelmakoodi tekstieditorilla Ohjelmatiedostot nimetään.c päätteellä Suuret ohjelmistot koostuvat useista lähdetiedostoista 2. Käännetään ohjelmakoodi Esikäännös: koodin alkuprosessointi Käännös: c-koodista objektitiedostoksi (yksi per.c tiedosto) Linkkaus: koostetaan objektitiedostot suoritettavaksi ohjelmaksi Mikäli varoituksia tai virheitä, mennään kohtaan 1 ja korjataan 3. Testataan ohjelmaa Mikäli virheitä, mennään kohtaan 1 ja korjataan 22

C-kehityksessä käytetyt tiedostot.c päätteiset tiedostot sisältävät lähdekoodin Suurempi ohjelma voi sisältää näitä useita Yhdistetään yhdeksi ohjelmaksi linkkausvaiheessa.h päätteiset tiedostot ovat otsakkeita Tietotyyppien ja funktioiden määrittelyt Viittaukset.c tiedostoista #include - komennolla Tarvitaan, jotta lähdekoodi voi käyttää ulkopuolisia määrittelyjä Makefile ohjeistus make-työkalulle Kertoo mitkä tiedostot ohjelmaan kuuluvat Sisältää ohjeet ohjelman kääntämiseksi Sekä mahdollisesti muita kehityksessä tarvittavia toimintoja 23

Ohjelman kääntäminen Usein käytetään GNU C (gcc) kääntäjää Yksinkertaisimmillaan komentorivillä: gcc <lähdetiedosto.c> Tuottaa a.out nimisen tiedoston, joka suorittaa ohjelman Jos ohjelma koostuu useasta lähdetiedostosta, kaikki.c tiedostot listataan komentorivillä.h tiedostoja ei listata tässä 24

Kääntämisen tulos Jos kaikki sujuu hyvin: ei tulostetta Kurssin ohjelmissa syntyy src/main ja test/test - tiedostot Käännösvirheet Kääntäjä ei pysty tuottamaan suoritettavaa binääritiedostoa Tutki virheilmoitukset, ja yritä korjata koodi niiden mukaan Varoitukset Kääntäjä tuottaa suoritettavan koodin ja binääritiedosto syntyy Koodissa on hyvin todennäköisesti vikaa Varoitukset syytä aina korjata (tarkistin sakottaa näistä) Ilmoituksissa rivinumero ongelman paikantamiseksi 25

Yksinkertainen esimerkki #include <stdio.h> int main(void) { /* The following line will print out some text */ printf( hello, world\n"); } #include sisällyttää stdio-kirjaston ohjelmaan (printf funktio on määritelty täällä) int main määrittelee ohjelman aloittavan main-funktion /*.. */ on kommentti: se saa sisältää mitä vaan Printf tulostaa annetun tekstin 27

Mitä C-ohjelmalle tapahtuu? ASM global _main extern _printf section.text main: push message call _printf add esp, 4 ret message: db hello, world', 10, 0 https://excelwithbusiness.com/blog/say-hello-world-in-28-different-programming-languages/ 28

Mitä C-ohjelmalle tapahtuu? Konekieli b8 21 0a 00 00 #moving "!\n" into eax a3 0c 10 00 06 #moving eax into first memory location b8 6f 72 6c 64 #moving "orld" into eax a3 08 10 00 06 #moving eax into next memory location b8 6f 2c 20 57 #moving "o, W" into eax a3 04 10 00 06 #moving eax into next memory location b8 48 65 6c 6c #moving "Hell" into eax a3 00 10 00 06 #moving eax into next memory location b9 00 10 00 06 #moving pointer to start of memory location into ecx ba 10 00 00 00 #moving string size into edx bb 01 00 00 00 #moving "stdout" number to ebx b8 04 00 00 00 #moving "print out" syscall number to eax cd 80 #calling the linux kernel to execute our print to stdout b8 01 00 00 00 #moving "sys_exit" call number to eax cd 80 #executing it via linux sys_call https://excelwithbusiness.com/blog/say-hello-world-in-28-different-programming-languages/ 29

Palautteita Tällä kierroksella oli erittäin hyviä ja valaisevia tehtäviä. Hyvä ensimmäinen kierros. Ympäristön valmisteleminen vaatii aikaa ja vaivaa. Windows ja C eivät sovi yhteen, varsinkaan Valgrindin suhteen... Hankalaa oli se, että C-kielen syntaksi eroaa varsin paljon muista aiemmin oppimistani ohjelmointikielistä." Liukuvan luvun ymmärtäminen oli hieman haastavaa, sillä tietoa piti ettiä muistakin lähteistä. Myös printf-fuktion rakenne jäi epäselväksi, erityisesti %d %u tapauksissa. Muuten tekstin rakenne ja opetusjärjestys oli johdonmukainen, selkeä ja motivoiva. TIM järjestelmä oli minulle uusi, mutta se ei haitannut sillä se on tosi looginen ja intuitiivisesti interaktiivinen. Hieman olisi enemmän voinut kertoa eri ohjelmointiympäristöjen eduista ja miten ne soveltuu tälle kurssille. Jäi esimerkiksi epäselväksi,että toimiiko python1-kurssilta tuttu ja aloittelijalle hyväksitodettu Eclipse C-ohjelmoinnissa? 30

Työkaluista Perinteinen: komentorivi + tekstieditori Editori: esimerkiksi Kate, Emacs, Vi, Notepad++ Ohjelman kääntäminen ja suorittaminen komentoriviterminaalissa Integroitu kehitysympäristö (IDE) Kaikki toiminnot yhdessä paketissa Netbeans, Eclipse, Vistual Studio, Xcode Esim. Debuggerin käyttö helpompaa Ohjeita MyCoursesissa 31

Työkalut eri järjestelmille Linuxissa hyvä kehitystuki Tarvittavat ohjelmat usein asennettu oletusarvoisesti Paras tuki ohjelmien analysoimiseen ja debugaukseen Mac OS X XCode-ohjelmointiympäristön mukana tarvittavat työkalut - Asenna lisäksi komentorivityökalut - XCode IDE:n käyttö havaittu epäkäteväksi kurssilla Kääntäjä ja debuggeri eroavat Linuxista Valgrind ei välttämättä toimi Windows-tilanne on hyvä jos Win 10 käytössä Asenna Ubuntu-paketti, Asetuksista Windows subsystem for Linux Myös Visual Studio mahdollinen, mutta kääntäjässä joitain eroja kurssilla käytettyyn 32