previous next Up Title Contents Index

Esimerkki

Seuraavassa ohjelmassa korttipakan kortit määritellään tietueena, jonka kenttien leveydet määritellään neljäksi, kahdeksi ja yhdeksi bitiksi.

Ohjelmassa luodaan korttipakka, sekoitetaan se ja suoritetaan jako neljään osaan.

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>

    struct bitti_kortti{
        unsigned nro: 4; /* 1,2,3,...,13 */
        unsigned maa:2;  /* ruutu=0,hertta=1,risti=2,pata=3*/
        unsigned vari: 1; /* punainen=0, musta=1*/
    };
    typedef struct bitti_kortti Kortti;
    void tayta_pakka(Kortti *);
    void sekoita(Kortti *);
    void jako_4(Kortti *);
    /* Korttisymbolien ascii-koodit tallennetaan maa_taulu-taulukkoon
    ruutu=4,hertta=3,risti=5,pata=6*/
    char maa_taulu[]={4,3,5,6}; 
    void main(void)
    {
        Kortti pakka[52];
        tayta_pakka(pakka);
        sekoita(pakka);
        jako_4(pakka);
    }
    void tayta_pakka(Kortti *pakka)
    {
        int i;
        for (i=0; i<=51; i++)
        {
            pakka[i].nro=i%13+1;
            pakka[i].maa=i/13;
            pakka[i].vari=i/26;
        }
    }
    void sekoita (Kortti *pakka)
    {
        int i;
        int x;
        Kortti apu;
        /* Sekoituksen periaate:   
        Jokaista korttia kohti arvotaan uusi paikka pakassa. 
        Kunkin arvonnan jälkeen vaihdetaan kahden kortin paikkaa: 
        käsittelyvuorossa olevan kortin ja sen, jonka paikalle tämä siirretään.
        * /
        srand(time(NULL));
        for (i=0; i<=51; i++)
        {
            x=rand()%52;
            apu=pakka[i];
            pakka[i]=pakka[x];
            pakka[x]=apu;
        }
    }

    void jako_4 (Kortti *pakka)
    {
        int kasa;
        int kohta;
        int i;
        /* Jaetaan kortit neljään kasaan; 
        kohta = kortin paikka kasassa */
        for (kasa=1,kohta=0;  kasa<=4;  kasa++,kohta+=13)
        {
            printf ("\nKasa %d: ",kasa);
            for (i=kohta; i<kohta+13; i++)
            {
                printf("%c%-2d", 
                    maa_taulu[pakka[i].maa],  pakka[i].nro);
            }
        }
    } 

previous next Up Title Contents Index