Ir para conteúdo
Fórum Script Brasil
  • 0

Exercício resolvido:Leia números reais como caracteres, carácter a carácter


Assissi

Pergunta

Boa dia, este exercício é para iniciantes mas que requer uma certa linha de pensamento(tabela ASCII).

Neste exercício pretende-se criar um código em C que:

  1. Lê nº reais sendo caracteres;
  2. Estes números são sempre feitos desta forma : aaa,aa(3 algoritmos na parte inteira e outra na parte 2) ;
  3. Se  colocarmos algo diferente de um número o programa deve sair;
  4. têm de ser feito com o auxilio de um ciclo;
  5. De cada vez que o ciclo corre é lemos um carácter;
  6. Por fim, escreve-se o valor do  float final, tanto na forma normal como cientifica.

Já tinha visto este exercício feito online algumas vezes, mas como todos que guardavam  caracteres em variáveis diferentes, acho que consegui chegar a forma mais eficaz( menos variáveis) de resolver o mesmo. Por isso, decidi partilhar o mesmo:

/* Leitura de caracteres na forma de um float (aaa,aa)*/

#include<stdio.h>
#include <stdlib.h> /*exit(1)*/

int main () {
  char c;
  int i;
  float m=1000, r=0;
  printf("Escreva um numero com casas até às centenas e 2 casas decimais: ");
  for(i=0;i<6;i++){
	 scanf("%c",&c);
	 if (((c<'0') && (c>'9'))&& ((i!=3)&& (c!=','))){
	 	printf("Não introduziu um numero com as caracteristicas pedidas\n");
		exit(1);
	 }
	if(i!=3){
		m=m/10.;
		r=((int)(c-'0'))*m+r;/*tabela ASCII*/
		printf("\n %.2f \n",r);
	}
  }
  printf("\n O numero é  %.2f ou na forma cientifica %.4E \n",r,r);
}
/*Linha 17 comentada: Pretendeu-se criar um float(r) à medida que se ia recebendo 
 cada caracter c. Para isso multiplicamos o número por m( que varia à medida que 
 deslocamos à direita do número, ou seja , ((int)(c-'0'))*100 dá o algorismo das
 centenas. Além disso, como os números são lidos em caracteres então o inteiro a 
 que corresponde ao nosso caracter é diferente do valor que ele corresponde caso 
 fosse um inteiro, por exemplo (o caracter 1= 49 inteiro) daí se subtrair o caracter
 anterior a este(0).Assim, já passamos a ter o caracter que corresponde ao número 
 inteiro que pretendemos.O int é para passar esse caracter(c-'0') para o inteiro 
 correspondente. Por fim, soma-se a r o valor anterior de r. Dando assim, 
 r=((int)(c-'0'))*m+r.
******************************Assissi**********************************************  

Obrigado, espero que tenham gostado

Assissi

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...