/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
/* Programa Principal */
/*
0) Escreva um algoritmo que leia um vetor de 13 elementos, que é o Gabarito de um
teste da loteria esportiva. Contendo os valores 1(coluna 1), 2(coluna 2) e
3(coluna do meio).
1) Leia, a seguir, para cada
apostador, o número do seu cartão e um vetor de Respostas de 13 posições.
2) Verifique para cada apostador
o números de acertos, comparando o vetor de Gabarito com o vetor de Respostas.
3) Escreva o número do apostador
e o número de acertos. Se o apostador tiver 13 acertos, mostrar a mensagem
"Ganhador".
*/
#include <stdio.h>
#include <stdlib.h> // system;
/* ------------------------------------------------------------VETOR_BUSCAR-----
* Busca o elemento x no vetor, e retorna seu lugar na memória
* x: int - Elemento buscado
* vetor: int[] - Conjunto de inteiros
* tamnanho: int - Valor com tamanho do conjunto
* return: local na mémoria do valor sua primeira ocorrência, ou Nulo.
*/
int vetor_buscar( int x, unsigned tamanho, const int vetor[tamanho] )
{
static unsigned i = 0; /* Armazena a última iteração */
static unsigned tam= 0; /* Armazena o valor informado na :tamanho: */
static const int *v = 0; /* Armazena o última :vetor: */
if( 0 != vetor ){ /* Atualizar a :v: com valor da :vetor: */
v= vetor;
i= 0;
}
if( 0 != tamanho ){ tam= tamanho; /* Atualizar a :tam: */
}/* Se :vetor: e :tamanho: = 0, prevalece os valores da última chamada */
while( i < tam ){
if( x == v[i] ){ return (++i);
}
++i;
}
return 0;
}
/* ---------------------------------------------------------VETOR_X_IGUAL_Y-----
* Compara os elementos de dois vetore, e diz se são iguais
* tam: int - Tamanho dos vetores
* x: int[] - Conjunto de inteiros x
* y: int[] - Conjunto de inteiros y
* return: x valor se os elementos são iguais, se não 0.
*/
int vetor_x_igual_y( unsigned tam, const int x[tam], const int y[tam] )
{
unsigned pertence= 0;
unsigned i= 1;
if( 0 != vetor_buscar( x[0],tam,y )){ ++pertence;
}
while( i < tam ){
if( 0 != vetor_buscar(x[i],0,NULL) ){
++pertence;
}
/* 0 é igual 0 */
/* Ao chamar a função :vetor_buscar:
ela retorna o local da memória do elemento,
porém se o valor x[i->tam] não for localizado, então retorna nulo
com isso os vetores possuim pelo menos uma diferença.
*/
++i;
}
return pertence;
}
/* ----------------------------------------------------------MATRIZ_IGUAL_Y-----
* Compara os elementos de dois vetores, e diz as linhas iguais
* lin: int - Número de linhas na matriz
* col: int - Número de colunas na matriz
* matriz: int(*)[col] - Vetor-de-vetores do tipo inteiro
* chegado: int[] - vetor com as respostas segundo o índice de linha na matriz
* com 1 para as iguais, e para os diferentes 0.
* vetor: int[] - O vetor que se envestiga em cada linha da matriz.
*/
void matriz_igual_y( unsigned lin, unsigned col, const int matriz[lin][col],
const int vetor[col],
int checado[lin])
{
unsigned linha= 0;
while(linha < lin){
if( col == vetor_x_igual_y(col,matriz[linha],vetor ) ){
/* É passado para a função :vetor_x_igual_y:
O número de :col: é colunas/elementos do vetor correspondente
à :linha: que também é o número de elementos na :vetor:
:matriz[linha]: é um ponteiro para vetor naquela posição que tem
a mesma quantidade de elementos que :vetor:, daí se o valor de
retorno é igual a esse número significa que os vetores são iguais
em tudo.
*/
checado[linha] = 1; /* Essa linha é igual à :vetor: */
}else {
checado[linha] = 0; /* Essa linha é igual à :vetor: */
}
++linha;
}
return;
}
int main( void )
{
/* TESTE DAS FUNÇÔES */
int apostas[3][13]= {{ 1, 2,3,4,5,6,7,8, 9,10,11,12,13 },
{ 2, 3,4,5,6,7,8,9,10,11,12,13,14 },
{ 1, 2,3,4,5,6,7,8, 9,10,11,12,13 }
};/* São Três apostas */
int n_sorteados[13]= { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
int bilhetes[3];
matriz_igual_y( 3,13,apostas,n_sorteados,bilhetes );
unsigned posicao= vetor_buscar( 1,3,bilhetes );
while( posicao ){
printf( "%s %u %s\n","O Bilhete:",posicao,"Ganhou!" );
posicao = vetor_buscar( 1,0,NULL );
}
return 0;
}