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

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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tietueet. Tietueiden määrittely

Ohjausrakenteet. Valinta:

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

Luokan muodostimet (Constructors)

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

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

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

Moduli 5: Kehittyneitä piirteitä

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

Listarakenne (ArrayList-luokka)

3. Binääripuu, Java-toteutus

Muuttujien roolit Kiintoarvo cin >> r;

TIETORAKENTEET JA ALGORITMIT

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

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Tietorakenteet ja algoritmit

Tietotyypit ja operaattorit

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

OPINTOJAKSON OHJELMOINTI HARJOITUSTEN RATKAISUJA

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

Taulukoiden käsittely Javalla

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

C-kurssi kevät Luennon sisältö

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

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Ohjelmoinnin perusteet Y Python

Binäärioperaatiot Tiedostot ja I/O

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

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

Ohjelmoinnin perusteet Y Python

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

Lyhyt kertaus osoittimista

13 Operaattoreiden ylimäärittelyjä

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

11. Javan valintarakenteet 11.1

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

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

11. Javan valintarakenteet 11.1

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

Binäärioperaatiot Tiedostot ja I/O

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

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

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

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

Esimerkki 1: Kahviautomaatti.

5/20: Algoritmirakenteita III

Java-kielen perusteita

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

Ohjelmoinnin perusteet Y Python

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

Tietorakenteet ja algoritmit

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

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

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

ehdollinen kääntäminen

ehdollinen kääntäminen

Lista luokan sisällä

Rakenteiset tietotyypit Moniulotteiset taulukot

TAMPEREEN TEKNILLINEN YLIOPISTO

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

C-ohjelmointi, syksy 2006

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjeet. Jaa vastauksesi konsepteille siten, etta:

Tekstitiedostot ja niiden käyttö

Ohjelmoinnin perusteet Y Python

C-kurssi kevät t Luento 2: tyypit, rakenteet, makrot

Tekstitiedostot ja niiden käyttö

Tietorakenteet ja algoritmit

Tiedosto. Tiedostot ovat joko binääritiedostoja tai tekstitiedostoja. Tekstitiedostot

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

2. C-kieli ja ongelmanratkaisu

11. Javan toistorakenteet 11.1

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

Java-kielen perusteet

Muuttujat ja kontrolli. Ville Sundberg

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Java-kielen perusteet

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmoinnin perusteet Y Python

Transkriptio:

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1; while( luku1 <= 0 ){ printf("\nanna nollaa suurempi kokonaisluku > "); scanf("%d", &luku1); //fpurge( stdin ); //while( '\n'!= getchar() ); printf("\nsyotit luvun: %d\n", luku1); while( luku2 <= 0 ){ printf("\nanna toinen nollaa suurempi kokonaisluku > "); scanf("%d", &luku2); printf("\nsyotit luvun: %d\n", luku2);! return 0;

// // whiledemov2.c // #include <stdio.h> int main(void){ int luku1 = 0; int luku2 = 0; do{ printf("\nanna nollaa suurempi kokonaisluku > "); scanf("%d", &luku1); while( '\n'!= getchar() ); while( luku1 <= 0 ); printf("\nsyotit luvun: %d\n", luku1); do{ printf("\nanna toinen nollaa suurempi kokonaisluku > "); scanf("%d", &luku2); while( '\n'!= getchar() ); while( luku2 <= 0 ); printf("\nsyotit luvun: %d\n", luku2); return 0;

#include <stdio.h> void piirraympyra(void); void piirrakolmio(void); void piirrasuorat(void); void piirrakanta(void); int main(void){ // piirr ympyr piirraympyra( ); // piirr kolmio piirrakolmio( ); // pirr suorat piirrasuorat( ); return 0; void piirraympyra(void){ printf("\npiirretaan ympyraa\n");

void piirrakolmio(void){ printf("\npiirretaan Kolmiota\n"); piirrasuorat( ); piirrakanta( ); void piirrasuorat(void){ printf("\npiirretaan suorat\n"); void piirrakanta(void){ printf("\npiirretaan kantaviivaa\n"); -------------------------------------------------------------------------------------------------

#include <stdio.h> void vaihda( int *, int * ); //esittely int main(void){ int luku1 = 0; int luku2 = 0; printf("\nanna luku >"); scanf("%d", &luku1); printf("\nanna luku >"); scanf("%d", &luku2); printf("\nluku1: %d ja luku2: %d\n", luku1, luku2); if( luku1 > luku2 ){ printf("\nvaihto kaynnistyy\n"); vaihda( &luku1, &luku2 ); printf("\nluku1: %d ja luku2: %d\n", luku1, luku2); return 0;

void vaihda( int * p1, int * p2){ int temp = 0; printf("\nn1: %d ja n2: %d\n", *p1, *p2); temp = *p1; *p1 = *p2; *p2 = temp; printf("\nn1: %d ja n2: %d\n", *p1, *p2); -------------------------------------------------------------------------------------------------

#include <stdio.h> #include "omat.h" #define MAX 1000 int main(void){ int n=0; int minjakaja=0; printf("\nanna luku > "); scanf("%d", &n); if( n < 2 ){ printf("\nliian pieni arvo\n"); else if( n < MAX ){ minjakaja = haejakaja( n ); if( minjakaja == n ){ printf("\nluku %d on alkuluku\n", n); else{ printf("\nluvun %d pienin jakaja on %d\n", n, minjakaja); else{ printf("\nliian suuri arvo\n"); return 0; -------------------------------------------------------------------------------------------------

// // omat.h // // // Created by on 11/27/13. // Copyright (c) 2013 MyCompanyName. All rights reserved. // #ifndef _omat_h #define _omat_h int haejakaja(int ); int parillinen( int ); #endif ------------------------------------------------------------------------------------------------- // //omat.c // #include <stdio.h> #include <math.h> #include "omat.h" int parillinen( int n ){ return ( n%2 == 0);

int haejakaja(int n){ int testi = 0; int jakaja = 0; if( parillinen(n) ){ jakaja = 2; else{ jakaja = 0; testi = 3; while( jakaja == 0){ printf("\ntesti on nyt %d\n", testi); if( testi > sqrt(n) ){ jakaja = n; else if( n % testi == 0){ jakaja = testi; else{ testi = testi + 2; return jakaja; -------------------------------------------------------------------------------------------------!!!!

#include <stdio.h> int main( void ){ int komento; do{ printf("\npaina 1 jos haluat nostaa rahaa\n"); printf("\npaina 2 jos haluat tallettaa rahaa\n"); printf("\npaina 3 jos haluat tietaa saldon\n"); printf("\nvalintasi > "); scanf("%d", &komento); switch( komento ){ case 1: printf("\nnostetaan RAHAA\n"); break; case 2: printf("\ntalletetaan RAHAA\n"); break; case 3: printf("\nsaldon KYSELY\n"); break; case 0: break; default: printf("\nvirheellinen KOMENTO!!!\n"); break;

if( komento == 0 ) break; while( 1 ); printf("\nloppu\n"); return 0; //main -------------------------------------------------------------------------------------------------!

// // kertolaskudemo.c // // // Created by on 11/20/13. // Copyright (c) 2013 MyCompanyName. All rights reserved. // #include <stdio.h> int main(void){ int tulo = 1; int luku; while( tulo < 1000 ){ printf("anna luku > "); scanf("%d", &luku); fpurge(stdin); if( 0!= luku ) tulo = tulo * luku; printf("\ntulo on %d \n\n", tulo); return 0; -------------------------------------------------------------------------------------------------

#include <stdio.h> int lueint(void); int main(void){ int luku1=0, luku2=0; printf("\nanna yksi kokonaisluku > "); luku1 = lueint(); printf("\nanna toinen kokonaisluku > "); luku2 = lueint(); printf("\nsyotit luvut %d ja %d \n", luku1, luku2); return 0; int lueint(void){ int luku=0; int status=0; do{ status = scanf("%d", &luku); while( fgetc(stdin)!= '\n'){ ; if( 0 == status ){ printf("\nei kelpaa, yrita uudelleen > "); while( 0 == status ); return luku;

------------------------------------------------------------------------------------------------- #include <stdio.h> #define KOKO 51 #define LUKUMAARA 3 typedef struct { char etunimi[koko]; char sukunimi[koko]; int opiskelijanro; int JO_arvosana; Opiskelija_t; //kuvaa yhden opiskelijan tietoja Opiskelija_t luetiedot( void); void tulostatiedot( Opiskelija_t opiskelijat[ ], int maara ); void tulostaopiskelija( Opiskelija_t opiskelija ); void lueroskat(void); int lueint(char kehote[]); void tulostavalikko(void); void lisaauusiopiskelija( Opiskelija_t opiskelijat[], int maara ); int etsiopiskelijaa( Opiskelija_t opiskelijat[], int maara, int opnro );

int main(void){ int i; int loppu = 0; int valinta = 0; int maara = 0; int opnro = 0; int paikka = 0; Opiskelija_t opiskelijat[lukumaara]={"\0","\0", -1, -1 ; do{ tulostavalikko(); valinta = lueint("valintasi > "); switch( valinta ){ case 1: //lis t n uusi opiskelija if( maara < LUKUMAARA ){ lisaauusiopiskelija( opiskelijat, maara ); printf("\nlisattiin UUSI OPISKELIJA\n"); maara++; //maara = maara + 1 else{ printf("\ntaulukko ON TAYSI\n"); break;

case 2: //etsit n opiskelijaa opiskelijanumeron perusteella opnro = lueint("anna etsittavan opiskelijan numero >"); paikka = etsiopiskelijaa( opiskelijat, maara, opnro ); if( paikka >=0 ){ tulostaopiskelija( opiskelijat[ paikka ] ); else{ printf("\nei LOYDY MITAAN\n"); break; case 3: //tulostetaan koko "rekisteri" tulostatiedot( opiskelijat, maara ); break; case 0: //lopetetaan loppu = 1; break; default: printf("\nvirheellinen KOMENTO!\n"); break; while(!loppu ); return 0; //main p ttyy

void tulostavalikko(void){ printf("\n1: LISAA UUSI OPISKELIJA\n"); printf("2: ETSI OPISKELIJAA \n"); printf("3: TULOSTA KAIKKI TIEDOT \n"); printf("0: LOPETA\n"); Opiskelija_t luetiedot(void){ Opiskelija_t temp; printf("\nanna nimi> "); fgets( temp.etunimi, KOKO, stdin ); printf("\nanna sukunimi> "); fgets( temp.sukunimi, KOKO, stdin ); temp.opiskelijanro=lueint("anna opiskelijanumero> "); temp.jo_arvosana=lueint("anna opiskelija JO arvosana> "); return temp; void lisaauusiopiskelija( Opiskelija_t opiskelijat[], int maara ){ opiskelijat[maara]= luetiedot();

void tulostatiedot(opiskelija_t opiskelijat[ ], int maara){ int i; for(i=0; i< maara; i++){ tulostaopiskelija( opiskelijat[i] ); void tulostaopiskelija( Opiskelija_t opiskelija ){ printf("---------------------------\n"); printf(" ETUNIMI: %s\n", opiskelija.etunimi ); printf("sukunimi: %s\n", opiskelija.sukunimi ); printf("opisknro: %d\n", opiskelija.opiskelijanro ); printf("arvosana: %d\n", opiskelija.jo_arvosana ); printf("---------------------------\n");

int etsiopiskelijaa( Opiskelija_t opiskelijat[], int maara, int opnro ){ int i; for(i=0; i < maara; i++){ if( opiskelijat[ i ].opiskelijanro == opnro ) return i; return -1; void lueroskat(void){ char roska; while( (roska = fgetc(stdin))!='\n'){ //printf("\nluettiin merkki: %c ja sen koodi on %d", roska, (int)roska); ;

int lueint(char kehote []){ int luku; int result; char merkki; printf("\n%s", kehote ); while( (result=scanf("%d%c", &luku, &merkki))== 0 result == 2 && merkki!= '\n'){ lueroskat(); printf("\nei kay, yrita uudelleen >"); return luku; -------------------------------------------------------------------------------------------------

#include <stdio.h> #include <string.h> #define NIMEN_PITUUS 51 #define LUKUMAARA 3 typedef struct { char etunimi[nimen_pituus]; char sukunimi[nimen_pituus]; int opiskelijanro; int JO_arvosana; Opiskelija_t; //kuvaa yhden opiskelijan tietoja Opiskelija_t luetiedot( void); void luekaikkiopiskelijat( Opiskelija_t opiskelijat[ ], int maara ); void tulostatiedot( Opiskelija_t opiskelijat[ ], int maara ); void tulostaopiskelija( Opiskelija_t opiskelija ); int etsiopiskelijaa( Opiskelija_t opiskelijat[ ], int maara, int opnro ); void luemerkkijono( char * mjono, int maara, char * kehote ); void lueroskat(void); int lueint( char * kehote );

int main(void){ int opnro; int paikka; Opiskelija_t opiskelijat[lukumaara]; luekaikkiopiskelijat( opiskelijat, LUKUMAARA ); opnro = lueint("anna etsittava opiskelijan opiskelijanumero >"); paikka = etsiopiskelijaa( opiskelijat, LUKUMAARA, opnro ); if( paikka!= -1 ){ tulostaopiskelija( opiskelijat[ paikka ] ); else { printf("\nopiskelijanumerolla %d ei loydy opiskelijaa\n", opnro ); tulostatiedot( opiskelijat, LUKUMAARA ); return 0; void luekaikkiopiskelijat( Opiskelija_t opiskelijat[], int maara ){ int i; for(i=0; i<maara; i++){ opiskelijat[ i ] = luetiedot( );

Opiskelija_t luetiedot(void){ Opiskelija_t temp; luemerkkijono( temp.etunimi, NIMEN_PITUUS, "Anna nimi> " ); luemerkkijono( temp.sukunimi, NIMEN_PITUUS, "Anna sukunimi> " ); temp.opiskelijanro=lueint("anna opiskelijanumero> "); temp.jo_arvosana=lueint("anna opiskelija JO arvosana> "); return temp; int etsiopiskelijaa( Opiskelija_t opiskelijat[ ], int maara, int opnro ){ int i = 0; while( i < maara ){ if( opiskelijat[i].opiskelijanro == opnro ) return i; i++; return -1;

void tulostatiedot(opiskelija_t opiskelijat[ ], int maara){ int i; for(i=0; i< maara; i++){ tulostaopiskelija( opiskelijat[i] ); void tulostaopiskelija( Opiskelija_t opiskelija ){ printf("---------------------------\n"); printf(" ETUNIMI: %s\n", opiskelija.etunimi ); printf("sukunimi: %s\n", opiskelija.sukunimi ); printf("opisknro: %d\n", opiskelija.opiskelijanro); printf("arvosana: %d\n", opiskelija.jo_arvosana); printf("---------------------------\n"); void lueroskat(void){ while( fgetc(stdin)!='\n');

int lueint(char * kehote){ int luku; int result; char merkki; printf("\n%s", kehote ); while( (result=scanf("%d%c", &luku, &merkki))== 0 result == 2 && merkki!= '\n'){ lueroskat(); printf("\nei käy, yritä uudelleen >"); return luku; void luemerkkijono( char * mjono, int maara, char * kehote ){ printf("\n%s", kehote ); fgets(mjono, maara, stdin); if( mjono[ strlen(mjono)-1 ] =='\n'){ mjono[ strlen(mjono)-1 ] ='\0'; else { lueroskat(); -------------------------------------------------------------------------------------------------

#include <stdio.h> #include <string.h> #define NIMEN_PITUUS 51 #define LUKUMAARA 3 typedef struct { char etunimi[nimen_pituus]; char sukunimi[nimen_pituus]; int opiskelijanro; int JO_arvosana; Opiskelija_t; //kuvaa yhden opiskelijan tietoja void tulostavalikko(void); Opiskelija_t luetiedot( void); void lisaaopiskelija( Opiskelija_t opiskelijat[ ], int paikka ); void tulostatiedot( Opiskelija_t opiskelijat[ ], int maara ); void tulostaopiskelija( Opiskelija_t opiskelija ); int etsiopiskelijaa( Opiskelija_t opiskelijat[ ], int maara, int opnro ); void luemerkkijono( char * mjono, int maara, char * kehote ); void lueroskat(void); int lueint( char * kehote );

int main(void){ int opnro; int paikka; int lasnaolijat = 0; int valinta; int loppu = 0; Opiskelija_t opiskelijat[lukumaara]; do { tulostavalikko(); valinta = lueint("anna valintasi > "); switch( valinta ){ case 1: if( lasnaolijat < LUKUMAARA ){ lisaaopiskelija( opiskelijat, lasnaolijat ); lasnaolijat++; printf("\nlisattiin uusi opiskelija\n"); else{ printf("\nsori, ei mahdu uusia opiskelijoita,\nsinun täytyy odottaa, kunnes joku valmistuu\n"); break; case 2: opnro = lueint("anna etsittava opiskelijan opiskelijanumero >"); paikka = etsiopiskelijaa( opiskelijat, lasnaolijat, opnro ); if( paikka!= -1 ){ tulostaopiskelija( opiskelijat[ paikka ] );

else { printf("\nopiskelijanumerolla %d ei loydy opiskelijaa\n", opnro ); break; case 3: tulostatiedot( opiskelijat, lasnaolijat ); break; case 0: loppu = 1; break; default: printf("\ntuntematon VALINTA\n"); break; while(!loppu); return 0; void tulostavalikko(void){ printf("\n1 LISAA OPISKELIJA\n"); printf("2 ETSI OPISKELIJAA\n"); printf("3 TULOSTA KAIKKI\n"); printf("0 LOPETA\n");

void lisaaopiskelija( Opiskelija_t opiskelijat[], int paikka ){ opiskelijat[paikka] = luetiedot(); Opiskelija_t luetiedot(void){ Opiskelija_t temp; luemerkkijono( temp.etunimi, NIMEN_PITUUS, "Anna nimi> " ); luemerkkijono( temp.sukunimi, NIMEN_PITUUS, "Anna sukunimi> " ); temp.opiskelijanro=lueint("anna opiskelijanumero> "); temp.jo_arvosana=lueint("anna opiskelija JO arvosana> "); return temp;

int etsiopiskelijaa( Opiskelija_t opiskelijat[ ], int maara, int opnro ){ int i = 0; while( i < maara ){ if( opiskelijat[i].opiskelijanro == opnro ) return i; i++; return -1; void tulostatiedot(opiskelija_t opiskelijat[ ], int maara){ int i; for(i=0; i< maara; i++){ tulostaopiskelija( opiskelijat[i] );

void tulostaopiskelija( Opiskelija_t opiskelija ){ printf("---------------------------\n"); printf(" ETUNIMI: %s\n", opiskelija.etunimi ); printf("sukunimi: %s\n", opiskelija.sukunimi ); printf("opisknro: %d\n", opiskelija.opiskelijanro); printf("arvosana: %d\n", opiskelija.jo_arvosana); printf("---------------------------\n"); void lueroskat(void){ while( fgetc(stdin)!='\n'); int lueint(char * kehote){ int luku; int result; char merkki; printf("\n%s", kehote ); while( (result=scanf("%d%c", &luku, &merkki))== 0 result == 2 && merkki!= '\n'){ lueroskat(); printf("\nei käy, yritä uudelleen >"); return luku;

void luemerkkijono( char * mjono, int maara, char * kehote ){ printf("\n%s", kehote ); fgets(mjono, maara, stdin); if( mjono[ strlen(mjono)-1 ] =='\n'){ mjono[ strlen(mjono)-1 ] ='\0'; else { lueroskat(); -------------------------------------------------------------------------------------------------

#include <stdio.h> int palautapaivienlkm( int ); //esittely int lueint(void); int main(void){ int kuukausi=0; int lkm=0; do{ printf("\nanna kuukauden numero > "); kuukausi=lueint( ); if( kuukausi < 1 ) printf("\nliian pieni arvo!"); else if( kuukausi > 12 ) printf("\nliian suuri arvo!"); while( kuukausi < 1 kuukausi > 12); lkm = palautapaivienlkm( kuukausi ); printf("\nkuukaudessa %d on %d paivaa\n", kuukausi, lkm); return 0;

int palautapaivienlkm( int kk ){ int paivat[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31; return (paivat[kk]); int lueint(void){ int luku=0; int status=0; do{ status = scanf("%d", &luku); while( fgetc(stdin)!= '\n'){ ; if( 0 == status ){ printf("\nei kelpaa, yrita uudelleen > "); while( 0 == status ); return luku;! -------------------------------------------------------------------------------------------------

!

#include <stdio.h> #include <string.h> #define NIMEN_PITUUS 51 #define LUKUMAARA 3 typedef struct { char etunimi[nimen_pituus]; char sukunimi[nimen_pituus]; int opiskelijanro; int JO_arvosana; Opiskelija_t; //kuvaa yhden opiskelijan tietoja void tulostavalikko(void); Opiskelija_t luetiedot( void); void lisaaopiskelija( FILE * tiedosto ); void tulostatiedot(file * tiedosto); void tulostaopiskelija( Opiskelija_t opiskelija ); Opiskelija_t etsiopiskelijaa( FILE * tiedosto, int opnro ); void luemerkkijono( char * mjono, int maara, char * kehote ); int poistaopiskelija( FILE * tiedosto, int opnro); void lueroskat(void); int lueint( char * kehote );

int main(void){ int opnro; int paikka; Opiskelija_t temp; int tila; int valinta; int loppu = 0; FILE * tiedosto = NULL; if( ( tiedosto = fopen("opiskelijat.dat", "a+"))== NULL){ if( (tiedosto = fopen("opiskelijat.dat", "w"))== NULL){ printf("\nsyntyi VIRHETILANNE; OHJELMAN SUORITUS PAATTYY\n"); return 0; else{ fclose(tiedosto); if( (tiedosto = fopen("opiskelijat.dat", "a+"))== NULL){ printf("\nsyntyi TAAS VIRHETILANNE; OHJELMAN SUORITUS PAATTYY\n"); return 0;

do { tulostavalikko(); valinta = lueint("anna valintasi > "); switch( valinta ){ case 1: lisaaopiskelija(tiedosto); break; case 2: opnro = lueint("anna etsittava opiskelijan opiskelijanumero >"); temp = etsiopiskelijaa( tiedosto, opnro ); if( temp.opiskelijanro!= -1 ){ tulostaopiskelija( temp ); else { printf("\nopiskelijanumerolla %d ei loydy opiskelijaa\n", opnro ); break; case 3: tulostatiedot( tiedosto ); break; case 4: opnro = lueint("anna etsittava opiskelijan opiskelijanumero >"); tila = poistaopiskelija( tiedosto, opnro ); if( tila==1 )

printf("\npoistettiin opiskelija\n"); else if( tila =-1 ) printf("\ntapahtui virhe\n"); else printf("\nopiskelijaa EI LOYDY\n"); break; case 0: loppu = 1; fclose( tiedosto ); break; default: printf("\ntuntematon VALINTA\n"); break; while(!loppu); return 0; void tulostavalikko(void){ printf("\n1 LISAA OPISKELIJA\n"); printf("2 ETSI OPISKELIJAA\n"); printf("3 TULOSTA KAIKKI\n"); printf("0 LOPETA\n");

void lisaaopiskelija( FILE * tiedosto ){ Opiskelija_t temp; int result = 0; temp = luetiedot(); result = fwrite( &temp, sizeof(opiskelija_t), 1, tiedosto ); if( result ) printf("\ntallennettiin opiskelijan tiedot\n"); else printf("\nvirhetilanne TALLENNUKSESSA\n"); Opiskelija_t luetiedot(void){ Opiskelija_t temp; luemerkkijono( temp.etunimi, NIMEN_PITUUS, "Anna nimi> " ); luemerkkijono( temp.sukunimi, NIMEN_PITUUS, "Anna sukunimi> " ); temp.opiskelijanro=lueint("anna opiskelijanumero> "); temp.jo_arvosana=lueint("anna opiskelija JO arvosana> "); return temp;

Opiskelija_t etsiopiskelijaa( FILE * tiedosto, int opnro ){ Opiskelija_t temp; int result = 0; rewind( tiedosto ); result = fread( &temp, sizeof(opiskelija_t),1,tiedosto); while(!feof(tiedosto) ){ if( temp.opiskelijanro == opnro ) return temp; result = fread( &temp, sizeof(opiskelija_t),1,tiedosto); temp.opiskelijanro = -1; return temp;

void tulostatiedot(file * tiedosto){ Opiskelija_t temp; int result = 0; rewind( tiedosto ); result = fread( &temp, sizeof(opiskelija_t),1,tiedosto); while(!feof(tiedosto) ){ tulostaopiskelija( temp ); result = fread( &temp, sizeof(opiskelija_t),1,tiedosto);

int poistaopiskelija( FILE * tiedosto, int opnro){ Opiskelija_t temp; FILE * kopio; if((kopio = fopen("apu.dat", "w"))==null){ return -1; int result = 0; rewind(tiedosto); fread( &temp, sizeof(opiskelija_t),1,tiedosto); while(!feof(tiedosto) ){ if( temp.opiskelijanro!= opnro ){ fwrite( &temp, sizeof(opiskelija_t),1, kopio); result = 1; fread( &temp, sizeof(opiskelija_t),1,tiedosto); fclose( tiedosto ); fclose( kopio ); remove( "opiskelijat.dat" ); rename( "apu.dat", "opiskelijat.dat" ); if( (tiedosto = fopen("opiskelijat.dat", "a+"))== NULL){

printf("\nsyntyi HIRMUINEN VIRHETILANNE\n"); return -1; return result; void tulostaopiskelija( Opiskelija_t opiskelija ){ printf("---------------------------\n"); printf(" ETUNIMI: %s\n", opiskelija.etunimi ); printf("sukunimi: %s\n", opiskelija.sukunimi ); printf("opisknro: %d\n", opiskelija.opiskelijanro); printf("arvosana: %d\n", opiskelija.jo_arvosana); printf("---------------------------\n"); void lueroskat(void){ while( fgetc(stdin)!='\n');

int lueint(char * kehote){ int luku; int result; char merkki; printf("\n%s", kehote ); while( (result=scanf("%d%c", &luku, &merkki))== 0 result == 2 && merkki!= '\n'){ lueroskat(); printf("\nei käy, yritä uudelleen >"); return luku;

void luemerkkijono( char * mjono, int maara, char * kehote ){ printf("\n%s", kehote ); fgets(mjono, maara, stdin); if( mjono[ strlen(mjono)-1 ] =='\n'){ mjono[ strlen(mjono)-1 ] ='\0'; else { lueroskat();!