previous next Up Title Contents Index

Ohjelman toteutus C-kielellä

Ohjelmassa sekoitetaan korttipakka ja suoritetaan jako neljään kasaan.

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

    /* TIETOTYYPIT ************************/

    typedef char Maa[7]; 
    typedef char Arvo[3];

    typedef struct {
        Maa maa;
        Arvo arvo;
    }Kortti;

    /* FUNKTIOIDEN PROTOTYYPIT **********/

    void tayta_pakka(Kortti *);
    void sekoita(Kortti *);
    void jako_4(Kortti *);

    /* GLOBAALIT MUUTTUJAT **********************/

    Arvo arvot[13]= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    Maa maat[4]={"Risti","Ruutu","Hertta","Pata"};

    /* PÄÄOHJELMA ************************/

    void main(void)
    {
        Kortti pakka[52];
        tayta_pakka(pakka);
        sekoita(pakka);
        jako_4(pakka);
    }

    /* FUNKTIOIDEN MÄÄRITTELYT**********/

    void tayta_pakka(Kortti *pakka)
    {
        int i;
        for (i=0; i<=51; i++)
        {
            strcpy(pakka[i].arvo,arvot[i%13]);
            strcpy(pakka[i].maa,maat[i/13]);
        }
    }

    void sekoita (Kortti *pakka)
    {
        int i,x;
        Kortti apu;
        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 kasi,kohta,i,j;
        clrscr();
        for (kasi=1,kohta=0; kasi<=4; kasi++,kohta+=13)
        {
            printf ("\n\nKäsi %d:\n",kasi);

            for (i=kohta,j=1; i<kohta+13; i++,j++)
            {
                printf ("%-6s %-2s ",pakka[i].maa,  pakka[i].arvo);
                if (j==7) printf("\n");
            }
        }
    }

Funktiossa jako_4() on for-rakenteiden alku- ja lopputoimissa käytetty sellaista C-kielen ominaisuutta, että useampia lausekkeita voidaan yhdistää yhdeksi lauseeksi käyttämällä niiden välissä pilkkua. Tämä on tyypillistä nimenomaan for-rakenteen yhteydessä.

previous next Up Title Contents Index