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

Gurzi

Ajuda nestas funçoes

Recommended Posts

Gurzi

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  😡 🤔...

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: 👎

obrigado malta :dontgetit: :D :P

Share this post


Link to post
Share on other sites
vbmaster

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

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

Share this post


Link to post
Share on other sites
theproject

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 []

Share this post


Link to post
Share on other sites
deathseeker25
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

Share this post


Link to post
Share on other sites
Gurzi

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 ?

Share this post


Link to post
Share on other sites
vbmaster

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 )

Share this post


Link to post
Share on other sites
theproject

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 []

Share this post


Link to post
Share on other sites

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

×

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.