Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FreedomFSA

Números aleatorios

Recommended Posts

Olá !

 

Galera,estou com uma dúvida.Tenho um exercio de C para fazer e nele eu tenho que gerar números aleatorios inteiros e alguns números aleatorios negativos além de ordenalos.

 

Consigo gerar normalmente os números positivos,porém ainda não obtive sucesso em gerar os números negativos,alguém poderiem e ajudar nisso? Tenho que gerar números entre -10 e 390.

 

 

Abraços o/

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para gerar, você pode utilizar a função rand da stdlib. E para tranformar em negativo, multiplique por (-1).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para gerar, você pode utilizar a função rand da stdlib. E para tranformar em negativo, multiplique por (-1).

 

Mais ai ele vai transformar o número gerado em negativo.Neste caso que propus,ele já teria que ser gerado negativo e entre -10 até 0.

 

Abraços! o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei um post no Clube do Hardware que aborda este assunto.

Veja se o ajuda:

 

http://forum.clubedohardware.com.br/funcao-rand-gere/810851?s=d819f786b8702c8e190412a595560e5a&amp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei um post no Clube do Hardware que aborda este assunto.

Veja se o ajuda:

 

http://forum.clubedohardware.com.br/funcao-rand-gere/810851?s=d819f786b8702c8e190412a595560e5a&amp

E ai!

 

Eu vi esse post lá,mais não me ajudou muito.Eu tenho que gerar um número inteiro.Pra gerar números positivos eu,faço desse jeito:

 

 

Exemplo:
a = (rand() % 385 + 15);

 

Dessa maneira consigo obter números positivos inteiros que variam entre 15 e 400.

 

Pensei em usar algo desse tipo ai,você saberia como ? :)

 

Abraços.

\o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Que tal algo assim:

a = (rand () % 400 - 10);

Você vai ter um número entre 0 e 400, mas que será subtraído 10, ficando entre -10 e 390

 

Vlw cara! O código rodou sussa o/

 

 

Bom, meu código está assim:

 

 

/*
Faça um programa que gere 6 números inteiros aleatórios, os
3 primeiros números entre 15 e 400 e os 3 últimos entre -10 e 390.
Escreva na tela os 6 números na ordem em que foram gerados.
Em seguida escreva os 6 números ordenados de modo DECRESCENTE.

Obs. Usar comando de repetição.
Usar a função ‘rand( )’ para gerar números inteiros aleatórios ou “randômicos”.


*/
#include <stdio.h>
int main(){
         
       srand(time(NULL));   

       int a,b,c,d,f,e,aux;              

       a = (rand() % 385 + 15);
       b = (rand() % 385 + 15);
       c = (rand() % 385 + 15);
       
       // numeros negativos
       
       d = (rand () % 400 - 10);
       e = (rand () % 400 - 10);
       f = (rand () % 400 - 10);
       
       printf("Programacao estruturada");
       printf("\nTEX 04\n");
       printf("\nGerar 6 numeros aleatorios e ordenalos de forma descresente");
      
       printf("\n\n");
       
       
       
       printf("Numeros gerados aletoriamente: ");
       printf("\n\n");
       printf("Numero a: %d\n",a);
       printf("Numero b: %d\n",b);
       printf("Numero c: %d\n",c);
       printf("Numero d: %d\n",d);
       printf("Numero e: %d\n",e);
       printf("Numero f: %d\n",f);
       
       
       printf("\nNumeros em ordem:");
       printf("\n\n");
       printf("A: %d B: %d -- C: %d -- D: %d -- E: %d -- F: %d\n\n",a,b,c,d,e,f);
       
       // Comparação e ordenação

       while((a>b) || (b>c) || (c>d) || (d>e) || (e>f)){   
       if(a>b){    
         aux = a;   a = b;  b = aux;  
         }
       if(b>c){    
          aux = b;   b = c;  c = aux;  
          }
       if(c>d){
          aux = c;   c = d;  d = aux;
          }     
       if(d>e){
          aux = d;   d = e;  e = aux;     
          }
       if(e>f){
          aux = e;   e = f;  f = aux;    
          }        
    }   
   
       printf("Numeros em ordem Crescente:");
       printf("\n\n");
       printf("A: %d -- B: %d -- C: %d -- D: %d -- E: %d -- F: %d\n\n",a,b,c,d,e,f);
       
       
       printf("Numeros em ordem Decrescente:");
       printf("\n\n");
       printf("A: %d -- B: %d -- C: %d -- D: %d -- E: %d -- F: %d\n",f,e,d,c,b,a);
       
       
       printf("\nTecle ENTER para sair do programa.\n");
      
       getch(); return 0;


}
 
 

 

Se alguém tiver um dica,sugestão,critica que possa vir a melhorar o programa,é só comentar o/

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

FreedomFSA,

 

Uma dica de uma boa prática de programação.

 

Tente utilizar nomes de variáveis que tenha relaçam com a função delas.

Utilizar nomes como a, b, c, d, ...., não recomendo. Hoje você sabe para que elas servem, mas pense daqui a seis meses ou um ano, quando precisar alterar o código novamente. Vai lembrar a função da variável 'c'?

 

Flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

FreedomFSA,

 

Uma dica de uma boa prática de programação.

 

Tente utilizar nomes de variáveis que tenha relaçam com a função delas.

Utilizar nomes como a, b, c, d, ...., não recomendo. Hoje você sabe para que elas servem, mas pense daqui a seis meses ou um ano, quando precisar alterar o código novamente. Vai lembrar a função da variável 'c'?

 

Flw!

 

Vlw pela dica GBecker!!

 

E já aproveitando o tópico,alguém poderia me axuliar em como listar vetores?

 

Tenho um array de 40 indices,e der a média aritmética,o que é sussa,más,na hora de listar os vetores que estão acima e abaixo da média a coisa compica...

 

meu código atual está assim:

 

 

 
/*
TEX05

Fazer um programa que gere um vetor com 40 inteiros aleatórios entre 1 e 99.
Escrever os valores na ordem gerada. Escrever a Média Aritmética dos 40 valores.

Escrever a quantidade de valores acima da Média, bem como listá-los na tela,
em suas respectivas posições no vetor.

Escrever a quantidade de valores abaixo da Média, bem como listá-los na tela,
em suas respectivas posições no vetor.

*/
#include <stdio.h>
int main(){
    
    int vet[40],i=0,aux,soma,result;
    
    
    srand(time(NULL));
    
    
    do{
       vet[i] = rand() % 100;
       printf("vet[%d] = %d\n\n",i,vet[i]);
       i++;             
    }while(i<40);
    
    
    for(i=0,soma=0;i<40;i++) {
        soma = soma + vet[i];
     }
    
    
 
   
    do{
        printf("%d",vet[i]);
        i++;
        }while(vet[i]>result);
    
    
    
    
    printf("soma dos vetores e:%d",soma);
    printf("\n\n");
    
    result = soma/40;
    printf("A media dos vetores e:%d",result);    

    // acima da media
    
    
 
    getch(); return 0;

}
 

 

 

Tentei usar a seguinte função para listar os vetores abaixo da média:

 

 

  do{
        printf("%d",vet[i]);
        i++;
        }while(vet[i]>result);

 

Mas não deu certo,o código compila de boa e não indica nem um erro nesta funcionalidade.

 

Acho que a coisa é mais ou menos nesse rumo ai... mais ainda to perdido :/

 

o/

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está no caminho sim. Mas deve atentar para duas coisas.

 

Você está trabalhado com variável de índice para percorrer o vetor (a variável 'i'), você deve ter cuidado de zerar ela toda vez que for utilizar para varrer o vetor. Senão, iniciará na última posição que foi utilizada no vetor anterior.

 

Para o objetivo da "varredura" do vetor que está fazendo, o do...while não seria uma boa escolha. Da forma que você fez, digamos que ele encontre um valor maior na primeira posição do vetor. Vai sair do laço de repetição e todo o resto do vetor não será analisado.

 

Recomendo você utilizar um for, semelhante a quando utiliza para obter a soma dos valores. Limitando em quarenta.

E dentro do laço utlizar um if, para comparar se é menor que a média ou não. Como vai utlizar a variável do for para varrer o vetor, já terá a posição onde o valor é menor que a média.

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

FreedomFSA,

 

Uma dica de uma boa prática de programação.

 

Tente utilizar nomes de variáveis que tenha relaçam com a função delas.

Utilizar nomes como a, b, c, d, ...., não recomendo. Hoje você sabe para que elas servem, mas pense daqui a seis meses ou um ano, quando precisar alterar o código novamente. Vai lembrar a função da variável 'c'?

 

Flw!

E ai GBecker!

 

Ajudou bastante cara ! o código rodou sussa após as devidas alterações o/

 

Porém,algumas vezes ele listou mais de 40 índices,achei estranho.Era pra ele estar listando do indice 0 até o 39,mas acaba que ele lista do 1 até o 40, e outras do 1 até 41 ou 42...se poder da uma olhada ai :D

 

Atualmente o código se encontra da seguinte maneira:

 

 

#include <stdio.h>
int main(){
    
    int vet[40],i=0,aux,soma,cont=0;
    
    
    srand(time(NULL));
    
    printf("Pragramacao Estruturada\n");
   
    printf("\nTEX05\n");
    printf("==================================");
    
    printf("\n\n");
    
    printf("Lista dos vetores: ");
    printf("\n\n");
    do{
       vet[i] = rand() % 100;
       printf("vet[%d] = %d\n\n",i,vet[i]);
       i++;             
    }while(i<40);
    
    
    for(i=0,soma=0;i<40;i++) {
        soma = soma + vet[i];
     }
    
    printf("\n\n");
    printf("A soma dos vetores e: %d\n\n",soma);
    printf("A media dos vetores e: %d ",soma/40);  
    printf("\n\n");
    
    
    printf("Vetores acima da media:\n\n");
    
    for(i=0;i<40;i++){
        if(vet[i] >= soma/40){
           cont++;
           printf("vet[%d] = %d\n",cont,vet[i]);
           }
    }
            
    printf("\n\nVetores abaixo da media:\n\n");
    
    for(i=0;i<40;i++){
       if(vet[i] <= soma/40){
         cont++;
         printf("vet[%d] = %d \n",cont,vet[i]);
         }
     }        
        
        
        

    getch(); return 0;

}
 

 

Abraços ! o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.