Io ho iniziato a creare la classe "Cartella".

La parte + difficile è stata la funzione che inizializzi la cartella in modo completamente casuale (numeri non ripetuti, 5 num su 9 spazi per riga, disposizione num casuale...) ma per ora funzia.

clsCartella.h :
codice:
#include <ostream>

enum e_vincita 
{
	ambo,
	terno,
	quaterna,
	cinquina,
	tombola
};

class Cartella
{
	int numeri[3][9];

public:

	Cartella();

	void riempi();

	e_vincita vincita();

	friend std::ostream &operator<<(std::ostream &stream, Cartella oggetto);
};
clsCartella.cpp :

codice:
#include "clsCartella.h"

#include <cstdlib>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <vector>

#include <ostream>

void Cartella::riempi()
{
	std::vector<int> cont_numeri;
	std::vector<int> numeri_15;

	int i;
	std::vector<int>::iterator pos;

	srand(GetTickCount());

	// Inizializza il vettore dei numeri
	for(i=0;i<27;i++) numeri[i/9][i % 9] = 0;

	// Riempie i numeri da 1 a 90
	for(i=1; i<91; i++)
	{
		cont_numeri.push_back(i);
	}

	// Riempie i 15 numeri
	for(i=0; i<15; i++)
	{
		pos = cont_numeri.begin() + rand() % cont_numeri.size();
		numeri_15.push_back(*pos);
		cont_numeri.erase(pos);
	}

	int j;
	for(j=0; j<3; j++)
	{
		cont_numeri.clear();
		// Riempie i numeri da 0 a 8
		for(i=0; i<9; i++)
		{
			cont_numeri.push_back(i);
		}

		// Mette i 15 numeri nelle posizioni giuste
		for(i=0; i<5; i++)
		{
			pos = cont_numeri.begin() + rand() % cont_numeri.size();
			numeri[j][*pos] = numeri_15[j * 5 + i];
			cont_numeri.erase(pos);
		}
	}

	// Fine
}

std::ostream &operator<<(std::ostream &stream, Cartella oggetto)
{
	int j,i;
	for(j=0; j<3; j++)
	{
		for(i=0; i<9; i++)
		{
			stream << oggetto.numeri[j][i] << '\t';
		}
		stream << '\n';
	}
	return stream;
}

Cartella::Cartella()
{
	riempi();
}
main di prova:

codice:
#include <iostream>
#include "clsCartella.h"

using namespace std;



void main()
{
	Cartella x;
	cout << x;
}