FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 759.307 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 20-01-2009, 2:11   #1 (permalink)
Igor Isaias Banlian
Membro Senior
 
Avatar de Igor Isaias Banlian
 
Registrado em: Feb 2007
Localização: São Paulo / SP
Idade: 22
Mensagens: 190
Reputação: 14 Igor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energia
Enviar mensagem via ICQ para Igor Isaias Banlian Enviar mensagem via MSN para Igor Isaias Banlian Enviar mensagem via Skype para Igor Isaias Banlian
Padrão Gerador de Números Aleatórios em C... Dúvidas!

Primeiro de tudo: Eu não sei nada de Linguagens de Programação!

É o seguinte, eu preciso fazer funcionar esse Gerador de Números Aleatórios em C:

Citação:
Você pode criar uma fórmula que gere um número pseudo-aleatório. Quando projeta a fórmula, a idéia é produzir uma série de números, que irão parecer aleatórios para qualquer um que não saiba o que é a fórmula. As características de uma boa fórmula incluem:

1) Não repetição: a seqüência não pode estar em ciclo e nem se repetir;

2) Boa distribuição numérica: se a fórmula está gerando números aleatórios entre 0 e 9, o número de zeros, uns, dois, etc. que ela gera devem ser aproximadamente iguais depois de um longo período de tempo;

3) Ausência de previsões: você não tem como prever qual será o próximo número, a não ser que conheça a fórmula e a origem (o valor inicial).

Aqui está um exemplo de uma fórmula simples de número aleatório do livro "A Linguagem de Programação em C", de Kernighan e Ritchie:

int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}
Estou usando o compilador Dev C++, cliquei em Arquivo > Novo > Projeto > Console Application > (selecionei) Projeto C.

Dai o código completo ficou assim:

Citação:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}
system("PAUSE");
return 0;
}
Dai dá esse erro:

Citação:
In function `rand':
`random_seed' undeclared (first use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)
O que eu fiz de errado?

Como eu conserto isso?

Alguém não pode, por misericórdia, mandar o código desse maldito programa pronto pra eu compilar e usar?

Abraço,
Igor Isaias Banlian
__________________
Positivo Sim+ D2970:

Atom D525 1.80GHz; RAM 2GB DDR2; Vídeo Intel GMA 3150; Som Intel 82801G; Rede Realtek RTL8101E/RTL8102E; HD 500GB Seagate ST3500413AS; Placa-mãe Positivo POS-EINM10CB; DVD-RAM LG 22X GH22NS70; LCD Positivo Smile Light 5611 15,6".

GNU/Linux - BSD - OS/2; Speedy 2 Megas.

Última edição por Igor Isaias Banlian : 20-01-2009 às 4:52. Motivo: Melhorias no Código Adicionadas...
Igor Isaias Banlian está offline   Responder com Quote
Antigo 20-01-2009, 2:19   #2 (permalink)
tpcvasco
GeeK
 
Avatar de tpcvasco
 
Registrado em: Apr 2006
Mensagens: 2.257
Reputação: 405 tpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputação
Padrão

Basta ler o erro q o compilador dá, ele já diz qual é a solução:
`random_seed' undeclared

Tradução: random_seed não declarada
Solução: Declarar a variável random_seed. Simples assim.

Não vou te dar a solução pq isso é tirar todo seu trabalho, se o professor te passou isso, algum objetivo deve ter.
__________________
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
tpcvasco está offline   Responder com Quote
Antigo 20-01-2009, 2:34   #3 (permalink)
Igor Isaias Banlian
Membro Senior
 
Avatar de Igor Isaias Banlian
 
Registrado em: Feb 2007
Localização: São Paulo / SP
Idade: 22
Mensagens: 190
Reputação: 14 Igor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energia
Enviar mensagem via ICQ para Igor Isaias Banlian Enviar mensagem via MSN para Igor Isaias Banlian Enviar mensagem via Skype para Igor Isaias Banlian
Padrão

Citação:
Postado Originalmente por tpcvasco Ver Mensagens
Solução: Declarar a variável random_seed. Simples assim.

Não vou te dar a solução pq isso é tirar todo seu trabalho, se o professor te passou isso, algum objetivo deve ter.
Então eu preciso saber como "declarar a variável random_seed"...

Eu não tenho professor e nem estou estudando C... Eu só quero um simples programa para gerar números aleatórios para o nome de alguns arquivos meus, que precisam ter nomes em códigos de números... Só isso!

Esqueci de falar que os números aleatórios tem que ser de 16 dígitos e que o programa não pode repetir a sequência de 16 dígitos nunca!

Exemplo: 6542581593573713

Então, dá para fazer um programa assim, com base no que eu tenho (esse pedaço de código)?

Abraço,
Igor Isaias Banlian
__________________
Positivo Sim+ D2970:

Atom D525 1.80GHz; RAM 2GB DDR2; Vídeo Intel GMA 3150; Som Intel 82801G; Rede Realtek RTL8101E/RTL8102E; HD 500GB Seagate ST3500413AS; Placa-mãe Positivo POS-EINM10CB; DVD-RAM LG 22X GH22NS70; LCD Positivo Smile Light 5611 15,6".

GNU/Linux - BSD - OS/2; Speedy 2 Megas.
Igor Isaias Banlian está offline   Responder com Quote
Antigo 20-01-2009, 12:18   #4 (permalink)
tpcvasco
GeeK
 
Avatar de tpcvasco
 
Registrado em: Apr 2006
Mensagens: 2.257
Reputação: 405 tpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputaçãotpcvasco tem uma fabulosa reputação
Padrão

Então vc não precisa criar uma função de "randomização", vc pode usar rand() e srand() q já existem em C
http://www.hardware.com.br/comunidad...d.php?t=760307
http://www.hardware.com.br/comunidad...d.php?t=769146
__________________
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
tpcvasco está offline   Responder com Quote
Antigo 20-01-2009, 16:25   #5 (permalink)
Igor Isaias Banlian
Membro Senior
 
Avatar de Igor Isaias Banlian
 
Registrado em: Feb 2007
Localização: São Paulo / SP
Idade: 22
Mensagens: 190
Reputação: 14 Igor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energia
Enviar mensagem via ICQ para Igor Isaias Banlian Enviar mensagem via MSN para Igor Isaias Banlian Enviar mensagem via Skype para Igor Isaias Banlian
Padrão

Eu consegui fazer esse código funcionar:

Citação:
#include <stdio.h>
#include <stdlib.h>
main()
{
int i;
srand(time(NULL));
for(i=1;i<=10;i++)
printf("Numero Aleatorio %d: %d\n",i,((int)rand()) % 1000000000);
getchar();
}
Porém, ele só gera números aleatórios de até 5 dígitos e eu não tenho como copiar esses números...

Agora eu preciso que esse código gere números de 16 dígitos e que eu possa Copiar (Ctrl C ou Botão Direito do Mouse) os números aleatórios gerados!

Abraço,
Igor Isaias Banlian
__________________
Positivo Sim+ D2970:

Atom D525 1.80GHz; RAM 2GB DDR2; Vídeo Intel GMA 3150; Som Intel 82801G; Rede Realtek RTL8101E/RTL8102E; HD 500GB Seagate ST3500413AS; Placa-mãe Positivo POS-EINM10CB; DVD-RAM LG 22X GH22NS70; LCD Positivo Smile Light 5611 15,6".

GNU/Linux - BSD - OS/2; Speedy 2 Megas.
Igor Isaias Banlian está offline   Responder com Quote
Antigo 20-01-2009, 18:25   #6 (permalink)
Igor Isaias Banlian
Membro Senior
 
Avatar de Igor Isaias Banlian
 
Registrado em: Feb 2007
Localização: São Paulo / SP
Idade: 22
Mensagens: 190
Reputação: 14 Igor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energia
Enviar mensagem via ICQ para Igor Isaias Banlian Enviar mensagem via MSN para Igor Isaias Banlian Enviar mensagem via Skype para Igor Isaias Banlian
Padrão

Bom, já que ninguém aqui me ajudou como eu precisava, um amigo meu resolveu o meu problema me dando o código:

Citação:
#include <stdio.h>
#include <stdlib.h>
main()
{
int i;
srand(time(NULL));
for(i=1;i<=15;i++)
printf("Numero Aleatorio %d: %d%d%d\n",i,((int)rand()) % 100000000000000000000000);
system("PAUSE");
return 1;
}
Ele gera os números aleatórios de 16 dígitos que eu preciso.

Para copiar os números, ele me ensinou que, estando no programa, clicar com o botão direito do Mouse em qualquer área dentro do programa e clicar em "Selecionar tudo", após isso, voltar a clicar com o botão direito do Mouse em qualquer área dentro do programa e clicar em "Rolar", daí é só "Colar" os números onde quiser!

Bom, agradeço ao meu amigo Victor (nick "Orochi"), por ter me ajudado e me dado o código pronto sem questionar nada!

Deixo nesse Post o código para que, quem tiver o mesmo problema que eu, possa usá-lo!

Agora podem trancar o Tópico, pois o problema está resolvido!

Obs.: Quem quiser, pode baixar o programa pronto, compactado em .rar, por esse Link aqui: http://www.mandamais.com.br/download...22012009183637 (Usar o Internet Explorer para fazer o Download. O Opera corrompe o arquivo ao fazer Downloads desse Site)!

Abraço,
Igor Isaias Banlian
__________________
Positivo Sim+ D2970:

Atom D525 1.80GHz; RAM 2GB DDR2; Vídeo Intel GMA 3150; Som Intel 82801G; Rede Realtek RTL8101E/RTL8102E; HD 500GB Seagate ST3500413AS; Placa-mãe Positivo POS-EINM10CB; DVD-RAM LG 22X GH22NS70; LCD Positivo Smile Light 5611 15,6".

GNU/Linux - BSD - OS/2; Speedy 2 Megas.

Última edição por Igor Isaias Banlian : 20-01-2009 às 18:44. Motivo: Link para Download do programa pronto adicionado!
Igor Isaias Banlian está offline   Responder com Quote
Antigo 20-01-2009, 21:05   #7 (permalink)
Etinin
Veterano
 
Avatar de Etinin
 
Registrado em: Jul 2004
Localização: Niterói/RJ
Idade: 19
Mensagens: 1.338
Reputação: 36 Etinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulharEtinin tem muito do que se orgulhar
Enviar mensagem via MSN para Etinin
Padrão

Não se esqueça que esse tipo de função gera números aleartórios possivelmente previsíveis e não devem ser utilizados para aplicações que requerem segurança (criptografia).
__________________
Core 2 Quad Q6600 | Asus P5Q Deluxe | 2GB RAM | XFX 9800GTX+ | Unicomp SpaceSaver
Gentoo Linux / Windows 7

MacBook Pro 13" (2010) - Core 2 Duo 2.4 GHz | 4GB RAM | GeForce 320M

Darwin/x86 (Mac OS X 10.7)

iPhone 4 - Apple A4 (Cortex-A8 1GHz) | 512MB RAM | 16GB SSD
Darwin/ARM (iOS 5)
Etinin está offline   Responder com Quote
Antigo 21-01-2009, 12:36   #8 (permalink)
jcferranti
Ubbergeek
 
Avatar de jcferranti
 
Registrado em: Jul 2004
Localização: Batatais/SP
Idade: 35
Mensagens: 4.339
Reputação: 882 jcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputação
Enviar mensagem via ICQ para jcferranti Enviar mensagem via MSN para jcferranti Enviar mensagem via Skype para jcferranti
Padrão

Citação:
Postado Originalmente por Igor Isaias Banlian Ver Mensagens
Bom, já que ninguém aqui me ajudou como eu precisava, um amigo meu resolveu o meu problema me dando o código:


Ele gera os números aleatórios de 16 dígitos que eu preciso.

Para copiar os números, ele me ensinou que, estando no programa, clicar com o botão direito do Mouse em qualquer área dentro do programa e clicar em "Selecionar tudo", após isso, voltar a clicar com o botão direito do Mouse em qualquer área dentro do programa e clicar em "Rolar", daí é só "Colar" os números onde quiser!

Bom, agradeço ao meu amigo Victor (nick "Orochi"), por ter me ajudado e me dado o código pronto sem questionar nada!

Deixo nesse Post o código para que, quem tiver o mesmo problema que eu, possa usá-lo!

Agora podem trancar o Tópico, pois o problema está resolvido!

Obs.: Quem quiser, pode baixar o programa pronto, compactado em .rar, por esse Link aqui: http://www.mandamais.com.br/download...22012009183637 (Usar o Internet Explorer para fazer o Download. O Opera corrompe o arquivo ao fazer Downloads desse Site)!

Abraço,
Igor Isaias Banlian
só um detalhe, vc disse que precisa de numeros exclusivos, ou seja, que não se repetem, e nesse seu código não há nada que proteja os numeros de se repetirem.
é claro que por serem numeros grandes, a possibilidade é menor, mais pode acontecer.

ps.: já penseou se seu programa pudesse renomear sozinho para vc seus arquivos? sim é possivel e vc não precisaria colar e copiar!
__________________
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
jcferranti está offline   Responder com Quote
Antigo 21-01-2009, 13:19   #9 (permalink)
chamuska
Veterano
 
Avatar de chamuska
 
Registrado em: Jan 2007
Mensagens: 1.216
Reputação: 13 chamuska possui ótimo potencial
Padrão

Cara, eu criei um a partir desse primeiro codigo q vc posto ai so que usando float, pq numero de 16 digitos pra int nao tava dando muito certo!
Ta meio tosco o codigo, to enferrujado em C!

Código:
#include <stdio.h> #include <stdlib.h> int main() { int i, j= 0; float valor, x = 1000000000000000.00, y = 1999999999999999.00; srand(time(NULL)); while(j <= 30) { valor = ((float)rand()) * 1000000000; if(valor >= x && valor <= y){ printf("Numero Aleatorio %d: %.2f\n",j,valor); j++; } } getchar(); }
Pra vc descobri se tem repetido ou nao vc pode criar uma variavel do tipo float dinamica, acho q vc vai trabalha com lista simplesmente encadeada ou fila(acho q é fila asuhaus), eu acho essas duas as mais fáceis!!
Vo tenta melhora o codigo ai pra verifica se ja tem repetida!
__________________
ubuntu 11 x windows 7(biodegradável!)

PC:
Asus m2n-sli deluxe
GeForce 8600 GT ddr3 520mb
AMD Athlon 64 X2 3.0GHz
1160G de HD
4G de memoria

chamuska está offline   Responder com Quote
Antigo 21-01-2009, 14:02   #10 (permalink)
chamuska
Veterano
 
Avatar de chamuska
 
Registrado em: Jan 2007
Mensagens: 1.216
Reputação: 13 chamuska possui ótimo potencial
Padrão

Ta ai,verificando se tem repetido ou nao!

Código:
#include <stdio.h> #include <stdlib.h> int main() { int i, j= 0; float valor, x = 1000000000000000.00, y = 1999999999999999.00; float *matriz; char retorno; srand(time(NULL)); while(j <= 30) { valor = ((float)rand()) * 1000000000; retorno = 'v'; if(valor >= x && valor <= y){ if(j == 0){ matriz = (float*) malloc(sizeof(float)); matriz[j] = valor; printf("Numero Aleatorio %d: %.2f\n",j,matriz[j]); j++; } else{ for(i = 0 ;i <= j; i++){ if(matriz[i] == valor){ retorno = 'f'; } } if(retorno == 'v'){ matriz = (float*) malloc(sizeof(float)); matriz[j] = valor; printf("Numero Aleatorio %d: %.2f\n",j,matriz[j]); j++; } } } } }
Espero q ele seja util usahusa

Flws
__________________
ubuntu 11 x windows 7(biodegradável!)

PC:
Asus m2n-sli deluxe
GeForce 8600 GT ddr3 520mb
AMD Athlon 64 X2 3.0GHz
1160G de HD
4G de memoria

chamuska está offline   Responder com Quote
Antigo 02-02-2009, 3:58   #11 (permalink)
Igor Isaias Banlian
Membro Senior
 
Avatar de Igor Isaias Banlian
 
Registrado em: Feb 2007
Localização: São Paulo / SP
Idade: 22
Mensagens: 190
Reputação: 14 Igor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energiaIgor Isaias Banlian Tem uma excelente energia
Enviar mensagem via ICQ para Igor Isaias Banlian Enviar mensagem via MSN para Igor Isaias Banlian Enviar mensagem via Skype para Igor Isaias Banlian
Padrão

Citação:
Postado Originalmente por jcferranti Ver Mensagens
ps.: já penseou se seu programa pudesse renomear sozinho para vc seus arquivos? sim é possivel e vc não precisaria colar e copiar!
Você pode postar como eu faço isso?

Seria de grande ajuda...

Citação:
Postado Originalmente por chamuska Ver Mensagens
Espero q ele seja util usahusa
Só não foi útil porque aqui não funcionou...

Eu uso o Dev C++ 4.9.9.2, e compilei dessas formas (o erro é igual nas 2 formas):

1ª Forma) Clicando em: Arquivo > Novo > Arquivo Fonte;

2ª Forma) Clicando em: Arquivo > Novo > Projeto. Selecionando a opção "Console Application" e selecionando a opção "Projeto C".

O Erro é que o janela do CMD (DOS do Windows XP) abre e fica só um "underline" branco piscando, e não sai mais disso...

Obs.: Não dá nenhum erro pra compilar!

Abraço,
Igor Isaias Banlian
__________________
Positivo Sim+ D2970:

Atom D525 1.80GHz; RAM 2GB DDR2; Vídeo Intel GMA 3150; Som Intel 82801G; Rede Realtek RTL8101E/RTL8102E; HD 500GB Seagate ST3500413AS; Placa-mãe Positivo POS-EINM10CB; DVD-RAM LG 22X GH22NS70; LCD Positivo Smile Light 5611 15,6".

GNU/Linux - BSD - OS/2; Speedy 2 Megas.
Igor Isaias Banlian está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 20:40.