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