C-ohjelmoinnin peruskurssi. Pasi Sarolahti 12.1.2016

Samankaltaiset tiedostot
C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

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

4. Lausekielinen ohjelmointi 4.1

T harjoitustehtävät, syksy 2011

T harjoitustyö, kevät 2012

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

5. HelloWorld-ohjelma 5.1

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

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

XML tehtävien työnkulku

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

Tietueet. Tietueiden määrittely

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


Ohjelmoinnin perusteet Y Python

- Kommentoi koodisi. Koodin kommentointiin kuuluu kuvata metodien toiminta ja pääohjelmassa tapahtuvat tärkeimmät toiminnat. Esim.

5. HelloWorld-ohjelma 5.1

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

XML tehtävien työnkulku

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

Ulkoiset mediakortit Käyttöopas

Johdatus diskreettiin matematiikkaan Harjoitus 7,

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

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

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

Racket ohjelmointia. Tiina Partanen 2014

TW- EAV510: WDS- TOIMINTO KAHDEN TW- EAV510 LAITTEEN VÄLILLÄ

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Moduli 5: Kehittyneitä piirteitä

C-ohjelmointikielen perusteet, osa 1

Käyttöjärjestelmät: Virtuaalimuisti

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

Harjoitustyö: virtuaalikone

Ohjelmiston testaus ja laatu. Testaus yleistä

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

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

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

Ohjelmoinnin peruskurssi Y1

TieVie-hanke Saksan kieli. Ritva Huurtomaa

OHJ-1151 Ohjelmointi IIe

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Ohjelmointiharjoituksia Arduino-ympäristössä

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Kääntäjän virheilmoituksia

Apuja ohjelmointiin» Yleisiä virheitä

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

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

Racket ohjelmointia I

Talousmatematiikan perusteet: Johdanto. Kurssin tavoitteet Käytännön järjestelyt Suosituksia suorittamiseen

Ohjelmoinnin peruskurssi Y1

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

Ohjelmoinnin peruskurssi Y1

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

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Lyhyt kertaus osoittimista

Ohjelmoinnin peruskurssi Y1

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


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

Hae Opiskelija käyttöohje

Suomi toisena kielenä -ylioppilaskoe. FT Leena Nissilä Opetusneuvos, yksikön päällikkö OPETUSHALLITUS

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Taulukkolaskenta II. Taulukkolaskennan edistyneempiä piirteitä

Ohjelmoinnin perusteet Y Python

P e d a c o d e ohjelmointikoulutus verkossa

käännösprosessi Kääntäjä Konekielikääntäjä (Assembler) Yhdistelijä (linker) Lataaja (loader)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Java-kielen perusteet

Matematiikan viestintä (3 op)

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmoinnin perusteet Y Python

ASCII-taidetta. Intro: Python

2 Konekieli, aliohjelmat, keskeytykset

Tietotyypit ja operaattorit

Rakenteiset tietotyypit Moniulotteiset taulukot

Johdatus L A TEXiin. 6. Omat komennot ja lauseympäristöt Markus Harju. Matemaattiset tieteet

KOULUTUSPOLKU - KOULUTTAUDU LUOKKAKURSSEILLA MEPCO-OSAAJAKSI

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

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

Johdatus L A TEXiin. 10. Matemaattisen tekstin kirjoittamisesta. Matemaattisten tieteiden laitos

Tietorakenteet ja algoritmit

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Transkriptio:

C! C-ohjelmoinnin peruskurssi Pasi Sarolahti 12.1.2016

Mikä C? 2

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

Mikä C? Pieni 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 4

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 5

Työskentelytavat Ohjelmoimaan oppii parhaiten ohjelmoimalla Paljon ohjelmointiharjoituksia Palautus automaattiselle tarkistimelle Materiaali verkossa Myös Vinkkiwiki 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ä 6

Aikataulu (katso tarkemmat tiedot MyCoursesista) Kuusi modulia / kuusi tehtäväkierrosta Kukin kaksi viikkoa Per III: Kaksi kierrosta + tauko Per IV: Kaksi kierrosta + tauko Per V: Kaksi kierrosta + tentti 16.5. Määräajat perjantaisin klo 23:59 Kierros 1: pe 29.1. Kierros 2: pe 12.2. Jne 7

Ruuhkaa? 8

Luennot Tiistaisin Mutta ei joka viikko Alkupään luennot Ti 19.1. käydään läpi työkaluja ja esimerkkejä Ti 26.1. Osoittimet ja taulukot (Joel) Ti 2.2. Debugaustyökalut Tämän jälkeen n. 1 per moduli Aikataulu päivittyy MyCoursesiin, seuraa sieltä 9

Arviointi 50% Ohjelmointiharjoituksista 84 tehtäväkohtaa, yksi piste kustakin - 14 tehtäväkohtaa per kierros Vähintään 7 pistettä per kierros saatava - Yhden kierroksen saa jättää tekemättä tai vajaaksi Vähintään 42 pistettä yhteensä 50% Tentistä C-koodin luku- ja kirjoitustehtäviä, ehkä esseetehtävä Tentistä saatava vähintään 15 pistettä (max. 30) Tarkempi kuvaus MyCoursesissa 10

Maarintalon harjoitukset (Ensisijaisesti Maari-A, tarvittaessa Maari-C) Mahdollisuus saada apua ongelmiin Toimintaohjeita: Alussa saatetaan järjestäytyä tehtävien mukaisesti: varaudu vaihtamaan paikkaa 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 tentissä) Järjestelmälliseen kopiointiin puututaan Assarit paikalla Ma 10 12 To 12 16 Svenska: Ti 14-16, To 14-16, Maari-C Ti 14 16 Pe 10 14 Ke 12 16 11

Assarit (kts. MyCourses) 12

Kurssimateriaali Verkossa: http://src.aalto.fi/c/home/ Tehtävät upotettu materiaalin sekaan 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 Vinkkiwiki https://wiki.aalto.fi/display/c/ 13

Tehtäväpalautus: TestMyCode (TMC) https://src.aalto.fi/tmc/ Rekisteröidy aluksi käyttäen opiskelijanumeroa käyttäjätunnuksena Jos sinulla on jo tunnus, käytä sitä Käytä myös Aalto-sähköpostiosoitetta Kurssi: C-spring-2016 Eri tapoja palauttaa tehtäviä: Komentorivityökalu Suoraan Netbeans-käyttöliittymästä Zip-pakettina web-selaimen kautta 14

IRC Kurssilla on IRC kanava #aalto.c (IRCnet) Esim. Kysymyksiä harjoituksiin liittyvistä ongelmista Suositus: käytä irssiä Ensimmäisellä kerralla: ssh <username>@kosh.aalto.fi screen irssi /connect irc.cs.hut.fi /join #aalto.c Seuraavilla kerroilla ssh <username>@kosh.aalto.fi screen rd Enemmän ohjeita Vinkkiwikissä Hyödyllinen pastebin-toiminnan kanssa 15

C - ohjelman tuottaminen

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 17

C vs. Python - eroja Muotoilu C-kielessä sisennyksillä tai rivinvaihdoilla ei väliä - Äärimmillään koko ohjelman voi kirjoittaa (melkeinpä) yhdelle riville - Käytännössä käytetään koodia selkeyttämään 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 Sekä muita (vinkkiwikissä laajempi katsaus) 18

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 19

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 20

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ä TMC-tehtävissä tulee mukana Makefile Skripti ohjelman kääntämiseksi (gcc:tä käyttäen) make <komento> komentorivillä riittää 21

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 Ilmoituksissa rivinumero ongelman paikantamiseksi 22

Yksinkertainen esimerkki #include <stdio.h> int main(void) { /* The following line will print out some text */ printf("hey! How are you?\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 23

Työkaluista Perinteinen: komentorivi + tekstieditori Editori: esimerkiksi Kate, Emacs, Vi, Notepad++ Ohjelman kääntäminen ja suorittaminen komentoriviterminaalissa TMC - komentorivityökalu Integroitu kehitysympäristö (IDE) Kaikki toiminnot yhdessä paketissa Netbeansiin saatavilla TMC-plugin tehtävien palauttamiseen - Web-selaimen käyttäminen ja zippaaminen ei tarpeen Netbeans vaatii JDK 7:n toimiakseen Ohjeita: https://src.aalto.fi/c/instructions/ 24

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 tarvitsee hieman lisäasennuksia Esim. Cygwin ohjelmistolla saadaan komentorivillä toimivat työkalut Valgrind analysointi ei onnistu 25