alphasil Posted May 31, 2012 at 12:32 AM Report #459300 Posted May 31, 2012 at 12:32 AM Olá ppl; Estou aqui com um problema, este código funciona mas está a dar-me números estranhos Tenho uma função random de 10000 e dá-me números posteriores a esses... #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX 10 int aleat() { int inf=0; int sup =10000; return rand() % (inf-sup+1)+inf; } int inteiros(int inf, int sup) { int num[MAX]; int i; srand(time(NULL)); for (i=0;i<MAX;i++) { aleat(inf,sup); printf("%d \n",num[i]); } return 0; } int ordenar(int num[], int n) { int i, j, aux; for(i=0;i<MAX;i++) { for(j=i;j<MAX-1; j++) { if(num[j]>num[j+1]) { aux=num[j]; num[j]=num[j+1]; num[j+1]=aux; } } } return 0; } int main(int inf, int sup) { int num[MAX]; int i; printf("Hello world!\n"); inteiros(inf,sup); ordenar(num,MAX); for(i=0;i<MAX;i++) { printf("Numeros ordenados: %d \n", &num[i]); } return 0; } Onde é que estou a meter as patas agora?? Obrigado gmc11
HappyHippyHippo Posted May 31, 2012 at 12:48 AM Report #459301 Posted May 31, 2012 at 12:48 AM que é isto ?? rand() % (inf-sup+1)+inf não seria (rand() % (sup-inf))+inf IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 01:00 AM Author Report #459304 Posted May 31, 2012 at 01:00 AM Isto é a fórmula que estava numa folha...lol Pus o que puseste e dá na mesma números astronómicos No teu dá?? Obrigado gmc11
Rui Carlos Posted May 31, 2012 at 01:41 AM Report #459309 Posted May 31, 2012 at 01:41 AM Um pouco de Matemática: 0 ≤ n%(sup - inf) < sup - inf <=> 0 + inf ≤ (n%(sup-inf)) + inf < sup - inf + inf <=> inf ≤ (n%(sup-inf)) + inf < sup <=> inf ≤ (n%(sup-inf)) + inf ≤ sup - 1 Se inf for igual a 0, tens 0 ≤ n%sup ≤ sup - 1 Ou seja, diria que aquilo que queres é simplesmente rand()%10000, ou rand()%10001, dependendo de se queres gerar valores entre 0 e 9999, ou entre 0 e 10000. De referir que tens aí coisas estranhas no teu código, como uma função aleat que não tem parâmetros, mas que é chamada com dois argumentos. Rui Carlos Gonçalves
alphasil Posted May 31, 2012 at 01:56 PM Author Report #459465 Posted May 31, 2012 at 01:56 PM Oi De referi que a fórmula não é minha, é aquela que foi dada mais precisamente srand(time(NULL)); int getNumeroAleatorio(int limite_inf, int limite_sup) { return rand() % (limite_sup - limite_inf + 1) + limite_inf; } A função aleat() não tem parâmetros porque declaro as variáveis dentro da mesma e atribuo valores, que são esses mesmos valores que chamo depois, está mal?? gmc11
HappyHippyHippo Posted May 31, 2012 at 02:07 PM Report #459467 Posted May 31, 2012 at 02:07 PM alem da alteração que te disse diz-me isto : int num[MAX]; inteiros(inf,sup); ordenar(num,MAX); onde é que a função inteiros guarda os valores criados ?? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 02:17 PM Author Report #459469 Posted May 31, 2012 at 02:17 PM OI Deve guardar aqui; int inteiros(int inf, int sup) { int num[MAX]; int i; srand(time(NULL)); for (i=0;i<MAX;i++) { aleat(inf,sup); printf("%d \n",num[i]); } return 0; } Uso um vetor de tamanho MAX(10) e a função aleat para me preencher 10 números naquele vetor, está errado? Obrigado gmc11
HappyHippyHippo Posted May 31, 2012 at 02:23 PM Report #459471 Posted May 31, 2012 at 02:23 PM qual a instrução que diz que a função aleat guarda o valor no vector ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 02:33 PM Author Report #459476 Posted May 31, 2012 at 02:33 PM A partir do momento que está no ciclo e faço o printf do num não me diz que está lá no vetor?? ou precisava de fazer algo como scanf("%d", mais variavel)? gmc11
HappyHippyHippo Posted May 31, 2012 at 02:35 PM Report #459477 Posted May 31, 2012 at 02:35 PM não me respondeste à questão ... como as coisas não acontecem só porque se quer ... diz-me: qual a instrução que diz que a função aleat guarda o valor no vector ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 02:52 PM Author Report #459483 Posted May 31, 2012 at 02:52 PM Pois, não estou a ver isso, ele assim só cria os números. Teria de pôr um parâmetro na função aleat int aleat(int num[]) não é? Passo este parâmetro para a função e ele vai criar para o array num os 10 valores, certo? gmc11
HappyHippyHippo Posted May 31, 2012 at 02:58 PM Report #459485 Posted May 31, 2012 at 02:58 PM (edited) isso ou num[i] = aleat(inf,sup); PS : já te foi dito mais que uma vez : se tens os argumentos declarados então são para ser fornecidos ... senão passasse tudo Edited May 31, 2012 at 02:59 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 03:02 PM Author Report #459487 Posted May 31, 2012 at 03:02 PM Qual é que aconselhas mais?? Os parâmetros ou assim?? gmc11
HappyHippyHippo Posted May 31, 2012 at 03:59 PM Report #459503 Posted May 31, 2012 at 03:59 PM int aleat(int inf, int sup) { return (rand() % (sup-inf+1))+inf; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted May 31, 2012 at 04:12 PM Author Report #459507 Posted May 31, 2012 at 04:12 PM Estou com um problema na ordenação, não me está a ir buscar os números, dá números diferentes int main(int inf, int sup) { int num[MAX]; int i; printf("Hello world!\n"); inteiros(inf,sup); ordenar(num,MAX); for(i=0;i<MAX;i++) { printf("Numeros ordenados: %d \n", num[i]); } return 0; } int ordenar(int num[], int n) { int i, j, aux; for(i=0;i<MAX;i++) { for(j=i;j<MAX-1; j++) { if(num[j]>num[j+1]) { aux=num[j]; num[j]=num[j+1]; num[j+1]=aux; } } } return 0; } Pelos vistos esta ordenação está errada, pus um printf e deu-me números diferentes gmc11
alphasil Posted May 31, 2012 at 04:30 PM Author Report #459511 Posted May 31, 2012 at 04:30 PM (edited) Já estive a ver; Quando a função ordenar entra, fiz um printf do array e o programa deu-me uns números diferentes, o problema está aí, não está a ir buscar o array para ordenar. void ordenar(int num[], int n) //int v= vetor definido na função main, n é a variavel que vai buscar o 5 { int j, i, temp, x; //Duas variaveis para trabalhar for (x=0;x<MAX;x++) // Verifico o que está dentro do array { printf("%d \n",num[x]); } for(i=0; i<n-1;i++) //Ciclo que começa com 0 e o n-1 é o ultimo elemento for (j= n-1; j>i; j--) //Ciclo que trabalhar com n-1 e o i if(num[j]<num[j-1]) //Condição que vai verificar posições dos numeros { temp= num[j]; num[j]=num[j-1]; num[j-1]= temp; } } Edited May 31, 2012 at 04:31 PM by alphasil gmc11
bsccara Posted May 31, 2012 at 05:49 PM Report #459526 Posted May 31, 2012 at 05:49 PM int main(int inf, int sup) { int num[MAX]; int i; printf("Hello world!\n"); inteiros(inf,sup); ordenar(num,MAX); for(i=0;i<MAX;i++) { printf("Numeros ordenados: %d \n", num[i]); } return 0; } 1) Já reparaste que não inicializas o conteúdo do array num em lado nenhum ? 2) Já reparaste que na função inteiros que postaste preenches um array local ? 3) Sabes o que significa o âmbito ('scope') duma variável ? 4) Esta função main não está minimamente bem declarada. Estás a tentar aprender C por ti ou estás a fazer algum curso ? Sem te querer criticar ou desanimar com isto, devo-te dizer que tens grandes lacunas em coisas absolutamente básicas da linguagem (e mesmo da programação em geral). Deverias (re)começar pelas bases e eventualmente por uma linguagem mais simples.
alphasil Posted May 31, 2012 at 06:07 PM Author Report #459529 Posted May 31, 2012 at 06:07 PM Amigo estou a tirar um curso mas infelizmente não vou a nenhuma aula visto que sou trabalhador estudante, com este tempo de crise ou se trabalha ou se morre à fome, para além disso quem tem casa a pagar e pensão de alimentos a pagar já percebes qual é a minha opção. Tenho grandes lacunas?? Talvez tenhas razão mas tento fazer o que me é pedido e quando não consigo, peço ajuda para tentar perceber. Estou a ler o livro Linguagem C, Luís Manuel Dias Damas, não chega? gmc11
bsccara Posted May 31, 2012 at 06:58 PM Report #459538 Posted May 31, 2012 at 06:58 PM Antes de mais, o que escrevi não deve ser entendido como uma critica a ti. Aplaudo o teu esforço para tentar aprenderes isto, mas acho que estás a direccionar mal o teu esforço. Claramente não dominas coisas básicas que tens mesmo de dominar como funções e âmbito de variáveis. Por isso acho que tens mesmo de te concentrar nisso antes de avançares. Quanto ao livro não o conheço mas quanto a chegar é evidente que não chega; dá uma vista de olhos pelo link que te indiquei no post anterior e procura por ti páginas sobre os teus pontos fracos na compreensão da linguagem C. Se tiveres facilidade de leitura de inglês procura por páginas nessa língua pois existe muito mais material e, de maneira geral, de melhor qualidade.
alphasil Posted May 31, 2012 at 07:49 PM Author Report #459551 Posted May 31, 2012 at 07:49 PM Obrigado pelas dicas, sim, acredita que muito esforço mesmo mas tem que ser. Quanto as tuas perguntas, pois, falas de maneira muito fácil, vê-se que dominas bem isso, eu não, como disse estou a tentar aprender contra o tempo. Quanto falas em local referes-te a dentro da função. A questão é que devo estar a estruturar mal isso... gmc11
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