C! C-ohjelmoinnin peruskurssi Pasi Sarolahti 20.6.2016
Mikä C? 2
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 3
Työskentelytavat Ohjelmoimaan oppii parhaiten ohjelmoimalla Paljon ohjelmointiharjoituksia Palautus automaattiselletarkistimelle Materiaali verkossa Myös Vinkkiwiki Ei varsinaisia luentoja Poikkeuksena ma 8.8. järjestettävä tilaisuus koskien viimeistä kierrosta ja loppukoejärjestelyjä 4
Aikataulu (katso tarkemmat tiedot MyCoursesista) Viisi tehtäväkierrosta + ohjelmointiharjoituskierros Määräajat viikon välein Harjoitukset ti 5.7. pe 12.8. perjantaisin klo 23:59 Kierros 1: pe 8.7. Kierros 2: pe 15.7. Jne Pyrimme avaamaan kierrokset mahdollisimman aikaisin Paperitentti: to 1.9. klo 16:30 5
Maarintalon harjoitukset (Maari-A) Mahdollisuus saada apua ongelmiin Toimintaohjeita: Alussa saatetaan järjestäytyä tehtävien mukaisesti: varaudu vaihtamaan paikkaa Ei kannata odottaakäsipystyssä, assarit kiertävätsaliajärjestyksessä Kannattaa tarkistaa mitä naapuri tekee, odottaessa tehtäviä voi miettiä yhdessä Assarit paikalla Ti 14 16 To 16 18 Pe 14 16 6
Assarit Pääassari: Essi Jukkala Juhana Kekoni Emmi Rehn Viet Tran 7
Arviointi 50% Ohjelmointiharjoituksista 70 tehtäväkohtaa, yksi piste kustakin - 14 tehtäväkohtaa per kierros Vähintään 7 pistettä per kierros saatava Viimeinen kierros vähän erilainen (seuraava kalvo) Yhden kierroksen saa jättäätekemättä 50% Kokeesta Paperitentistä saatava vähintään 15 pistettä (max. 30) Pilotoidaan vaihtoehtoista ohjelmointinäytettä 8
Viimeinen kierros Suoritetaan viikon aikana: 8.8. 12.8. 4 pistettä TMC tehtäviä 10 pistettä ohjelmointiharjoituksesta TMC ei käytössä, ei valmista tehtäväpohjaa Toteutetaan kokonainen ohjelma, joka koostuu muutamasta funktiosta Tulee toteuttaa pyydetyt toiminnot Tarvitaan dynaamista muistinhallintaa, tietorakenteita, tiedosto- I/O:ta, ym. kurssilla käsiteltyjä asioita Pistetytys perustuu paitsi toiminnallisuuteen, myös tyyliin ja valittujen ratkaisujen tarkoituksenmukaisuuteen 9
Ohjelmointinäyte 25.8. Kokeilu: mukaan mahtuu 40 satunnaisesti valittua halukasta Vaihtoehto tentille (50% arvosanasta tässäkin) Kahden tunnin aikana tehtävä lyhyt kokonainen ohjelma Tehtävänanto annetaan alussa, valmista koodipohjaa ei ole Samankaltainenkuin viimeisen kierroksen ohjelmointitehtävä Yksilösuoritus, suoritetaan mikroluokassa Nettiyhteydet suljettu, man-sivut käytössä Kaksi vuoroa: klo 10-12 ja 13-15 Ilmoittaudu Oodissa 10
Kurssimateriaali Verkossa: http://src.aalto.fi/c/home/ Tehtävät upotettu materiaalin sekaan Myös kirjallisuutta voi 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/ 11
Tehtäväpalautus: TestMyCode (TMC) https://src.aalto.fi/tmc/ Rekisteröidy aluksi käyttäenopiskelijanumeroa käyttäjätunnuksena Jos sinulla on jo tunnus, käytä sitä Käytä myös Aalto-sähköpostiosoitetta Kurssi: C-summer-2016 Eri tapoja palauttaa tehtäviä: Komentorivityökalu SuoraanNetbeans-käyttöliittymästä Zip-pakettina web-selaimen kautta 12
Keskustelualue: Slack Ensisijainen: Slack https://aalto-c.slack.com/signup Käytettävä aalto.fi sähköpostiosoitetta Toimii web-selaimella: https://aalto-c.slack.com/ Saatavana myös sovellukset monille käyttökärjestelmille: OS X, ios, Android, 13
Yhteenvetoa Varo vieraita sivuja: mooc.fi Käynnissä samaan aikaan MOOC samaan materiaaliin pohjautuen SuunnattuAalto-yliopiston ulkopuolelle mooc.fi pisteet eivät siirry tällekurssille Seuraa MyCourses-tiedotteita Muista ilmoittautua tenttiin / ohjelmointinäytteeseen 14
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 16
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 18
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 19
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ää 20
Kääntämisen tulos Jos kaikki sujuu hyvin: ei tulostetta Kurssinohjelmissa 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ääritiedostosyntyy Koodissaon hyvin todennäköisesti vikaa Varoitukset syytä aina korjata Ilmoituksissa rivinumero ongelman paikantamiseksi 21
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) Kaikkitoiminnot yhdessä paketissa Netbeansiin saatavilla TMC-plugintehtävien palauttamiseen - Web-selaimen käyttäminen ja zippaaminen ei tarpeen Netbeans vaatii JDK 7:n toimiakseen Ohjeita: https://src.aalto.fi/c/instructions/ 22
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 Windows tarvitsee hieman lisäasennuksia Esim. Cygwin ohjelmistolla saadaan komentorivillä toimivat työkalut Valgrind analysointi ei onnistu 23