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

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

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

Tietueet. Tietueiden määrittely

Ohjausrakenteet. Valinta:

Tietorakenteet ja algoritmit

Muuttujien roolit Kiintoarvo cin >> r;

Rakenteiset tietotyypit Moniulotteiset taulukot

TIETORAKENTEET JA ALGORITMIT

3. Binääripuu, Java-toteutus

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

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

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

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

Ohjelmoinnin perusteet Y Python

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

Loppukurssin järjestelyt

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

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

Lyhyt kertaus osoittimista

Loppukurssin järjestelyt C:n edistyneet piirteet

Ohjelmoinnin perusteet Y Python

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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

Ohjelmoinnin perusteet Y Python

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

Tietotyypit ja operaattorit

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

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

Moduli 5: Kehittyneitä piirteitä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

13 Operaattoreiden ylimäärittelyjä

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

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Ohjelmoinnin peruskurssi Y1

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

Ohjelmoinnin perusteet Y Python

Osoittimet ja taulukot

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

OPINTOJAKSON OHJELMOINTI HARJOITUSTEN RATKAISUJA

Algoritmit 2. Luento 7 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

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

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

Ohjelmoinnin peruskurssi Y1

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ö

2. C-kieli ja ongelmanratkaisu

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

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

C-ohjelmointi, syksy 2006

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

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

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

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

Listarakenne (ArrayList-luokka)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

C-ohjelmointi: Osoittimet

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjeet. Jaa vastauksesi konsepteille siten, etta:

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

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Ohjelmoinnin peruskurssi Y1

Dynaaminen muisti Rakenteiset tietotyypit

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Taulukoiden käsittely Javalla

Ohjelmoinnin peruskurssi Y1

Tietorakenteet ja algoritmit

Ohjelmoinnin peruskurssi Y1

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Tietorakenteet, laskuharjoitus 3, ratkaisuja

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Tietorakenteet ja algoritmit

Tietorakenteita 163. Yhteen suuntaan linkitetyn listan rakenne on siis seuraavan kuvan kaltainen:

Algoritmit 1. Demot Timo Männikkö

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Luokan muodostimet (Constructors)

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

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

Transkriptio:

demo1.c 30/09/15 08:19 #include <stdio.h> // io-toiminnot //#define KM_MAILISSA 1.609 int main( ){ double mailit = 0.0; double kilometrit; const double KM_MAILISSA = 1.609; printf("anna maililukema > "); /* lue mailikukema */ scanf("%lf", &mailit); /* lasketaan */ kilometrit = KM_MAILISSA * mailit; /* n yt lopputulos */ printf("%lf", mailit); printf("mailia on "); printf("%lf",kilometrit); printf(" km"); printf("\n"); printf("\n"); return 0; Page 1 of 1

demo2.c 30/09/15 08:19 #include <stdio.h> int main( void ){ int luku = 0; int summa = 0; int lkm = 0; printf("anna positiivinen kokonaisluku > "); for( scanf("%d", &luku); luku >=0; scanf("%d", &luku) ){ summa = summa + luku; lkm++; //lkm = lkm + 1 printf("anna positiivinen kokonaisluku > "); printf("lukujen summa %d ja lukuja syotettiin %d kappaletta\n", summa, lkm ) ; printf("lukujen keskiarvo on %lf \n", (double)summa/(double)lkm ); return 0; Page 1 of 1

kldemo_v1.c 30/09/15 08:20 #include <stdio.h> void tulostavalikko(void); void yhteenlaskutehtava(void); void vahennyslaskutehtava(void); int luekokonaisluku( void ); void lueroskat( void ); int main( void ){ int valinta; int vastaus = 0; int loppu = 0; //ei halua lopettaa //toista kunnes lopetetaan while(!loppu ) { tulostavalikko(); //lue valinta valinta = luekokonaisluku(); //tulkitse teht v ja suorita teht v tai ilmoita virheellisest //valinnasta switch( valinta ){ case 1: yhteenlaskutehtava(); case 2: vahennyslaskutehtava(); case 0: loppu = 1; default: printf("\nvirheellinen komento\n"); printf("\n\n"); return 0; Page 1 of 3

kldemo_v1.c 30/09/15 08:20 //main p ttyy t h n void tulostavalikko(void){ //tulosta ohjeet tai valittavien toimintojen lista printf("paina 1 jos haluat yhteenlaskutehtavan\n"); printf("paina 2 jos haluat vahennyslaskutehtavan\n"); printf("nolla lopettaa\n"); printf("\nvalintasi > "); void yhteenlaskutehtava(void){ int vastaus; printf("\nvalitsit yhteenlaskutehtavan\n\n"); printf("paljono on 1 + 1?"); vastaus = luekokonaisluku(); if( 2 == vastaus ){ printf("oikein\n\n"); else{ printf("vaarin\n\n"); void vahennyslaskutehtava(void){ int vastaus; printf("\nvalitsit vahennyslaskutehtavan\n\n"); printf("paljono on 1-1?"); vastaus = luekokonaisluku(); if( 0 == vastaus ){ printf("oikein\n\n"); else{ printf("vaarin\n\n"); int luekokonaisluku( void ){ int valinta; int result = 0; Page 2 of 3

kldemo_v1.c 30/09/15 08:20 result = scanf("%d", &valinta); while( 0 == result ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); result = scanf("%d", &valinta); lueroskat(); return valinta; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 3 of 3

kldemo_v1.c 06/10/15 13:51 #include <stdio.h> #include <time.h> //mm. koneen kellonaika #include <stdlib.h> //mm. rand() void tulostavalikko(void); void yhteenlaskutehtava( int * oikein, int * vaarin ); void vahennyslaskutehtava(int * oikein, int * vaarin); int luekokonaisluku( void ); void lueroskat( void ); int main( void ){ int valinta; int oikein = 0; int vaarin = 0; int loppu = 0; //ei halua lopettaa srand( time(null) ); //alusta s-generaattori //toista kunnes lopetetaan while(!loppu ) { tulostavalikko(); //lue valinta valinta = luekokonaisluku(); //tulkitse teht v ja suorita teht v tai ilmoita virheellisest //valinnasta switch( valinta ){ case 1: yhteenlaskutehtava( &oikein, &vaarin ); printf("\ntilanne: Oikein: %d ja vaarin %d\n", oikein, vaarin); case 2: vahennyslaskutehtava( &oikein, &vaarin ); printf("\ntilanne: Oikein: %d ja vaarin %d\n", oikein, vaarin); case 0: loppu = 1; default: printf("\nvirheellinen komento\n"); Page 1 of 3

kldemo_v1.c 06/10/15 13:51 printf("\n\n"); return 0; //main p ttyy t h n void tulostavalikko(void){ //tulosta ohjeet tai valittavien toimintojen lista printf("paina 1 jos haluat yhteenlaskutehtavan\n"); printf("paina 2 jos haluat vahennyslaskutehtavan\n"); printf("nolla lopettaa\n"); printf("\nvalintasi > "); void yhteenlaskutehtava( int * oikein, int * vaarin ){ int vastaus; int luku1, luku2, tulos; luku1 = abs(rand()) % 11; // luvut 0..10 luku2 = abs(rand()) % 11; // luvut 0..10 tulos = luku1 + luku2; //printf("\nvalitsit yhteenlaskutehtavan\n\n"); printf("paljonko on %d + %d?", luku1, luku2 ); vastaus = luekokonaisluku(); if( tulos == vastaus ){ (*oikein)++; printf("oikein\n\n"); else{ (*vaarin)++; printf("vaarin\n\n"); void vahennyslaskutehtava(int * oikein, int * vaarin){ int vastaus; int luku1, luku2, tulos; luku1 = abs(rand()) % 11; // luvut 0..10 luku2 = abs(rand()) % 11; // luvut 0..10 Page 2 of 3

kldemo_v1.c 06/10/15 13:51 tulos = luku1 - luku2; printf("\nvalitsit vahennyslaskutehtavan\n\n"); printf("paljonko on %d - %d?", luku1, luku2 ); vastaus = luekokonaisluku(); if( 0 == vastaus ){ (*oikein)++; printf("oikein\n\n"); else{ (*vaarin)++; printf("vaarin\n\n"); int luekokonaisluku( void ){ int luku; int result = 0; char merkki; while( (result=scanf("%d%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 3 of 3

taulukkodemo_v1.c 06/10/15 13:51 #include <stdio.h> int luekokonaisluku( void ); void lueroskat( void ); void taytataulukko( double taulukko[], int koko); void tulostataulukko( double taulukko[], int koko); double luereaaliluku( void ); int etsisuurinarvo( double taulukko[], int koko ); int main(void){ int koko; int suurin; printf("\nmontako lukemaa haluat tallettaa > "); koko = luekokonaisluku(); double lampotilat[ koko ]; //mahtaako toimia taytataulukko( lampotilat, koko ); suurin = etsisuurinarvo( lampotilat, koko ); printf("\ntaulukon suurin arvon on %lf\n", lampotilat[suurin] ); tulostataulukko( lampotilat, koko ); return 0; //main paattyy int etsisuurinarvo( double taulukko[], int koko ){ int i; int suurimmanpaikka = 0; //oletus: arvo taulukon alussa for( i=0; i < koko; i++ ){ if( taulukko[i] > taulukko[ suurimmanpaikka ] ){ suurimmanpaikka = i; return suurimmanpaikka; void taytataulukko( double taulukko[], int koko){ int i; for( i=0; i < koko; i++ ){ printf("anna lampotila > "); taulukko[i] = luereaaliluku(); Page 1 of 3

taulukkodemo_v1.c 06/10/15 13:51 void tulostataulukko( double taulukko[], int koko){ int i; for( i=0; i < koko; i++ ){ printf("lampotila: %.2lf\n", taulukko[i] ); double luereaaliluku( void ){ double luku; int result = 0; char merkki; while( (result=scanf("%lf%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt resaalilukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; int luekokonaisluku( void ){ int luku; int result = 0; char merkki; while( (result=scanf("%d%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 2 of 3

taulukkodemo_v1.c 06/10/15 13:51 Page 3 of 3

istademo_b.c 13/10/15 10:32 #include <stdio.h> #include <stdlib.h> typedef struct solmu * solmuptr; typedef struct solmu { int data; solmuptr link; Solmu; void tulostalista( solmuptr ); void lisaalistaan( solmuptr *, int ); void tuhoalista( solmuptr *); int main(){ solmuptr alku = NULL; int i = 0; printf("\nalkutilanne:"); tulostalista(alku); for(i=1; i <= 5; i++){ //lisätään listaan i:n arvoja //funktiolle on välitettävä osoittimen osoite, jotta muutokset // näkyvät alku-muuttujasta lisaalistaan( &alku, i ); printf("\nlopullinen lista:"); tulostalista(alku); // tässä ei tarvitse välittää muuttujan osoitetta // koska tulostaminen ei muuta listan sisältöä //funktiolle on välitettävä osoittimen osoite, jotta muutokset // näkyvät alku-muuttujasta printf("\nlistan täystuho alkaa...\n"); tuhoalista( &alku ); return 0; void tulostalista( solmuptr alku){ solmuptr temp; temp = alku; printf("\n"); printf("[alku]->"); while( NULL!= temp ){ printf("[%d]->", temp->data); temp=temp->link; printf("null\n\n"); Page 1 of 3

istademo_b.c 13/10/15 10:32 // Funktio saa parametrina listan alkuosoitinmuuttujan osoitteen, // jotta muutokset välittyvät pääohjelmassa olevaan listan alkuosoittimeen. void lisaalistaan( solmuptr * alku, int arvo){ solmuptr uusi = NULL; solmuptr temp = NULL; //luo uusi lisättävä solmu uusi = (solmuptr) malloc( sizeof( Solmu ) ); //täytä solmun muuttujat uusi -> link = NULL; uusi -> data = arvo; //kiinnitetään temp listaan //tempin avulla käydään läpi listaa //alkua ei saa käyttää läpikäyntiin, koska tällöin hukataan listan alkioita temp = *alku; //onko lista tyhjä? if( NULL == temp ){ // lisäys listan 1. solmuksi *alku = uusi; printf("\nyhden alkion lisäyksen jälkeen:"); tulostalista( *alku ); else{ //lisäys listan hännille //temp = alku; //haetaan viimeisin solmu while( NULL!= temp->link) temp = temp->link; //lisää uusi solmu temp->link = uusi; printf("\nuuden alkion lisäyksen jälkeen:"); tulostalista( *alku ); // Funktio saa parametrina listan alkuosoitinmuuttujan osoitteen, // jotta muutokset välittyvät pääohjelmassa olevaan listan alkuosoittimeen. // Funktio poistaa aina yhden solmun listan alusta ja tulostaa // muuttuneen listan sisällön. // Poistamista jatketaan kunnes lista on tyhjä. void tuhoalista( solmuptr * alku ){ solmuptr pois = NULL; //osoittaa listasta poistettavaa solmua //tuhotaan listaa solmu kerralla, kunnes lista on tyhjä, eli *alku on NULL while( NULL!= *alku ){ Page 2 of 3

istademo_b.c 13/10/15 10:32 //kiinnitetään listan 1. solmu poistettavaksi pois = *alku; *alku = pois->link; // aseta alku osoittamaan lista 2. solmua pois->link = NULL; // solmu "unohtaa" olleensa listassa, tämä ei ole pakollista free(pois); // vapauta solmun käyttämä muisti printf("\nlista alkion eli solmun poistamisen jälkeen:"); tulostalista( * alku ); Page 3 of 3