Ir ao conteúdo
  • Cadastre-se

programa em C


Karpov1

Posts recomendados

Neste EP, trabalharemos apenas com a representação de numeros reais positivos. E, para isso, vamos usar a notação em ponto flutuante de um modo simplificado. Nesse modo, um número real positivo será representado por dois números inteiros positivos "m" e "e" tais que:

 n = m.10^-e

Exemplos:

Se, m = 275 e=4 então n = 0,0275

Observe que, nessa representação, m consiste nos algarismos significativos do número, enquanto e indica a posição da vírgula (= posição do separador de casas decimais) do número na notação decimal.

3. Tarefa

    Neste exercício-programa, a sua tarefa será escrever um programa na linguagem C que leia um número real positivo representado na notação descrita na anteriormente e depois exiba o número correspondente na notação decimal. O seu programa deve:

ler um número inteiro m, sendo m>=0 (indicando os algarismos significativos do número decimal)

ler um número inteiro e, sendo e>=0 (indicando a posição da vírgula no número decimal)

mostrar na tela o valor de m.10^-e em notação decimal

Note que você deve usar a vírgula como separador de casas decimais no número exibido pelo seu programa.

O seu programa deverá finalizar depois de executar uma e somente uma vez os passos de 1 a 3. 

As mensagens emitidas pelo seu programa devem ser idênticas às mensagens mostradas nos exemplos da seção seguinte.

Importante: Não devem ser feitas verificações nem outras supostas melhorias no programa.

É esperado que o usuário digite inteiros positivos correspondentes a "m" e "e" e não entre com valores indevidos (como um texto, um número real ou um inteiro negativo).

 

Para corrigir o seu EP, vamos supor que o seu programa obedece exatamente o que está especificado neste enunciado. Tudo que fugir da especificação prejudicará a avaliação de seu trabalho.

As únicas construções --comandos, funções, etc-- da linguagem C que você poderá usar em seu programa são as mais simples, porque eu só tive 3 aulas de computação até agora.

 

4. Exemplos de Execução

    Nos exemplos, considere que tudo que aparece em vermelho foi digitado pelo usuário.

Exemplo 1

Posição do separador de casas decimais é maior do que o número de algarismos:

MAC2166 - EP1 - Usando Inteiros para Representar Reais

 

Digite os algarismos do numero..................: 543210

Digite a posicao do separador das casas decimais: 8

O numero correspondente na notacao decimal e....: 0,00543210

Exemplo 2

Posição do separador de casas decimais é menor do que o número de algarismos:

MAC2166 - EP1 - Usando Inteiros para Representar Reais

 

Digite os algarismos do numero..................: 543210

Digite a posicao do separador das casas decimais: 3

O numero correspondente na notacao decimal e....: 543,210

Exemplo 3

Mais um caso em que a posição do separador de casas decimais é menor do que o número de algarismos:

MAC2166 - EP1 - Usando Inteiros para Representar Reais

 

Digite os algarismos do numero..................: 543210

Digite a posicao do separador das casas decimais: 1

O numero correspondente na notacao decimal e....: 54321,0

Exemplo 4

Um número sem casas decimais (ou seja, a posição do separador de casas decimais é zero):

MAC2166 - EP1 - Usando Inteiros para Representar Reais

 

Digite os algarismos do numero..................: 543210

Digite a posicao do separador das casas decimais: 0

O numero correspondente na notacao decimal e....: 543210

Link para o comentário
Compartilhar em outros sites

Eu sei que scanf serve pra você registrar os valores das variaveis e int pra declarar variaveis...mas honestamente eu nao entendi bem as aulas e procurei na net mas nao achei videos legais e tal...daí eu queria que alguem resolvesse esse ep pra mim e eu iria estudar a partir desse exercicio resolvido...tem problema pra você fazer o problema inteiro?

Link para o comentário
Compartilhar em outros sites

Hmm..tem algo errado..tipo..quando eu ponho n = 543210 e e=1 fica 54321.000000 e quando eu ponho n = 543210 e e= 0 fica 543210.000000. Teve esses zeros a mais no final que nao pode ter...Esse erro teve tanto com pow e no novo programa que você fez agora. ,

 

Agora, nessa nova função que você fez, outro problema surgiu..quando eu ponho n = 543210 e=3 fica 543.210022 

O que está errado?

Link para o comentário
Compartilhar em outros sites

Hey!

Karpov1

Um possível solução:

*Determine o numero dígitos contido o valor decimal atribuído a variável integer que chamaremos de Decimal.

*Feito acima agora com diferença imprima na tela todos os dígitos correspondentes até o limite de  Expoente.

 

Case 1;

Decimal  = 100; (3 dígitos).

Exp        = 3; (3 dígitos).

Resultado 0,100;

Neste caso o statement loop não precisou imprimir além do 0,

 

Case 2;

Decimal  = 100; (3 dígitos).

Exp        =  2; (2 dígitos).

Resultado 1,00;

Neste caso o statement loop não precisou imprimir além do 1,00

Primeiro as centenas do inteiro e pois a virgula, e seguida o resto do número.

 

Hint: Use operadores aritméticos  (%, /), caso não tenha estudo (while, for, do while),

terá de fixa um número fixo de dígitos ("%5d") no scanf, e operar através de if else.

 

;)

Edit...:

Outra maneira de fazer também é:

Simplificar tudo usando o seguinte notação na função printif.

printf( "%d,%0*d", InDecimal / eBase, X, InDecimal % eBase );

eBase = 10XExpoente;

Link para o comentário
Compartilhar em outros sites

Então eu acho que pode ser feito assim.

#include <stdio.h>#include <stdlib.h>int main(){    int n, e, y = 0, z = 1, x = 0;    printf("n: ");    scanf("%d", &n);    printf("e: ");    scanf("%d", &e);        if(e == 0){        printf("%d\n", n);        exit(0);    }    while(e--) {        y += (n % 10) * z;         n /= 10;                z *= 10;                if(n == 0) x++;    }      if(x == 0)        printf("%d.%d\n", n, y);    else{        z = 0;        while(x--){            printf("0");            if(z == 0){                printf(".");                z = 1;            }        }        printf("%d\n", y);    }    return 0;}
Não ficou tão elegante, mas testei com alguns valores e deu certo.
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Dê uma conferida para valores de entrada do tipo:

 

1001

2

 

 

Eu pensei em basicamente seguir pela impressão de todos os dígitos do número. Se e for maior ou igual ao total de dígitos, considera-se a impressão do "0," inicial e demais zeros. Se for menor, imprima-se os dígitos e coloca-se a vírgula onde for adequado.

 

 

 

[ ]'s

LNW

Link para o comentário
Compartilhar em outros sites

Dê uma conferida para valores de entrada do tipo:

1001

2

Eu pensei em basicamente seguir pela impressão de todos os dígitos do número. Se e for maior ou igual ao total de dígitos, considera-se a impressão do "0," inicial e demais zeros. Se for menor, imprima-se os dígitos e coloca-se a vírgula onde for adequado.

[ ]'s

LNW

Realmente, tem um bug no meu código.

Como você faria para contar a quantidade de dígitos da variável n?

Link para o comentário
Compartilhar em outros sites

Err... To só dizendo, você está ciente de que este é um fórum aberto, e que qualquer pessoa pode vir aqui e copiar o código que alguém postar do EP1 de MAC2166 (Introdução a Computação da Escola Politécnica da USP)  e mandar como resposta do Exercício Programa... Certo? E aí todas as pessoas que mandarem o EP copiado (incluindo você) vão receber 0 por plágio...

 

Então eu sugiro que ninguém poste código e apenas deem explicações e dicas de como chegar na solução.

Link para o comentário
Compartilhar em outros sites

Err... To só dizendo, você está ciente de que este é um fórum aberto, e que qualquer pessoa pode vir aqui e copiar o código que alguém postar do EP1 de MAC2166 (Introdução a Computação da Escola Politécnica da USP)  e mandar como resposta do Exercício Programa... Certo? E aí todas as pessoas que mandarem o EP copiado (incluindo você) vão receber 0 por plágio...

 

Então eu sugiro que ninguém poste código e apenas deem explicações e dicas de como chegar na solução.

Isso é delicado de mais, nunca se sabe quem plágio quem.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...