1 / 34

Etsi virhe

Etsi virhe. #include &lt;stdio.h&gt; int main() { d ouble x, y; for( x = 0; x &lt; 4.00; x++ ) for( y = 0; y &lt; 5,00; y++ ) { if( x * y &lt; 1000 ) printf( &quot;%g * %g = %g<br>&quot;, x, y, x*y ); } return 0; }. for( y = 0; y &lt; 5 . 00; y++ ) {. Etsi virhe. int sum( int a[], int n ) { int i;

ivy-mooney
Download Presentation

Etsi virhe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Etsi 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++ ) {

  2. Etsi 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++ )

  3. #define EPSILON 0.0001 if (abs(c-2.468)<EPSILON) Etsi 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); }

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

  5. Etsi 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 ); }

  6. Etsi 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:

  7. break; break; break; break; Etsi 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;}

  8. Etsi virhe int 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; }

  9. Etsi virhe VERSION #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; }

  10. Etsi 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 labs on sama nimi kuin funktiolla labs(), joten ennen printf():ää oleva labs on funktion nimi

  11. Etsi 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;

  12. * - 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; } a p 0xbffffa67 c

  13. 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; } p a 0xbffffa67 ’c’ ’d’

  14. *p=*q vs p=q p a #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; } 0xbffffa67 ’c’ ’d’ q b 0xbffffa68 ’d’ p a 0xbffffa67 0xbffffa68 ’d’ q b 0xbffffa68 ’d’

  15. if(*p) return *q/(*p) /* laske suhde */ ; Kommentti kommentin sisällä Etsi 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; }

  16. Etsi 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

  17. Etsi 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 ei tarkisteta virheen varalta

  18. Etsi virhe #define KMAX 30 double 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

  19. Dynaamisten taulukoiden käyttö • Määritä osoitin haluttuun taulukko elementtiin • Alusta osoitin malloc():n tai calloc():n avulla varattuun muistialueeseen • Vertaa osoitinta NULL osoittimeen • Lisää/vähennä alkioiden määräärealloc():n avulla • Vapauta varattu muisti free():llä

  20. Pino • Lisäykset ja poistot suoritetaan aina pinon päältä • Toimii LIFO (Last In First Out) periaatteella • Voidaan käyttää esim. undo toiminnon toteuttamiseen

  21. Jono • Lisäykset tehdään jonon loppuun ja poistot alusta • Toimii FIFO (First In First Out) periaatteella • Käytetään esim. rajapinnoissa:Yhden systeemin generoima data laitetaan jonoon josta toinen käsittelee sitä

  22. Jono renkaana 35 36 poista jonosta 34 37 38 pää häntä lisää jonoon

  23. 911 112 1 Linkitetty lista • Joukko alkioita jotka on kytketty toisiinsa linkeillä • Listan alkio sisältää talletettavan datan jalinkin seuraavan alkioon • Alkion lisääminen listan keskelle on helppoa • Alkioihin ei voida viitata indeksin avulla vrt. taulukko • Listan kokoa ei ole ennalta rajoitettu luku seuraava NULL

  24. Etsi 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; }

  25. 112 1 Kahteen suuntaan linkitetty lista • Lisääminen vaatii enemmän operaatiota • Alkioita voidaan lisätä/poistaa käyttämällä pelkästään alkiota edellinen luku 911 seuraava NULL pääosoitin häntäosoitin

  26. Binäärinen hakupuu • Jokaisessa solmussa on yksikäsitteinen avain • vasemmat jälkeläiset < nykyinen solmu <oikeat jälkeläiset 9 6 11 5 7 10

  27. Binäärisen hakupuun läpikäynti sisäjärjestyksessä (inorder) • Järjestys: vasenalipuu - juuri - oikea alipuu 5 6 7 9 10 11 9 6 11 void sisajarjestys(puuos alkio){ if(alkio){ sisajarjestys(alkio->vasen); tulosta_alkio(alkio); sisajarjestys(alkio->oikea); } 5 7 10

  28. Maksimi- 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

  29. Graafi G – terminologia • Ei-tyhjä solmujen/kärkien (vertex) joukko V(G) • Kaarien (edge) joukko E(G) • Suuntaamaton (G1), Suunnattu (G2) solmu kaari

  30. Graafin toteutus vierusmatriisilla Taulukossa on arvo 1 paikassa < vi,vj> silloin, kun kahden solmun vi ja vjvälillä on kaari; muutoin 0.

  31. Graafin toteutus vieruslistalla Vieruslista Käänteinen vieruslista

  32. Graafin leveyshaku • Merkitään aloitussolmu v vierailluksi • Lisätään solmu v jonoon • Toistetaan kunnes jono on tyhjä • Seuraava kärki v jonosta käsittelyyn • Vieraile v:hen kytketyissä ei-vierailluissa solmuissa w • Lisää w jonoon • Merkitse w vierailluksi

  33. Suuntaamattoman graafin syvyyshaku A H I B C G Vieruslista A: F C B GB: AC: AD: F EE: G F DF: A E D:G: E A:H: I:I: H: D E F

  34. Välikokeeseen valmistautumisessa kannattaa kerrata seuraavat asiat: • Luennoilla käsitellyt asiat luentomonisteesta • Luennoilla esitetyt ohjelmat • Harjoituksissa käsitellyt asiat

More Related