etsi virhe

Post on 02-Jan-2016

44 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Etsi virhe. #include int main() { d ouble x, y; for( x = 0; x < 4.00; x++ ) for( y = 0; y < 5,00; y++ ) { if( x * y < 1000 ) printf( "%g * %g = %g\n", x, y, x*y ); } return 0; }. for( y = 0; y < 5 . 00; y++ ) {. Etsi virhe. int sum( int a[], int n ) { int i; - PowerPoint PPT Presentation

TRANSCRIPT

Etsi virheEtsi virhe

#include <stdio.h>int main() { double x, y; for( x = 0; x < 4.00; x++ ) for( y = 0; y < 5,00; y++ ) { if( x * y < 1000 ) printf( "%g * %g = %g\n", x, y, x*y ); } return 0; }

for( y = 0; y < 5.00; y++ ) {

Etsi virheEtsi virhe

int sum( int a[], int n ) {int i;int s = 0; for( i = 0, i < n; i++; ) s += a[i]; return s;}int main(){ int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; printf("summa on %i\n", sum(a,10)); return 0; }

for( i = 0; i < n; i++ )

Etsi virheEtsi virhe

#include <stdio.h>int main(void){ float a=1.345,b=1.123,c; c=a+b; if (c == 2.468) printf("Yhtäsuuret\n"); else printf("Erisuuret! c:n arvo on %13.10f, tai%f\n",c,c);}

if (abs(c-2.468)<EPSILON)

#define EPSILON 0.0001

Etsi virheEtsi virhe

int a[10000]; void f() { int i; for( i = 0; i < 10000; i++); a[i] = i;}

for( i = 0; i < 10000; i++)

Etsi virheEtsi virhe

#include <stdio.h>void tulosta_summa( double a[], int n ){ int i; double summa = 0; for( i = 0; i < n; i++ ) summa += a[i]; printf( "Summa = %d\n", summa ); } int main() { double x[3] = { 1.0, 2.0, 3.0 }; tulosta_summa( x, 3 ); return 0; }

printf( "Summa = %f\n", sum ); }

Etsi virheEtsi virhe

#include <stdio.h>int f(int n){ int m; switch( n ){ case 1: m = 2; break; case 2: m = 4; break; case 3: m = 8; break; delault: m = 0; break;} return m;}int main() { printf( "f(5) = %d\n", f(5) ); return

0; }

default:

Etsi virheEtsi virhe

#include <stdio.h> void tulosta( int luku ){ switch (luku){ case 1: printf("yksi\n"); case 2: printf("kaksi\n"); case 3: printf("kolme\n"); case 4: printf("nelja\n"); } } int main(){ int i; for( i = 1; i <= 4; i++ ) tulosta( i ); return 0;}

break;break;break;break;

Etsi virheEtsi virheint laske_vokaalit( char *s ){ int sum = 0; for(;;) switch( *s++ ){ case 'a': case 'e': case 'i': case 'o': case 'u': sum++; continue; default: continue; case '\0': break;} return sum; }

case '\0': break;default:

continue; }

Etsi virheEtsi virhe

#define VERSI0N 12#include <stdio.h>char *ss( char *s ) { return s; }int main() { #if VERSION > 10 printf( "hello %s\n", ss("world") ); #endif return 0; }

VERSION

Etsi virheEtsi virhe

void f( int n ) { if( n > 0 ) { int labs, research; research = n-1; if( research > 15 ) labs = 3; else labs = 0; } if( labs ) labs *= 100; } if( labs ) printf( "%d - 1 is greater than 15\n", n ); } int main() { f(13); return 0; }

paikallisella muuttujalla labson sama nimi kuin funktiollalabs(), joten ennen printf():ääoleva labs on funktion nimi

Etsi VirheEtsi Virhe

#include <stdio.h>int main(){unsigned row = 25, col = 80;if( row + col > -1 ) printf("ei-negatiivinen\n");else printf("negatiivinen\n"); return 0;}

signed row = 25, col = 80;

* - operaattori* - operaattori

Käänteinen &-operaattorille &-operaattori antaa muuttujan osoitteen *-operaattori antaa osoitteessa olevan muuttujan#include <stdio.h>int main(void){ char a = 'c'; char *p=&a; printf("%c\n", a); printf("%c\n", *p); /* p:n osoittama merkki */ return 0; }

c0xbffffa67

p a

Osoittimien käyttöäOsoittimien käyttöä

pointterin osoittamiin arvoihin voidaanmyös kirjoittaa

#include <stdio.h>int main(void){ char a = 'c'; char *p=&a; printf("%c\n", *p); (*p)++; printf("%c\n", a); return 0; }

’c’ ’d’0xbffffa67

p a

*p=*q vs p=q*p=*q vs p=q

#include <stdio.h>int main(void){ char a = 'c', b='d'; char *p=&a, *q=&b; *p=*q; printf("%c, %c\n", *p, *q); p=q; printf("%c, %c\n", *p, *q); return 0;}

’c’ ’d’0xbffffa67

p a

’d’0xbffffa68

q b

’d’0xbffffa670xbffffa68

pa

’d’0xbffffa68

q b

Etsi VirheEtsi Virhe

#include <stdio.h>

int osamaara(int *q, int *p) { if(*p) return *q/*p /* laske suhde */ ; else return *q; }

int main(){ int n = 20, m = 4; int q = osamaara( &n, &m ); printf( "%d/%d == %d\n", n, m, q ); return 0; }

Kommentti kommentin sisällä

if(*p) return *q/(*p) /* laske suhde */ ;

Etsi virheEtsi virhe

int *p = NULL; int i;for( i = 0; i < n; i++ ) p = &a[i]; *p = 0; p on NULL, jos silmukkaa ei

suoriteta kertaakaan

Etsi virheEtsi virhe

#include <stdio.h>int prosessoi( char *tiedostonnimi ) { FILE *fp; int laskuri = 0; if( tiedostonnimi ) { if( fp = fopen(tiedostonnimi, "r") ){ while( fgetc( fp ) != EOF ) laskuri++; } fclose( fp ); } return laskuri; }

fopen():in paluuarvoa eitarkisteta virheen varalta

Etsi virheEtsi virhe

#define KMAX 30double q[KMAX];void f( double limit ){ double s = 1; int k = 0; q[0] = 0; while( q[k] <= limit && k < KMAX ) { k++; s = s * (k+1); q[k] = q[k-1] + s; } }

q[k] voi ylittää taulukon rajat

Dynaamisten taulukoiden Dynaamisten taulukoiden käyttökäyttö

1. Määritä osoitin haluttuun taulukko elementtiin 2. Alusta osoitin malloc():n tai calloc():n avulla

varattuun muistialueeseen3. Vertaa osoitinta NULL osoittimeen4. Lisää/vähennä alkioiden määrää

realloc():n avulla5. Vapauta varattu muisti free():llä

PinoPino

Lisäykset ja poistot suoritetaan aina pinon päältä

Toimii LIFO (Last In First Out) periaatteella

Voidaan käyttää esim. undo toiminnon toteuttamiseen

JonoJono

Lisäykset tehdään jonon loppuun ja poistot alusta

Toimii FIFO (First In First Out) periaatteellaKäytetään esim. rajapinnoissa:

Yhden systeemin generoima data laitetaan jonoon josta toinen käsittelee sitä

Jono renkaanaJono renkaana

34

35 36

37

38häntäpää

poista jonosta

lisää jonoon

Linkitetty listaLinkitetty lista

Joukko alkioita jotka on kytketty toisiinsa linkeillä Listan alkio sisältää talletettavan datan ja

linkin seuraavan alkioon Alkion lisääminen listan keskelle on helppoa Alkioihin ei voida viitata indeksin avulla vrt. taulukko Listan kokoa ei ole ennalta rajoitettu

911 112luku

seuraava1

NULL

Etsi virheEtsi virhe

typedef struct _solmu {int Arvo; struct _solmu *linkki; } solmu, *solmuos;

solmuos Lisaasolmu( solmuos paa, solmuos uusi ){ solmuos solmu = paa; solmuos edsolmu = NULL; while ( solmu->Arvo <= uusi->Arvo) { edsolmu = solmu; solmu = solmu->linkki; } edsolmu->linkki = uusi; uusi->linkki = solmu; return paa;}

Kahteen suuntaan linkitetty listaKahteen suuntaan linkitetty lista

Lisääminen vaatii enemmän operaatiotaAlkioita voidaan lisätä/poistaa käyttämällä

pelkästään alkiota

911 112lukuseuraava

1NULL

pääosoitin häntäosoitin

edellinen

Binäärinen hakupuuBinäärinen hakupuu

Jokaisessa solmussa on yksikäsitteinen avainvasemmat jälkeläiset < nykyinen solmu <

oikeat jälkeläiset 9

116

7 105

Binäärisen hakupuun läpikäynti Binäärisen hakupuun läpikäynti sisäsisäjjärjesärjestytyksessäksessä ( (ininorder)order)

Järjestys:vasen alipuu - juuri - oikea alipuu5 6 7 9 10 11

9

116

7 105void sisajarjestys(puuos alkio){ if(alkio){ sisajarjestys(alkio->vasen); tulosta_alkio(alkio); sisajarjestys(alkio->oikea); }

Maksimi- ja minimikekoMaksimi- ja minimikeko

Täydellinen binääripuu jonka jokaisen solmun avain on suurempi (pienempi) tai yhtäsuuri kuin lasten avain

Suurimman (pienimmän) alkion etsiminen on nopeaa

Graafi G – terminologiaGraafi G – terminologia

Ei-tyhjä solmujen/kärkien (vertex) joukko V(G) Kaarien (edge) joukko E(G) Suuntaamaton (G1), Suunnattu (G2)

solmu

kaari

Graafin toteutus Graafin toteutus vierusmatriisillavierusmatriisilla

Taulukossa on arvo 1 paikassa < vi,vj> silloin, kun kahden solmunvi ja vj välillä on kaari; muutoin 0.

Graafin toteutus vieruslistallaGraafin toteutus vieruslistalla

Vieruslista

Käänteinen vieruslista

Graafin leveyshakuGraafin leveyshaku

1. Merkitään aloitussolmu v vierailluksi2. Lisätään solmu v jonoon3. Toistetaan kunnes jono on tyhjä4. Seuraava kärki v jonosta käsittelyyn5. Vieraile v:hen kytketyissä ei-vierailluissa solmuissa w6. Lisää w jonoon7. Merkitse w vierailluksi

Suuntaamattoman graafin Suuntaamattoman graafin syvyyshakusyvyyshaku

Vieruslista

A: F C B GB: AC: AD: F EE: G F DF: A E D:G: E A:H: I:I: H:

F

A

B C G

D E

H I

Välikokeeseen valmistautumisessa Välikokeeseen valmistautumisessa kannattaa kerrata seuraavat asiat: kannattaa kerrata seuraavat asiat:

1. Luennoilla käsitellyt asiat luentomonisteesta2. Luennoilla esitetyt ohjelmat3. Harjoituksissa käsitellyt asiat

top related