• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Ajuda nestas funçoes

7 mensagens neste tópico

Bem estava eu aqui super contente com o Livro do senhor Luis Damas até que ele ou passou uma noite muito má ou então fartou-se e apenas vou na página 219... e cagou literalmente em nós.. nunca tinha explicado o que é a função time() nem um srand e poe aquilo tudo ali e eu fico á toa porque ele asseguir tb nao fez o favor de explicar  :mad: :hmm:...

bem a minha duvida é o que faz as seguintes coisas:

long ultime;

time(&ultime)

srand((unsigned)ultime);

se puderem expliquem passo a passo..

outras duvidas  : tipo o que é isto : int *v[2] -- nao sei o que é o asterisco e o Damas tb nao explicou :angry1: :thumbdown:

obrigado malta :dontgetit: :D:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

outras duvidas  : tipo o que é isto : int *v[2] -- nao sei o que é o asterisco e o Damas tb nao explicou :angry1: :thumbdown:

Lembras-te de eu uma vez andar às voltas com os pointers em c++?

Ou me engano muito, caso o significado seja diferente de c para c++ ou então tens um à tua frente.... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

epah sinceramente axo k o livro do damas e uma m*rda... nao me levem a mal, nem se ofendam se curtiram e de facto aprenderam com akilo (optimo) mas o gajo tem uma maneira muita marada de programar e de explikar as coisas... eu ja vi projectos reais de faculdade em k o pessoal se poe a implementar merdas pela damas ao bom estilo da cópia e depois ng percebe a ponta kd akilo falha pk o codigo do gajo e uma m****... so variaveis da tanga tipo p->v->whatever em vez de variaveis sugestivas... anyway.. (isto foi so pa expressar o meu ponto de vista nesse book... mas se ja o tem... entao estudem por ele... )

Quanto as tuas duvidas..

long ultime;
tas a definir uma variavel do tipo long ( e um numero de alta precisao..) e pa te dizer a verdade e a primeira vez k vejo um long sozinho... normalmente o long aparece antes de um dos tipos de origem , tipo int. por exemplo um int normalmente ocupa 32bits.. um "long int" axo k ocupa 64 .. (sera este mais um caso de tretas à damas? ) .. de kualker maneira tas a definir uma variavel do tipo "long" k se chama "ultime".
time(&ultime)
aki tas chamar uma funcao de "sistema" pasandolhe o endereco da tua variavel ultime, ao passares o endereco a funcao pode escrever la coisas ( porque sabe o endereco da funcao) e o k ela vai fazer e espetar la o tempo, provavelmente em ciclos de cpu ou whatever...
srand((unsigned)ultime);
aki , (mais uma vez devia tar escrito "(unsigned int)ultime" dentro da funcao )... tas a pegar no ultime, fazendo um cast para unsigned int ( um cast se nao sabes, permite converter o tipo de uma variavel noutra) e depois a chamar a funcao srand passandolhe como argumento o resultado do tal cast. O k essa funcao faz é definir a semente ou "seed" da funcao rand k gera numeros aleatorios...

Se este codigo te parece despropositado entao e pk nao percebes bem a cena dos numeros aleatorios... As funcoes k geram numeros aleatorios nao sao verdadeiramente aleatorios, sao funcoes k geram numeros pseudo-aleatorios... a diferenca e k os geradores pseudo-aleatorios precisam de uma semente, ou um valor inicial matematicamente para gerarem os numeros aleatorios a partir dai. se nao fizeres o srand vais ver que o rand gera sempre a mesma seguencia de numeros (experimenta fazeres um prog com printf("%d\n",rand()); no main e correres varias vezes (date sp o mm numero)...

Portanto e resumidamente, o k se faz normalmente e sakar o tempo do sistema de alguma forma, e usar isso como semente da sucessao pseudo-aleatorioa.

QUanto ao asterisco... preparate para muito panico... tens de aprender bem a parte dos ponteiros... eu voute dizer o k isso e, mas se nao perceberes nao desesperes...

int v[2] ; -> declarate um array de 2 posicoes de inteiros...

int* umPonteiro; ->declarate uma variavel chamada umPonteiro que é um ponteiro para inteiro ou seja esta variavel podete guardar o endereco de um inteiro mas nao pode guardar um inteiro em si ( bem, na realidade pode com um cast, mas nao te ponhas a mexer com isso ja senao e so Segfaults).

logo, int* v[2]; declarate um array chamado v que tem 2 posicoes e cada posicao guarda um ponteiro para um qualquer inteiro...

espero k tejas mais esclarecido... fika []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
so variaveis da tanga tipo p->v->whatever em vez de variaveis sugestivas...

Aqui tenho obrigatoriamente de concordar contigo. Acho que o Luís Damas deveria ter tido um pouco de cuidado com os nomes das variáveis. Aliás, considero este o único ponto negativo do livro que facilmente se anula com a forma como o autor explicita o código e com a forma como expõe a matéria. Tenho um livro do Pedro Guerreiro chamado "Elementos de Programação em C" e o livro não comete esse tipo de 'falhas', ma spor outro lado não o considero um livro para principiantes.

tas a definir uma variavel do tipo long ( e um numero de alta precisao..) e pa te dizer a verdade e a primeira vez k vejo um long sozinho... normalmente o long aparece antes de um dos tipos de origem , tipo int. por exemplo um int normalmente ocupa 32bits.. um "long int" axo k ocupa 64 .. (sera este mais um caso de tretas à damas? ) .. de kualker maneira tas a definir uma variavel do tipo "long" k se chama "ultime".

Um int ocupa 2 a 4 bytes, isto é de 16 a 32 bits, sendo que esse numero depende conforme a máquina que processa a variável. Já o long int ocupa 4 bytes (32 bits) em arquitecturas normais.

Quanto aos pointers, vou concordar contigo mais uma vez: considero a matéria menos acessível da linguagem, apesar de que se existir algum estudo mais aprofundado de mais livros e tutoriais para alem do manual por onde nos seguimos chegamos a compreender a matéria.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ou seja um ponteiro guarda apenas o local de memoria de outra variavel que contem um valor , guarda so o local da memoria mas nao o valor em si certo ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ou seja um ponteiro guarda apenas o local de memoria de outra variavel que contem um valor , guarda so o local da memoria mas nao o valor em si certo ?

no c++ um ponteiro pode ter duas vertentes.

Numa delas, guarda o local da memória onde uma variável está armazenada.

Na outra aponta directamente para o valor que está no lugar da memória apontado. Se acederes ao pointer desta última maneira estás a aceder directamente ao valor da variável apontada.

Não sei se em c é igual mas para c++ achei muito útil este site:

http://www.cplusplus.com/doc/tutorial/pointers.html

(lê pelo menos o início que dá-te uma ideia porreira sobre os pointers  :P )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas. epah um ponteiro seja em k linguagem for guarda a referencia ou o endereco de uma dada variavel. A razao pela qual existem diversos tipos de ponteiros (ponteiro para int, ponteiro pa char ,ponteiro pa whatever) prende-se com o facto de o compilador quando for desreferenciar esse objecto, ie, pegar no endereco e ir la mesmo buscar o valor, ele tem de saber kuantos bytes vai ter de ler... Podes em C e C++  usar ponteiros genericos ou seja os "void*" k guardam apenas o endereco do objecto, kualker objecto mas tu pa leres um objecto referenciado por um void* tens de fazer um cast para o tipo original e assim o compilador já sabe kuantos bytes e k tem de ler... vbmaster, a cena do C++ e k permite passar objectos pelo ponteiro, tipo nao e nada de extraordinario, e apenas uma maneira mais legivel de fazer a mm cena, em C++ podes dizer k uma func recebe um endereco de uma variavel e podes passar directamente a variavel. o k o compilador faz é em vez de passar o valor da variavel passar o endereco dela... e o mesmo k em C mas em C tens de fazer isso explicitamente.

Gurzi, e isso mm...

hasta []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora