Orar semigroup #2

Orar semigroup #2

Lotto 6/49

Programul genereaza 6 numere din intervalul [1,49] şi citeşte dintr-un fişier text fondul de câştiguri pentru o tragere la sorţi, numărul de jucători, numele acestora şi cele 6 numere alese. Se calculează numărul de numere ghicite de fiecare jucător, se afişează numerele generate aleatoriu, iar mai apoi un top al câştigătorilor care include numele, numărul de numere ghicite, numerele ghicite şi câştigul aferent. La sfârşit se va afişa reportul(diferenţa dintre fondul de câştiguri şi suma câştigurilor jucătorilor).

Câştigul pentru fiecare concurent se calculează în felul următor:

pentru 6 numere ghicite = 40% din FOND
pentru 5 numere ghicite = 25% din FOND
pentru 4 numere ghicite = 20% din FOND
pentru 3 numere ghicite = 10 % din FOND
pentru 2 numere ghicite = 5 % din FOND
În cazul în care la o anumită categorie sunt mai mulţi câştigători, câştigul se va împărţi în mod egal.
#include<iostream>
#include<fstream>
#include<math.h>
#include<cstdlib>
using namespace std;
struct player
{int numere[100];
int ghicit;
char nume[100];
float castig;};

void fort(int a[])
{ int u,p=0,i,ok;
    u=rand()%49+1;
a[0]=u;
p++;
while(p<6)
{
    ok=0;
    u=rand()%49+1;
    for(i=0;i<p;i++)
    {
        if(a[i]==u)
            ok=1;
    }
    if(ok==0)
    {
        a[p]=u;
        p++;
    }
}
}

void citire(float &F, int &n, float &R, player v[], int a[])
{ifstream f("loto");
int i,i1,k;
f>>F;
R=F;
f>>n;
i1=0;
for(k=1;k<=n;k++)
{
f>>v[k].nume;

for(i=0;i<6;i++)
{   f>>v[k].numere[i];
    for(i1=0;i1<6;i1++)
    {
        if(v[k].numere[i]==a[i1])
        {
            v[k].ghicit++;
        }
    }
}
}
}

void nr_castigatoare(int a[])
{int i;
cout<<"Numerele castigatoare: ";
for(i=0;i<6;i++)
{
    cout<<a[i]<<" ";
}
}

void inversare(player v[], int n, int c[])
{int max,k,t;
max=0;cout<<endl<<endl;
for(k=1;k<=n;k++)
    if(v[k].ghicit>=max)
        max=v[k].ghicit;

for(k=1;k<=n;k++)
    for(t=k+1;t<=n;t++)
        if(v[k].ghicit<v[t].ghicit)
            swap(v[k],v[t]);

for(k=1;k<=n;k++)
    if(v[k].ghicit>1)
        c[v[k].ghicit]++;
}

void calculare(player v[], int n, float &R, float F, int c[])
{int k;
cout<<"TOP: "<<endl;
    for(k=1;k<=n;k++)
    {    if(v[k].ghicit==1 || c[v[k].ghicit]==0)
            v[k].castig=0;
    else{
        switch(v[k].ghicit)
    {case 6 : v[k].castig=40*F/100;break;
    case 5 : v[k].castig=25*F/100;break;
    case 4 : v[k].castig=20*F/100;break;
    case 3 : v[k].castig=10*F/100;break;
    case 2 : v[k].castig=5*F/100;break;}
        v[k].castig=v[k].castig/c[v[k].ghicit];
        }
        R=R-v[k].castig;
    }

}

void afisare(player v[],int n,int a[],int R)
{int k,j,i;
    for(k=1;k<=n;k++)
    {cout<<k<<"."<<v[k].nume<<" cu "<<v[k].ghicit<<" numere ghicite(";
    for(i=0;i<6;i++)
{    for(j=0;j<6;j++)
        if(a[i]==v[k].numere[j])
            cout<<a[i]<<" ";

    cout<<")Castig: "<<v[k].castig<<endl;
    }

cout<<"Report: "<<R;
}


int main()
{int a[100]={0},j=0,i,i1,n,k,max,c[100]={0},t,p=0,u,ok;
float F,R;
player v[100];
ifstream f("loto");
srand(time(NULL));
fort(a);
citire(F,n,R,v,a);
nr_castigatoare(a);
inversare(v,n,c);
calculare(v,n,R,F,c);
afisare(v,n,a,R);
}
Fişierul
1000
8
Dorel 1 2 3 4 5 6
Stoica 7 8 9 10 11 12
Andreev 13 14 15 16 17 18
Piturca 19 20 21 22 23 24
Basescu 25 26 27 28 29 30
Marius 31 32 33 34 35 36
Zanetti 37 38 39 40 41 42
Castro 43 44 45 46 47 48

miercuri, 9 martie 2011 by DlMuresan
Categories: , | Leave a comment

Leave a Reply