Moduli 5: Kehittyneitä piirteitä

Samankaltaiset tiedostot
Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

Binäärioperaatiot Tiedostot ja I/O

Binäärioperaatiot Tiedostot ja I/O

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Rakenteiset tietotyypit Moniulotteiset taulukot

Tietueet. Tietueiden määrittely

C-ohjelmointi, syksy 2006

C-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento

Dynaaminen muisti Rakenteiset tietotyypit

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

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Tiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä.

1. Mitä seuraava ohjelma tulostaa? Vastaukseksi riittää yksi rivi joka esittää tulosteen. (6 p)

Lyhyt kertaus osoittimista

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

Tietotyypit ja operaattorit

Luennon sisältö. Taulukot (arrays) (Müldnerin kirjan luku 10) Yksiulotteiset taulukot. Mikä taulukko on? Taulukko-osoitin. tavallinen osoitin

Ohjelmoinnin perusteet Y Python

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

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

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

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

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjeet. Jaa vastauksesi konsepteille siten, etta:

Ohjelmoinnin perusteet Y Python

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

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

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

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

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

Ohjelmoinnin perusteet Y Python

Luennon sisältö. C-kurssi kevät Tasokokeen kohta 1: Taulukon järjestäminen. Tasokokeen kohta 2. Tasokokeen kohta 2. Tasokokeen kohta 3

C-kurssi kevät Luennon sisältö

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

if-lauseen yksinkertaisin muoto on sellainen, missä tietyt lauseet joko suoritetaan tai jätetään suorittamatta.

Osoittimet ja taulukot

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmoinnin perusteet Y Python

TIETORAKENTEET JA ALGORITMIT

Harjoitustyö: virtuaalikone

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

Ohjelmoinnin perusteet Y Python

3. Binääripuu, Java-toteutus

C-ohjelmointi: Osoittimet

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Harjoitus 4 (viikko 47)

Ohjelmoinnin peruskurssi Y1

Tietorakenteet ja algoritmit

Java-kielen perusteet

Tietorakenteet ja algoritmit

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

7. Näytölle tulostaminen 7.1

Osoittimet ja taulukot

int puts(char *buff) Kirjoittaa puskurissa buff \0 :lla päätetyn merkkijonon standarditulostukseen. Formatoitu konsoli-i/o Tiedostot

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

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

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

Ohjelmoinnin perusteet Y Python

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

Ohjelmointi 1 Taulukot ja merkkijonot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Ohjelmoinnin perusteet Y Python

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

12. Näppäimistöltä lukeminen 12.1

2 Konekieli, aliohjelmat, keskeytykset

Harjoitus 5 (viikko 48)

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

2. C-kieli ja ongelmanratkaisu

Rakenne. C-ohjelmointi: Tietorakenteita ja tyyppejä. Tyyppimuunnoksia aritmeettisten tyyppien välillä. Tyyppimuunnokset. & (bitti and) Bittioperaatiot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Ohjelmoinnin peruskurssi Y1

6.3. AVR_rauta. EEPROM-muisti pva

Attribuuttikieliopit

Ohjelmoinnin peruskurssien laaja oppimäärä

Jakso 4 Aliohjelmien toteutus

13 Operaattoreiden ylimäärittelyjä

Transkriptio:

C! : Kehittyneitä piirteitä 19.4.2016

Aikataulusta 5. harjoituskierroksen määräaika: pe 22.4. Maari-C keskiviikkoisin ja torstaisin (12-14) Ti 26.4. Harjoitustentti (eli kertausluento) Normaalin luennon paikalla 6. harjoituskierroksen määräaika: pe 6.5. Aukeaa tämän viikon aikana Tentti: Ma 16.5. klo 16:30 Kommentteja / kysymyksiä: http://presemo.aalto.fi/c16 2

https://tim.jyu.fi/view/aalto/kurssit/elec/a7100/c-ohjelmoinnin%20peruskurssi

Agenda I/O-virrat ja tiedostot Esimerkki: 03_base64:n alkumetrit Esikääntäjä Funktio-osoittimet (Vaihtuvan mittaiset parametrilistat jos aikaa) 4

I/O virrat FILE *f = fopen("testfile", "w"); if (!f) { fprintf(stderr, "Opening file failed\n"); exit(exit_failure); writestring(f, mystring); fclose(f); gcc /home/psarolah/file.txt /etc/httpd.conf 5

I/O - virta C-kielessä (tiedoston, terminaalin, ) luku ja kirjoitus tapahtuu I/O virtojen kautta Ohjelman liittymä ulkomaailmaan Ennen käyttöä virta pitää avata Muutama oletusvirta on valmiiksi avattuna Useita virtoja voi olla auki kerrallaan Toistaiseksi ollaan käytetty paria I/O operaatiota printf: muotoillun tekstin kirjoittaminen virtaan scanf: tietyn muotoisen syötteen lukeminen virrasta Nämä ovat kohdistuneetoletusvirtoihin, mutta muitakin on 6

Puskurointi Syöttö- ja tulostusvirrat ovat puskuroituja Puskuri on tietorakenne, joka taltioi tietoa tilapäisesti Voi näkyä viiveenä syötteen/tulostuksen toimituksessa 7

Puskurointi Syöttö- ja tulostusvirrat ovat puskuroituja Puskuri on tietorakenne, joka taltioi tietoa tilapäisesti Voi näkyä viiveenä syötteen/tulostuksen toimituksessa Erityyppisiä puskurointipolitiikkoja Käyttäjän syöteja tuloste oletuksena rivipuskuroituja Data toimitetaan kun rivi vaihtuu I/O virran puskurin toimintaa voidaan ohjata Ei puskuria tai täysi puskurointi setvbuf funktio Lisäksi käyttöjärjestelmässä on muita puskureita Kaikkeen puskurointiinei voi helposti vaikuttaa 8

I/O-virran käsittely: FILE* - tietotyyppi I/O virtaa käsitellään FILE* - tietotyypin kautta Vain siihen tarkoitettuja funktoita käyttäen I/O - toiminnallisuus määritelty stdio.h otsakkeessa I/O virta avataan fopen - kutsulla: FILE *fopen(const char *path, const char *mode) Path: esimerkiksi tiedoston nimi Mode: käsittelymoodi (luetaanko r, kirjoitetaanko w, jne.) I/O virta täytyy sulkea käytön jälkeen fclose(file *fp) Vapautetaan käytetytresurssit Virtaa ei voi tämän jälkeen enää käyttää 9

I/O-virran avaaminen ja sulkeminen #include <stdlib.h> #include <stdio.h> int main(void) { char *mystring = "One line written to file\n"; // open 'testfile' for writing (remove previous content) FILE *f = fopen("testfile", "w"); if (!f) { fprintf(stderr, "Opening file failed\n"); exit(exit_failure); writestring(f, mystring); fclose(f); 10

Esimerkki: merkin kirjoitus int writestring(file *fp, const char *str) { while (*str) { // write characters until the end of string if (fputc(*str, fp) == EOF) return -1; // error in writing return 0; str++; Huom: stdio.h:ssamyös valmis funktio merkkijononkirjoitukseen (fputs) 12

Standardi I/O - virrat Järjestelmässä on oletusarvoisesti auki kolme I/O-virtaa stdin käyttäjältä tuleva syöte Luetaan esim. scanf funktiolla stdout käyttäjälle menevä tuloste Esim. printf kutsun tuottama teksti stderr virheulostulo puskuroimaton: tuloste näkyy heti Oletuksena stdin ja stdout ovat rivipuskuroituja Oletusarvoisesti syötteet ja tulosteet ohjautuvat terminaali-ikkunaan (mutta voidaan ohjata muualle) 13

Tekstidata ja Binääridata Monet I/O virrat ovat tekstimuotoisia Lukemisen jälkeen voidaan käsitellä ja tulostaa kuten merkkijonoja Koostuu yleensäriveistä Funktiot fputs ja fgets kirjoittavat ja lukevat tekstisisältöä Olettavat sisällön merkkijonoiksi I/O-virta voi olla myös binäärimuotoinen Esim. Muistissa olevien tietorakenteiden sisältö sellaisenaan Virran arvoja ei voi tulkita tulostettavina merkkeinä Esim. Arvoilla 0 tai 10 (ASCII \n ) ei ole mitään erityismerkitystä Funktiot fwrite ja fread kirjoittavat ja lukevat binäärisisältöä 15

Fgets/fputs - esimerkki int main(void) { FILE *f; char buffer[100]; f = fopen("test.c", "r"); // open file for reading if (!f) { fprintf(stderr, "Opening file failed\n"); return EXIT_FAILURE; while (fgets(buffer, sizeof(buffer), f)!= NULL) { if (fputs(buffer, stdout) == EOF) { fprintf(stderr, "Error writing to stdout\n"); fclose(f); return EXIT_FAILURE; fclose(f); 16

https://etherpad.wikimedia.org/p/c16

Esikääntäjä Käsittelee lähdekoodia ennen varsinaista käännösvaiheetta Tuotos pysyy tekstimuotoisena Esimerkiksi: #include tiedostojen sisällön liittäminen ohjelmaan Kommenttien poisto Erikoismerkkien käsittely (esim. \n ) Esikäännöksen direktiivit alkavat # - merkillä Rivin alusta rivin loppuun ei puolipistettä Pelkän esikäännöksen voi ajaa gcc E komennolla 20

#define Määrittelee esikääntäjämakron joka korvataan annetulla tekstillä #define NIMI arvo Esim: #define NULL ((void *)0) Yleinen käytäntö: makrojen nimet isoilla kirjaimilla #include <string.h> #define MAXSTRING 80 int main(void) { char str[maxstring]; strncpy(str, "string", MAXSTRING - 1); ( arvo voisi olla myös joku merkkijono) 22

#define-makrot parametreilla Makroon voi myös määrätä parametreja Korvautuvat annetulla sisällöllä esikäännösvaiheessa #include <stdio.h> #define PLUS(x,y) (x + y) Huomaa sulkujen käyttö int main(void) { int a = 2 * PLUS(3,4); printf( %d\n", a); Tulostaa 14 23

#if, #else, #elif #endif Esikäännösvaiheen ehtorakenteet Ehtolausekkeet ja totuusarvot toimivat kuten normaalisti #elif tarkoittaa else if Esimerkiksi kaksi erilaista versiota rajapinnasta #if (VERSION == 1) #include "hdr_ver1.h" #elif (VERSION == 2) #include "hdr_ver2.h" #else #error "Unknown version" #endif #error aiheuttaa käännösvirheen Suoritettavaa ohjelmaa ei tällöin synny 24

Virtuaalimuistin rakenne mm. paikalliset muuttujat 0xFFFF FFFF FFFF FFFF Dynaamisesti varattu muisti Koodi ja vakiomerkkijonot 0x0000 0000 0000 0000 25

Funktio-osoittimet Osoitin voi viitata myös funktioon (eli koodiin) Funktiota voi tällöin kutsua osoittimen kautta Funktio-osoittimen tyyppi koostuu useasta osasta Paluuarvon tyyppi Parametrien tyypit Formaatti: paluuarvo (*nimi)(ptyyppi1, ptyyppi2, ) nimi on muuttujan nimi, johon funktion osoite talletetaan ptyyppi1, jne. Funktion parametrien tyypit Paluuarvo ja parameterit voivat olla myös void 26

Funktio-osoittimien määrittely #include <stdlib.h> int funcadd(int a) { return a + 1; int main(void) { // The following declares four variables for function pointers int (*add_one)(int) = funcadd; void* (*varaa)(size_t); void (*vapauta)(void *); void* (*varaa_uudestaan)(void *, size_t); // above pointers are now uninitialized // set the pointers to the addresses of functions in C library varaa = malloc; vapauta = free; varaa_uudestaan = realloc; 27

Funktio-osoittimen käyttö Funktio-osoitinta voi käyttää kuten mitä tahansa muuttujaa Funktion parametreina Funktion paluuarvona Paikallisena muuttujana Osana rakenteista tietotyyppiä Määrittely voi olla syntaktisesti hankalaa joissain yhteyksissä Esim. funktion paluuarvona Funktion kutsu tapahtuu muuttujan nimen kautta (esimerkki verkkomateriaalissa) 28

Esimerkki funktio-osoittimesta parametrina: qsort qsort funktio on määritelty stdlib.h otsakkeessa Järjestää taulukon annettua järjestysfunktiota käyttäen Toimii millä tahansa tietotyypillä (myös rakenteisilla tyypeillä) Järjestysfunktiopitää määritellä itse void qsort (void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 29

Aikataulusta 5. harjoituskierroksen määräaika: pe 22.4. Ti 26.4. Harjoitustentti (eli kertausluento) Normaalin luennon paikalla 6. harjoituskierroksen määräaika: pe 6.5. Aukeaa tämän viikon aikana Tentti: To 16.5. klo 16:30 30