Jump to content

Recommended Posts

Posted

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

 

Posted

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.

Posted

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

 

Posted

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

 

Posted

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

 

Posted

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

 

Posted (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 by alphasil
gmc11

 

Posted

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.

Posted

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

 

Posted

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.

Posted

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

 

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.