Kurssin sisältö

Aloitetaan silmukoilla ja taulukoilla, jatketaan lajitteluilla ja hakutoiminnoilla. Rakennetaan funktioita. Seuraavana linkitetyt listat. Työvälineenä C++.

Koe

Ohje: hyödynnä vanhoja koodeja mutta poista kaikki vastaukseen kuulumaton koodi. Kommentoi koodiasi. Linkitetyn listan monisteita saa käyttää. Jos palautuksissa on identtisiä vastauksia, kysyn koodin toiminnan asianomaisilta joko suullisesti tai kirjallisesti.

  1. Tee ohjelma, joka kysyy käyttäjältä 10 kokonaislukua ja kysyy sitten käyttäjältä, järjestetäänkö luvut suurimmasta pienimpään vai pienimmästä suurimpaan. Sen jälkeen ohjelma tulostaa luvut näytölle järjestettynä. Helpoin tapa on tehdä kaksi lajittelufunktiota. Tee lukujen kyselyyn oma funktio.
  2. Tee ohjelma, joka kysyy käyttäjältä kokonaislukuja väliltä 1-100. Lukujen määrällä ei ole ylärajaa, joten on käytettävä linkitettyä listaa. Jos syötät nollan, ohjelma lopettaa lukujen kyselyn, tulostaa luvut näytölle ja tulostaa lopuksi suurimman ja pienimmän luvun.
  3. Kopioi molemmat koodit yhteen sähköpostiviestiin ja lähetä viesti osoitteeseen heikkilaakso@yahoo.com

Tehtävät

  1. Tee ohjelma, joka tulostaa luvut 1-10.
  2. Tee ohjelma, joka tulostaa luvut 10-1.
  3. Tee ohjelma, joka tulostaa luvut 1-n.
  4. Tee ohjelma, joka tulostaa luvut n-1.
  5. Tee ohjelma, joka tallentaa luvut 1-10 taulukkoon ja tulostaa taulukon.
  6. Tee ohjelma, joka tallentaa luvut 1-10 taulukkoon ja tulostaa taulukon takaperin (10-1).
  7. Tee ohjelma, joka tallentaa luvut 10-1 taulukkoon ja tulostaa taulukon.
  8. Tee ohjelma, joka tallentaa luvut 0-n taulukkoon ja tulostaa taulukon.
  9. Tee ohjelma, joka tallentaa luvut 0-n taulukkoon ja tulostaa taulukon. takaperin (n-0)
  10. Tee ohjelma, joka tallentaa luvut n-0 taulukkoon ja tulostaa taulukon.
     
  11. Tee ohjelma, joka täyttää taulukon 0-n satunnaisluvuilla 0-n.  Vihje: taulukko[laskuri] = rand() % n;
  12. Tee ohjelma, joka laskee edellisen tehtävän lukujen summan, keskiarvon, suurimman ja pienimmän luvun ja tulostaa ne.
  13. Tee ohjelma, joka laskee, kuinka monta kutakin lukua 0-n  on.
  14. Tee ohjelma, joka tallentaa edellisen tehtävän lukumäärät omaan taulukkoonsa ja tulostaa ne.
  15. Ota käyttöön muotoiltu tulostus alla olevan esimerkin mukaan ja muokkaa edellisen tehtävän koodia.
      cout.width (5);
      cout << right;
      cout << luku;
  16. Tulosta vain 10 lukua riville. Vihje: jos laskurin jakojäännös on 0, lisää rivinvaihto. Muokkaa edellisen tehtävän koodia.
  17. Tee ohjelma, joka laskee x kertaa 0-n taulukon satunnaislukujen 0-n lukumäärät ja laskee niiden keskiarvon. Käytä srand() -funktiota satunnaislukujen siemeneksi.
  18. Testaa tehtävä 17 seuraavilla arvoilla:
    x=1, n=10; x=10, n=10; x=100, n=10; x=1000, n=10;
    x=1, n=1000; x=10, n=1000; x=100, n=1000; x=1000, n=1000;
    Miten lukujen jakautuminen ja niiden keskiarvo muuttuvat?
  19. Palauta tehtävän 18 havainnot osoitteeseen heikkilaakso@yahoo.com. Lisää myös viimeinen koodisi suoraan viestiin, ei liitetiedostoon. Tämä on ensimmäinen palautettava tehtävä.
  20. Valmistaudumme isojen tietomäärien käsittelyyn ja mittaamaan siihen kuluvaa aikaa. Miten C++ kielessä koneen kellonaika voidaan tallentaa muuttujaan? Tämä on tiedonhakutehtävä.
  21. Tee ohjelma, joka tulostaa  satunnaislukujen määrän graafisena. Esimerkki:
    1: *****
    2: *******
    3: ****
    4: ******
    jne.
  22. Lisää ominaisuus, jossa lukujen määrää ja suurinta lukua voi säätää.
  23. Tee ohjelma, joka lajittelee taulukon luvut.
  24. Mitä tarkoittavat lineaari- ja binäärihaku, bubblesort ja quicksort? Etsi ja kokeile esimerkkejä.
  25. Toteuta tehtävien 21-23 ohjelma funktioilla.
  26. Lisää ohjelmaan lineaarihakufunktio, joka näyttää ensimmäisen haetun luvun paikan..
  27. Lisää ohjelmaan lineaarihakufunktio, joka tallentaa etsityn luvun kaikkien esiintymien paikan.
  28. Tee ohjelmasta kopio, jossa kukin luku voi esiintyä vain kerran. Tällöin m >= n.
  29. Lisää kopioon puolitushaku- ja pikalajittelufunktio.
  30. Tee linkitetty lista monisteesta. Testaa sen toiminta. Palauta koodi ja selitä sen toiminta.
Koodinpätkä ajan tallentamiseen:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;

int main(int argc, char *argv[])
{
          char dateStr [9];
          char timeStr [9];
          _strdate( dateStr);
          printf( "Paivays: %s \n", dateStr);
         _strtime( timeStr );
         printf( "Kellonaika: %s \n", timeStr);
         system("PAUSE");
         return EXIT_SUCCESS;
}

Ratkaisu tehtävään 25:
#include <cstdlib>
#include <iostream>
using namespace std;

void tulosta ( int[], int );
void nollaus ( int[], int );
void luvut ( int[], int[], int, int );
void lajittele ( int[], int );
void graafi ( int[], int );

int main(int argc, char *argv[]) {
    const int n = 80, m = 8;
    int t[n], l[m];
    srand ( time(NULL) );
    nollaus ( l, m );
    luvut ( t, l, n, m );
    cout << "Luvut:" << endl;
    tulosta ( t, n );
    lajittele ( t, n );
    cout << endl << "Luvut lajiteltuina:" << endl;
    tulosta ( t, n );
    cout << endl << "Määrät:" << endl;
    tulosta ( l, m );
    cout << endl;
    graafi ( l, m );
    system("PAUSE");
    return EXIT_SUCCESS;
}
void tulosta ( int taulu[], int x ) { // t, n
     for ( int i = 0 ; i < x ; i++ ) {
         cout.width (4); cout << right; cout << taulu[i];
     }
}
void nollaus ( int taulu[], int x ) { // l, m
     for ( int i = 0 ; i < x ; i++ ) {
         taulu[i] = 0;
     }
}
void luvut ( int taulu1[], int taulu2[], int x, int y ) { // t, l, n, m
     for ( int i = 0 ; i < x ; i++ ) {
         taulu1[i] = rand() % y;
         taulu2[taulu1[i]]++;
     } 
}
void lajittele ( int taulu[], int x ) { // t, n
     int i, j, apu;
     for ( i = 0 ; i < x ; i++ ) {
         for ( j = 0 ; j < i ; j++ ) {
             if ( taulu[j] > taulu[i] ) {
                apu = taulu[j];
                taulu[j] = taulu[i];
                taulu[i] = apu;
             }
         }
     }
}
void graafi ( int taulu[], int x ) { // l, m
    for ( int i = 0 ; i < x ; i++ ) {
        cout.width (2); cout << right; cout << i <<": ";
        for ( int j = 0 ; j < taulu[i] ; j++ ) cout << "*";
        cout << endl;
    } 
}



 

 

 

 

Linkit
cplusplus.com
C++ ohjelmoinnin perusteet
C++ ohjelmointi
Hassun hauska C++-opas 
Ohjelmointiputka