Jump to content
rafaelcarvalho20

Limitar Dígitos da Variável

Recommended Posts

rafaelcarvalho20

Olá caros amigos, boa tarde!!!

sou novo aqui no fórum, e achei o mesmo muito legal.

Parabéns pelos idealizadores. O meu problema é o seguinte. estou desenvolvendo um algorítmo que leia 4 notas de um aluno, mostrando a média do mesmo. Porém as notas devem ser "float". mas minha dúvida é!!!

se o usuário digitar vários dígitos na Nota1, Nota2, Nota3, Nota4, o sistema vai aceitar. gostaria de limita-los, digitando assim somente desta maneira. "1.3", ou "9.7", etc. como posso obter esse sucesso no algorítmo?

Obrigado pela atenção.


A vida pode até te derrubar, mas é você quem escolhe a hora de se levantar.

Mr. Han - Karate Kid (2010)

Share this post


Link to post
Share on other sites
KTachyon
float nota;

std::cin >> nota;

nota *= 10;
nota = floor(nota + 0.5);

nota /= 10;


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
rafaelcarvalho20

float nota;

std::cin >> nota;

nota *= 10;
nota = floor(nota + 0.5);

nota /= 10;

Amigo, obrigado pela rápida atenção, mas sou iniciante em c++, estou aprendendo ainda as funções dos códigos. a questão e a seguinte, uso "scanf", como mostra o código.

printf("DIGITE AS NOTAS DO ALUNO N:o %d \n\n", cont);           

            printf("PRIMEIRA NOTA\n");

            scanf("%f", &n1);

            printf("SEGUNDA NOTA\n");

            scanf("%f", &n2);

            printf("TERCEIRA NOTA\n");

            scanf("%f", &n3);

            printf("QUARTA NOTA\n");

            scanf("%f", &n4);

            media=(n1+n2+n3+n4)/4;

printf("A MEDIA DO ALUNO EH:%f", media);

a dificuldade que gostaria de solucionar é no scanf("%f");

em uma pesquisa encontrei que para numeros inteiros

scanf("%2d"); funcionava corretamente, mas em float num funciona.


A vida pode até te derrubar, mas é você quem escolhe a hora de se levantar.

Mr. Han - Karate Kid (2010)

Share this post


Link to post
Share on other sites
KTachyon

Penso que deves utilizar a precisão toda para a média e apenas imprimir o resultado com as casas decimais que pretendes definir. Para isso podes utilizar:

printf("%2.1f", media);

O problema é que o formato não te arredonda a média, ou seja, se a tua média for 2.567, o printf() vai devolver 2.5 em vez de 2.6. Podes resolver o problema da mesma forma como eu resolvo no código que coloquei:

printf("%2.1f", media + 0.05);

Que basicamente faz com que o valor saia com a casa decimal arredondada. Por exemplo:

media = 9.74 + 0.05 = 9.79 ---"%2.1f"---> 9.7
media = 9.75 + 0.05 = 9.80 ---"%2.1f"---> 9.8


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
rafaelcarvalho20

Penso que deves utilizar a precisão toda para a média e apenas imprimir o resultado com as casas decimais que pretendes definir. Para isso podes utilizar:

printf("%2.1f", media);

O problema é que o formato não te arredonda a média, ou seja, se a tua média for 2.567, o printf() vai devolver 2.5 em vez de 2.6. Podes resolver o problema da mesma forma como eu resolvo no código que coloquei:

printf("%2.1f", media + 0.05);

Que basicamente faz com que o valor saia com a casa decimal arredondada. Por exemplo:

media = 9.74 + 0.05 = 9.79 ---"%2.1f"---> 9.7
media = 9.75 + 0.05 = 9.80 ---"%2.1f"---> 9.8

Olá amigo KTachyon Obrigado pelas dicas, na hora de mostrar a média, deu certo Blza, porém, eu gostaria de bloquear ao usuário na digitação das notas, onde ele não pudesse usar mais que os dígitos ( 9.65 ), onde ele não tivesse permição para digitar ( 69 (Nº. Inteiros) ), entende. Obrigado pelas dicas, segundo o que tenho visto, parece que tenho que entender um pouco mais de vetores, só assim poderei conseguir tal fassanha.

Obrigado desde então, se existir outro método, ou se puderes me dar dicas de como criar estes vetores, obrigado mais uma vez.

Aguardo...


A vida pode até te derrubar, mas é você quem escolhe a hora de se levantar.

Mr. Han - Karate Kid (2010)

Share this post


Link to post
Share on other sites
pikax

Olá amigo KTachyon Obrigado pelas dicas, na hora de mostrar a média, deu certo Blza, porém, eu gostaria de bloquear ao usuário na digitação das notas, onde ele não pudesse usar mais que os dígitos ( 9.65 ), onde ele não tivesse permição para digitar ( 69 (Nº. Inteiros) ), entende. Obrigado pelas dicas, segundo o que tenho visto, parece que tenho que entender um pouco mais de vetores, só assim poderei conseguir tal fassanha.

Obrigado desde então, se existir outro método, ou se puderes me dar dicas de como criar estes vetores, obrigado mais uma vez.

Aguardo...

Como assim??

Impedir do utilizador inserir uma nota invalida como por exemplo -25 ou 36??

Queres os vectores para armazenar as notas?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
KTachyon

Podes fazer essa verificação à entrada. Utilizas uma condição para validar o input do utilizador.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
rafaelcarvalho20

Como assim??

Impedir do utilizador inserir uma nota invalida como por exemplo -25 ou 36??

Queres os vectores para armazenar as notas?

Exatamente amigo pikax, é isso mesmo. e caso ele digite valor inválido, o programa não saia do lugar, ou pode ser que ele retorne com uma mensagem de "Valor inválido", e peça pra ser digitado novamente.

Obrigado.


A vida pode até te derrubar, mas é você quem escolhe a hora de se levantar.

Mr. Han - Karate Kid (2010)

Share this post


Link to post
Share on other sites
KTachyon

Defines a condição do while e é isto que queres:

float notas[100];
int current = 0, condition = 1;


while (condition) {
    printf("NOTA #%d\n", current + 1);
    scanf("%f", &notas[current]);

    if (notas[current] < 20 && notas[current] > 0) {
        current++;
    }
}

float media = 0;
int i;

for (i = 0; i < current+1; i++) { media += notas[i]; }

media /= current+1;

printf("Média: %2.1f", media + 0.05);


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.