Ohjeet. Jaa vastauksesi konsepteille siten, etta:



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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Binäärioperaatiot Tiedostot ja I/O

Binäärioperaatiot Tiedostot ja I/O

Moduli 5: Kehittyneitä piirteitä

Loppukurssin järjestelyt

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

Loppukurssin järjestelyt C:n edistyneet piirteet

Tietueet. Tietueiden määrittely

Rakenteiset tietotyypit Moniulotteiset taulukot

C-ohjelmointi, kevät Merkkijonot Komentoriviparametrit. Luento

Merkkijonot Komentoriviparametrit

C-ohjelmointi, syksy Merkkijonot Komentoriviparametrit. Luento C-ohjelmointi Syksy

Merkkijonot Komentoriviparametrit

Lyhyt kertaus osoittimista

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

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

13 Operaattoreiden ylimäärittelyjä

Ohjelmointi 1 C#, kevät 2013, 2. tentti

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointiharjoituksia Arduino-ympäristössä

ITKP102 Ohjelmointi 1 (6 op)

TIETORAKENTEET JA ALGORITMIT

Ohjelmointiparadigmat

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Tietorakenteet ja algoritmit

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

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

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

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

Tietorakenteet ja algoritmit

Muuttujien roolit Kiintoarvo cin >> r;

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

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

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

ITKP102 Ohjelmointi 1 (6 op)

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

Tietorakenteet ja algoritmit

Osoittimet ja taulukot

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

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

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

3. Binääripuu, Java-toteutus

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

Sisältö. C-ohjelmointi Luento 5: Osoittimet. Keko (heap) Pino (stack) Muistinhallinta Java vs C. Prosessin rakenne

Harjoitustyö: virtuaalikone

Ohjelmointi 1 C#, kevät 2013,

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

Taulukot. Jukka Harju, Jukka Juslin

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Ohjelmoinnin jatkokurssi, kurssikoe

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmoinnin perusteet, 1. välikoe

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

C-ohjelmointi, syksy 2006

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

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

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

ITKP102 Ohjelmointi 1 (6 op)

Tietotyypit ja operaattorit

Algoritmit 1. Demot Timo Männikkö

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmoinnin perusteet Y Python

Dynaaminen muisti Rakenteiset tietotyypit

Metodien tekeminen Javalla

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

812336A C++ -kielen perusteet,

Java-kielen perusteet

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

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

C-ohjelmointi: Osoittimet

Ohjausrakenteet. Valinta:

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Ohjelmoinnin perusteet Y Python

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

Olio-ohjelmointi Javalla

Listarakenne (ArrayList-luokka)

Ohjelmoinnin perusteet Y Python

SIMULINK S-funktiot. SIMULINK S-funktiot

Harjoitus 1 (viikko 44)

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Olio-ohjelmointi Syntaksikokoelma

Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä.

Kielioppia: toisin kuin Javassa

Transkriptio:

/ AS-0.1103/4 C~ohjelmoinnin peruskurssi Aalto-yliopiston teknillinen korkeakoulu Tentti 12.05.2010, Raimo Nikkilii Ohjeet Kaikki ohjelmointitehtavat tulee toteuttaa C-kielella hyvaa ohjelmointityylia noudattaen. Tentti arvostellaan asteikolla 0-25p ja kaikkien tehtavien painoarvo on sama (5 pistetta / tehtava). Tentissa saa kayttaa funktiolaskinta seka tentissa jaettua C-kielen standardikirjaston minireferenssia. Kaikki tentin tehuivat ovat tehtavissa minireferenssissa listatuilla funktioilla mutta kaikkia C-kielen standardikirjaston funktioita saa halutessaan kayttaa. Merkitse kurssikoodiksi se kurssi jota olet suorittamassa, eli joko AS-0.l103 tai AS-0.1104, tata valintaa ei voi enaa muuttaa jalkikateen. Mikali kurssikoodia ei ole merkitty too siina on epaselvyyksia, oletetaan kurssikoodiksi AS-0.1103. AS-0.1103 Vastaa viiteen vapaavalintaiseen tehtavaan. AS-0.1104 Vastaa ainoastaan tehtaviin 1.-5., ALA vastaa tehtavaan 6. Jaa vastauksesi konsepteille siten, etta: Tehtavat 1. ja 2. ovat omalla konseptillaan Tehtavat 3. ja 4. ovat omaha konseptillaan TehUi,vat 5. ja 6. ovat omalla konseptil1aan Tavussa (char) on aina 8 bittia kaikissa tehtavissa. Kirjoita edes opiskelijanumerosi selkealla kasialalla tenttipapereihin.

1. TehUiva Selita lyhyesti mink a toiminnon kukin ana olevista kolmesta funktiosta toteuttaa. Ala kuvaa funktion sisaista toimintaa vaan ainoastaan se millaisen muutoksen funktio saa aikaan syotteilleen, minka arvon funktio laskee sy6tteistaan tai mita funktio yleisesti ottaen tekee. 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void function1 (void) 5 { 6 double 0, r; 7 char c; 8 9 if (scanf("%lf %c X %If", &0, &c, &r)! = 3) 10 return; 11 12 switch(c) 13 { 14 case '+': 15 printf("x=%.21f\n", r 0); 16 break; 17 case '-': 18 printf("x=%.21f\n", 0 r); 19 break; 20 case '*': 21 printf("x=%.21f\n", r / 0); 22 break; 23 case '/': 24 printf("x=%.21f\n", 0 / r); 25 break; 26 } 27 } 28 29 #define MACRO(bs, i) «bs)[(1) / 8J ««1) % 8» 30 31 int function2 (unsigned char* ptr, size_t n) 32 { 33 for (size_t i = O;i < n;i++) 34 if «MACRO (ptr, 1) & Ox80) (MACRO(ptr, n - i 1) & Ox80»; 35 return 0; 36 return 1; 37 } 38 39 void function3(file* f, unsigned char** p, size_t* n) 40 { 41 *n 0; 42 *p NULL; 43 int c; 44 while «c = fgetc(f)!= EOF) 45 { 46 *p realloc(*p, ++(*(0»); 47 *(*p + *n - 1) = c; 48 } 49 }

2. Tehtava Toteuta funktio char* decodestring(const char* code) joka ottaa parametrinaan koodatun merkkijonon ja purkaa sen. Koodaus koostuu kahden merkin mittaisista pareista {N,k}. Yksittainen koodipari kuvaa Nkappaletta k merkkeja, jossa 0 ~ N ~ 9 ja k on jokin yksittainen merkki. Funktio purkaa taman kooda}lksen ja palauttaa puretun merkkijonon. Voit olettaa etta koodattu merkkijono on aina oikean muotoinen ja etta malloc O-funktio onnistuu aina. Esimerkiksi koodaus 'c la2b3c4d" on purettuna abbcccdddd. Vihje: Merkkina esitetyn numeron lukuarvon saat vahentamiilla merkista nollamerkin arvon. AlIa oleva teksti ei kuulu tahan tenttiin, se ole millaan tavalla osa kurssisuoritusta eika vaikuta kurssin suorittamiseen tai arvosteluun mitenkaan, vaan on tuossa lahinna ihan muuten vain.

3. Tehtava Mita alia oleva ohjelma tulostaa? Vastaukseksi riittaa pelkka tuloste ilman perusteluja. Muotoilumaare %x tulostaa kokonaisluvun heksadesimaaliesityksen. 1 #include <stdio.h> 2 3 unsigned char function (unsigned char p) 4 { 5 unsigned char r = OxOO; 6 for (size t i = 0; i < 8; i 7 if (p & (Ox80» i )) 8 r I (1 «i ) ; 9 return r ; 10 } 11 12 int main (void) 13 { 14 unsigned char vi = Ox9D; 15 unsigned char v2 = Ox78; 16 17 printf("a: %x %x o/ox \ n". vi & v2. vi I v2. vi A v2) ; 18 19 printf("b: %x\n". (vi» 2) I (v2 «1 ) ) ; 20 21 printf("e: %x\n". ( unsigned char)((-vl + 2) 2) ). * 22 23 printf("d: %x\n". function(vl)); 24 25 printf("e: o/ox \ n", (((vi II v2) «4) 26 } A function(oxfo))):

/ I / 4. Tehtava Toteuta alla maaritelty erittain yksinkertaistettua mitokondriota kuvaava Me tietotyyppi. Mitokondriot ovat kaikissa eukaryoottisissa soluissa ja elioissa (ihminen, limasieni, ruohontupsu) esiintyvia prokaryoottista alkuperaa ole-. via soluelimia, jotka mm. tuottavat solulle energiaa. Toteuta kaikki nelja funktiota ja huomaa etta mitokondrion "sukupuu" on lista. Kalsiummaaran puolittamisen mitoosissa voit tehda suoraan jakolaskulla valittamatta jakojaannoksesta. Voit lisaksi olettaa etta malloe O-funktio onnistuu aina. 1 #i n ci u de < 5 t d d e f. h> 2 3 typedef struct Mitochondrion 4 { 5 /* The genome (DNA) string of this mitochondrion */ 6 char* genome; 7 /* Number of calcium molecules within the mitochondrion */ 8 SiZLt nca; 9 /* The parent mitochondrion from which this mitochondrion divided */ 10 struct Mitochondrion* parent; 11 } Mc; 12 13 /* Creates a new mitochondrion from the given initial values and returns 14 * the newly allocated mitochondrion. 15 * The genome of the mitochondrion is deep copied. 16 * The parent is set to NULL. */ 17 Mc* McConstruct (const char* genome, 5 i Z e _ t nca); 18 19 /* Frees a II memory a Iloca ted for a mitochondrion, including the memory 20 * allocated for all ancestor mitochondria */ 21 void McDestruct(Mc* mc); 22 23 /* Performs mitosis (cell division) of a mitochondrion causing the 24 * creation of a new mitochondrion. 25 * In mitosis, the amount of calcium molecules is shared in half between the 26 * parent and the offspring, and the genome is deep-copied. 27 * Returns the new mitochondrion */ 28 Mc* McMitosis (Mc* mc); 29 30 /* Checks for a mutation in the given strand of mitochondria. 31 * Mutation means that there is a difference in the genome of the strand, 32 * i. e. some ancestor has a different genome than our mitochondrion. 33 * Returns a truth value indicating the presence of a mutation. 34 * Note t hat the paramete r is not a poin t e r */ 35 i nt McM utation (Mc mc);

5. Tehtava Ohessa on kokoaan kasvattavan merkkijonotaulukon, strarray tietotyypin, toteutus. Valitettavasti tiirna toteutus on parhaimmillaankin toisluokkainen, silla siina on muutamia selkeita virheita. Etsi nama virheet ja kuvaile lyhyes'" ti miten korjaisit ne. malloe 0- ja realloe O-funktioiden oletetaan onnistuvan aina. Paaohjelmassa ei ole virheitii ja muun ohjelman tulisi toimia paaohjelman mukaan. 1 #include <stdio.h> 2 #include <stri ng. h> 3 #include <st d lib. h> 4 5 typedef charu strarray; 6 7 /* Creates an empty strarray */ 8 strarray strarraycreate (void) 9 { 10 return NULL; 11 } 12 13 Adds a deep-copy of a string to the end of an strarray */ 14 strarray strarrayadd (strarray an, const chan str) 15 { 16 size_t s; 17 for (s = 0; arr [s J; s++); 18 arr = realloc(arr, sizeof(*arr) * (s + 2)); 19 arr[s] malloc(strlen(str + 1)); 20 strcpy(arr[s], str); 21 return arr; 22 } 23 24 /* Removes the first incidence of 25 void strarraydelete (strarray arr, 26 { 27 strarray tmp; 28 for (tmp arr;qmp;tmp++) 29 if (5 t r = *tmp) 30 break; 31 if (! * tmp) 32 return; 33 do { 34 *tmp tmp[l]; 35 } while (*tmp++); 36 } 37 38 /* Calculates the number 39 size_t strarraylen (const 40 { 41 strarray tmp arr; = 42 while (*tmp) 43 tmp++; 44 return (tmp - arr) * 45 } 46 47 /* Just a sample main() of elements in an strarray */ strarray arr) sizeof(char*); no errors here 48 int main (void) 49 { 50 strarray arr = strarraycreate (); 51 char buffer[512]; 52 while (fgets(buffer, 512, stdin) && 53 arr strarrayadd (arr, buffer); 54 size_t len = strarraylen (arr); 55 printf("read %zu strings\n", len); 56 for (s i z L t n = 0; n < len; n++) 57 strarraydelete (arr, *arr); 58 free(arr); 59 } a string from an strarray */ const char* str) so don't bother fixing it */ *buffe~)

( 6. Tehtava Tarkastellaan funktioita jotka ottavat parametrinaan kokonaisluvun (int) ja palauttavat liukuluvun (double), eli funktioita f : Z --t IR, rajatulla parametrien lukualueella [a, b], jossa 'v'a, b: a < b. Talla alueella funktion sanotaan olevan aidosti kasvava, jos patee 'v'n, 'n E [a, b[ f(n) < f(n 1), eli funktion arvot kasvavat aina parametrin kasv'ressa. Lisaksi, funktion sanotaan olevan toisen funktion rajoittama jos 'v'n, n E [a,b] f(n) < g(n), eli jos funktion arvot maaratylla alueella ovat aina pienempia kuin toisen funktion arvot. Toteuta funktiot monotonicallyincreasingo ja boundedfunctiono jotka molemmat ottavat ensimrnaisina parametreina lukualeen alun ja lopun kokonaislukuina (int). Funktio monotonicallyincreasingo ottaa lisaksi yhden edellamainittua tyyppia olevan funktion osoitteen ja testaa onko funktio monotonisesti kasvava annetulla lukualueella j a palauttaa sita vastaavan totuusarvon. Funktio boundedfunctiono ottaa lukualueen IiSMSi parametreina kahden funktion osoitteet ja testaa onko ensimmaisena annettu funktio toisena annetun funktion rajoittama ja palauttaa sita vastaavan totull.'>arvon.

ctype.h int isalnum(int ch) ; int isalpha(int ch); int isdigit(int ch); int islower (int ch) ; int ispunct(int ch); int isspace(int ch) : int isupper (int ch) ; int tolower(int ch): int touppercint ch): math.h double pow(double base, double exponent): double sqrt(double value); stdio.h int printf(const char* format,... ): int fprintf(file *stream, const char* format...); int sprintf(char *str, const char* format...): int scanf(const char* format,... ); int fclose(file *fp); FILE *fopen(const char *path. const char *mode); int fscanf(file *stream, const char* format... ); int sscanf(const char *str. const char* format...); int fgetc(file *stream); char *fgets(char *str, int size. FILE *stream); int fputc(int ch, FILE *stream); int getchar(void); int putchar(int ch); stdlib.h void free(void *ptr); void* malloc(size_t size); void* calloc(size_t nmemb, size_t size); void* realloc(void* ptr, size_t size); void abort(void); void exit(int); void qsort(void* base, size_t nmemb, size_t size, int (*cmp)(const void*, const void*); int abs(int val); string.h char* strcat(char *dest. const char *src); char* strchr(const char *str, int ch): int strcmp(const char *strl, const char *str2); char* strcpy(char *dest, const char *src); size_t strlen(const char *str); char *strstr(const char *haystack, canst char *needle); size_t strxfrm(char *dest. const char *src, size_t n); void* memset(void *s, int c, size_t n); 1