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

5. HelloWorld-ohjelma 5.1

4. Lausekielinen ohjelmointi 4.1

T harjoitustyö, kevät 2012

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

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

4. Lausekielinen ohjelmointi 4.1

Osoittimet ja taulukot

Moduli 5: Kehittyneitä piirteitä

Binäärioperaatiot Tiedostot ja I/O

Tietueet. Tietueiden määrittely

Binäärioperaatiot Tiedostot ja I/O

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

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

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

Ohjelmointi 1. Kumppanit

KYMENLAAKSON AMMATTIKORKEAKOULU

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

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

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

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

Harjoitus 6 (viikko 42)

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

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

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

TIE Principles of Programming Languages CEYLON

Java-kielen perusteet

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

Lyhyt kertaus osoittimista

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

P e d a c o d e ohjelmointikoulutus verkossa

Rakenteiset tietotyypit Moniulotteiset taulukot

Laiteläheinen C-kieli osa 1 pva

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

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Luento 1 Tietokonejärjestelmän rakenne

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

Harjoitustyö: virtuaalikone

Modulaarinen ohjelmointi

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

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

Kääntäjän virheilmoituksia

Ohjelmointi 1 / syksy /20: IDE

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 2 (viikko 45)

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Harjoitus 5 (viikko 41)

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

Luento 1 Tietokonejärjestelmän rakenne

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

XML tehtävien työnkulku

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

C-ohjelmointi, syksy Modulaarinen ohjelmointi. Luento C-ohjelmointi Syksy

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

Apuja ohjelmointiin» Yleisiä virheitä

Harjoitus 5 (viikko 48)

Ohjelmoinnin peruskurssi Y1

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tietorakenteet ja algoritmit

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

Hellä ensikosketus. Tomi Kiviniemi

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

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

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

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

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

Ohjelmoinnin peruskurssi Y1

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

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

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet, syksy 2006

Transkriptio:

C! C-ohjelmoinnin peruskurssi Pasi Sarolahti 4.6.2018

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 Ymmärtää miten tietokonejärjestelmä tallentaa ja prosessoi tietoa Mennään hieman lähemmäs konetta kuin esim. Pythonin kanssa 10

Työskentelytavat Ohjelmoimaan oppii parhaiten ohjelmoimalla Paljon ohjelmointiharjoituksia Palautus automaattiselle tarkistimelle Materiaali verkossa Ei luentoja Elokuussa lyhyt yhteenvetoluento koskien ohjelmointiprojektia ja koetta Seuraa MyCoursesia ja Slackia! 11

Aikataulu (katso tarkemmat tiedot MyCoursesista) Kymmenen osiota & tehtäväkierrosta Määräajat pääsääntöisesti viikon välein Arviointiviikoilla tauko Max. 1000 pistettä jaossa / 100 pistettä per kierros Elokuun loppu: ohjelmointitehtävä ja ohjelmointikoe Määräajat perjantaisin klo 21:59 Ensimmäinen: pe 15.6. 12

Ruuhkaa? 13

Arviointi (myös MyCourses) 40% Ohjelmointiharjoituksista Saatava vähintään 500 pistettä Vähintään 7 kierroksesta saatava 50 pistettä tai enemmän 30% Ohjelmointitehtävästä Jos teit keväällä tehtäväkierroksia, ne hyväksytään nytkin 30% Kokeesta Vähintään 50% tehtäväpisteistä saatava Koe tehdään koneella ja järjestetään elokuun viimeisellä viikolla Kustakin osa-arvosana, josta painotettu keskiarvo => arvosana 15

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ä Auttavat kehittämään kurssia jatkossa Myöhemmin julkaistaan yhteenveto Virallinen kurssipalaute erikseen kurssin lopussa 19

Keskustelukanavat Suositeltu: Slack Liity: https://aalto-c.slack.com/signup Slackssä voit myös jakaa ohjelmasi ja saada siihen ratkaisuapua Näkyvyys: Kurssihenkilökunta ne opiskelijat jotka ovat ratkaisseet jo tehtävän Kun deadline ohi: kaikki (voitte vertailla ratkaisujanne keskustelukanavalla) 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 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

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