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); } } }