Tiedosto. Tiedostot ovat joko binääritiedostoja tai tekstitiedostoja. Tekstitiedostot
|
|
- Armas Kapulainen
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 Tiedosto Monessa tilanteessa olisi hyvä pystyä tallentamaan ohjelman suorituksen aikana syntyvää tietoa pysyvämmin. Nythän kaikki katoaa kun ohjelman suoritus lopetetaan. Tietoja on mahdollista tallentaa tiedostoon. Tiedosto on yhteenkuuluvien tietojen joukko, joka on tallennettu jollekin pitkäaikaistallennukseen pystyvälle medialle, kuten kiintolevylle, CD-levylle tai DVD-levylle. UNIX-järjestelmässä kaikki oheislaitteet ja järjestelmän osat näkyvät ohjelmoijalle tiedostoina. Tiedostot ovat joko binääritiedostoja tai tekstitiedostoja. Tekstitiedostot Tekstitiedosto sisältää ASCII-merkkejä, joista muodostuu peräkkäisiä rivejä, jotka päättyvät rivinvaihtomerkkiin '\n' (newline). Esimerkkinä tekstitiedostosta on lähdekielinen C-ohjelma, HTML-tiedosto jne. Koska tekstitiedostossa on pelkkiä ASCII-merkkejä, kaikki luvut tallennetaan niihin merkkeinä. Esimerkiksi kokonaisluku 345 varaa tekstitiedostosta tilaa kolme merkkiä. Binääritiedostot Binääritiedostot voivat sisältää käytännössä mitä tahansa tietoa: tekstiä, ääntä kuvaa. Binääritiedoston sisältöä ei voida tulkita ASCII-järjestelmän avulla. Esimerkkejä binääritiedostoista ovat C-ohjelmasta käännetty EXE-tiedosto, wordtiedosto, jpg-kuva jne. 91
2 C-ohjelmien muuttujat voidaan sellaisinaan tallentaa binääritiedostoon, jolloin esimerkiksi kokonaisluku 345 varaa binääritiedostosta tilaa kokonaislukutyypin vaatiman tilanvarauksen verran. Tekstitiedostoja pystyy usein käsittelemään binääritiedostoina, mutta binääritiedostoa ei pysty käsittelemään tekstitiedostona. Tämä johtuu siitä, että tekstitiedostojen yhteydessä suoritetaan automaattisia merkkimuunnoksia. Esimerkiksi, kun tekstitiedostosta tulostetaan kuvaruudulle newline-merkki '\n', se muutetaan kahdeksi ASCII-merkiksi: carriage-return, CR (kursori rivin alkuun) ja line-feed, LF (kursori yksi rivi alaspäin). Binääritiedostoille ei suoriteta missään vaiheessa mitään muunnoksia. Tiedostojen käsittelyn perustoiminnot 1. Tiedoston määrittely Tiedosto määritellään FILE-tietotyypin avulla. FILE on tietue, joka sisältää tiedostonhallintaan liittyviä asioita. Tiedosto määritellään käytännössä määrittelemällä osoitin FILE-tietueeseen: FILE *tiedosto; Tiedosto-osoitin tiedosto on tämän määrittelyn jälkeen jonkin tietovirran (eli tiedoston) nimi. Sitä käytetään kaikissa tiedosto-operaatioissa viittaamaan tiedostoon. On huomattava, että tässä vaiheessa tiedosto ei vielä viittaa mihinkään fyysiseen tiedostoon. 92
3 2. Tiedoston avaaminen Tiedosto joudutaan avaamaan ennen kuin sitä voidaan käyttää. Avaaminen liittää käytännössä yhteen tiedosto-osoittimen ja fyysisen levytiedoston. Avaamiseen käytetään funktiota fopen(). tiedosto = fopen ("C:\\NIMET.TXT", "r"); fopen() saa kaksi merkkijonoparametria, jotka ovat tiedoston fyysinen nimi ja tiedoston avaustapa. Avaustapa ilmoittaa sen, missä tarkoituksessa tiedostoa käytetään. Kolme avaustapaa ovat: r = tiedostoa luetaan (read) w = tiedostoon kirjoitetaan (write) a = tietojen lisääminen tiedoston loppuun (append). Avaustavan yhteydessä voidaan määritellä, käsitelläänkö tiedostoa teksti- vai binääritiedostona. Oletuksena on tekstitiedosto. Jos halutaan avata tiedosto binäärimuodossa, lisätään lainausmerkkien sisään toiseksi parametriksi b-kirjain, siis rb, wb tai ab. Oheisessa esimerkissä avataan tekstitiedosto kirjoittamista varten ja kirjoitetaan sinne teksti #include <stdio.h> void main(void) FILE *tiedostomuuttuja = fopen("teletapit.txt", "w"); fprintf(tiedostomuuttuja, "teletapit nukkumaan!\n"); fclose(tiedostomuuttuja); 93
4 Funktio fprintf() toimii samantyylisesti kuin printf(), mutta tulostus tapahtuu tiedostoon, ei näytölle. Jos tiedoston avaaminen onnistuu, fopen() palauttaa osoittimen kyseiseen tiedostoon, muuten se palauttaa arvon NULL. C-ohjelman pääohjelma main() on itse asiassa samanlainen funktio kuin kaikki muutkin funktiot, eli se pystyy palauttamaan arvon käyttöjärjestelmään, josta se käynnistettiin. Siksi oikea tapa määritellä main() on käyttää void:n sijasta sille paluuarvoa int 1. Virhetilanteessa yleinen tapa on, että ohjelman suoritus loppuu siihen ja käyttöjärjestelmälle palautetaan negatiivinen kokonaisluku. Jos ohjelman suoritus menee loppuun ongelmitta, palautetaan nolla tai positiivinen luku. Ohjelman suoritus loppuu ja paluuarvo palautetaan return-lauseella aivan samoin kuin mistä tahansa funktiosta palatessa: #include <stdio.h> int main(void) FILE *avaus; avaus = fopen("oulu.txt", "w"); if(avaus == NULL) printf("tiedoston avauksessa on tapahtunut\ virhe!"); return(-1); fprintf(avaus, "Paskakaupunni"); fclose(avaus); return(0); 1 Modernit C-kääntäjät suorastaan vaativat paluuarvon, toisin kuin paleoliittiselta kaudelta periytyvä Borland 4.5. Uusissa kääntäjissä määrittely void main(void) aiheuttaa virheilmoituksen. Kääntäjät yleensä lisäävät return(0):n automaattisesti main():n loppuun, jos sitä ei siellä ole. 94
5 Tiedosto oulu.txt tallentuu hakemistoon, joka on C-kääntäjän oletushakemisto ajon aikana. Tiedosto näkyy tiedostolistauksessa ja sen sisältöä voi tutkia jollain tekstieditorilla, vaikkapa Notepadilla: Katsotaan seuraavaksi, miten oulu.txt-tiedostosta luetaan tekstiä: #include <stdio.h> void main(void) FILE *avaus; char puskuri[20]=""; avaus = fopen("oulu.txt", "r"); if(avaus == NULL) printf("tiedoston avauksessa on tapahtunut virhe!"); return(-1); fgets(puskuri,sizeof(puskuri),avaus); printf("%s",puskuri); fclose(avaus); return(0); Nyt tiedot luetaan ensin 20 alkion mittaiseen merkkijonopuskuriin fgets()- funktiolla. fgets() tarvitsee syötteekseen 3 parametria: Puskurin nimi 95
6 Puskurin koko, joka voidaan määrittää sizeof-operaattorilla. Tiedosto-osoittimen fgets() on turvallisempi vaihtoehto tavalliselle gets()-funktiolle, koska sille voidaan määritellä luettavien merkkien maksimimäärä. Sitä voidaan käyttää lukemaan merkkijonoja myös näppäimistöltä tiedoston sijaan, jolloin tiedoston sijalla parametrilistassa on stdin. 2 fgets jättää rivinvaihtomerkin \n merkkijonon loppuun toisin kuin gets (huom, \n on eri asia kuin merkkijonon lopetusmerkki; molemmat funktiot jättävät loppuun loppumerkin \0 ). Tiedoston sulkeminen Kun tiedoston käsittely lopetetaan, se pitää sulkea funktiolla fclose(), jota käytetään seuraavasti: fclose(tiedosto); missä tiedosto on fopen()-funktion palauttama osoitin. Tavallinen aloittelijan tekemä virhe on unohtaa sulkea tiedosto, ja sitten ihmetellä että miksi mitään ei tallennu mihinkään Harj69 Tee ohjelma, jonka avulla tallennat oman nimesi tiedostoon nimi.txt. Harj70 Tee ohjelma, jonka avulla luet oman nimesi tiedostosta, jonka nimi annetaan ohjelman suorituksen aikana merkkijonomuuttujan avulla. 2 Jo ensimmäinen tunnettu Internet-mato vuodelta 1988, nk. Morris Internet Worm hyödynsi gets-funktion merkkijonopuskurin ylivuotoa. 96
7 Harj71 Tee ohjelma, joka tulostaa numerot tabulaattorilla erotettuna 10 lukua/rivi tiedostoon luvut.txt Harj72 Muokkaa harjoitusta 71, niin että se käy hakemassa luvut tiedostosta ja tulostaa ne viisi kappaletta rivilleen ohjelmaikkunaan. Sijaintiosoitin Kun tiedostoa luetaan tai sinne kirjoitetaan, tiedostojärjestelmän sisäinen muuttuja, sijaintiosoitin (sijaintipointteri), osoittaa aina seuraavan käsittelykohdan. Kun tiedosto avataan, sijaintiosoitin siirtyy automaattisesti tiedoston alkuun. Kun tiedostosta luetaan, sijaintiosoitin siirtyy (jälleen automaattisesti) siihen kohtaan, mihin lukeminen päättyi. Tätä voidaan toistaa, jolloin on kysymys tiedoston peräkkäiskäsittelystä. Peräkkäiskäsittelyssä seuraava lukemistapahtuma aloittaa lukemisen siitä, mihin edellinen jäi. Vastaavasti, kun kirjoitetaan, sijaintipointteri etenee kirjoituksen myötä eteenpäin ja osoittaa aina seuraavan kirjoituskohdan. 97
8 NICE TO KNOW Tiedosto-osoittimen manipulointiin on C-kielessä tarjolla seuraavia standardikirjaston funktioita: int fseek ( FILE * stream, long int offset, int origin ); o Siirtää tiedosto-osoittimen nykyisestä paikasta origin offset tavua (toimii varmasti oikein vain binääritiedostoille) long int ftell ( FILE * stream ); o Palauttaa tiedosto-osoittimen paikan tavuina tiedoston alusta (toimii varmasti oikein vain binääritiedostoille) void rewind ( FILE * rewind ); o Siirtää osoittimen tiedoston alkuun int fgetpos ( FILE * stream, fpos_t * position ); o Palauttaa osoittimen fpos_t nimiseen stdio.h:ssa määriteltyyn tietueeseen, jonka avulla saadaan tiedosto-osoittimen paikka selville. Tietuetta fpos_t käytetään syötteenä funktiolle: int fsetpos ( FILE * stream, const fpos_t * pos ); o Siirtää osoittimen paikkaan pos. Esimerkki: Sanakirjaohjelma Tehdään seuraavaksi sanakirjaohjelmasta tiedoston avulla toteutettu versio. Sanat on talletettu tekstitiedostoon sanakirja.txt, jonka sisältö näyttää seuraavalta. 98
9 Kysytään käyttäjältä sana englanniksi ja ohjelma tulostaa vastaavan sanan suomeksi lukemalla se tiedostosta #include <stdio.h> #include <string.h> int main(void) FILE *sanakirjatiedosto; char suomi[20],englanti[20],puskuri[40],sana[20]; printf("anna sana englanniksi\n"); gets(sana); sanakirjatiedosto = fopen("sanakirja.txt", "r"); if(sanakirjatiedosto == NULL) perror("tiedoston avauksessa on tapahtunut virhe!"); return(-1); while (!feof(sanakirjatiedosto)) fgets(puskuri,sizeof(puskuri),sanakirjatiedosto); sscanf(puskuri,"%s %s",&englanti,&suomi); if (strcmp(englanti,sana)==0) printf("suomeksi %s\n",suomi); break; fclose(sanakirjatiedosto); return(0); Ohjelman toiminta lyhyesti: Määritellään 4 kpl merkkijonomuuttujia, joista muuttujaan sana tallennetaan käyttäjän syöttämä sana, jota sanakirjasta etsitään. Yritetään avata sanakirja.txt-tiedosto. Jos avaus ei onnistu, perror()- funktio, joka on erityinen virheilmoitusten tulostukseen tarkoitettu funktio, 99
10 tulostaa tiedon siitä, mikä oli vialla. Ohjelmasta poistutaan ja palautetaan arvo -1 Jos avaus onnistuu, niin: While-silmukassa luetaan tiedostosta tekstiä rivi kerrallaan niin kauan kuin tiedosto ei ole lopussa. Tiedoston loppuminen tarkastetaan feof()- funktiolla (EOF = End Of File). fgets() suorittaa varsinaisen tekstin lukemisen merkkijonomuuttujaan puskuri. Puskurista luetaan kaksi merkkijonoa muuttujiin englanti ja suomi sscanf()-funktiolla. Verrataan löydettyä englanninkielistä sanaa muuttujaan sana. Jos ovat samat, tulostetaan vastaava suomenkielinen sana. Harj73 Eräs mittauslaite on tuottanut mittausdataa tekstitiedostoon. Insinöörioppilas S.A. Tiaiselle on annettu tehtäväksi kirjoittaa C-ohjelma, joka analysoi tätä dataa. Tiaiselle on kerrottu, tiedostossa on aina yhdellä rivillä juokseva numero sekä kaksoistarkkuuden liukuluku. Auta insinöörioppilasta tekemällä ohjelma, joka tulostaa tiedostossa olevat luvut, niiden lukumäärän, keskiarvon sekä suurimman ja pienimmän arvon. Data löytyy täältä Esimerkki: Tietuetaulukon tallentaminen tekstitiedostoon funktiossa Tässä esimerkissä määritellään yksinkertaisin mahdollinen tietue, joka sisältää yhden kokonaisluvun. Ohjelmassa on funktiot kysy(), tulosta() ja tallenna(). Funktioille viedään osoitin tietuetaulukkoon sekä tietuetaulukon alkioiden määrä, joka kysytään pääohjelmassa. Lisäksi kysytään tiedoston nimi, johon tallennetaan ja viedään tallenna()-funktiolle merkkijonotaulukkona. Tässä 100
11 esimerkissä on toinen tapa kirjoittaa funktioita. Jos funktioiden määrittelyosat kirjoitetaan ennen main()-funktiota, ei erillisiä prototyyppeja tarvita. #include <stdio.h> struct tietue int arvo; ; void kysy(struct tietue *x,int maara) int i; for (i=0;i<maara;i++) printf("luku?\n"); scanf("%d",&x->arvo); x++; void tulosta(struct tietue *x,int maara) int i; for (i=0;i<maara;i++) printf("%d\n",x->arvo); x++; int tallenna(struct tietue *x,char *tiedosto,int n) int i; FILE *stream; stream=fopen(tiedosto,"w"); if (stream == NULL) perror("virhe : "); return(-1); for (i=0;i<n;i++) fprintf(stream,"%d\n",x->arvo); x++; fclose(stream); 101
12 return(0); int main(void) tietue luvut[5]; int lkm; char tiedostonimi[30]; printf("mihin tallennetaan?\n"); gets(tiedostonimi); printf("montako lukua?\n"); scanf("%d",&lkm); kysy(luvut,lkm); tulosta(luvut,lkm); tallenna(luvut,tiedostonimi,lkm); return(0); Harj74 Tee Harjoituksen 67 opiskelijarekisteriohjelmasta versio, joka tallettaa syötetyt tiedot tiedostoon. Kirjoita tallennus omaksi funktiokseen. Harj75 Lisää edelliseen harjoitustehtävään funktio, joka lukee tiedostosta opiskelijarekisterissä olevat tiedot ja tulostaa ne näytölle. Harj76 Tee edellisen harjoitustehtävän ohjelmaan tekstipohjainen valikko, jossa on seuraavat toiminnot: o Lisää opiskelija rekisteriin o Hae rekisterissä olevat opiskelijat o Tulosta opiskelijarekisterin sisältö o Tallenna opiskelijarekisterin sisältö o Lopeta 102
13 Binääritiedostoon kirjoittaminen ja lukeminen, hex-editori Binääritiedoston sisältöä ei voi tutkia tekstieditorilla. On kuitenkin erityisiä ohjelmia, ns. hex-editoreita, joiden avulla voidaan tutkia binääritiedostojen sisältöä. Suurempia datamääriä tallennettaessa binääriformaatti on huomattavasti tehokkaampi tapa tallentaa tietoja kuin tekstiformaatti. Binääritiedosto vie vähemmän levytilaa ja sekä sen lukeminen että sinne kirjoittaminen on nopeampaa. Ohjelma tallentaa 1000 kokonaislukua binääritiedostoon. Erona tekstitiedostoon kirjoittamiseen on, että luvut kirjoitetaan yhdellä kertaa fwrite-funktiolla. #include <stdio.h> const int N=1000; int main(void) FILE *avaus; avaus = fopen("numeroita.bin", "wb"); int i,taulukko[n]; if(avaus == NULL) printf("tiedoston avauksessa on tapahtunut virhe!"); return(-1); for (i=0;i<n;i++) taulukko[i]=i; fwrite(taulukko,sizeof(int),\ sizeof(taulukko)/sizeof(int),avaus); fclose(avaus); return(0); 103
14 Ohjelmasta kannattaa huomata, että tiedot kirjoitetaan levylle for-silmukan jälkeen kertalinttuulla. Funktiolla fwrite() annetaan parametrina: o Tulostettava data, tässä osoitin kokonaislukutaulukon alkuun o Tallennettavan dataelementin koko tavuina. Yleensä on turvallisinta varata elementille tilaa kyseisen tietotyypin maksimikoon verran. Maksimikoko voidaan selvittää sizeof()-funktion avulla. Eli tässä esimerkissä sizeof(int) laskee kokonaisluvun tavujen lukumäärän tässä järjestelmässä (4). Sillä varmistetaan, että suurin mahdollinen kokonaisluku pystytään tallentamaan. o Kolmas parametri ilmoittaa tallennettavien alkioiden lukumäärän. Jotta lukumäärä tulee varmasti oikein kaikissa tapauksissa, on tämä luku syytä laskea kaavalla sizeof(taulukko)/sizeof(int) (tässä 4000/4 = 1000). o Viimeisenä annetaan tiedosto-osoitin. Jos käytettäisiin tekstiformaattia, pitäisi jokainen luku kirjoittaa erikseen silmukan sisällä fprintf:llä, joka on huomattavan paljon hitaampaa. Jos numeroita.bin-tiedoston avaa Notepadilla, tulostus näyttää seuraavalta: Tämä ei selvästikään näytä siltä, että tiedostossa olisi tallennettuna 1000 kokonaislukua. Jos sen sijaan käytetään hex-editoria, joka ei kuulu Window$in 104
15 vakiovarustukseen, mutta joita löytyy netistä, näyttää tiedoston sisältö seuraavalta: Yksi tavu vastaa yhtä kahden numeron kokoista heksalukua keskimmäisessä kentässä ( ). Ohjelmassa oli määritelty, että jokainen luku tallennetaan 4 tavulla. Siten jokaista tallennettua lukua vastaa neljän heksaluvun ryhmä: = = = = 3 Jne.. Luvut on esitetty ns. big endian -muodossa, jossa eniten merkitsevä tavu on viimeisenä. Esimerkki: Binääritiedoston lukeminen Edellä talletettu tiedosto voidaan lukea fread()-funktiolla. Parametrit ovat samat kuin fwrite():llä. 105
16 #include <stdio.h> const int N=1000; int main(void) FILE *avaus; avaus = fopen("numeroita.bin", "rb"); int i,taulukko[1000]=; if(avaus == NULL) printf("tiedoston avauksessa on tapahtunut virhe!"); return (-1); fread(taulukko,sizeof(int),\ sizeof(taulukko)/sizeof(int),avaus); for (i=0;i<1000;i++) printf("%d ",taulukko[i]); fclose(avaus); return(0); Esimerkki: Tyypillisen mittauslaitteen dataformaatin tuottaminen ja lukeminen Monet lääketieteelliset mittauslaitteet (esim. EEG tai EKG-laite) tallentavat mittaustuloksensa yleensä binääritiedostoon, vaikka XML-formaatti (joka on tekstiformaatti) onkin viime aikoina yleistynyt. Alan insinöörin olisi varmaankin hyvä tietää, miten datan saa luettua omaan ohjelmaan jatkokäsittelyä varten. Tiedosto koostuu tyypillisesti kahdesta osasta: o Header sisältää mittauksen tiedot, kuten potilaan nimen ja tunnisteen (ID), mittauspäivämäärän ja laitteen parametreja, sekä paljon muuta, laitekohtaista tietoa. o Data sisältää itse mittausdatan jossain muodossa, yleensä kokonaislukuina. 106
17 Tiedoston rakenne on valitettavasti monesti laite- tai valmistajakohtainen, joskin tiedostoformaatteja on viime vuosin pyritty standardoimaan 3. Tiedoston tarkka rakenne on selvitettävä. Yleensä laitevalmistajat antavat tämän tiedon kysyttäessä. Seuraavassa ohjelmassa kirjoitetaan yksinkertainen itse keksitty mittaustiedosto ja luetaan se toisessa ohjelmassa. #include <stdio.h> int main(void) FILE *avaus; char patname[30]="pelle Peloton"; char date[10]=" "; char id[10]="abc666"; int data[1000]=; //Dataksi pelkkiä nollia avaus = fopen("testi.bin", "wb"); int i,taulukko[1000]=; if(avaus == NULL) perror("tiedoston avauksessa on tapahtunut virhe!"); return (-1); fwrite(patname,sizeof(char),sizeof(patname)/\ sizeof(char),avaus); fwrite(date,sizeof(char),sizeof(date)/\ sizeof(char),avaus); fwrite(id,sizeof(char),sizeof(id)/sizeof(char),avaus); fwrite(data,sizeof(int),sizeof(data)/\ sizeof(int),avaus); fclose(avaus); return(0); Tiedostoa luettaessa on tietotyyppien vastattava tavun tarkkuudella toisiaan: 3 Eräs biosignaalien standardi on EDF, eli European Data Format, josta löytyy lisätietoa oheisesta linkistä:: 107
18 #include <stdio.h> int main(void) FILE *avaus; char patname[30]; char date[10]; char id[10]; int data[1000]; avaus = fopen("testi.bin", "rb"); int i,taulukko[1000]=; if(avaus == NULL) perror("tiedoston avauksessa on tapahtunut virhe!"); return (-1); fread(patname,sizeof(char),sizeof(patname)/\ sizeof(char),avaus); fread(date,sizeof(char),sizeof(date)/\ sizeof(char),avaus); fread(id,sizeof(char),sizeof(id)/sizeof(char),avaus); fread(data,sizeof(int),sizeof(data)/sizeof(int),avaus); printf("%s\n%s\n%s\n",patname,date,id); for (i=0;i<1000;i++) printf("%d ",data[i]); fclose(avaus); return(0); Harj77 Tee ohjelma, joka tallentaa luvut binääritiedostoon, lukee ne sieltä ja tulostaa näytölle. Harj78 Tallenna vapaasti valittava teksti binäärimuodossa tiedostoon ja lähetä se kaverille sellaisten tietojen kanssa että hän pystyy sen avaamaan. Harj79 Muuta harjoituksen 76 opiskelijarekisteriä niin, että tiedot tallentuvat binääritiedostoon. 108
19 Komentoriviargumentit Main-funktion sielunelämään liittyy vielä yksi tähän mennessä käsittelemätön juttu. Joku on ehkä joskus käyttänyt tietokonetta MS-DOS-aikakaudella ennen Windowsia, tai käyttänyt Unix- tai Linux-käyttöjärjestelmiä. Näissä järjestelmissä ohjelmia voidaan käynnistää ns. komentotulkista (command interpreter). Itse asiassa Window$:n ikonin klilkkaaminen on sama asia kuin että vastaava komento kirjoitetaan komentotulkkiin. C-kieltä on käytetty paljon esimerkiksi käyttöjärjestelmien ohjelmointiin. Niinpä varsinkin Unixin ja C-kielen kehitys liittyvät läheisesti toisiinsa. C-kielen main()-funktion täydellinen muoto on int main(int argc,char *argv[]) Toisin sanoen main():lle voidaan välittää tietoa käyttöjärjestelmästä: o argc = argument count, eli kuinka monta parametria main():lle syötetään o argv = osoitin merkkijonotaulukkoon, joka sisältää itse komentoriviparametrit. Ensimmäinen komentoriviargumentti argv[0] on itse suoritettavan komennon nimi. #include <stdio.h> int main (int argc, char *argv[]) int count; printf ("1. argumentti %s\n",argv[0]); 109
20 if (argc > 1) printf("muut argumentit:\n"); for (count = 1; count < argc; count++) printf("argv[%d] = %s\n", count, argv[count]); else printf("komennolla ei ollut argumentteja.\n"); return 0; Toisessa esimerkissä tehdään yhteenlaskuohjelma summa(), jota kutsutaan komentoriviltä: #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) int n; double eka=0,toka=0; 110
21 if (argc!=4) printf("virhe!\n"); return(-1); eka=atof(argv[1]); toka=atof(argv[3]); if (eka == 0 toka == 0) printf("virhe"); return(-1); printf("%f\n",eka+toka); return 0; Komentoriviltä suoritettavaksi tarkoitettu käännetään build -komennolla, ei normaalilla compile/run-systeemillä. Build tekee suoritettavan exe-tiedoston, joka ajetaan Window$in Command Promptissa (Komentokehotteessa). Harj80 Tee komentoriviltä suoritettava nelilaskin, jolle annetaan kaksi lukua ja niiden välissä merkki +, -, * tai /. 111
22 Ohjelman jakaminen useampaan tiedostoon Opintojakson viimeisenä asiana käsitellään C-ohjelman jakamista useaan tiedostoon. Tämä on käytännössä välttämätöntä, kun ohjelman koko kasvaa suureksi. Ohjelmaan on helppo lisätä uusia ominaisuuksia ja se pysyy näin helpommin hallittavana. Suurissa ohjelmissa saattaa olla satoja C-kielisiä tiedostoja ja satojatuhansia rivejä koodia. Lienee selvää, ettei kukaan pystyisi sellaista ohjelmaa ymmärtämään, jos koko koodi olisi yhdessä pötkössä. Tässä käytetään esimerkkinä Dev-C++ ympäristöä. Muissa Windows-kääntäjissä pitäisi löytyä suurin piirtein vastaavat toiminnot, joskin mahdollisesti hieman eri nimisinä. Unix-ympäristössä operoidaan ns. makefile:n avulla, jonne listataan käännettävät tiedostot ja se suoritetaan make-nimisen ohjelman avulla. Ohjelman jakaminen aloitetaan avaamalla uusi projektitiedosto: File -> New -> Project 112
23 Vaihdetaan Project options:ssa vaihtoehdoksi C Project ja tyypiksi Console Application. Seuraavassa esimerkissä tehdään merkkijonon merkkien laskentaohjelma, joka on jaettu kolmeen tiedostoon: o main.c sisältää varsinaisen pääohjelman o laskemerkit.h on käyttäjän itse määrittelemä header- eli otsikkotiedosto, joka sisältää tässä esimerkissä funktion laskemerkit() prototyypin. o laskemerkit.c sisältää varsinaisen funktion laskemerkit() rungon eli määrittelyosan. Nämä tiedostot voidaan lisätä projektiin File -> New source file - valikon kautta. Dev-C++:n käyttöliittymä näyttää nyt tältä. Eli Project2:n alle on lisätty kolme edellä mainittua tiedostoa. Kuvassa näkyy pääohjelman sisältö. Huomaa, että 113
24 oma otsikkotiedosto laskemerkit.h on sisällytettävä otsikkotiedostoihin. Sitä ei merkitä hakasulkuihin, vaan lainausmerkkeihin. Tiedosto laskemerkit.h sisältää vain yhden rivin: int laskemerkit(char *); Ja tiedosto laskemerkit.c seuraavan koodin: int laskemerkit(char *s) int i=0; while (s[i]!='\0') i++; return i; Yhteen omaan otsikkotiedostoon voidaan kirjoittaa useamman funktion prototyypit. Jokainen funktio on kuitenkin kirjoittaa omiin tiedostoihinsa, jolloin koodin ylläpidettävyys säilyy hyvänä. Harj81 114
25 Muuta nelilaskinohjelmaa siten, että kukin laskutoimitus on kirjoitettu omaan tiedostoonsa. Kaikkien neljän funktion prototyypit on kirjoitettu yhteen otsikkotiedostoon. Harj82 Lisää edellä esitettyyn esimerkkiohjelmaan omaan tiedostoonsa funktio int laskekirjain(char *merkkijono,char haettava_merkki); joka laskee syötetystä merkkijonosta, kuinka monta kertaa valittu kirjain esiintyy. 115
26 Johdatus ohjelmointiin-opintojakso päättyy tähän. Syksyllä jatketaan Olio-ohjelmoinnilla. Kaikkia kielen piirteitä ei vielä tässäkään ajassa pystytty kattamaan, mutta tärkeimmät perusasiat kuitenkin. Onnea viimeiseen välikokeeseen ja aurinkoista kesää. Jukka & Johanna. Ode to C stumpf@gtenmc.gtetele.com (Jon S. Stumpf) GTE Telecom Inc., Bothell, WA (computer, chuckle) 0x0d2C May your signals all trap May your references be bounded All memory aligned Floats to ints rounded Remember... Non-zero is true ++ adds one Arrays start with zero and, NULL is for none For octal, use zero 0x means hex = will set == means test use -> for a pointer a dot if its not? : is confusing use them a lot a.out is your program there's no U in foobar and, char (*(*x())[])() is a function returning a pointer to an array of pointers to functions returning char 116
27 117
Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot
Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja
Lisätiedot3 Tee ohjelma, joka tulostaa kahden opiskelijan nimet ja osoitteet rinnakkain. 4 Tee ohjelma, joka kysyy käyttäjältä numeron ja tulostaa sen näytölle.
1 Tee ohjelma, joka tulostaa nimesi näytölle. Olli Opiskelija 2 Tee ohjelma, joka tulostaa näytölle nimesi ja osoitteesi. Olli Opiskelija Torikatu 19 90100 Oulu 3 Tee ohjelma, joka tulostaa kahden opiskelijan
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle
LisätiedotMerkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:
Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin
LisätiedotC-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.
Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen
LisätiedotTiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä.
Tiedostot Tiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä. C-kielessä syöttö ja tulostus kuvataan laiteriippumattomasti
LisätiedotTietueet. Tietueiden määrittely
Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 3.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.3.2010 1 / 44 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä
LisätiedotPythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b
Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,
LisätiedotKirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.
Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita
LisätiedotRakenteiset tietotyypit Moniulotteiset taulukot
C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
LisätiedotC-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys
Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,
LisätiedotOperaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta
C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
LisätiedotZeon PDF Driver Trial
Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin
LisätiedotModuli 5: Kehittyneitä piirteitä
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
LisätiedotIDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit
IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014
18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotLoppukurssin järjestelyt
C! Loppukurssin järjestelyt 29.3.2018 Ohjelmassa Yhteenvetoa palautteesta Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Kysyttävää / kerrattavaa 10-kierroksen asioista? Aikatauluista 10. kierroksen
LisätiedotLoppukurssin järjestelyt C:n edistyneet piirteet
C! Loppukurssin järjestelyt C:n edistyneet piirteet 30.3.2017 Ohjelmassa Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Esikääntäjä Parametrilistat Funktio-osoittimet Kunniamainintoja Kuura
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat
Lisätiedot// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;
// // whiledemov1.c // #include int main(void){ int luku1 = -1; int luku2 = -1; while( luku1
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotInformaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006
TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa
LisätiedotOhjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.
Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava
LisätiedotBinäärioperaatiot Tiedostot ja I/O
C! Binäärioperaatiot Tiedostot ja I/O 8.3.2018 Tiedotteita Viimeinen luento to 29.3. Ohjelmointitehtävä, ohjelmointikoe ja niiden järjestelyt Ohjelmointikokeeseen ilmoittautuminen auki 2 .c tiedostot ja.h
LisätiedotLuento 5. Timo Savola. 28. huhtikuuta 2006
UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke
LisätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")
LisätiedotAS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin
AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti
LisätiedotKoottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.
2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet
LisätiedotOhjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:
1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri
LisätiedotBinäärioperaatiot Tiedostot ja I/O
C! Binäärioperaatiot Tiedostot ja I/O 16.3.2017 Tiedotteita Määräaikoja pidennetty Myös 7. kierros uudestaan auki perjantaihin asti Seuraava ja viimeinen luento 30.3. Makrot, funktio-osoittimet Kokeen
LisätiedotATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014
19. syyskuuta 2014 IDL - INPUT/OUTPUT-rutiinit IDL pystyy lukemaan ja kirjoittamaan monentyyppisiä tiedostoja, esim. FORTRAN ja C-kielten ohjelmien tulostusta. Käytössä on myös monipuoliset tulostuksen
LisätiedotOsa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {
Osa I 2. oppitunti C++-ohjelman osat Ennen kuin menemme yksityiskohtaisemmin sisälle C++-luokkiin, -muuttujiin jne, katsokaamme ensin, millaisista osista C++-ohjelma koostuu. Tämän tunnin aikana opit seuraavat
LisätiedotMaastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla
Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,
LisätiedotITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat
LisätiedotKirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä.
Tehtävä 1. Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä. #include /* mm. I/O-funktiot */ #include /* mm. EXIT_SUCCESS */ /*main-funktio,
LisätiedotMuuttujien roolit Kiintoarvo cin >> r;
Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,
LisätiedotTaulukot. Jukka Harju, Jukka Juslin 2006 1
Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 14.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 14.10.2015 1 / 32 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta
LisätiedotJava-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero
LisätiedotMetropolia ammattikorkeakoulu 05.02.2015 TI00AA43-3004: Ohjelmointi Kotitehtävät 3
: http://users.metropolia.fi/~pasitr/2014-2015/ti00aa43-3004/kt/03/ratkaisut/ Tehtävä 1. (1 piste) Tee ohjelma K03T01.cpp, jossa ohjelmalle syötetään kokonaisluku. Jos kokonaisluku on positiivinen, niin
LisätiedotMatriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.
Python linkit: Python tutoriaali: http://docs.python.org/2/tutorial/ Numpy&Scipy ohjeet: http://docs.scipy.org/doc/ Matlabin alkeet (Pääasiassa Deni Seitzin tekstiä) Matriisit ovat matlabin perustietotyyppejä.
Lisätiedot5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma
5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen
LisätiedotEsimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit
Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.
Lisätiedot#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){
demo1.c 30/09/15 08:19 #include // io-toiminnot //#define KM_MAILISSA 1.609 int main( ){ double mailit = 0.0; double kilometrit; const double KM_MAILISSA = 1.609; printf("anna maililukema > ");
LisätiedotSisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4
Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.
Lisätiedot2 Konekieli, aliohjelmat, keskeytykset
ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä
LisätiedotMuistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa
ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö
LisätiedotT211003 Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet
Ohjelmointi Matlab-komentoja voidaan koota ns. M-tiedostoon. Nimi tulee tiedoston tarkentimesta.m. Matlabilla voidaan ohjelmoida kahdella eri tavalla: Skriptit eli komentojonot eli makrot Funktiot eli
LisätiedotLyhyt kertaus osoittimista
, syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 8.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 8.2.2010 1 / 38 Debuggeri Tyypillinen tilanne: ohjelma on kirjoitettu, Python-tulkki ei valita virheistä, mutta ohjelma
LisätiedotModuli 4: Moniulotteiset taulukot & Bittioperaatiot
C! : Moniulotteiset taulukot & Bittioperaatiot 15.3.2016 Agenda Pieni kertausharjoitus Moniulotteiset taulukot Esimerkki taulukoista Tauko (bittitehtävä) Binäärioperaatioista Esimerkki (vilkaistaan IP
Lisätiedot12. Näppäimistöltä lukeminen 12.1
12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.
LisätiedotLuento 4. Timo Savola. 21. huhtikuuta 2006
UNIX-käyttöjärjestelmä Luento 4 Timo Savola 21. huhtikuuta 2006 Osa I Shell Lausekkeet Komentoriville kirjotettu komento on lauseke echo "foo" echo $USER MUUTTUJA=1 ls -l Rivinvaihto
LisätiedotJohdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2
Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2 Syntaksilomake (22.4.2007) C-kielen standardikirjaston funktioita gets(merkkijono); scanf("formaatti", &muuttuja1,..., &muuttujan); sscanf(merkkijono,
LisätiedotHieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin.
Linux-harjoitus 9 Linuxin mukana tulevat komentotulkit (mm. bash, tcsh, ksh, jne ) sisältävät ohjelmointikielen, joka on varsin tehokas ja ilmaisuvoimainen. Tähän yhdistettynä unix-maailmasta tutut tehokkaat
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta
LisätiedotC-ohjelmointi, syksy 2006
, syksy 2006 Taulukot Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot Binääritiedostot Luento 8 3.10.2006 Syksy 2006 1 Luennon sisältö Taulukoiden käsittelyä Yksiulotteiset taulukot
LisätiedotC-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento
, syksy 2006 Taulukot Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot Binääritiedostot Luento 8 3.10.2006 Syksy 2006 1 Luennon sisältö Taulukoiden käsittelyä Yksiulotteiset taulukot
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotHarjoitus 5 (viikko 48)
Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. Mikäli tehtävissä on jotain
LisätiedotC-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja
1. C-kieli yleiskäyttöinen ohjelmointikieli, standardoitu 1990. siirrettävä laiteläheinen pieni ydin, monimutkaiset kokonaisuudet rakennetaan aliohjelmakirjastojen avulla. direktiivit ja esikääntäjien
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
LisätiedotOhjausrakenteet. Valinta:
Ohjausrakenteet Luento antaa yleiskuvan siitä kuinka ohjelmassa suorittaan vaihtoehtoisia tehtäviä valintarakenteiden avulla ja kuinka samanlaisia ohjelma-askeleita toistetaan toistorakenteiden avulla
LisätiedotMetropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne
Seuraavista tehtävistä saatu yhteispistemäärä (max 7 pistettä) jaetaan luvulla 3.5 ja näin saadaan varsinainen kurssipisteisiin laskettava pistemäärä. Bonustehtävien pisteet jaetaan luvulla 4 eli niistä
LisätiedotOhjelmoinnin perusteet, syksy 2006
Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotTietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla
Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään
Lisätiedot4. Lausekielinen ohjelmointi 4.1
4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman
LisätiedotJava-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero
Lisätiedot2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
LisätiedotTietotyypit ja operaattorit
Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto
LisätiedotPerusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti
C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin
LisätiedotOhjeita LINDOn ja LINGOn käyttöön
Ohjeita LINDOn ja LINGOn käyttöön LINDOn tärkeimmät komennot ovat com (command), joka tuloaa käytettävissä olevat komennot ruudulle, ja help, jonka avulla saa tietoa eri komennoia. Vaaukset kursiivilla
LisätiedotKääntäjän virheilmoituksia
OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:
LisätiedotTähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python
Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python 15. helmikuuta 2009 Merkkijonot Yleistä Käsittely Muotoiltu tulostus Tiedostot Käsittely Lukeminen Kirjoittaminen Modulit Käyttö Seuraava luento
LisätiedotLOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100
Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).
Lisätiedot5. HelloWorld-ohjelma 5.1
5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2
LisätiedotTietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:
KERTAUSTEHTÄVIÄ Tietue Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla: struct henkilotiedot char nimi [20]; int ika; char puh [10]; ; Edellä esitetty kuvaus määrittelee
LisätiedotLuennon sisältö. Taulukot (arrays) (Müldnerin kirjan luku 10) Yksiulotteiset taulukot. Mikä taulukko on? Taulukko-osoitin. tavallinen osoitin
, kevät 2006 Taulukot Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot Binääritiedostot Luento 8 21.3.2006 Kevät 2006 Liisa Marttinen 1 Luennon sisältö Taulukoiden käsittelyä Yksiulotteiset
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CS-A1111 26.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 26.9.2018 1 / 21 Oppimistavoitteet: tämän luennon jälkeen Osaat kirjoittaa for-käskyn avulla ohjelman, joka toistaa haluttua
LisätiedotC++ Ohjelmoijan käsikirja. Johdanto
Johdanto C++ Ohjelmoijan käsikirja Johdanto Tervetuloa Inside C++-kirjan pariin. Tämä on opaskirja standardi C++:n käyttöön. Käsittelemme kirjassa kaikki syntaksin, kieliopin, olio-ohjelmoinnin ja standardikirjastojen
LisätiedotOhjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
Lisätiedottietueet eri tyyppisiä tietoja saman muuttujan arvoiksi
tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,
LisätiedotMetodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen
Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/
Lisätiedot