Ir ao conteúdo

Posts recomendados

Postado

Fala pessoal, de boa? 

Estou fazendo uns exercícios que o professor passou e tem um cujo o enunciado é o seguinte: 

8) Receber valores de base e altura de um triângulo e verificar se são valores válidos (positivos). Em caso afirmativo, calcular a área do triângulo.

No caso, ele nos instruiu a fazer todos os exercícios dessa lista usando estrutura de decisão if. 

Eu fiz tudo certinho e tal (eu acho né) só que caso o usuário coloque valores negativos na entrada de dados, ele exibe uma mensagem de erro e fecha o programa. Pra contornar isso, eu usei o comando goto pra fazer voltar pro início, mas me disseram que não é bom usar esse tipo de comando. Aí queria saber alguma alternativa. Dei uma pesquisada da internet e vi algumas soluções com estrutura de repetição, mas como essa lista é pra exercícios com if, acabei nem me aventurando. Enfim, o código é esse:

 

float b=0, h=0;
	cout<<"Programa para calcular a area do triagulo. Entre com valores positivos.\n";
	inicio:
	cout<<"Digite em sequencia a base e depois a altura.\n";
	cin>> b;
	cin>> h;
	if ((b>0)&&(h>0)){
		b=(b*h)/2;
		cout<<"A area do triangulo eh: " << b << endl;
	}
	else{
		cout<<"Dados inseridos invalidos, insira novamente.\n";
		goto inicio;
	}
	system("PAUSE");
	return 0;

Tem como fazer ele voltar pro inicio sem utilizar o goto? Obrigado!

  • Amei 1
Postado

Acho que a ideia seria essa:

package main

import "fmt"

func main() {
	var b float32 = -1;
	var h float32 = -1;
	var maxTry int = 3;
	var try int = 0;

	for(((b < 0) || (h < 0)) && (try < maxTry)) {
		fmt.Print("Digite o valor da base: ");
		fmt.Scanln(&b);
		fmt.Print("Digite o valor da altura: ");
		fmt.Scanln(&h);
		try++;
		if(((b < 0) || (h < 0)) && (try < maxTry)) {
			fmt.Print("Dados invalidos - ");
			fmt.Println(try);
		}
	}

	if(try < maxTry) {
		try = 0;
		b = (b*h) / 2;
		fmt.Println("Area: ", b);
	} else {
		fmt.Println("Erro !");
	}
}

Se for proibido usar for ... teria como fazer com recursividade:

package main

import "fmt"

func calcArea(try int, maxTry int) bool {
	var b float32 = -1;
	var h float32 = -1;
	var rsp bool = false;
	try++;
	if(try <= maxTry) {
		fmt.Print("Digite o valor da base: ");
		fmt.Scanln(&b);
		fmt.Print("Digite o valor da altura: ");
		fmt.Scanln(&h);
		if((b < 0) || (h < 0)) {
			fmt.Print("Dados invalidos - ");
			fmt.Println(try);
			rsp = calcArea(try, maxTry);
		} else {
			b = (b*h) / 2;
			fmt.Println("Area: ", b);
			rsp = true;
		}
	}
	return rsp;
}

func main() {
	var maxTry int = 3;
	var try int = 0;
	var rsp bool = calcArea(try, maxTry);
	if(rsp) {
		fmt.Println("Ok");
	} else {
		fmt.Println("Erro");
	}
}

 

  • Obrigado 1
Postado

@Marcelo Maciel de Castro    muito bom o código do  @Plástico Bolha   ,  mas é bem avançado para quem é iniciante ,  então você pode usar um mais simples , assim  :

#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main(){
    float b=0, h=0;
    int flag;
	cout<<"Programa para calcular a area do triagulo. Entre com valores positivos.\n";
	//inicio:
	do{
            flag=0;
	    cout<<"Digite A Base   .";
	    cin>> b;
	    cout<<"Digite A Altura .";
	    cin>> h;
	    if ((b>0)&&(h>0)){
		    b=(b*h)/2;
		    cout<<"A area do triangulo eh: " << b << endl;
	    }
	    else{
		    cout<<"Dados inseridos invalidos, insira novamente.\n";
		    //goto inicio;
		    flag=1;
	    }
	    cout<<"     Tecle !"<<endl;
	    getch();
	}while(flag!=0);
	return 0;
}

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!