Classes - Encapsulamento

1. Classes - Encapsulamento

Lendel dos Santos Rodrigues
lendel

(usa Linux Mint)

Enviado em 28/11/2019 - 18:21h

Questão 19.18 do livro Aplicações cientificas em C++
Crie, em uma unidade independente, uma classe C++ que represente um vetor de pontos cartesianos. Adicione a classe PONTO do exercicio 19.6 ao seu projeto e use um vetor estático de, no máximo, 20 pontos. Elabore um método para verificar qual dos n(n<=20) pontos é o mais próximo da origem. Teste a classe na função main, instanciando objetos e chamando os métodos.

Primeira parte do código que fiz

#include <iostream>
#include "Funcoes19018.h"
			
using namespace std;

int main (int argc, char *argv[]){
	
		cout << "Programa para calcular e exibir o ponto mais próximo da origem do plano cartesiano usando classes" << endl;
		cout << endl;
			
			PONTO p1,p2;
			Compare p3;
			ponto p4;
			int n;
			double x, y;
			
			cout << "Insira a quantidade de pontos que deseja calcular" << endl;
			cout << "Quantidade = "; cin >> n;
		   while (n < 1 || n > 20)
		   {
			   cout << "Valor invalido!\n";
			   cout << "Tamanho = "; cin >> n;		
		   }
			for(int i = 0; i < n; i++)
			{
				cout << "Informe as coordenadas dos Pontos p" << i + 1 << ":" << endl;
				cout << "x = "; cin >> x;
				cout << "y = "; cin >> y;
				cout << endl;
				p.setXY(x,y);
				p4[i] = p2.distancia(p1);
			}
			
			
			cout << "O ponto mais próximo da origem : p" << p3.comparar(p4) << endl;
			
	return 0;
} 


segundo parte do codigo

#include <cmath>
#include "Funcoes19018.h"

void PONTO::setXY(double x, double y)
{
	this-> x = x;
	this-> y = y;
}
double PONTO::getX()
{
	return x;
}
double PONTO::getY()
{
	return y;
}
double PONTO::distancia(PONTO p)
{
	return sqrt(pow(x, 2) + pow(y, 2));
}
double Compare::comparar(PONTO &p)
{
	double menor = p[0];				//Primeiro elemento
	int indMe = 0;
	for(int i = 1; i < 5; i++){		//Varia de 1 a n-1
	  if (p[i] < menor)
		 menor = p[i];				// Determina menor
		 indMe = i;				//Indice do menor
	}
	return indMe;
} 


terceira parte do codigo

#ifndef FIGURAS_19018_H
#define FIGURAS_19018_H

using namespace std;

class PONTO
{
	private:
		double x, y;
	public:
		void setXY(double x, double y);
		double getX();
		double getY();
		double distancia(PONTO p);
};
typedef PONTO* ponto;
class Compare
{
	public:
		ponto v[20];
		double comparar(PONTO &p);
};
#endif 



  


2. Re: Classes - Encapsulamento

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/11/2019 - 00:51h

Acho muito temerário você usar nomes de tipos que só diferem entre si na qualidade maiúscula e minúscula das letras que os compõem. Eu me confundi com o uso misturado de PONTO e ponto.

Geralmente, nomes que usam todas as letras maiúsculas indicam macros (há exceções, como o tipo FILE de <cstdio>, que tem suas razões históricas de ser; o seu programa, no entanto, não tem mais de 45 anos de história para justificar não seguir a convenção).

Sugiro fortemente que você não use ponteiros. Até porque o enunciado mandava usar um vetor estático.

A função PONTO::distancia() me parece estranha. Quando se fala em distância, imagina-se a distância entre dois pontos arbitrários, mas a sua função mede todas as distâncias a partir da origem. Claro que a origem é um ponto, mas com o nome que tem, era de se esperar que a função fosse mais genérica.

Dentro da função, você usa “sqrt(pow(x, 2)+pow(y, 2))”. Considere trocar isso por “sqrt(x*x+y*y)”, que é mais curto, mais comumente usado e possivelmente gera código mais enxuto.

A classe Compare tem um nome que não me parece muito bom, pois ela não existe fundamentalmente para comparar, mas sim para armazenar; comparar é um aspecto do que ela pode vir a fazer, através de uma função-membro (que é a nomenclatura que o C++ usa para aquilo que o enunciado chama de método). Essa função pode até vir a ser a comparar que você fez (desde que corrija aquele PONTO em que você quis dizer ponto — viu só? até você se confundiu; melhor acabar com essa ideia de usar ponteiros, porque nada no enunciado pede que você o faça).


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts