Linguagem C

[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”);
}

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

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

oq é um debugger?

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.

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:

[code]
#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);

//O resultado do novo f1 deve ser guardado em f1, já 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);
}[/code]

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. :slight_smile:

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?

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

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…

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

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.

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”);

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;
}

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

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?

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!

[code]#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;

}
[/code]

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.

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

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++.

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:

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/