Linguagem C

27 respostas
maozinha

[b][i]Ola pessoal blz,
alguem pode me tirar uma duvida, cosegui fazer um programa, mas qdo compilo ele não me da o resultado certo, o valor é maior do q deveria ser, sendo q as informações parecem estar certas, oq estou fazendo de errado?

#include<stdlib.h>
#include<stdio.h>
#include<math.h>

main(){

float f1, f2, f3, r;

printf("\n Usuario informe os minutos para o plano de chamadas local / “);
scanf(”%f", &f1);

printf("\n Usuario informe os minutos para o plano de chamadas interurbanos / “);
scanf(”%f", &f2);

printf("\n Usuario informe os minutos para o plano de chamadas p/ celular / “);
scanf(”%f", &f3);

r = (f1*0.14);
printf("\n\nO valor da sua conta de chamadas local e %4.2f",r);

r = (f2*1.20);
printf("\n\nO valor da sua conta de chamadas interurbanas e %4.2f",r);

r = (f3*0.90);
printf("\n\nO valor da sua conta de chamadas para celular e %4.2f\n\n",r);

r = (f1+f2+f3)+27.90;
printf("\n\nA soma das ligacoes com a assinatura mensal e %4.2f\n\n",r);

system(“pause”);
}

27 Respostas

javaBeats

Hmm… não acredito que o recém criado fórum de novas linguagens sirva para isso, mas… vamos tentar ajudar :smiley:

1.) Da próxima vez, tente usar um debugger para validar seu código antes de postar :wink:
2.) O problema provavelmente está na hora de armazenar os resultados. Repare no uso que você faz da variável ‘r’…

Rodrigo

maozinha

[b][i]Obrigado Rodrigo, mas ainda não compreendi
valeu pela atenção

oq é um debugger?

javaBeats

Debugger é uma ferramenta que acompanha os compiladores, geralmente integrada à IDE que você usa, que permite que você “visualize” a execução do código, linha a linha, acompanhando o resultado das expressões, valores das variáveis, etc.

ViniGodoy

Na próxima vez, use a tag code. Se você não sabe usar, leia esse link:
http://www.guj.com.br/bookmarks/list/17737.java

Acho que o que você queria fazer era isso:
#include&lt;stdlib.h&gt;
#include&lt;stdio.h&gt;
#include&lt;math.h&gt;

main(){

   float f1, f2, f3, r;

   printf("\n Usuario informe os minutos para o plano de chamadas local / ");
   scanf("%f", &f1);

   printf("\n Usuario informe os minutos para o plano de chamadas interurbanos / ");
   scanf("%f", &f2);

   printf("\n Usuario informe os minutos para o plano de chamadas p/ celular / ");
   scanf("%f", &f3);

   //O resultado do novo f1 deve ser guardado em f1,  que vc vai soma-lo depois.
  //o mesmo vale para as outras variáveis f.
   f1 = (f1*0.14);
   printf("\n\nO valor da sua conta de chamadas local e %4.2f",f1);

   f2 = (f2*1.20);
   printf("\n\nO valor da sua conta de chamadas interurbanas e %4.2f",f2);

   f3 = (f3*0.90);
   printf("\n\nO valor da sua conta de chamadas para celular e %4.2f\n\n",f3);

   //Agora sim, com os novos fs, calculamos r.
   r = (f1+f2+f3)+27.90;
   printf("\n\nA soma das ligacoes com a assinatura mensal e %4.2f\n\n", r);
}

Que IDE você está usando? Ou está compilando tudo na mão?
Se procura uma IDE padrão, de graça, pequena e leve, eu recomendo o Code::Blocks. É muito melhor do que DevCpp. E usa como compilador o MinGW, que é muito próximo do padrão e bastante portável (é a versão do GNU para Windows).
http://www.codeblocks.org

Se quer algo mais Microsoft, use a última versão do Visual C++, que pode ser baixada de graça também no site da MS. Não é tão portável e a IDE é bem maior, mas é muito poderosa.

Ambos vem com o depurador (debbuger).

Finalmente, não duplique tópicos. Você poderia ter dado prosseguimento a sua dúvida no outro tópico que você criou (e já tinha duplicado):
http://www.guj.com.br/posts/list/84649.java
http://www.guj.com.br/posts/list/84652.java

Principalmente depois que seguiu a dica do pessoal e tentou fazer o exercício por conta própria. :)

peczenyj

Vc só precisa da stdio.h nesse caso.

Agora, qual o motivo para escrever f1,f2,f3? preguiça?

variaveis com nomes de: local, interurbano e celular são muito mais legíveis.

Agora, quais valores vc esta testando e qual o resultado esperado?

maozinha

[b][i]Obrigado pela ajuda,
cm disse no outro tópico, estou iniciando o curso de ciência da computação e não to pegando bem a matéria,
obrigado pela atenção, valeu.

Vinicius_Sartori

eu acho que se nao usar o conio.h nao vai funfar direito, e eu acho que a sugestão de nomes mais legiveis para as variáveis seria bem melhor, e evite ficar fazendo comentarios desnecessários no código, evite usar barra e barra invertida no seu printf, use caso seja extremamente necessário, dependendo do que seja preciso pode atrapalhar, e o problema do seu scanf exibir o resultado grande pode ser resolvido da seguinte forma…quando ele for exibir o resultado coloque %f5.2 dentro do printf ele deixa mais legivel na exibição, ele vai por o que seria para nós brasileiros o 1,5 por exemplo…

ViniGodoy

O conio.h não é standard e faz parte só dos compiladores Borland. Por isso, não adianta tentar usa-la no DevCpp ou no Code::Blocks.

http://www.bloodshed.net/dev/faq.html#conio

T

Amigo, nunca use float em um programa em C, a menos que você saiba o que está fazendo. Em particular, quando você está aprendendo, é que não deve usar mesmo. Use sempre double - isso é uma recomendação dos autores da linguagem (Kernighan & Ritchie).

A precisão de float (32 bits de tamanho, mas somente 21 de precisão, se não me engano) é muito baixa para ser usada em um programa para fazer contas. Ele serve para outras coisas (por exemplo, em computação gráfica), mas não para fazer cálculos com dinheiro.

Não testei seu programa, mas acho que ele funcionaria melhor (daria os resultados mais corretos) se fosse todo passado para double (a única sutileza é que “scanf” pede “%lf” - L minúsculo, F minúsculo - para ler em uma variável double).

Outra coisa: não use nomes de variáveis “a, b, c, d…” ou como você fez, “f1, f2, f3”… Dê um nome mais decente para suas variáveis - nem que seja para pôr “marisa”, “silva”, “cristina”, “kirchner” etc.
E não economize variáveis.
Você não torna seu programa mais rápido usando “float” ou economizando variáveis.

Dennis_Ritchie

Meu caro nunca fassa isso!!! Como o teu objectivo é usar apenas uma variavel para receber o resultado d todos os calculor faca o seguinte: r=r +(novocalculo); e agora so um conselho aos outros membros do forum, kdo tiverem a explicar algo nao o facam com ignorancia ou coisa parecida, porque comeca-se com o basico.

OBS: aconselho-te a usar double nestes casos, e olha com o metodo k apliquei ai vc deve inicializar a variavel r=0.0; System.out.println(“Fuiiiii, e forca nos estudos”);

Andre_Brito

Só pra aproveitar o gancho, não entendi o que o código faz:

#include <stdio.h>

int main() { 
   unsigned value = 7;
   unsigned c; 
   unsigned displayMask = 1 << 31; 

   printf( "%u = ", value );
   for ( c = 1; c <= 32; c++ ) { 
      putchar( value & displayMask ? '1' : '0' );
      value <<= 1;

      if ( c % 8 == 0 ) {
         putchar( ' ' );
      }
   }

   getchar();

   return 0;
}
R

dedejava, rodei o exemplo aqui, ele exibe na tela o binário do número q vc coloca na variável "value"
ex: value = 7, é exibido:
00000000 00000000 00000000 00000111

Andre_Brito

rerodrig,

Pois é cara, a saída eu consigo ver. Mas não entendo como ele fez aquela saída, entende?

Essa parte:

unsigned value = 7;  
unsigned c;   
unsigned displayMask = 1 << 31;   

printf( "%u = ", value );  
for ( c = 1; c <= 32; c++ ) {   
   putchar( value & displayMask ? '1' : '0' );  
   value <<= 1;  

   if ( c % 8 == 0 ) {  
          putchar( ' ' );  
       }  
}

Entende?

R

cara, fiquei com um pouco de dúvida também com algumas coisas, mas dei uma pesquisada e fiz os comentários no código, qualquer dúvida posta aí, falow!

#include <stdio.h>  
  
int main() {   

   unsigned value = 7;  
   unsigned c;   

   /*
   define a mascara de exibição
   se não me engano, coloca o 1 deslocado a esquerda de 31 caracteres
   ex: 10000000 00000000 00000000 00000000
   */
   unsigned displayMask = 1 << 31;   
  
   printf( "%u = ", value );  
   for ( c = 1; c <= 32; c++ ) {   

      /*
      usa o AND BINÁRIO para combinar cada bit de value e da mascara
      exibindo 0 ou 1, se o corrente bit de value estiver preenchido ou não
      */
      putchar( value & displayMask ? '1' : '0' );  
      
      //vai um bit para esquerda em "value"
      value <<= 1;  
      
      /*
      apenas para colocar o espaço e deixar com a formatação correta
      */
      if ( c % 8 == 0 ) {  
         putchar( ' ' );  
      }  
   }  
  
   getchar();  
  
   return 0;  
   
}
Andre_Brito

Ainda ficou meio estranho.
Quando eu terminar o artigo que tenho pra escrever pra faculdade eu volto a estudar C. To até pensando em achar um computador bem velho pra programar usando C e C++. :slight_smile:

Abraços.

R

Só achei um pouco confuso esse displayMask, mas tá valendo. Boa sorte nos estudos de C/C++!

ViniGodoy

Por que tem que ser bem velho?

Aliás, é melhor vc decidir se vai estudar C ou C++. Se você pensa em criar software embarcado, firmware ou trabalhar com microprocessadores, vai pro C.

Se seu negócio são aplicações mais comerciais, que integrem com Windows ou mesmo jogos de computadores, opte pelo C++.

T

Na verdade, se você vai criar programas em MS Visual C++ (Visual Studio 2008), arranje a melhor máquina que tiver - o VS 2008 e o Eclipse estão pau a pau na velocidade e na quantidade de recursos. Se instalar o MSDN (help on-line do Visual Studio 2008) você vai ver que o Eclipse + JDK até que são bem econômicos quanto a disco :stuck_out_tongue:

ViniGodoy

Se quiser uma simples e boa, eu recomendo que use o Code::Blocks.

É pequena o suficiente para caber num pen-drive, e tem os principais recursos básicos: Code completion, sintax coloring, integração com depurador, formatação automática de código, etc. O projeto é bem ativo, sendo a última versão lançada recentemente.

É bem melhor que o DevCpp, que muita gente fala, que não tem versão a uns 2 ou 3 anos já.

O link para ele é:
http://www.codeblocks.org

Fiz um tutorial para instala-lo. Na verdade, cobre não só o Code::Blocks, mas também a criação de um ambiente para o desenvolvimento de jogos. É útil pq vc já pode ter uma idéia de como configurar libs externas na IDE (não que seja muito difícil):
http://vinigodoy.wordpress.com/2007/11/18/criando-um-ambiente-para-desenvolver-jogos/

Andre_Brito

Por que tem que ser bem velho?

Aliás, é melhor vc decidir se vai estudar C ou C++. Se você pensa em criar software embarcado, firmware ou trabalhar com microprocessadores, vai pro C.

Se seu negócio são aplicações mais comerciais, que integrem com Windows ou mesmo jogos de computadores, opte pelo C++.

É… esse de escolher uma das duas é um problema.

Valeu pelo tutorial, ViniGodoy. Eu já usava o code::blocks, mas não achei pra ubuntu (na verdade achei, mas é impossível entender como instalar).

Abraço.

ViniGodoy

Já tentou depois que saiu a versão oficial?
Agora não tem mais o esquema dos nightly builds. Parece que é só um RPM simples.

Andre_Brito

É.
Depois que fui ler seu tutorial me pareceu bem mais fácil baixar. Instalei de acordo com seu tutorial. To na faculdade agora, mas quando chegar em casa vou colocar no Linux.

Abraço e valeu ViniGodoy!!

Andre_Brito

Pra instalar no Ubuntu é um parto…
E ainda ocorre um bug, porque pede pra atualizar o sistema (o SO). Quando vou atualizar, dá um erro, e eu tenho que usar o comando

sudo apt-get install -f

E nisso, o code:blocks é removido :frowning:

Dieval_Guizelini

É por essas e outras que não me agrada os debians likes…

você já fez isso:
sudo passwd root
su
e tentou baixar o codeblocks-8.02-src.tar.bz2 e compilar?
sempre é uma alternativa.

fw

Dieval_Guizelini

A sim,

apenas para apresentar uma lista de compiladores C:
http://www.thefreecountry.com/compilers/cpp.shtml

Eu já testei estes:
MS Visual C++ (usem apenas para projetos… .NET e extensões ms)
Turbo C++ / Borland C - para plataforma MS, ainda acredito ser o melhor compilador
Watcom C - esse é bem legal, me fez lembrar de como o MS-C antes da era Visual éra bom, mesmo com os bugs de ponto flutuante que tinha na versão 5.
Dev-C++ - eu tava com esse instalado no meu notebook até a semana passada, esse carinha me deu uns erros em calculos usando números imaginários, tive que mudar de compilador…
Intel C++ - fiz um teste, apenas para ver se o otimizador de código estava melhor… acho que fico com o gcc mesmo.

fw

ViniGodoy

O compilador do DevCpp é o MinGW 3.4.1.
A versão atual do MinGW é a 5.1.3…

O IDE do Dev também omite parte das mensagens de erro… é por isso que eu sempre recomendo o Code::Blocks no lugar. Ou o Visual, se vc não se importar de algo mais pesado e menos padrão.

O Turbo C é legal. Só cuidado que a famosa conio.h também não é padrão e só existe nos compiladores Borland.

Andre_Brito

Dizem que o Anjuta também é legal, mas eu queria ficar compatível em IDEs na troca de Windows pra Linux. Senão fica uma baboseira.
Abraço.

Criado 16 de março de 2008
Ultima resposta 14 de abr. de 2008
Respostas 27
Participantes 10