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 754.121 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 10-09-2005, 14:55   #1 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão Aprendendo C: Algumas duvidas

Oi pessoal. Beleza? Creio que eu cheguei ao "ápice" do Pascal e agora resolvi aprender algo que tenha um melhor suporte. Apesar do Free Pascal ser um compilador excelente ( e eu recomendo o uso deste ), o suporte ofericido a ela de forma geral ( OpenGL, DirectX, GTK, .Net e outras coisas mais legais de se aprender ) é quase que completamente renegado, sem contar que a base de dados mais atual que o Free Pascal suporta é o MySQL 4.0 ( percebam que o suporte está em fase de testes! Ele suporta com qualidade apenas o MySQL 3.28 o que me revolta... ).

Por isso ( e por outros motivos também ), resolvi aprender o C, espero poder contar com vocês pessoal. A minha primeira dúvida vem a ser esta:

1) No livro que estou lendo o autor passa esse código:

Código:
#include <stdio.h> #include <conio.h> #include <dos.h> main () { clrsrc(); system("date"); printf("Qualquer coisa aqui..."); }
O que me intrigou foi que o autor usou uma biblioteca dos.h, eu queria saber... tem uma para o Bash? tipo... sh.h?

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 10-09-2005, 19:52   #2 (permalink)
pflynn
Zumbi
 
Avatar de pflynn
 
Registrado em: Jan 2004
Mensagens: 5.276
Reputação: 189 pflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputação
Padrão Re: Aprendendo C: Algumas duvidas

Citação:
Postado Originalmente por vini_bill
Oi pessoal. Beleza? Creio que eu cheguei ao "ápice" do Pascal e agora resolvi aprender algo que tenha um melhor supor...
Que livro é esse ? Acho que você está comecando a aprender C pelo livro errado. Esse código é código C específico para o sistema operacional DOS da Microsoft. Um grande problema muito comum que aflige as pessoas que estão comecando a aprender a linguagem C é confundir a linguagem em si com recursos específicos dependentes de plataforma. Minha recomendacão é a seguinte: antes de tentar aprender a utilizar C em Linux, ou em Windows, ou DOS, ou Unix, ou seja lá o que for, preocupe-se em aprender os fundamentos da linguagem, ou seja, estude o C padrão ANSI. Procure um livro que realmente fale da linguagem C, como o The C programming Language, de Brian W Kernighan e Dennis M. Ritchie, ninguém mais senão os próprios criadores da linguagem.
__________________
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
pflynn está offline   Responder com Quote
Antigo 11-09-2005, 9:06   #3 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Beleza... alguém para responder a pergunta? Sei muito bem que o livro é orientado à Turbo C e Windows, mas como o meu outro livro de Pascal acredito que o GCC seja robusto o suficiente para entender meus códicos ( assimo como foi o Free Pascal ).

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 11-09-2005, 11:42   #4 (permalink)
pflynn
Zumbi
 
Avatar de pflynn
 
Registrado em: Jan 2004
Mensagens: 5.276
Reputação: 189 pflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por vini_bill
Beleza... alguém para responder a pergunta? Sei muito bem que o livro é orientado à Turbo C e Windows, mas como o meu...
OK...vamos lá. Não, não existe uma biblioteca sh.h semelhante a dos.h simplesmente porque dos.h não é nem nunca será uma biblioteca, tão pouco como um arquivo com o nome sh.h seria uma biblioteca. Mas existe um cabecalho de nome "shell.h" que, em conjunto com outros dois, "builtins.h" e "bashgetopt.h" são utilizados por quem escreve plugins para o Bash. Outros shells que permitem a criacão de plugins possuiem headers semelhantes. E o gcc não tem nenhuma relacão com esses cabecalhos. De qualquer maneira, o escopo desses cabecalhos do Bash é diferente ao escopo do dos.h encontrado no Turbo C. O dos.h deve ser incluído para programar para o sistema operacional. Se você quer algo semelhante no Linux, não vai encontrar a solucão em um único arquivo do tipo "linux.h". Existem dezenas deles. Se quiser uma breve descricão deles e como proceder para utilizá-los, segue uma referência: Advanced Linux Programming
__________________
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
pflynn está offline   Responder com Quote
Antigo 11-09-2005, 16:47   #5 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Era isso que eu queria ouvir! Valeu pflynn, e obrigado pela correção, achei que tudo que era .h era uma biblioteca mesmo sabendo que a tradução de header é cabeçalho. Enfim. Valeu mesmo . Obrigado pela sugestão também .

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 11-09-2005, 20:03   #6 (permalink)
pflynn
Zumbi
 
Avatar de pflynn
 
Registrado em: Jan 2004
Mensagens: 5.276
Reputação: 189 pflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por vini_bill
Era isso que eu queria ouvir! Valeu pflynn, e obrigado pela correção, achei que tudo que era .h era uma biblioteca me...
Disponha . E espero que a referência que passei possa ser útil .
__________________
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
pflynn está offline   Responder com Quote
Antigo 12-09-2005, 16:44   #7 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Oi pflynn. Beleza? Surgiu uma duvida ao chegar ao segundo capitulo. Deixa eu exemplificar e depois perguntar:

Em pascal a declaração de uma variável com casas decimais se dá da seguinte maneira:

Código:
program teste; var numero:real; begin (...) end.
Pelo o que entendi em C ficaria algo assim:

Código:
main () { float numero; /*Ou então...*/ double numero1; (...) }
A grande pergunta é: Qual a diferença de uma variável float para uma double? Só o tamanho? O livro dá o nome de precisão simples e precisão dupla, o que vem a ser exatamente esse termo: "precisão". Tem haver com a "margem de erro" da variável? Outra coisa. Vi que todas as variáveis podem ser declaradas com essas duas opções ( com excessão das void ):

- Short
- Long

O que viria a ser, então, uma variável declarada assim:

Código:
double long teste;
Seria, apenas, uma variável de 16 bytes?

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 12-09-2005, 19:21   #8 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

vini, acho que vc pulou algumas aulas de pascal... se vc voltar lá, vai ver que existem dois tipos que lidam com valores de ponto flutuante (o nome certo pro que você chamou de "variável com casas decimais): o tipo real, que você citou, e o tipo double.

A diferença entre eles é exatamente o que você pensou: a precisão. O tipo real lida com valores de precisão simples, e equivale ao tipo float de C. O tipo double lida com valores de precisão dupla, e equivale ao tipo de mesmo nome (double) em C.

Eu sei que existe, no entanto, mais um tipo de ponto flutuante em C: o tipo long double, que lida com valores de precisão quádrupla, e nas máquinas de arquitetura x86 é implementado em variáveis de 128 bits (contra 32 bits do real/float e 64 bits do double).
PS: http://www.hardware.com.br/comunidade/viewtopic.php?p=1858686&highlight=#1858686
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 12-09-2005, 19:37   #9 (permalink)
pflynn
Zumbi
 
Avatar de pflynn
 
Registrado em: Jan 2004
Mensagens: 5.276
Reputação: 189 pflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputação
Padrão

Citação:
A grande pergunta é: Qual a diferença de uma variável float para uma double? Só o tamanho? O livro dá o nome de precisão simples e precisão dupla, o que vem a ser exatamente esse termo: "precisão". Tem haver com a "margem de erro" da variável?
A princípio é o seguinte: C não define nada sobre o tamanho de float nem de double ou mesmo se eles são diferentes. O que pode se assumir é que o conjunto de números que podem ser representados por uma variável do tipo float é um subconjunto dos valores que podem ser representados por double. Em geral, variáveis do tipo double podem representar números com mais algarismos significativos do que as do tipo float. Os limites dos valores que podem ser representados dependem de implementacão e o padrão C exige que eles estejam no arquivo float.h. A grosso modo, pode se dizer o seguinte: números não inteiros nem sempre podem ser armazenados de forma exata no computador. Por isso, certos números precisam ser arredondados para serem representados. Quanto maior for a precisão que o computador conseguir, menor será o erro nesse arredondamento.


Citação:
Outra coisa. Vi que todas as variáveis podem ser declaradas com essas duas opções ( com excessão das void ):

- Short
- Long
C especifica os valores mínimos para a precisão de tipos integrais. Segundo o padrão, um char precisa ter no mínimo 8 bits, short pelo menos 16 bits e long, pelo menos 32 bits. Em C99, o tipo long long precisa ter no mínimo 64 bits. Em C padrão também existe o tipo long double, que pode ter precisão maior do que o double. Em resumo:

[unsigned] short int - pelo menos 16 bits
[unsigned] long int - pelo menos 32 bits
[unsigned] long long int - pelo menos 64 bits (C99)

e

float <= double <= long double
(mas sem especificacão de tamanho)

É mais ou menos isso
__________________
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
pflynn está offline   Responder com Quote
Antigo 12-09-2005, 20:42   #10 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Hmm.... Entendi Jqueiroz e Pflynn. Quanto as aulas de Pascal que eu perdi Jqueiroz... acabei de procurar no livro ( de pascal ) e num achei nada a respeito :/. Que triste hein ( o livro )? Enfim... bom saber! Duvido que a minha professora de programação também saiba :P. Quanto a explicação, MUITO obrigado aos dois , mas como bicho ruim num pára quieto :mrgreen: lá vou eu de novo ( haahahahahha :lol. Vejam o seguinte trecho:

Código:
#include <stdio.h> main() { int n1,*n2; n1=10-5; printf("O valor de n1 é %d\n",n1); n2=&n1; *n2+=n1; printf("n2+=n1 é %d\n",*n2); *n2=28+n1; printf("Agora o valor de n1 é %d e de n2 (ponteiro) é %d\n",n1,*n2); }
Ao executar eu noto que o resultado de *n2+=n1; é 10. Ok... a pergunta é: Por quê? Eu entendi a diferença entre i++, ++i mas não entendi x+=i e x=+i ( onde x é uma variável com outro valor qualquer... ).

Valeu.

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 12-09-2005, 21:33   #11 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por pflynn
A princípio é o seguinte: C não define nada sobre o tamanho de float nem de double ou mesmo se eles são diferentes.
Ah, essa eu sei: não é o C ou o Pascal que define esses tipos. Eles são definidos pela IEEE, tanto no tamanho quanto no formato interno.

Citação:
Postado Originalmente por vini
Ao executar eu noto que o resultado de *n2+=n1; é 10. Ok... a pergunta é: Por quê? Eu entendi a diferença entre i++, ++i mas não entendi x+=i e x=+i ( onde x é uma variável com outro valor qualquer... ).
Vamos por partes. Primeiro você fez n1 valer "10-5", o que é igual a 5.

Depois, vc fez n2 apontar para o endereço de n1. Então, tanto faz você usar n1 ou (*n2).

Por último, vc fez (*n2) += n1. O que é o "+=" ???

Quando você faz "x += y", é como se você escrevesse "x = x + y". Idem para "-=", "*=", "/=", "&=", etc. Parece bobeira, não? Mas se você juntar isso com os operadores de auto-incremento e ponteiros, vai ver que a coisa muda:

*(x++) += 5; equivale a *x = *x + 5; x = x + 1;

Voltando ao nosso assunto, nós temos:

*n2 += n1

Como a gente já viu, tanto faz usar "*n2" como "n1", pois n2 aponta para o endereço de n1. Então, é como se fizéssemos

n1 += n1

O que equivale a

n1 = n1 + n1

Como n1 valia 5, então depois dessa expressão, n1 (e por consequência *n2) vai valer 10.

Agora, importante notar: não importa quanto você mexa em n1 ou em *n2, enquanto n2 estiver apontando para o endereço de n1, então o valor de n1 e *n2 vai ser sempre igual, pois é exatamente a mesma variável.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 12-09-2005, 22:45   #12 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Importante observação Jqueiroz! Obrigadão mesmo! é que vendo n2, n1... parecem diferentes.... mas realmente, sua dica valeu mesmo .

Abraços. Prometo voltar com mais dúvidas :P.

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 13-09-2005, 13:31   #13 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Promessa é divida e agora eu vou pagar a minha .

Estou eu aqui programando em C e aparece o loop for. O autor explica a sintaxe como sendo assim:

Código:
for (inicialização da variavel; limite de repetição; incremento ou decremento)
Com isso eu pensei assim: "Será que eu posso suprimir o decremento da condição da variavel para coloca-lo no corpo do código que viria abaixo?". Vejam o que eu quero dizer:

Código:
#include <stdio.h> main() { int i; for (i=1;i<=10) [algum código...]; i++; }
ao invés de:

Código:
#include <stdio.h> main() { int i; for (i=1;i<=10;i++) [algum código...]; }
Outra coisa.... Em pascal eu tinha o for.. to OU for .. downto. Existe algum manha ( que não seja usar o decremento ) ou algum header que me "dê" o downto? Eu consigo saber disso lendo esse livro que você passou Pflynn?

Valeu.

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 13-09-2005, 13:47   #14 (permalink)
pflynn
Zumbi
 
Avatar de pflynn
 
Registrado em: Jan 2004
Mensagens: 5.276
Reputação: 189 pflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputaçãopflynn tem uma fabulosa reputação
Padrão

Citação:
Com isso eu pensei assim: "Será que eu posso suprimir o decremento da condição da variavel para coloca-lo no corpo do código abaixo?". Vejam o que eu quero dizer:
Sim, o loop for da linguagem C é totalmente versátil e permite que qualquer uma de suas partes seja omitida. Você pode omitir todas as clausulas do loop for se quiser, mas mesmo omitindo, o uso do ';' é sempre obrigatório:

Código:
for(;;) printf("Isto nunca vai acabar\n");
O seu código ficaria:

Código:
#include <stdio.h> main() { int i; for (i=1;i<=10; ){ [algum código...]; i++; } }




Citação:
Outra coisa.... Em pascal eu tinha o for... to OU for downto... Existe algum manha ( ou algum header ) que me "dê" o downto? Eu consigo saber disso lendo esse livro que você passou Pflynn?
Não conheço o 'downto' do Pascal, mas imagino que esteja se referindo a algo do tipo:

Código:
for(i=10;i>=0;i--){ (...) }
Ou seja, um loop decrescente. É isso ?


Em relação ao livro, o livro que lhe indiquei não é sobre a linguagem C em si, mas do uso dela no Linux. Se você quer um livro sobre a linguagem C pura e simplesmente, eu recomendo o "The C Programming Language", de Brian W. Kernighan e Dennis M. Ritchie.
__________________
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
pflynn está offline   Responder com Quote
Antigo 13-09-2005, 14:26   #15 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Opa! Beleza. O downto era isso mesmo, só saquei depois ( dê uma olhada.. eu editei o Post e coloquei uma pergunta mais "macabra" :P ).

Quanto ao livro já tô com ele aqui, vou terminar de ler o que eu tô lendo agora ( Aprendendo a programar em linguagem C do Alfredo Boente - aliás... livro muito bom ) para ler esse ai e depois me afundar no livro que o Linus leu sobre sistemas operacionais: Operating System Design and Implementation .

Mais dúvidas virão! Me aguardem .

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 13-09-2005, 17:45   #16 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Outra coisa.... Em pascal eu tinha o for.. to OU for .. downto. Existe algum manha ( que não seja usar o decremento ) ou algum header que me "dê" o downto? Eu consigo saber disso lendo esse livro que você passou Pflynn?
Bem, como o pflynn disse, o for do C é extremamente versátil. Então, não tem nada que exija que você use a parte do incremento/decremento pra fazer realmente um incremento ou um decremento.

Exemplo 1:
Código:
struct registro { int x,y; struct registro *prox; }; (...) struct registro *aux; (...) for( aux = head; aux != NULL; aux = aux->prox ) { processa( aux ); }
Viu que eu não usei incremento nem decremento?

Exemplo 2:
Código:
int i1, i2; for( i1 = 1, i2 = 1; i1<100; i1 += i2 ) { printf( "%d\n", i1 ); i2 = i1; }
Sequência de Fibonacci. Vê só, eu estou usando duas variáveis no controle do loop. E não há um incremento/decremento: apenas uma operação que altera o valor do loop.

Exemplo 3:
Código:
int i; for( i = 2; i<1000000; i *= i ) printf( "%d\n", i );
Aqui, em vez de somar, eu multipliquei.

Esses exemplos são pra te dar a idéia central: a gente incrementa/decrementa pq é o mais comum a se fazer num loop. Mas não quer dizer que só sirva pra isso. Serve apenas pra alterar o valor da expressão de controle a cada alteração. Da mesma forma, a condição de parada não precisa ser em cima da mesma variável. Ex:

Código:
for( i = 0; *p++ != '\0'; i++ );
Outra coisa boa de se lembrar é que tudo que se faz com for se faz também com while, basta rearrumar o código.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 13-09-2005, 21:21   #17 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Boa Jqueiroz! Excelente dica!

Mantenho a promessa mesmo assim .

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 14-09-2005, 9:56   #18 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Opa! Voltei de novo :P.

Eu compilei esse programa(*) no DevC++ do windows e depois disso o programa não compila mais do jeito certo ( calma ai.. compila certinho mas não funciona igual a antes... ), por favor vejam o código:

Código:
/*************************************************************************** * nikolas.c * * Wed Sep 14 10:45:15 2005 * Copyright 2005 Vinicius Menezes * vini.bill@gmail.com ****************************************************************************/ /* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <stdio.h> main(){ int unsigned nikop; printf("O que você quer da vida?\n"); printf("\n"); printf("1.Muita cerveja\n"); printf("2.Muita mulher legal\n"); printf("3.Muita banana gostosa\n"); printf("\n"); printf("Resposta:"); scanf("&d",&nikop); nikop--; switch (nikop) { case 0: printf("\n"); printf("Quero MUITAS CERVEJAS!\n"); break; case 1: printf("\n"); printf("Quero brincas MUITAS MULHERES LEGAIS!\n"); break; case 2: printf("\n"); printf("QUERO COMER MUITAS BANANAS!\n"); break; default: printf("\n"); printf("Opção incorreta\n"); break; } }
O código parecebe belezinha, só tem um problema, não importa a resposta, seja ela, 1,2,3 ou 5000 o programa **SEMPRE** imprime a resposta default, como se as outras opções não existissem. As perguntas são:

1) Por que isso acontece?
2) Como corrigir isso?

Valeu pessoal.

... Vinicius Menezes ...

(*) Nota do autor: Esse programa eu fiz depois de uma longa história entre eu e um amigo meu, algumas palavras foram retiradas para se adequar às regras do fórum :P... se quiser eu explico em MP, mas não vem ao caso no fórum técnico.
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 14-09-2005, 13:41   #19 (permalink)
vini_bill
Super Participante
 
Registrado em: Jul 2004
Localização: Rio de Janeiro - Brasil
Mensagens: 593
Reputação: 16 vini_bill está indo no caminho certo
Enviar mensagem via ICQ para vini_bill Enviar mensagem via MSN para vini_bill
Padrão

Mais umas dúvidas!

Fiz esse programa aqui ( é que eu fiquei traumatizado com a fórmula de bhaskara dai eu sempre faço programas pra resolver a fórmula de bhaskara quando eu estou apredendo uma linguagem nova :P ).

Vejam:

Código:
/*************************************************************************** * bhaskara.c * * Wed Sep 14 10:45:48 2005 * Copyright 2005 Vinicius Menezes * vini.bill@gmail.com **************************************************************************** * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <stdio.h> main(){ /*Variaveis*/ double a,b,c,delta,x1,x2,sum,prod; int op,*dummy; puts("Bem-vindo ao Bhaskara 2005©"); /*Laço e depois o menu */ do { printf("\n"); printf("Escolha uma das operações abaixo:\n"); printf("\n"); printf("1.Soma\n"); printf("2.Produto\n"); printf("3.Bhaskara\n"); printf("4.Sair\n"); printf(":"); scanf("%d",&op); op--; switch (op) { case 0: /*Se for Soma*/ sum=(-1*b)/a; puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; case 1: /*Se for Produto*/ prod=c/a; puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; case 2: /*Se for Bhaskara*/ printf("Dê-me o valor de A\n"); scanf("%f",&a); printf("Dê-me o valor de B\n"); scanf("%f",&b); printf("Dê-me o valor de C\n"); scanf("%f",&c); delta=(b*b)-(4*a*c); if (delta<0){ puts("Delta é menor que zero, não posso seguir adiante."); puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; } else { x1=((-1*b)+/*raiz*/(delta))/(2*a); x2=((-1*b)-/*raiz*/(delta))/(2*a); printf ("X da soma é: %f\n",x1); printf ("X da subtração é: %f\n",x2); puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; } break; case 3: /*Se for saída*/ puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; default: /*Se for erro*/ puts("Opção incorreta, tente novamente.\n"); puts("Aperte enter para tentar retornar ao menu."); scanf("%d",dummy); break; } } while (op!=3); }
Os três problemas são:

1) O livro diz que eu só posso efetuar a divisão com '/' se o resultado for inteiro ( ou seja... o double que eu tô usando ai no programa não serve... ), como que eu posso fazer uma divisão com dois números double?
2)Eu queria que toda vez que alguma resposta fosse dada pelo programa a mensagem:

Citação:
Aperte enter para tentar retornar ao menu.
fosse exibida e só quando o usuário apertasse enter o menu reaparecesse... o que acontece é que o programa imprime todos os resultados em stdout mas não espera o usuário ler e simplesmente reescreve o menu de novo. Como que eu posso dar uma "pausa" para o usuário ler o resultado? ( o que eu fiz de colocar o programa para ler uma variável sem valor não dá certo... o enter não sai da leitura da variável e se algum valor for colocado: "Segmentation Fault".

3)Como que eu posso tirar raiz quadrada e elevar um número a outro número? em VB era X^y ( x elevado a y ) e no pacal era sqrt(número) ( raiz qudrada de (número)).

Abraços.

... Vinicius Menezes ...
__________________
Monitor: TV Samsumg 32''
Processador: AMD Semprom 3000+
Memória: DDR2 2GB 667mhz
Video: GeForce 8400
Som: OnBoard
HD: Samsung 250GB
vini_bill está offline   Responder com Quote
Antigo 14-09-2005, 14:19   #20 (permalink)
Khoala
Newbie
 
Registrado em: Apr 2005
Mensagens: 7
Reputação: 0 Khoala está indo no caminho certo
Padrão

Eu so sei responder a questão 3
Código:
Raiz sqrt(x) potencia pow(x,y) x elevado a potencia de y
Khoala 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 15:12.