Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
fgamaral.kaio

Cálculo da área de um círuclo

Recommended Posts

#include <stdio.h>

int main() {
	int raio, casas;
	float M_PI, PI, res;

	M_PI = 3.14159265359;
	res = PI*raio*raio;


	printf("\nRaio = ");
	scanf("%d", &raio);

	printf("\nDecimais de PI = ");
	scanf("%d", &casas);

	PI = ("%.*f", &casas, M_PI);
	
	printf("\n%f", PI);

	printf("\n%f", res);

return(0); }

O programa visa calcular a área de um círculo de raio definido pelo usuário. O usuário também seria responsável por definir o número de casas decimais utilizadas no PI do cálculo.

 

PI = ("%.*f", &casas, M_PI);, entretanto, não está definindo o PI com o número de casas escolhidas.

 

Não posso utilizar uma "expressão" para atribuir valor a uma variável? Caso possa, como devo fazê-lo, uma vez que assim está dando errado?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei que é uma gambiarra bem feia, poderia fazer usando POW também, mas parece que assim funcionou

#include <stdio.h>

int main() {
	int raio, casas;
	float M_PI, PI, res;

	M_PI = 3.14159265359;
	PI = M_PI;

	printf("\nRaio = ");
	scanf("%d", &raio);

	printf("\nDecimais de PI = ");
	scanf("%d", &casas);

    int i;
	for(i = 0; i < casas; i++)
        PI *= 10;
    PI = (int)PI;
    for(i = 0; i < casas; i++)
        PI /= 10;

	res = PI*raio*raio;

	printf("\n%f", PI);

	printf("\n%f", res);

    return(0); 
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fgamaral.kaio  você colocou o calculo no começo e precisava ser no final, assim funcionou

mas não consegui determinar o numero de casa decimais de pi.   veja como ficou:

#include <stdio.h>
#include <iostream>
int d;
using namespace std;
int main() {
	int raio, casas;
	float M_PI, PI, res;
 PI=3.141592;
    cout.precision(2); 
	M_PI = 3.14159265359;
	res = PI*(raio*raio);

 	printf("\nRaio em centimetro = ");
	scanf("%d", &raio);

	printf("\nDecimais de PI = ");
	scanf("%.f",&casas);

	
	printf("\n%f", PI);
    res = PI*(raio*raio);
	printf("\n%.2f",res);
	printf(" centimetros");
	printf("\n\ndigite u numero e tecle enter "); 
	scanf("%d",&d);
	scanf("%d",&d);	

return(0); }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, fgamaral.kaio disse:

PI = ("%.*f", &casas, M_PI);

Da onde você tirou isso?

E posso fazer uma pergunta? Por que essa fixação com querer reduzir a quantidade de casas decimais? você não pode reduzir o numero de casas decimais em um float, um float tem um tamanho fixo. Se você aprender a usar o debuger do seu compilador, você vai poder ver o valor das variáveis em qualquer parte do seu programa o tempo todo. Por muito que você queira reduzir o numero de decimais o programa vai preencher com zeros essas posições porque a memória é algo "físico" e foi estabelecido seu tamanho justo na hora de declarar. De uma olhada aqui:
23ef70067a9c4d74bd4e321395c143b6.png

 

Nessa imagem você pode ver uma imagem do depurador do codeblocks. Nessa imagem eu declaro PI e PI2 uma com varias casas decimais e outra com somente 2 e o resto com zeros. No lado esquerdo você pode ver la na memória como elas estão em realidade, você pode ver que nenhuma delas coincide com o que você diz.

Certamente você vai dizer que é porque eu coloquei esse montão de zeros lá. Vou lhe mostrar essa imagem:

Screenshot_1.jpg.3970682c3422a2b5075293fa24979678.jpg

Como falei, la na memória o que n4ao tiver valor vai tomar o tamanho de zero, mas você nunca reduzirá um float.

E o fato que você imprima esse valor como mostrando somente 2 casinhas com printf e o especificador %.2f, na realidade isso não reduz nada, simplesmente que o printf pega e mostra somente 2 casinhas.
Screenshot_2.jpg.4207855d9c959f2fe16c1adb210ecd39.jpg


Então acho que você esta quebrando a cabeça para nada pois como falei, na memória float, double, etc tem os tamanhos fixos tanto do lado da direita como do lado da esquerda do ponto, e mostrar isso de outra maneira não quer dizer que você esteja alterando nada.

Mas se insistir nisso o que você pode fazer é declarar tipo o PI como um array de chars e dependendo do que você quer, você copia somente 2 casinhas dessas, ou 3 ou 4, por exemplo.

 

Editado por vangodp
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @vangodp , primeiramente, obrigado pela paciência. Iniciei em programação por agora e muitas de minhas dúvidas, aos olhos de quem já programa a algum tempo, são demasiado bestas.

      Minha dúvida, em realidade, concernia à possibilidade de definir uma variável de modo análogo com o qual escrevo um printf, por exemplo. Como, aparentemente, não há essa possibilidade, ao menos não de maneira simples, o tópico assemelhou-se muito com o outro que criei. Peço perdão por isso: talvez deveria ter linkado essa dúvida no outro tópico.

      Respondendo sua dúvida, o motivo de eu buscar limitar o número de casas do PI para o programa em questão, é com o intuito de salvar recursos em casos que sejam necessários, por exemplo, apenas 2 casas decimais do PI. Em um programa dessa proporção, praticamete não há diferença, porém em um programa de várias linhas de código, que utilize cálculos mais pesados com o PI e/ou contas  mais extensas, o fato de se usar 2 decimais ao invés de 20, realmente salva recursos, não? Peço, humildemente, que me corrija, caso meu pensamento apresente erro(s).

      Tomando como base os dados exibidos na imagem que postou, realizar um cálculo com "PI" gasta mais recursos do que com "PI2", que por sua vez utiliza o mesmo tanto que "PI3"?

      Novamente, peço perdão caso a dúvida seja demasiado leiga. Apenas quis verificar se entendi.

     

    @devair1010 , o cálculo sem delimitar o número de casas decimais eu já estava conseguindo fazer.

     

    @MassakiMsk , obrigado. Embolei-me um pouco na parte for, porém esforçarei-me mais para tentar compreender. Qualquer coisa, posto aqui.

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Na verdade não importa quantas casas decimais vocÊ usa, o que importa é o tipo de dado, que no seu caso é o float e vai continuar sendo assim mesmo que você diminua a precisão.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Concordo com o que disse massaki. Quantos floats você precisa declarar? 20? 30? 1000? ainda que declarar mil floats o consumo de memória seria 1000*4 bytes que equivale a 4000 bytes. Se qualquer computador moderno hoje em dia possui mínimo 4 gigas de ram. Procure reutilizar as variáveis sempre que puder.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @fgamaral.kaio     você pode atribuir valor com casas decimais à uma variável float veja seu 

    código com algumas modificações :

    #include <stdio.h>
    #include <iostream>
    int d,g;
    double pi;//double pode ter até infinito
    using namespace std;
    int main() {
    	int raio, casas;
    	float M_PI, res;
    	M_PI = 3.14159265359;
     	printf("\nRaio em centimetro = ");
    	scanf("%d", &raio);
    l1:
    	printf("Decimais de PI     = ");
    	scanf("%d",&casas);//.f 
        if(casas==1){pi=3.1;}
        if(casas==2){pi=3.14;}
        if(casas==3){pi=3.141;}
        if(casas==4){pi=3.1415;}
        if(casas==5){pi=3.14159;}
        if(casas==6){pi=3.141592;}
        if(casas==7){pi=3.1415926;}
        if(casas==8){pi=3.14159265;}
        if(casas==9){pi=3.141592653;}
        if(casas==10){pi=3.1415926535;}
        if(casas==11){pi=3.14159265358;}
        if(casas==31){pi=3.1415926535897932384626433832795;}
        if(casas >11){printf("\nsó pode ser ate 11 casas depois da virgula\ndigite um numero e tecle enter");
        scanf("%d",&casas);goto l1;} 
    	printf("\nvalor de casas     = %d",casas);
    	printf("\nvalor de pi        = %.11f",pi);// coloque .11 para imprimir as 11 casas ou 9 para 9 casas
    	printf("\nvalor de raio      = %d",raio);
        res = pi*(raio*raio);
    	printf("\n\nArea do Circulo    = %.11f",res);
    	printf(" centimetros");
    	printf("\n\n       digite um numero e tecle enter "); 
    	scanf("%d",&d);
     
    return(0); }

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Pessoal, preciso de uma ajuda urgente, um professor deu até meia noite pra isso,

     

    Preciso que, quando o resultado de  um cálculo for um número decimal, o ponto ou vírgula seja substituido pela letra V, ficando assim: ao invés de 3.5 seja 3v5.

     

    segue código da minha calculadora

     

     

    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    int main(void)
    {
        float dgt1, dgt2;
        char op;
        //THIAGO MARCELO ARRUDA

        printf("Digite a operacao: ");
        scanf("(%f)%c(%f)", &dgt1, &op, &dgt2);
        switch(op)
        {
        case '+':
         printf("\n Resultado = %1f\n", dgt1+dgt2);
         break;
        case '-':
         printf("\n Resultado = %1f\n", dgt1-dgt2);
         break;
        case '*':
        case 'x':
         printf("\n Resultado = %1f\n", dgt1*dgt2);
         break;
        case '/':
        case':':
         printf("\n Resultado = %1f\n", dgt1/dgt2);
         break;
        default:
         printf("\n Operacao impossivel de ser realizada!!\n");
        }

        system ("PAUSE");
        return 0;
    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    transforma esse 3.5 em uma string e substitua o ponto pela letra 'v' e imprima. para isso use as funções sscanf e fprintf

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×