Jump to content

Código com void


magnos
 Share

Recommended Posts

boa noite tenho este codigo em c em que o ultimo void, em quando executa o if else em vez de dar o valor de zero retorname o valor do ponteiro como corrijo isto.

#include <stdio.h>
#include <stdlib.h>

void triangulo(float *area){

float b;
float a;

printf("\n coloque o valor da base \n");
scanf("%f",&b);
printf("\n coloque o valor da altura \n");
scanf("%f",&a);
*area=((b*a)/2);
}

void quadrado(float *area){

float l;

printf("\n coloque o valor do lado \n");
scanf("%f",&l);
*area=(l*l);
}

void rectangulo (float *area){

float b;
float a;

printf("\n coloque o valor da base \n");
scanf("%f",&b);
printf("\n coloque o valor da altura \n");
scanf("%f",&a);
if(b==a){
   printf("\n o rectangulo tem lados iguais dois a dois \n");
   printf("\n o quadrado e que tem os quatro iguais \n");
   printf("\n  coloque uma medida maior na base \n");
   }
       else{
   *area= (b*a);
       }
}

void losangulo (float *area){

float d;
float D;

printf("\n coloque o valor da diagonal menor \n");
scanf("%f",&d);
printf("\n coloque o valor da diagonal maior \n");
scanf("%f",&D);
if(D==d){

printf("\n a diagonal maior nao pode ser igual a menor \n");
}else{
*area=((D*d)/2);}
}

void trapezio(float *area){

float b;
float B;
float a;


printf("\n coloque o valor da base menor \n");
scanf("%f",&b);
printf("\n coloque o valor da base maior \n");
scanf("%f",&b);
printf("\n coloque o valor da altura \n");
scanf("%f",&a);
if(B==b){

printf("\n a base maior nao pode ser igual a menor \n");
}else{
   *area=(((B+b)/2)*a);
   }
}

void polignor (float *area){

float a;
float p;

printf("\n coloque o valor da altura \n");
scanf("%f",&a);
printf("\n coloque o valor do perimetro \n");
scanf("%f", &p);
*area=((p*a)*2);
}

void circulo (float *area){

float PI = 3.14;
float r;

printf("\n coloque o valor do raio");
scanf("%f",&r);
if(r < 0) {
printf ("o raio nao pode ser negativo");
       }
else{
*area= (PI*(r*r));
           }
}

int main(){

char k;
int opcao;
float a;
float b;
float c;
float d;
float e;
float f;
float g;

do {
k;
printf("\n escolha uma opcao: \n");

printf("\n 1. triangulo \n");
printf("\n 2. quadrado \n");
printf("\n 3. rectangulo \n");
printf("\n 4. losangulo \n");
printf("\n 5. trapezio \n");
printf("\n 6. poligno regular \n");
printf("\n 7. circulo \n");

scanf("%d",&opcao);
fflush(stdin);

switch(opcao){

case 1:
       triangulo(&a);
       printf("\n a area do triangulo e %.2f \n", a);
       break;

case 2:
       quadrado(&b);
       printf("\n a area do quadrado e %.2f \n", b);
       break;

case 3:
       rectangulo(&c);
       printf("\n a area do rectangulo e %.2f \n", c);
       break;

case 4:
       losangulo(&d);
       printf("\n a area do losangulo e %.2f \n", d);
       break;
case 5:
       trapezio(&e);
       printf("\n a area do trapezio e %.2f \n", e);
       break;

case 6:
       polignor(&f);
       printf("\n a area do poligno regular e %.2f \n", f);
       break;

case 7:
       circulo(&g);
       printf("\n a area do circulo e %.2f \n", g);
       break;
}

printf("\n deseja continuar com os calculos  s ou n \n");
scanf("%s",&k);
fflush(stdin);

}while(k=='s'||k=='S');

system ("pause");
}
Link to comment
Share on other sites

O problema é na circulo(), certo? Queres que quando o utilizador dê um número negativo, o resultado seja 0?

Não sei se é isso, mas se for, lembra-te que em C as variáveis quando ainda não se lhes deu um valor, elas não têm 0, têm lixo (ou seja, o que quer que estivesse nessa posição de memória anteriormente).

Por isso, tens que fazer *area = 0.0 explicitamente.

Se não for isto, tens que te explicar melhor 👍

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Guest user14912

hey moço, coloca lá o código dentro das tags, senão a malta não se entende, parece que estamos a ler a bíblia.

E sim o @IceBrain tem toda a razão, quando atribuis um valor a uma variável e queres testar logo a partida o valor dessa variável supondo que ela nunca lhe tenha sido tomado nenhum valor terás de fazer a inicialização.


float r=0;

if(r<0) 

Agora se tiveres a garantia que ela é inicializada à partida então, não há necessidade de inicializares.


float r;
scanf("%f",r);

if(r<0)

Link to comment
Share on other sites

obrigado ice brain a tua dica foi muito util eis aqui como resolvi.

void circulo (float *area){

float PI = 3.14;
float r;

printf("\n coloque o valor do raio");
scanf("%f",&r);
if(r< 0) {
printf ("o raio nao pode ser negativo");
*area=0;
        }
else{
*area= (PI*(r*r));
            }
}

assim quando o utilizador coloca um numero negativo o programa retorna o valor zero e a msg que nao há areas negativas.

obrigado a todos.

Link to comment
Share on other sites

magnos, não sei qual é a exactidão exigida pelo trabalho que tas a desenvolver, mas sugiro meteres mais algumas casas decimais no PI. por exemplo, 3.141592... já tens 6 casas de precisão.

já agora, se não vais modificar o valor do PI ao longo do programa, não uses uma variável, usa antes uma constante.

#define PI 3.141592

Agora, cada vez que escreveres PI em alguma expressão matemática, será automaticamente substituído pelo compilador durante a compilação do programa.

Não se nota, mas usar uma constante em vez de uma variável aumenta a performance do programa (demora menos alguns nanossegundos a executar... se fosse dentro de um FOR até 1 milhão, a história era outra).

É mais que obvio que podes continuar com a tua variável... é apenas uma questão de "boas práticas de programação".

Atenciosamente,

LordFokas

Link to comment
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
 Share

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