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

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

T harjoitustehtävät, syksy 2011

4. Lausekielinen ohjelmointi 4.1

5. HelloWorld-ohjelma 5.1

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.

T harjoitustyö, kevät 2012

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

4. Lausekielinen ohjelmointi 4.1

5. HelloWorld-ohjelma 5.1


Tietueet. Tietueiden määrittely

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

Apuja ohjelmointiin» Yleisiä virheitä

P e d a c o d e ohjelmointikoulutus verkossa

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

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

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

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

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

XML tehtävien työnkulku

Moduli 5: Kehittyneitä piirteitä

Ohjelmoinnin peruskurssi Y1

Ohjelmointi 1. Kumppanit


Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmointi 1 / syksy /20: IDE

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

Kääntäjän virheilmoituksia

Lyhyt kertaus osoittimista

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

KYMENLAAKSON AMMATTIKORKEAKOULU

C-ohjelmointikielen perusteet, osa 1

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

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

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

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

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

Laiteläheinen C-kieli osa 1 pva

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

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

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

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

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

Tietorakenteet ja algoritmit

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

Ohjelmoinnin peruskurssi Y1

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

Ohjelmoinnin peruskurssi Y1

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

Rakenteiset tietotyypit Moniulotteiset taulukot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

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

Binäärioperaatiot Tiedostot ja I/O

Ohjelmoinnin perusteet Y Python

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

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

LC-8011 Työelämän venäjän perusteet 1. Aalto-yliopisto Kielikeskus Alexandra Belikova

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

Ohjelmoinnin peruskurssi Y1

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

ABI-INFO. Lyseon lukion aikuislinja

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

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

XML tehtävien työnkulku

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

TIE Ohjelmistojen suunnittelu

Binäärioperaatiot Tiedostot ja I/O

Osoittimet ja taulukot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmointiharjoituksia Arduino-ympäristössä

Harjoitus 5 (viikko 41)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

Modulaarinen ohjelmointi

Transkriptio:

C! C-ohjelmoinnin peruskurssi Pasi Sarolahti 12.1.2017

presemo.aalto.fi/c17 1/12/17

Mikä C? 3

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

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 5

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 6

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ä Koneet mukaan 7

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 maanantaisin klo 12:00 Ensimmäinen: ma 23.1. 8

Ruuhkaa? 9

Luennot Torstaisin klo 12:15 Joinain viikkoina ei luentoja, seuraa tiedotteita Alkupään luennot To 19.1. käydään läpi työkaluja ja esimerkkejä To 26.1. Osoittimet ja taulukot To 2.2. Debugaustyökalut 10

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 11

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 English only: Thu 14-18 Maari-C Ti 14 16 Pe 10 14 Ke 12 16 12

Assarit (kts. MyCourses) 13

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 14

Keskustelukanavat Suositeltu: Slack Liity: https://aalto-c.slack.com/signup Erityisesti kätevä pastebin toiminnon kanssa Voit jakaa ohjelmasi ja kysyä siihen liittyen apua 11.1.2017 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 (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. 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ä 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 (tarkistin sakottaa näistä) 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 Integroitu kehitysympäristö (IDE) Kaikki toiminnot yhdessä paketissa Netbeans, Eclipse, Vistual Studio, Xcode Esim. Debuggerin käyttö helpompaa Ohjeita MyCoursesissa 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