Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Glaucco

[Resolvido] Algoritmo em C++

Recommended Posts

Hola boa tarde!

 

Presiso de ajuda nesse exercício logo abaixo.

 

Escreva uma classe chamada Pessoa que contenha os atributos privados denominados

nome, peso, altura e sexo. Além disso,

a) Crie um construtor que inicialize todos os membros de dados com os valores

recebidos como argumento.

B) Crie os métodos de acesso (getters e setters) para todos os atributos. Os métodos

setters (booleanos) devem validar os dados de entrada, retornando verdadeiro

somente quando as condições definidas abaixo forem satisfeitas:

. o nome deve conter pelo menos dois caracteres;

. o peso deve ser positivo e menor que 200;

. a altura (em metros) deve ser maior que 0,50 e menor que 2,40;

. o sexo deve ser 'M' ou 'F' apenas.

c) Escreva um método público para o cálculo do IMC (Índice de Massa Corporal).

d) Escreva um método público para o cálculo do peso ideal de acordo com o sexo.

e) Implemente uma função principal (main) que construa (declare) um objeto do tipo

Pessoa, leia os atributos e escreva na tela o nome, o IMC e o peso ideal da pessoa,

informando ainda quantos quilos ela deve perder (ou ganhar) para atingir o seu

peso ideal.

São dadas as fórmulas:

IMC = peso/altura2

peso ideal = 72,7 x altura ? 58 (para homens)

peso ideal = 62,1 x altura ? 44,7 (para mulheres)

 

 

O que eu consegui fazer logo abaixo

 

#include<iostream> //biblioteca
using namespace std;
 class Pessoa {
  private:
   string nome;
	double peso,altura; //variável
	 char sexo;
	  public:
	   Pessoa(){ //cria o construtor objeto

}
 bool setNome(string n){ //recebe o valor do int main
  nome = n;
   }
	string getNome(){
	 return nome;
}

bool setPeso (double p) {
 if (peso >= 0.0 && peso < 200.0) {
  return false;
   }
	peso = p;
	 return true;
	  }
	   double getPeso() {
		return peso;
}

bool setaltura (double a) {
 if (altura >= 0.50 && altura < 240.0) {
  return false;
   }
	altura = a;
	 return true;
	  }
	   double getaltura() {
		return peso;
}

bool setsexo (char s) {
 if (sexo == 'M' || sexo == 'F'){
  return false;
	}
	 sexo = s;
	  return true;
	   }
		char setsexo(){
		 return sexo;
}

void print(){ //mostra o valor na tela
cout << "-------------\n";
cout << "Nome e: " << nome << endl;
cout << "Peso e: " << peso << endl;
cout << "Altura e: " << altura << endl;
cout << "Sexo e: " << sexo << endl;
}
};

 int main(){
  Pessoa p; // chama o construtor-padrão
   double peso,altura;
	string nome;
	 char sexo;
cout << "Digite o nome: ";
getline(cin,nome);
cout << "Digite o peso: ";
cin >> peso;
cout<< "Digite a altura: ";
cin >> altura;
cout << "Digite o sexo: ";
cin >> sexo;
 p.setNome(nome);
 p.setPeso(peso);
 p.setaltura(altura);
 p.setsexo(sexo);

  //envia o valor para void setNome
  p.print(); //enviar o resultado para void print()
} //fim

Como faço? o nome deve conter pelo menos dois caracteres; como fazer?

 

minha dúvida é como fazer para o nome. deve conter pelo menos dois caracteres;? como faço

Compartilhar este post


Link para o post
Compartilhar em outros sites

juro q naum entendi

 

você ta qrendo fazer tipo uma verificação para ver c realmente o nome vai ter + de 2 caracteres?

é iss?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso quitZAUMM aí tipo o program pede pra digitar o nome aí o usuário digita uma letra exemplo D aí programa da uma mensagem de erro e pede pra ele digita 2 caracteres.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oloco mo exemplo de facil compreensão, c você jah chego nesse nivel no seu codigo isso vai ser o de menos..

você vai fazer algo assim:

if (nome.length() < 2) ...

naum sei onde você esta com dificuldade nisso

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

você vai colocá-lo na hora q você le o nome, se o nome for menor de 2 caracteres repete..

 

ow coloca no if, ow em um while

Compartilhar este post


Link para o post
Compartilhar em outros sites

qlqr conteúdo "a mais" ajuda glaucco..

você pode tbm optar em ficar lendo artigos na net..

pega um aki, outro ali, ai vai montando tipo sua biblioteca.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O "Big Deal" pra aprender a programar, é se esforçar MUITO, sempre buscar fazer programas além da sua capacidade, é assim que você aprende as coisas novas...

Estudar outras ciências exatas (matemática, física e lógica) que vão te ajudar muito a pegar a forma de pensar.

Não desistir! O impossível só demora um pouco mais tempo para ser feito!

 

Se você está começando do zero, esquece C e C++. Essas linguagems são muito chatas na sintaxe e castings. Pegue qualquer coisa mais fácil.

Eu iria de Pascal ou Python. Pascal é uma linguagem feita para inciantes.

 

Boa Sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui mostra o resultado o peso ae aleluia.

bool setpeso (float p) {
 if (peso >= 0.0 && peso < 200.0) {
 return true;
 }
	 peso = p;
   {
	 return false;
   }
}
float getPeso() {
return peso;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora não to conseguindo mostra o valor do IMC?????

 

 

//GET é quando você quer pegar um valor, por exemplo um valor de um TextField.
//SET é quando você deseja setar ou enviar algo, algum valor.
#include<iostream> //biblioteca
#include<conio.h>
using namespace std;
 class Pessoa
 {
  private:
   string nome;
	float peso;
	 double altura;
	  char sexo;
	   public:
		double imc;
Pessoa(){ //cria o construtor objeto
  } //recebe o valor do int main
bool setNome(string n){
 nome=n;
  }
string getNome(){
 return nome;
}
bool setpeso (float p) {
 if (peso >= 0.0 && peso < 200.0) {
  return false;
   }
	peso = p;
	 return true;
	  }
	   float getPeso(){
		return peso;
		 }
bool setaltura (double a) {
 if (altura >= 0.50 && altura < 240.0) {
  return false;
   }
	altura = a;
	 return true;
	  }
	   double getaltura() {
		return peso;
		 }
bool setsexo (char s) {
 if (sexo == 'M' || sexo == 'F'){
  return false;
	}
	 sexo = s;
	  return true;
	   }
		char setsexo(){
		 return sexo;
		  }
void print(){ //mostra o valor na tela
cout << "-------------\n";
cout << "Nome: "  <<nome<< endl;
cout << "Peso: "  <<peso<< endl;
cout << "Altura: "<<altura<< endl;
cout << "sexo: "  <<sexo<< endl;
cout << "IMC: " <<imc<<endl;
}
};
int main(){
 Pessoa p; // chama o construtor-padrão
  string nome;
   float peso;
	double altura;
	 double imc;
	  char sexo;
cout << "\nDigite o nome: ";
cin>>nome;
cout << "\nDigite o peso: ";
cin>>peso;
cout << "\nDigite a altura: ";
cin>>altura;
cout << "\nDigite o sexo: ";
cin>>sexo;
 p.setNome(nome);
 p.setpeso(peso);
 p.setaltura(altura);
 p.setsexo(sexo);
 p.imc=(peso/altura)*2;
 p.print(); //enviar o resultado para void print()
system("PAUSE");
return 0;
} //fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de usar o print..

coloque um :

cout << "IMC: " <<p.imc<<endl;
no fim da sua main para ver se ele esta passando algum valor.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites
a) Crie um construtor que inicialize todos os membros de dados com os valores

recebidos como argumento.

 

Cadê os construtores?Só vi o construtor padrão que nem precisa ser especificado,por sinal.

 

 

bool setaltura (double a) {
if (altura >= 0.50 && altura < 240.0) {
 return false;
  }
altura = a;
 return true;
  }

 

240.0 metros??? Cara alto,hein... A condição está errada.

 

 

bool setPeso (double p) {
if (peso >= 0.0 && peso < 200.0) {
 return false;
  }
peso = p;
 return true;
  }

 

A condição está errada.

 

 

double getaltura() {
	return peso;
}

 

Método errado.

 

 

bool setsexo (char s) {
if (sexo == 'M' || sexo == 'F'){
 return false;
}
 sexo = s;
  return true;
   }
	char setsexo(){
	 return sexo;
}

 

Condição errada.

 

 

peso ideal = 72,7 x altura ? 58 (para homens)

peso ideal = 62,1 x altura ? 44,7 (para mulheres)

 

O que vem a ser o ??

 

 

#include <iostream>
#include <cctype>
using namespace std;
class Pessoa {

string nome;
float peso,altura;
char sexo;

public:

Pessoa(string NOME, float PESO, float ALTURA, char SEXO) {
	nome = NOME;
	peso = PESO;
	altura = ALTURA;
	sexo = SEXO;
}


bool setNome(string NOME){
	if (NOME.length() > 1) {
		nome = NOME;
		return true;
	}
	return false;
}


string getNome(){
	return nome;
}


bool setPeso (float PESO) {
	if (PESO < 1 || PESO > 200)
		return false;
	peso = PESO;
	return true;
}


float getPeso() {
	return peso;
}


bool setAltura (float ALTURA) {
	 if (ALTURA < 0.50 || ALTURA > 2.40)
		return false;
	 altura = ALTURA;
	 return true;
}


float getAltura() {
	return altura;
}


bool setSexo (char SEXO) {
	if (toupper(SEXO) != 'M' && toupper(SEXO) != 'F')
		return false;

	sexo = toupper(SEXO);
	return true;
}

char getsexo(){
	return sexo;
}


float calculaIMC() {
	return peso/(altura*altura);
}


float calculaPesoIdeal() {
	if (sexo == 'M')
		return 62.1*altura;
	return 72.7*altura;
}

};

int main(){
Pessoa p("Joao",76.8,1.67,'M');

cout << "Nome:" << p.getNome() << endl;
cout << "IMC:" << p.calculaIMC() << endl;
float ideal = p.calculaPesoIdeal();
cout << "Peso ideal:" << ideal << endl;
cout << "Quilos a perder:" << ((p.getPeso() > ideal)?p.getPeso()-ideal:0) << endl;
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora está quase terminando o exercício. Falta alguém pode me ajudar como vou fazer para o IMC e o peso ideal da pessoa,

informando ainda quantos quilos ela deve perder (ou ganhar) para atingir o seu

peso ideal.

 

 

//GET é quando você quer pegar um valor, por exemplo um valor de um TextField.
//SET é quando você deseja setar ou enviar algo, algum valor.
#include<iostream> //directiva do pré processamento
#include<iomanip> //Manipulador de Tamanho de campo na impressao
using namespace std;//directiva using
class Pessoa {
private:
	string nome;
	float peso;
	double altura;
	char sexo;
public:
	double imc;
	Pessoa() { //cria o construtor objeto
	}
	Pessoa(string no,float pe,double al,char se) {
		nome=no;
		peso=pe;
		altura=al;
		sexo=se;
	}
	bool setNome(string no) {
		return true;
		nome=no;
	}
	string getNome() {
		return nome;
	}
	bool setpeso (float pe) {
		if (pe < 0 || pe > 200) {
			cout<<"\nPeso incorreto. Digite o peso maior que 0 e menor que 200"<<endl<<endl;
			return false;
		}
		peso = pe;
		return true;
	}
	float getPeso() {
		return peso;
	}
	bool setAltura (double al) {
		if (al < 0.50 || al > 2.40) {
			cout<<"\nAltura incorreta. Digite a altura maior que 0.50 e menor que 2.40"<<endl<<endl;
			return false;
		}
		altura = al;
		return true;
	}
	double getaltura() {
		return peso;
	}
	bool setSexo (char se) {
		if (se != 'M' && se != 'F') {
			cout<<"\nSexo Incorreto. Digite o sexo com a letra M ou F"<<endl<<endl;
			return false;
		}
		sexo = se;
		return true;
	}
	char setsexo() {
		return sexo;
	}
	double setImc() {
		return peso/(altura*altura);
	}
	void print() { //mostra o valor na tela
		cout << "-------------\n";
		cout << "Nome: "  <<nome<< endl;
		cout << "Peso: "  <<peso<<"Kg"<< endl;
		cout << "Altura: "<<altura<<"m"<< endl;
		cout << "Sexo: "  <<sexo<< endl;
		cout << "IMC: " <<setprecision(3)<<setImc()<<endl;//Setprecision. Define o número de casa decimais a ser impressas para um número em ponto flutuante.
	}
};
int main() {
	Pessoa p; // chama o construtor-padrão
	string nome;
	float peso;
	double altura;
	double imc;
	char sexo;
	do {
		cout << "Digite o nome: ";
		getline(cin,nome);
	} while (!p.setNome(nome));
	do {
		cout << "Digite o peso: ";
		cin>>peso;
	} while (!p.setpeso(peso));
	do {
		cout << "Digite a altura: ";
		cin>>altura;
	} while (!p.setAltura(altura));
	do {
		cout << "Digite o sexo: ";
		cin>>sexo;
	} while (!p.setSexo(sexo));
	p.print(); //enviar o resultado para void print()
	system("PAUSE");
	return 0;
} //fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está pronto nada.

 

1- Por que a variável imc é pública?

2- Por que a variável altura é double?

 

Os métodos setters (booleanos) devem validar os dados de entrada, retornando verdadeiro somente quando as condições definidas abaixo forem satisfeitas:

. o nome deve conter pelo menos dois caracteres;

 

Olha teu código:

 

bool setNome(string no) {
	return true;
	nome=no;
}

 

Esse setter não vai fazer nada.

 

 

void print() { //mostra o valor na tela
	cout << "-------------\n";
	cout << "Nome: "  <<nome<< endl;
	cout << "Peso: "  <<peso<<"Kg"<< endl;
	cout << "Altura: "<<altura<<"m"<< endl;
	cout << "Sexo: "  <<sexo<< endl;
	cout << "IMC: " <<setprecision(3)<<setImc()<<endl;//Setprecision. Define o número de casa decimais a ser impressas para um número em ponto flutuante.
}

 

O exercício não pede que você crie um método print na classe. E também não há necessidade disso. você não criou os getters à toa.

 

 

using namespace std;//directiva using

 

p.print(); //enviar o resultado para void print()

 

Esse tipo de comentário não acrescenta nada ao código.

E o segundo comentário está errado. você não está enviando resultado nenhum para o método. você está passando uma mensagem p/ o objeto p.

 

 

double getaltura() {
	return peso;
}

bool setSexo (char se) {
if (se != 'M' && se != 'F') {
	  cout<<"\nSexo Incorreto. Digite o sexo com a letra M ou F"<<endl<<endl;
	  return false;
}
sexo = se;
return true;
}

char setsexo() {
return sexo;
}


double setImc() {
  return peso/(altura*altura);
}

 

Continua errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora foi corrigido

 

Como vou fazer para o peso ideal da pessoa,

informando ainda quantos quilos ela deve perder (ou ganhar) para atingir o seu

peso ideal.

 

#include<iostream> //directiva do pré processamento
#include<iomanip>
using namespace std;//directiva using
class Pessoa {
private:
	string nome;
	double peso,altura;
	char sexo;
public:
	Pessoa() { //cria o construtor objeto
	}
	Pessoa(string no,double pe,double al,char se) {
		nome=no;
		peso=pe;
		altura=al;
		sexo=se;
	}
	bool setNome(string no) {
		int tam=no.size();
		if (tam<2)
			return false;
		nome=no;
		return true;
	}
	string getNome() {
		return nome;
	}
	bool setpeso (double pe) {
		if (pe < 0 || pe > 200) {
			cout<<"\nPeso incorreto. Digite o peso maior que 0 e menor que 200"<<endl<<endl;
			return false;
		}
		peso = pe;
		return true;
	}
	double getPeso() {
		return peso;
	}
	bool setAltura (double al) {
		if (al < 0.50 || al > 2.40) {
			cout<<"\nAltura incorreta. Digite a altura maior que 0.50 e menor que 2.40"<<endl<<endl;
			return false;
		}
		altura = al;
		return true;
	}
	double getaltura() {
		return peso;
	}
	bool setSexo (char se) {
		if (se != 'M' && se != 'F') {
			cout<<"\nSexo Incorreto. Digite o sexo com a letra M ou F"<<endl<<endl;
			return false;
		}
		sexo = se;
		return true;
	}
	char setsexo() {
		return sexo;
	}
	double pesoIdeal() {
		if (sexo=='M') {
			return(72.7*altura-58);
		}
		return(62.1*altura-44.7);
	}
	double pesoCerto() {
		if (peso>pesoIdeal()) {
			return (peso-pesoIdeal());
		}
		return (pesoIdeal()-peso);
	}
	double setImc() {
		return peso/(altura*altura);
	}
	void print() { //mostra o valor na tela
		cout << "-------------\n";
		cout << "Nome: "  <<nome<< endl;
		cout << "Peso: "  <<peso<<"Kg"<< endl;
		cout << "Altura: "<<altura<<"m"<< endl;
		cout << "Sexo: "  <<sexo<< endl;
		cout << "IMC: " <<setprecision(3)<<setImc()<<endl;
		cout <<"Deve perder: "<<pesoCerto()<<endl;
	}
};
int main() {
	Pessoa p;
	string nome;
	double peso,altura;
	char sexo;
	do {//Repita
		cout << "Digite o nome: ";
		getline(cin,nome);
	} while (!p.setNome(nome));//Até
	do {//Repita
		cout << "Digite o peso: ";
		cin>>peso;
	} while (!p.setpeso(peso));//Até
	do {//Repita
		cout << "Digite a altura: ";
		cin>>altura;
	} while (!p.setAltura(altura));//Até
	do {//Repita
		cout << "Digite o sexo: ";
		cin>>sexo;
	} while (!p.setSexo(sexo));//Até
	p.print(); //enviar o resultado para void print()
	system("PAUSE");
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.