Davids Posted January 10, 2016 at 05:18 AM Report Share #591755 Posted January 10, 2016 at 05:18 AM (edited) Boa noite, Tenho um trabalho para uma disciplina de programação na faculdade, em que era necessário um programa que simulasse o sorteio do Euromilhões feito só com vetores. Nesse programa era necessário ter uma função de um vetor que lesse os números e as estrelas, outra função que desse umaa chave e outra função que imprimisse o numero de estrelas e de números que tinha acertado e o premio que ganhou. Portanto era necessário por a seguinte lista de prémios: Tudo no programa que fiz funciona-me bem exceto que quando testei o programa várias vezes com a mesma chave random, reparei que dava-me sempre o mesmo prémio independentemente dos numeros e das estrelas que acertasse. Este foi o código que implementei: #include <stdio.h> #include <stdlib.h> #include<time.h> #define QN 50 #define QE 11 #define N 5 #define E 2 ///Função para ordenar um vetor por ordem crescente int posmaiorelemento(int v[], int n) { int i,pm=1; // O maior é o primeiro elemento for(i=2;i<=n;i++) if(v[i]>v[pm]) pm=i; // comparo com os restantes return pm; } void troca(int v[], int p1, int p2) { int a=v[p1];v[p1]=v[p2];v[p2]=a; } void ordenar(int v[], int n) { int i; for(i=n;i>=2;i--) { troca(v,posmaiorelemento(v,i),i); } } int numerosnaorepetidos(int v[], int n, int k) { int i; for(i=1;i<=n;i++) if (v[i]==k) return 1; return 0; } void leraposta(int v[], int n, int k) { int i,j,status; for(i=1;i<=n;i++) { do { printf("Introduza o %d numero ", i); scanf("%d",&v[i]); }while(v[i]<0 || v[i]>k || numerosnaorepetidos(v,i-1,v[i])); } ordenar(v,n); } void escreveraposta(int n[], int e[]) { int i; printf("["); for(i=1;i<=N;i++) printf("%d ",n[i]); printf("]\n"); printf("["); for(i=1;i<=E;i++) printf("%d ",e[i]); printf("]"); } ///Função para ordenar um vetor por ordem crescente void chave(int v[], int n, int k) { int i,j,status; srand(3); //mesma chave random só para testar. No código //normal está srand(time(NULL)). for (i=1;i<=n;i++) { do { v[i]=rand()%k+1; } while (numerosnaorepetidos(v,i-1,v[i])); } ordenar(v,n); } int certo(int v[],int p[],int n) { int i,j,c=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(v[i]==p[j]) c++; } return c; } void escreverpremio(int x,int y) { int premio; if(x==0 && y==0) premio==0; if(x==5 && y==2) premio==1; if(x==5 && y==1) premio==2; if(x==5 && y==0) premio==3; if(x==4 && y==2) premio==4; if(x==4 && y==1) premio==5; if(x==4 && y==0) premio==6; if(x==3 && y==2) premio==7; if(x==2 && y==2) premio==8; if(x==3 && y==1) premio==9; if(x==3 && y==0) premio==10; if(x==1 && y==2) premio==11; if(x==2 && y==1) premio==12; if(x==2 && y==0) premio==13; if(premio==0) printf("\n Infelizmente nao ganhou nenhum premio\n "); printf("\n Acertou em %d numero(s) e em %d estrela(s)\n ",x,y); printf("Parabens! Ganhou o %d premio!",premio); } int main() { printf("**Euromilhoes**\n\n"); int Naposta[N+1]; int Eaposta[E+1]; int Nchave[N+1]; int Echave[E+1]; int Ncertos, Ecertas; ///Aposta printf("Aposte os %d numeros (de 1 a %d)\n",N,QN); leraposta(Naposta,N,QN); printf("Aposte as %d estrelas (de 1 a %d)\n",E,QE); leraposta(Eaposta,E,QE); printf("A sua aposta foi:"); escreveraposta(Naposta,Eaposta); ///Chave chave(Nchave,N,QN); chave(Echave,E,QE); printf("\n A chave saida do sorteio foi:"); escreveraposta(Nchave,Echave); ///Verificar o prémio Ncertos=certo(Naposta,Nchave,N); Ecertas=certo(Eaposta,Echave,E); escreverpremio(Ncertos,Ecertas); return 0; } Agradecia uma resposta o mais rapidamente possivel. Tabela de prémios: Prémio 1 Números 5 Estrelas 2 Prémio 2 Números 5 Estrelas 1 Prémio 3 Números 5 Estrelas0 Prémio 4 Números 4 Estrelas 2 Prémio 5 Números 4 Estrelas 1 Prémio 6 Números 4 Estrelas 0 Prémio 7 Números 3 Estrelas 2 Prémio 8 Números 2 Estrelas 2 Prémio 9 Números 3 Estrelas 1 Prémio 10 Números 3 Estrelas 0 Prémio 11 Números 1 Estrelas 2 Prémio 12 Números 2 Estrelas 1 Prémio 13 Números 2 Estrelas 0 Edited January 10, 2016 at 03:53 PM by thoga31 GeSHi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 10, 2016 at 09:18 AM Report Share #591757 Posted January 10, 2016 at 09:18 AM lê os comentários: (já é muito mau quando tenho que ser eu a indentar um código para poder perceber o que está escrito ...) #include <stdio.h> #include <stdlib.h> #include <time.h> #define QN 50 #define QE 11 #define N 5 #define E 2 ///Função para ordenar um vetor por ordem crescente int posmaiorelemento(int v[], int n) { int i, pm = 1; // O maior é o primeiro elemento for(i = 2; i <= n; i++) if(v[i] > v[pm]) pm = i; // comparo com os restantes return pm; } void troca(int v[], int p1, int p2) { int a = v[p1]; v[p1] = v[p2]; v[p2] = a; } void ordenar(int v[], int n) { int i; for(i = n; i >= 2; i--) { troca(v, posmaiorelemento(v, i), i); } } int numerosnaorepetidos(int v[], int n, int k) { int i; for(i = 1; i <= n; i++) if (v[i] == k) return 1; return 0; } void leraposta(int v[], int n, int k) { int i, j, status; // <-------------- j e status não servem para nada for(i = 1; i <= n; i++) { do { printf("Introduza o %d numero ", i); scanf("%d",&v[i]); } while(v[i] < 0 || v[i] > k || numerosnaorepetidos(v, i - 1, v[i])); } ordenar(v,n); } void escreveraposta(int n[], int e[]) { int i; printf("["); for(i = 1; i <= N; i++) printf("%d ", n[i]); printf("]\n"); printf("["); for(i = 1; i <= E; i++) printf("%d ", e[i]); printf("]"); } ///Função para ordenar um vetor por ordem crescente void chave(int v[], int n, int k) { int i, j, status; // <-------------- j e status não servem para nada srand(3); //mesma chave random só para testar. No código //normal está srand(time(NULL)). for (i = 1; i <= n; i++) { do { v[i]=rand()%k+1; } while (numerosnaorepetidos(v, i - 1, v[i])); } ordenar(v,n); } int certo(int v[],int p[], int n) { int i,j,c = 0; for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) if(v[i] == p[j]) c++; } return c; } void escreverpremio(int x, int y) { int premio; if(x == 0 && y == 0) premio == 0; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 5 && y == 2) premio == 1; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 5 && y == 1) premio == 2; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 5 && y == 0) premio == 3; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 4 && y == 2) premio == 4; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 4 && y == 1) premio == 5; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 4 && y == 0) premio == 6; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 3 && y == 2) premio == 7; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 2 && y == 2) premio == 8; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 3 && y == 1) premio == 9; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 3 && y == 0) premio == 10; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 1 && y == 2) premio == 11; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 2 && y == 1) premio == 12; // <-- qual o operador que está a ser usado para a atribuição ? if(x == 2 && y == 0) premio == 13; // <-- qual o operador que está a ser usado para a atribuição ? if(premio == 0) printf("\n Infelizmente nao ganhou nenhum premio\n "); printf("\n Acertou em %d numero(s) e em %d estrela(s)\n ", x, y); printf("Parabens! Ganhou o %d premio!", premio); } int main() { printf("**Euromilhoes**\n\n"); int Naposta[N+1]; int Eaposta[E+1]; int Nchave[N+1]; int Echave[E+1]; int Ncertos, Ecertas; ///Aposta printf("Aposte os %d numeros (de 1 a %d)\n", N, QN); leraposta(Naposta, N, QN); printf("Aposte as %d estrelas (de 1 a %d)\n", E, QE); leraposta(Eaposta, E, QE); printf("A sua aposta foi:"); escreveraposta(Naposta, Eaposta); ///Chave chave(Nchave, N, QN); chave(Echave, E, QE); printf("\n A chave saida do sorteio foi:"); escreveraposta(Nchave, Echave); ///Verificar o prémio Ncertos = certo(Naposta, Nchave, N); Ecertas = certo(Eaposta, Echave, E); escreverpremio(Ncertos, Ecertas); return 0; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now