Ir ao conteúdo
  • Cadastre-se

Cálculo da área de um círuclo


fgamaral.kaio

Posts recomendados

#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
Link para o comentário
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
Link para o comentário
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); }

 

Link para o comentário
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.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

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

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