Ir ao conteúdo

Posts recomendados

Postado

Preciso de ajudar para criar o seguinte programa em C .

Dados tres numeros reais a, b e c, representando os lados de um triangulo, escreva um programa
em C que calcula a area deste triangulo usando a formula de Heron. Seu programa deve realizar
o calculo usando uma funçao com o seguinte prototipo:

float area_triangulo (float , float , float ) ;
Alem disso, sua funçao deve prever situaçoes em que os lados recebidos como entrada nao formam
um triangulo, retornando −1.00 neste caso.

 

 

Postado

@Bruna Christina

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

float area_triangulo(float *a, float *b, float *c){
	float r1,r2,r3;
	float p=*a+*b+*c;
	p=p/2;
	r1=p-*a;r2=p-*b;r3=p-*c;
	p=p*r1*r2*r3;
	p= sqrt(p);
	return p;	
}
int main() {
	float a,b,c;
    printf("Digite a area A do triangulo\n");
    scanf ("%f",&a);
    
    printf("Digite a area B do triangulo\n");
    scanf ("%f",&b);
    
    printf("Digite a area C do triangulo\n");
    scanf ("%f",&c);
    
    float resultado = area_triangulo(&a,&b,&c);
    printf ("aproximadamente: %.2f",resultado);

	
}

 

Postado
32 minutos atrás, herbertbahia disse:

@Bruna Christina


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

float area_triangulo(float *a, float *b, float *c){
	float r1,r2,r3;
	float p=*a+*b+*c;
	p=p/2;
	r1=p-*a;r2=p-*b;r3=p-*c;
	p=p*r1*r2*r3;
	p= sqrt(p);
	return p;	
}
int main() {
	float a,b,c;
    printf("Digite a area A do triangulo\n");
    scanf ("%f",&a);
    
    printf("Digite a area B do triangulo\n");
    scanf ("%f",&b);
    
    printf("Digite a area C do triangulo\n");
    scanf ("%f",&c);
    
    float resultado = area_triangulo(&a,&b,&c);
    printf ("aproximadamente: %.2f",resultado);

	
}

 

Muito obrigada ! Mas esse programa prever situaçoes em que os lados recebidos como entrada nao formam
um triangulo, retornando −1.00 neste caso ? 

Postado
10 minutos atrás, herbertbahia disse:

@Bruna Christina essa parte eu nao entendir. me explique melhor quando e como essa situação acontece para que eu possa implementar essa função

Se a soma entre os dois lados é igual ao terceiro, esse triângulonão pode existir.

No caso para nao existir é  soma = 0 ou menor  que a soma  dos  lados 

 

se ((a== 0 || b== 0 || c==0)) || a +c < b || b +c < a))

Então  imprimi -1.00

Postado

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

float area_triangulo(float *a, float *b, float *c){
	float r1,r2,r3;
	float p=*a+*b+*c;
	p=p/2;
	r1=p-*a;r2=p-*b;r3=p-*c;
	p=p*r1*r2*r3;
	p= sqrt(p);
	return p;	
}
int main() {
	float a,b,c;
    printf("Digite a area A do triangulo\n");
    scanf ("%f",&a);
    
    printf("Digite a area B do triangulo\n");
    scanf ("%f",&b);
    
    printf("Digite a area C do triangulo\n");
    scanf ("%f",&c);
    
    //Se a soma entre os dois lados é igual ao terceiro, esse triângulonão pode existir.
    if ((a+b!=c&&a+c!=b&&b+a!=c&&b+c!=a&&c+a!=b&&c+b!=c)&&
    //No caso para nao existir é  soma = 0 
	(a+b!=0&&a+c!=0&&b+a!=0&&b+c!=0&&c+a!=0&&c+b!=0))
	{
    float resultado = area_triangulo(&a,&b,&c);
    printf ("aproximadamente: %.2f",resultado);
    }
    else{
    	printf("-1");
	}

	
}

 

adicionado 2 minutos depois
1 hora atrás, Bruna Christina disse:

menor  que a soma  dos  lados

nao posso ter um lado menor que a soma de outros dois lados?

Postado
6 horas atrás, herbertbahia disse:

essa parte eu nao entendir. me explique melhor quando e como essa situação acontece para que eu possa implementar essa função.

essa situação aconteceria se o usuario digitar numero negativo ou o que mais

 

Preste atenção à fórmula em si: qualquer condição que invalide a raiz quadrada tem que ser excluída.

Leitura de números negativos seria algo curioso: porque deixar que aconteça isso num primeiro momento? Não seria o caso de inverter o sinal ao ler? A medida de um segmento não é considerada como algo vetorial, em geral, afinal é uma medida e não tem sinal.
 

De volta à formula
 

p = 0, p = a, p = b e p = c vão zerar o produto então esses são os valores invalidantes. p vai ser zero se todos os lados forem zero, então o mais simples é garantir que os 3 valores sejam maiores que zero e dizer algo ofensivo ao chato que digitou zero como uma medida. E resolver as equações para p = a, p = b e p = c, com p = (a + b + c)/2. Ou seguir como a autora explicou.

 

Sobre as mensagens do tipo

    printf("Digite a area C do triangulo\n");

Não foi uma boa escolha. O programa calcula a área do triangulo. A B e C são segmentos e o que vai ser lido é o comprimento. Eles não tem área por si... É estranho perguntar a area A do triangulo para calcular a area. Do triangulo.

  • Curtir 1
Postado

Meu codigo imprime os valores,

esta dando erro nas linhas if em diante :(

 

 

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

 //Calcula a area do triangulo usando a formula de Heron.
 //numeros reais a, b e c, sao lados de um triangulo.

float area_triangulo(float *a, float *b, float *c){
    float r1,r2,r3;
    float p=*a+*b+*c;
    p=p/2;
    r1=p-*a;r2=p-*b;r3=p-*c;
    p=p*r1*r2*r3;
    p= sqrt(p);
    return p;
}

int main() {
    float a,b,c;
    printf("%f",a);
    scanf ("%f",&a);

    printf("%f",b);
    scanf ("%f",&b);

    printf("%f",c);
    scanf ("%f",&c);

float resultado = area_triangulo(&a,&b,&c);

    // Se soma = 0 ou menor  que a soma de 2 lados ,imprime -1
    //caso contrario o triangulo existe imprime resultado

    if ((a== 0 || b== 0 || c==0)) || a +c < b || b +c < a)){
        prinf("-1",resultado);

    }else{
        prinf("%f",resultado);
    }

}
 

Postado

@Bruna Christina ola bruna para postar um codigo você pode usar a opção que tem um desenho assim (<>) isso evita o codigo vim com erros, estive observando seu codigo e voce nao esta inicializando a,b,c com nenhum valor olha essa parte


    float a,b,c;
    printf("%f",a);
    scanf ("%f",&a);

vai imprimir 0 pois "A" nao tem valor nenhum , caso for iniciar com um valor predefinido entao nao precisaremos utilizar o scanf para fazer a leitura do valor então certo?

se tiver mais alguma duvida tentarei ajudar. 

Postado
4 minutos atrás, herbertbahia disse:

@Bruna Christina ola bruna para postar um codigo você pode usar a opção que tem um desenho assim (<>) isso evita o codigo vim com erros, estive observando seu codigo e voce nao esta inicializando a,b,c com nenhum valor olha essa parte


    float a,b,c;
    printf("%f",a);
    scanf ("%f",&a);

vai imprimir 0 pois "A" nao tem valor nenhum , caso for iniciar com um valor predefinido entao nao precisaremos utilizar o scanf para fazer a leitura do valor então certo?

se tiver mais alguma duvida tentarei ajudar. 

 Meu codigo final esta esse ainda não faz o que eu gostaria

 

 

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

 //Calcula a area do triangulo usando a formula de Heron.
 //numeros reais a, b e c, sao lados de um triangulo.

float area_triangulo(float *a, float *b, float *c){
    float r1,r2,r3;
    float p=*a+*b+*c;
    p=p/2;
    r1=p-*a;r2=p-*b;r3=p-*c;
    p=p*r1*r2*r3;
    p= sqrt(p);
    return p;
}

int main() {
    float a,b,c;

    // Com a,b,c maiores que zero
    a > 0;
    b> 0;
    c> 0;

    printf("%f",a);
    scanf ("%f",&a);

    printf("%f",b);
    scanf ("%f",&b);

    printf("%f",c);
    scanf ("%f",&c);

float resultado = area_triangulo(&a,&b,&c);

    // Se soma = 0 ou menor  que a soma de 2 lados ,imprime -1
    //caso contrario o triangulo existe imprime resultado

    if ((a == 0 || b == 0 || c == 0) || a + c < b || b + c < a){
        printf("-1");
    }else{
        printf("%f",resultado);
    }

}

Postado

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

 //Calcula a area do triangulo usando a formula de Heron.
 //numeros reais a, b e c, sao lados de um triangulo.

float area_triangulo(float *a, float *b, float *c){
    float r1,r2,r3;
    float p=*a+*b+*c;
    p=p/2;
    r1=p-*a;r2=p-*b;r3=p-*c;
    p=p*r1*r2*r3;
    p= sqrt(p);
    return p;
}

int main() {
    float a,b,c;
    
    a=9;b=7;c=14;
    printf("a: %.2f\n",a);

    printf("b: %.2f\n",b);

    printf("c: %.2f\n",c);


    // Se soma = 0 ou menor  que a soma de 2 lados ,imprime -1
    //caso contrario o triangulo existe imprime resultado

    if (a== 0 || b== 0 || c==0 || a +c < b || b +c < a){
        printf("-1");

    }else {
        float resultado = area_triangulo(&a,&b,&c);
        printf("area aproximadamente: %.2f",resultado);
    }

}

Heron de Alexandria é o responsável por elaborar uma fórmula matemática que calcula a área de um triângulo em função das medidas dos seus três lados. A fórmula de Heron de Alexandria é muito útil nos casos em que não sabemos a altura do triângulo, mas temos a medida dos lados.
Em um triângulo de lados medindo a, b e c podemos calcular a sua área utilizando a fórmula de Heron:



Exemplo 1
Calcule a área do triângulo a seguir:

p = (9 + 7 + 14) / 2
p = 30 / 2
p = 15

A = √15(15 – 9)(15 – 7)(15 – 14)
A = √15 * 6 * 8 * 1
A = √720
A = 26,83 cm2(aproximadamente)

triangulo(4).jpg

Postado

@herbertbahia Muito bom ótimo, o único problema é que não posso das valores para a,b,c pois o programa admite  qualquer numero respeitando que :

 

- Na mesma linha havera tres valores do tipo float a, b e c, separados por um espaço, representando os lados do triangulo.

- Alem disso, sua funçao deve prever situações em que os lados recebidos como entrada não formam um triangulo, retornando −1.00 neste caso.

 

- Se o triangulo existir devera ser impressa a sua área. Caso contrario, devera ser impresso erro.

 

Postado

@Bruna Christina tive que me aprofundar no assunto rsrs ,pesquisando descobrir...

Condição de existência de um triângulo

Dados três segmentos de reta distintos, se a soma das medidas de dois deles é sempre maior que a medida do terceiro, então, eles podem formar um triângulo. Por exemplo, dados os segmentos AB = 16 cm, CD = 20 cm e EF = 30 cm, é possível usá-los para construir um triângulo, pois as somas abaixo são verdadeiras:

16 + 20 = 36 > 30

16 + 30 = 46 > 20

30 + 20 = 50 > 16

logo sua condição (a== 0 || b== 0 || c==0 || a +c < b || b +c < a) é insuficiente para para prevenir recepção de outros simbolos geometricos envez de um triangulo. posso tentar refazer o codigo nas condiçoes certas.

adicionado 20 minutos depois

pelo que entendir é isso

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

float area_triangulo(float *a, float *b, float *c){
	float r1,r2,r3;
	float p=(*a+*b+*c)/2;
	r1=p-*a;r2=p-*b;r3=p-*c;
	p=p*r1*r2*r3;
	p= sqrt(p);
	return p;	
}
int main() {
	float a,b,c,resultado;
    printf("Digite a area A em centimetros: \n");
    scanf ("%f",&a);
    
    printf("Digite a area B em centimetros:\n");
    scanf ("%f",&b);
    
    printf("Digite a area C em centimetros:\n");
    scanf ("%f",&c);
    if ((a+b>c&&a+c>b&&c+b>a)&&(a>0&&b>0&&c>0)){
    resultado = area_triangulo(&a,&b,&c);
    printf ("aproximadamente: %.2f",resultado);
    }
    else{
    printf ("1.00");
    }

	
}

 

adicionado 20 minutos depois

sucesso nos estudos!.

Postado

 

32 minutos atrás, herbertbahia disse:

Heron de Alexandria é o responsável por elaborar uma fórmula matemática que calcula a área de um triângulo em função das medidas dos seus três lados. A fórmula de Heron de Alexandria é muito útil nos casos em que não sabemos a altura do triângulo, mas temos a medida dos lados.
Em um triângulo de lados medindo a, b e c podemos calcular a sua área utilizando a fórmula de Heron

 

18 minutos atrás, herbertbahia disse:

Condição de existência de um triângulo

Dados três segmentos de reta distintos, se a soma das medidas de dois deles é sempre maior que a medida do terceiro, então, eles podem formar um triângulo

 

Pois é @herbertbahia o Teorema de Heron é para calcular a área de triângulos quando não se tem a altura e não se quer calcular a altura, claro. E você não pode associar essa condição de existência ao Teorema de Heron. Está escrito lá: "casos em que não sabemos a altura do triângulo". 
Se você dissesse lá em Alexandria para o tal Heron que o triângulo tem que existir para você aplicar a tal fórmula ele provavelmente iria xingar você. Antes de 80d.c. Em grego. O teorema se aplica a triângulos. Se não existe não é um triângulo.

 

Aqui você deve testar porque são valores arbitrários digitados por alguém, claro. Nada tem a ver com  "se aprofundar no assunto" com o tal Teorema de Heron

 

O desenho que postou, de https://mundoeducacao.bol.uol.com.br/matematica/formula-heron.htm poderia estar acompanhado do link. E acho que foi maldade cortar justamente a fórmula. Heron ficaria chateado com você e qualquer um que quisesse afinal ver a fórmula que o programa avalia... E os caras do UOL :) 

 

Assim seria mais justo
 

"Em um triângulo de lados medindo a, b e c podemos calcular a sua área utilizando a fórmula de Heron:"
image.png.c8aca598f03a5a4f11dba7f95897d428.png

 

 

Direto de https://mundoeducacao.bol.uol.com.br/matematica/formula-heron.htm

 

Por outro lado esse trecho tem problemas

    // Se soma = 0 ou menor  que a soma de 2 lados ,imprime -1
    //caso contrario o triangulo existe imprime resultado

    if (a== 0 || b== 0 || c==0 || a +c < b || b +c < a){
        printf("-1");

    }else {
        float resultado = area_triangulo(&a,&b,&c);
        printf("area aproximadamente: %.2f",resultado);
    }
  • O comentário está errado: não é soma = 0 e sim produto = 0
  • E depois você pretendia dizer que um dos lados não pode ter o comprimento menor que a soma dos outros dois, uma condição que valida as medidas como correspondentes a um triângulo real. Essa é uma conclusão bem óbvia. Veja esse medíocre desenho:
    tri.thumb.jpg.f04206f81d04e82ce8d066defd744be0.jpge no triângulo da direita você vê que se a linha pontilhada tiver comprimento menor que 2 o lado c não vai alcançar a outra ponta e o triângulo não fecha...

Partindo desse exemplo, você vê que para a = 8, b = 1 e c = 10 não tem triângulo, mas seu if não testa porque você testou só duas das 3 condições...

 

Talvez como escrito abaixo seja mais legível. E seria mais difícil de você esquecer um dos lados afinal ;) E retornar faz mais sentido que um else porque é uma conclusão definitiva: não há triângulo nessas condições e o programa termina.

 

    // produto = 0 ou soma do comprimento de dois lados
    // menor que o comprimento do terceiro
    if ( 
        (a*b*c == 0) ||
        a < (b+c) || 
        b < (a+c) || 
        c < (a+b)
    )
    {
        printf("-1\n");
        return 0;
    }


 

 

image.png

adicionado 23 minutos depois

De todo modo a condição de existência é um pouco mais complexa que o desenho :D

Citação

Só irá existir um triângulo se, somente se, os seus lados obedeceram à seguinte regra: um de seus lados deve ser maior que o valor absoluto (módulo) da diferença dos outros dois lados e menor que a soma dos outros dois lados. Veja o resumo da regra abaixo:

| b - c | < a < b + c
| a - c | < b < a + c
| a - b | < c < a + b

 

Da mesma fonte https://mundoeducacao.bol.uol.com.br/matematica/condicao-existencia-um-triangulo.htm

adicionado 52 minutos depois

Durante o ☕

 

a condição literalmente pode ser escrita assim

    int condicao = 
        (fabs(b - c) < a) && (a < (b + c)) ||
        (fabs(a - c) < b) && (b < (a + c)) ||
        (fabs(a - b) < c) && (c < (a + b));
    if (!condicao)
    {
        printf("-1");
        return -1;
    };  // if()

 

  • Haha 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!