jedmelo
(usa Outra)
Enviado em 12/12/2014 - 00:33h
Estou tentando resolver uma questão. é a sequinte:
Implemente um programa em C que simule o sorteio de um Bingo. Primero ler
10 cartelas de 20 números. O programa deve gerar, sucessivamente, números
aleatórios compreendidos entre 1 e 90, pausadamente. A cada sorteio o
programa deve verificar se alguma cartela foi vencedora. Quando isso acontecer,
mostrar todos os números sorteados ordenados e as cartelas sorteadas com seus
respectivos números, também ordenados.
eu criei esse codigo só que está com um problema, eu acho que é o seguinte, quando eu vou sortear ele passa de noventa sorteios [claro], quando isso acontece o programa da um erro, o problema é que eu ainda n sei como mexer com alocação dinamica.. se alguem puder me ajudar.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
struct cartela{
int num[5];
int acerto=0;
};
void ordenarCartela(cartela *item,int numCar, int qtdeNum);
void ordenarSorteio(int *item, int count);
int main(){
int x=0, sorteio[90], cart;
struct cartela car[2];
bool continuar=true;
for (int i=0;i<2;i++){
for (int j=0;j<5;j++){
printf("%da cartela, %do numero: ", i+1, j+1);
//lendo um vetor de struct
scanf("%d", &car[i].num[j]);
}
printf("\n");
}
srand(time(NULL));
do{
sorteio[x] = rand() % 90;
Sleep(130);
printf ("%d\n", sorteio[x]);
//testando se alguma cartela tem o numero sorteado
for(int i=0;i<2;i++){
for(int j=0;j<5;j++){
if(sorteio[x]==car[i].num[j]){
car[i].acerto++;
printf("cartela %d: %d acertos\n",i+1,car[i].acerto);
if(car[i].acerto==20){
continuar=false;
cart=i;
}
}
}
}
x++;
}while(continuar);
ordenarCartela(car, cart, 20);
ordenarSorteio(sorteio, x);
for(int i=0;i<20;i++){
printf("%d ", car[cart].num[i]);
}
for(int i=0;i<x;i++){
printf("%d ", sorteio[i]);
}
system("pause");
}
void ordenarCartela(cartela *item,int numCar, int qtdeNum){
int aux;
bool trocou = true;
do {
trocou = false;
for (int i = 0; i < qtdeNum-1; ++i) {
if (item[numCar].num[i] > item[numCar].num[i+1]) {
aux = item[numCar].num[i];
item[numCar].num[i] = item[numCar].num[i+1];
item[numCar].num[i+1] = aux;
trocou = true;
}
}
} while (trocou);
}
void ordenarSorteio(int *item, int count) {
int t;
bool trocou = true;
do {
trocou = false;
for (int i = 0; i < count-1; ++i) {
if (item[i] > item[i+1]) {
t = item[i];
item[i] = item[i+1];
item[i+1] = t;
trocou = true;
}
}
}while (trocou);
}