You are on page 1of 9

Relatório

Projecto final de Programação de Computadores


Gerar chave do Euro milhões e verifica se existe prémio.
Laboratório nº1

#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"
#include "conio.h"
#include "windows.h"

typedef struct euro{


int numeros[5];
int estrelas[2];
int semana_e;
int ano_e;
int mes;
}euroisec;

int ano(){
char s[30]; //string onde vai se guardada a numero da semana
size_t t; //numero de caracteres escritos na data formatada
struct tm tim; //struct que vai guardar o tempo actual
time_t now; //variavel para armazenar o tempo corrente
now = time(NULL); //guardado o tempo corrente na variavel now
tim = *(localtime(&now)); //preenche a estrutura tim com o tempo local
int ano; //inteiro que vai guardar o ano
t = strftime(s,30,"%Y",&tim); //formata a hora local em dia do ano
ano = atoi(s);
return ano; }

int semana(){
char s[30]; //string onde vai se guardada a numero da semana
size_t t; //numero de caracteres escritos na data formatada
struct tm tim; //struct que vai guardar o tempo actual
time_t now; //variavel para armazenar o tempo corrente
now = time(NULL); //guardado o tempo corrente na variavel now
tim = *(localtime(&now)); //preenche a estrutura tim com o tempo local
int semana; //inteiro que vai guardar o dia do ano
t = strftime(s,53,"%U",&tim); //formata a hora local em dia do ano
semana = atoi(s);
return semana;
}
void premio(int num, int estr)//verifica em qual o premio ganho
{
if(num==5 && estr==2)
{
printf("Ganhou o 1 premio\n");
// printf("\7");
}
if(num==5 && estr==1)
printf("Ganhou o 2 premio\n");
if(num==5 && estr==0)
printf("Ganhou o 3 premio\n");
if(num==4 && estr==2)
printf("Ganhou o 4 premio\n");
if(num==4 && estr==1)
printf("Ganhou o 5 premio\n");
if(num==4 && estr==0)
printf("Ganhou o 6 premio\n");
if(num==3 && estr==2)
printf("Ganhou o 7 premio\n");
if(num==3 && estr==1)
printf("Ganhou o 8 premio\n");
if(num==2 && estr==2)
printf("Ganhou o 9 premio\n");
if(num==3 && estr==0)
printf("Ganhou o 10 premio\n");
if(num==1 && estr==2)
printf("Ganhou o 11 premio\n");
if(num==2 && estr==1)
printf("Ganhou o 12 premio\n");
return;
}
//compara os numeros guardados com a chave premiada inserida
euroisec* comparar(euroisec* premiada,char Nomefich[],int* n,int sem){
int i,contador,contador1,k;
euroisec x;
FILE *f;
//le o ficheiro com o numeros inseridos
if((f=fopen(Nomefich,"rb")) == NULL){
printf("O ficheiro pretendido nao existe!\n");
printf("\7");
}
else
{
while(fread(&x,sizeof(euroisec),1,f)!=0)
{
if(x.semana_e==sem){
printf("Chave: Acertou " );
contador = 0;
contador1 = 0;
//compara os numeros guardados com a chave premiada
for(k=0;k<5;k++)
{
for(i=0;i<5;i++)
{
if(premiada[*n-1].numeros[k] == x.numeros[i])
{
contador =contador+1;
}
}
}
printf("%d numeros e ",contador);
//compara as estrelas guardadas com as estrelas da chave
premiada
for(k=0;k<5;k++)
{
for(i=0;i<2;i++)
{
if(premiada[*n-1].estrelas[k]== x.estrelas[i])
{
contador1 =contador1 +1;
}
}
}
printf("(%d) estrelas",contador1);
}
printf("\n");
premio(contador,contador1);
}
fclose(f);
}
getch();
return 0;
}

void InsereDadosMan(euroisec *x)


{
int i,k,j,aux;

printf("********************************************************\n");
printf("* Inserir Chave *\n");
printf("********************************************************\n\n");
printf("Introduza 5 numeros de 1-50\n");
for(i=0,k=1;i<5;i++)
{
printf("introduza o %d numero: ",k);
scanf("%d",&x->numeros[i]);
if(x->numeros[i]<1 || x->numeros[i]>50) //protecao para os numeros serem entre 1 e 50
{
printf("O numero entre 1-50, introduza um numero novamente\n");
i=i-1;k=k-1;
}
for (j=0;j<i;j++)//protecao para nao repetir os numeros e numeros entre 1 e 50
{
if (x->numeros[i] == x->numeros[j])
{
printf("O numero nao se pode repetir, introduza um numero novamente\n");
i=i-1;k=k-1;
}
}
k++;
}
//ordena crescentemente os numeros
for(k=1; k<5; k++)
{
aux = x->numeros[k];
for(j=k-1; j>=0 && x->numeros[j]>aux; j--)
x->numeros[j+1] = x->numeros[j];
x->numeros[j+1] = aux ;
}
printf("Introduza 2 estrelas de 1-9\n");
for(i=0,k=1;i<2;i++)
{
printf("introduza o %d numero: ",k);
scanf("%d",&x->estrelas[i]);
if(x->estrelas[i]<1 || x->estrelas[i]>9)
{
printf("O numero entre 1-9, introduza um numero novamente\n");
i=i-1;k=k-1;
}
for (j=0;j<i;j++)
{//protecao para nao repetir as estrelas
if (x->estrelas[i] == x->estrelas[j])
{
printf("O numero nao se pode repetir, introduza um numero novamente\n");
i=i-1;k=k-1;
}
}
k++;
}
//ordena crescentemente as estrelas
for(k=1; k<2; k++)
{
aux = x->estrelas[k];
for(j=k-1; j>=0 && x->estrelas[j]>aux; j--)
x->estrelas[j+1] = x->estrelas[j];
x->estrelas[j+1] = aux ;
}
//guarda na tabela o numero da semana e o ano
x->semana_e=semana();
x->ano_e=ano();
fflush(stdin);
getch();
}

void InsereDadosAuto(euroisec *x)


{
int i,k,j,aux;
// inicializar o gerador de numeros aleatorios
printf("Chave Gerada:\n");
// com time(NULL)
srand(time(NULL));
printf("Numeros:\n");
for (i=0; i<5; i++)
{
x->numeros[i] = rand() % 50;// para gerar numeros aleatorios de 0 a 50
if(x->numeros[i]<1 || x->numeros[i]>50)
{
i=i-1;k=k-1;
}
for (j=0;j<i;j++){//protecao para nao repetir os numeros e numeros entre 1 e 50
if (x->numeros[i] == x->numeros[j]){
i=i-1;k=k-1;
}
}
k++;
}
//ordena crescentemente os números
for(k=1; k<5; k++)
{
aux = x->numeros[k];
for(j=k-1; j>=0 && x->numeros[j]>aux; j--)
x->numeros[j+1] = x->numeros[j];
x->numeros[j+1] = aux ;
}
for(k=0; k<5; k++)
printf("%d ",x->numeros[k]);
printf("\nEstrelas:\n");
for(i=0,k=1;i<2;i++)
{
x->estrelas[i] = rand() % 9;
if(x->estrelas[i]<1 || x->estrelas[i]>9)
i=i-1;k=k-1;
for (j=0;j<i;j++) {//protecao para nao repetir as estrelas
if (x->estrelas[i] == x->estrelas[j])
i=i-1;k=k-1;
}
k++;
}
//ordena crescentemente as estrelas
for(k=1; k<2; k++)
{
aux = x->estrelas[k];
for(j=k-1; j>=0 && x->estrelas[j]>aux; j--)
x->estrelas[j+1] = x->estrelas[j];
x->estrelas[j+1] = aux ;
}
for(k=0; k<2; k++)
printf("%d ",x->estrelas[k]);

x->semana_e=semana();
x->ano_e=ano();
printf("\nPrima Enter para voltar ao menu\n");
fflush(stdin);
getch();
}
//mostra os dados guardados
void MostraDados_v2(euroisec* x)
{
int i;
printf(":¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨:\n");
printf(": Dados do euroisec :\n");
printf(":¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨:\n");
printf(": (data:%d/%d) :\n",x->semana_e,x->ano_e);
printf(":¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨:\n");
printf(": Chave: :\n");
printf(": Numeros: ");
for(i=0;i<5;i++)
printf("%d ",x->numeros[i]);
printf(" :");
printf("\n");
printf(": Estrelas: ");
for(i=0;i<2;i++)
printf("%d ",x->estrelas[i]);
printf(" :");
printf("\n");
printf("¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨\n\n");
}
//acrescenta mais uma tabela antes de voltar a insirir os dados
euroisec* PedeAcrescentaTabela(euroisec* tabela, int* n,char op)
{
int i;
euroisec x;
(*n)++;
tabela=(euroisec*)realloc(tabela,*n*sizeof(euroisec));//aumenta a tabela
if (tabela!=NULL)
{
switch (op){
case 'i':
InsereDadosMan(&x);//chama a funcao para inserir os numeros manualmente
break;
case 'g':
InsereDadosAuto(&x);//chama a funcao para gerar os numeros
break;
}
for(i=0;i<5;i++)
tabela[*n-1].numeros[i] = x.numeros[i];
for(i=0;i<2;i++)
tabela[*n-1].estrelas[i]= x.estrelas[i];

tabela[*n-1].semana_e= x.semana_e;
tabela[*n-1].ano_e= x.ano_e;
}
return tabela;
}
void EscreveTabelaFicheiro(euroisec* tabela, char Nomefich[])
{
FILE* f;
f=fopen(Nomefich,"a+b");//cria ou escreve no ficheiro os dados inseridos
printf("A gravar dados em ficheiro (prima qq tecla para continuar).\n");
fwrite(tabela,sizeof(euroisec),1,f);
fclose(f);
}
//procura a chave inserida, pela semana
void MostraTabelaFicheiro(char Nomefich[],int sem)
{
euroisec x;
system("cls");
FILE *f;
//Verifica se o ficheiro existe
if((f=fopen(Nomefich,"rb")) == NULL){
printf("O ficheiro nao existe!\n");
printf("\7");
}
else{
while(fread(&x,sizeof(euroisec),1,f)!=0)
{
if(x.semana_e==sem)
{
MostraDados_v2(&x);
printf("\n");
}
}}
fclose(f);
printf("Prima Enter para voltar ao menu\n");
getch();
}
//mostra todos os dados inseridos no ficheiro
void MostraTodosFicheiro(char Nomefich[])
{
euroisec x;
system("cls");
FILE *f;
//verifica se o ficheiro existe
if((f=fopen(Nomefich,"rb")) == NULL){
printf("O ficheiro nao existe!\n");
printf("\7");
}
else{
while(fread(&x,sizeof(euroisec),1,f)!=0)
{
MostraDados_v2(&x);//chama a funcao para imprimir todos os dados inseridos no
ficheiro
}}
fclose(f);
printf("Prima Enter para voltar ao menu\n");
getch();
}
int main(void)
{
char Nomefich[]="EuroisecIsec1.dat";
euroisec *tabela=NULL ,*premiada=NULL;
int n=0,a,d,np=0,sem;
char op;
do
{
system("cls");
a = ano();
d = semana();
printf(" %d/%d\n",d,a);
printf("
+**************************************************+\n");
printf(" + MENU
+\n");
printf("
+**************************************************+\n");
printf(" + G - Gerar CHAVE
+\n");
printf(" + P - Procurar chaves
+\n");
printf(" + C - Consultar chaves
+\n");
printf(" + F - Fui premiado?
+\n");
printf(" + S - Sair
+\n");
printf("
+**************************************************+\n\n");
printf("Escolha uma opcao:\n");
scanf("%c",&op);
switch(op)
{
case 'G':
case 'g':
do{
system("cls");
system("cls");
printf("+***************************************+\n");
printf("+ MENU gerar chave +\n");
printf(" +***************************************+\n");
printf(" + I- Inserir chave +\n");
printf("+ G- Gerar chave automatica +\n");
printf(" + S- Guardar chave no ficheiro +\n");
printf(" + M- Voltar ao Menu anterior +\n");
printf("+***************************************+\n");
printf("Escolha uma opcao:\n");
scanf("%c",&op);
system("cls");
switch(op){
case 'I':
case 'i':tabela=PedeAcrescentaTabela(tabela,&n,op);
break;
case 'G':
case 'g':tabela=PedeAcrescentaTabela(tabela,&n,op);
break;
case 'S':
case 's':EscreveTabelaFicheiro(&tabela[n-1],Nomefich);
break;}
}while(op!='m');
break;
case 'P':
case 'p':
printf("Introduza o numero da semana\n");
scanf("%d",&sem);
MostraTabelaFicheiro(Nomefich,sem);
break;
case 'c':
case 'C':
MostraTodosFicheiro(Nomefich);
break;
case 'F':
case 'f':
printf("Chave Premiada:\n");
premiada= PedeAcrescentaTabela(premiada,&np,'i');
printf("\nIntroduza o numero da semana\n");
scanf("%d",&sem);
comparar(premiada,Nomefich,&np,sem);
break;
default:
break;
}
}while(op!='s')
return 0;
}

You might also like