Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: berbash116 en 4 Enero 2019, 04:03 am



Título: ingresar datos a lista
Publicado por: berbash116 en 4 Enero 2019, 04:03 am
Hola como estan

Necesito ayuda para ingresar 2 datos en una lista, ya tengo un codigo en donde me permite agregar o quitarvalores de una lista, pero no me permite hacerlo para 2, en mi caso quiero registras valores rectangulares y polares.
les dejo los codigos que tengo

Código:
#include<iostream>
#include<cmath>

//Programa para transformar de Rectangular a Polar

using namespace std;
int n,i;
double ang,rest,re,im,pot,mod;

int main()
{
cout<<"\nIngrese cantidad de Tensiones Complejas\n";
cin>>n;

for(i=1;i<=n;i++)
{
cout<<"Por favor introduzca la parte real de su numero complejo"<<i<<":  \n";
cin>>re;
cout<<endl<<"Ahora la parte imaginaria"<<i<<": \n";
cin>>im;


ang = (atan (im/re))* 57,29578;
mod = sqrt ((re*re)+(im*im));

cout<<"La expresion en forma polar"<<i<<" es: "<<mod<<" con angulo "<<ang<<"\n"<<endl;

}

system ("pause");
cin.get();
return 0;
}

Código:
// Programa para pasar de Polar a Rctangular
#include<iostream>
#include<cmath>

using namespace std;
int i,n;
double ang,rest,re,im,pot,mod,rad;

int main()
{
cout<<"\nIngrese cantidad de Tensiones Polares  :    ";
cin>>n;

for(i=1;i<=n;i++)
{
cout<<"Por favor introduzca el modulo: "<<i<<":   \n";
cin>>mod;
cout<<endl<<"Ahora el angulo en grados: "<<i<<":   \n";
cin>>ang;

rad=ang*3.1416/180.0;
re = mod * cos (rad);
im = mod * sin(rad);

cout<<"La expresion en forma rectangular"<<i<<" es: "<<re<<"   "<<im<<"j \n"<<endl;

}
system ("pause");
cin.get();
return 0;
}


Título: Re: ingresar datos a lista
Publicado por: K-YreX en 4 Enero 2019, 08:29 am
Pero en ese código no estás usando ninguna lista, imagino que quieres ir metiendo en una lista las variables <re> e <im> (te recomiendo nombres un poco más largos y que se entiendan mejor <real> e <imaginaria> porque variables con nombres muy cortos podrían significar más cosas, mejor el nombre completo si no es muy largo).

Para lo que quieres hacer te recomiendo empezar a usar objetos, es decir, crear una <struct> o <class> para almacenar un valor. Sería algo así:
Código
  1. struct Rectangular{
  2.    double real;
  3.    double imaginaria;
  4. };
  5.  
  6. int main(){
  7.    Rectangular variable_rectangular;
  8.    cout << "Ingresa parte real: ";
  9.    cin >> variable_rectangular.real;
  10.    cout << "Ingresa parte imaginaria: ";
  11.    cin >> variable_rectangular.imaginaria;
  12.    // y aqui ya puedes meter la variable_rectangular en una lista
  13. }

Te recomiendo mejor que crees dos clases, una Rectangular y otra Polar, hagas un constructor con parámetros, y métodos que te sirvan de algo por ejemplo:
Código
  1. class Rectangular{
  2.    private:
  3.        double real;
  4.        double imaginaria;
  5.  
  6.    public:
  7.        Rectangular(); // constructor por defecto
  8.        Rectangular(double real, double imaginaria); // constructor con parametros
  9.        Polar convertir(); // convierte una variable Rectangular en Polar
  10.        //...
  11. };
  12.  
  13. class Polar{
  14.    private:
  15.        double modulo;
  16.        double angulo;
  17.  
  18.    public:
  19.        Polar();
  20.        Polar(double modulo, double angulo);
  21.        Rectangular convertir(); // convierte una variable Polar a Rectangular
  22.        //...
  23. };

Puedes agregarle más métodos si los necesitas y para meterlos en una lista sólo tienes que crear una lista de variables <Rectangular> para meter esos valores y una lista de tipo <Polar> para meter esos valores. Suerte :-X


Título: Re: ingresar datos a lista
Publicado por: CalgaryCorpus en 4 Enero 2019, 11:03 am
Sugeriría escribir los métodos de conversión fuera de las clases, para no crear una dependencia entre ellas.


Título: Re: ingresar datos a lista
Publicado por: K-YreX en 4 Enero 2019, 16:31 pm
Sugeriría escribir los métodos de conversión fuera de las clases, para no crear una dependencia entre ellas.
Entiendo que con escribir los métodos de conversión fuera de las clases te refieres a hacer dos funciones. Mi primera duda es por qué sería mejor así? Es algo que desconozco :rolleyes:
Y tampoco sé si habría alguna diferencia entre hacer dos funciones con nombres distintos y parámetros distintos es decir...:
Código
  1. Rectangular convertirEnRectangular(Polar);
  2. Polar convertirEnPolar(Rectangular);
... o sobrecargar una misma función para ambos casos:
Código
  1. Rectangular convertir(Polar);
  2. Polar convertir(Rectangular);


Título: Re: ingresar datos a lista
Publicado por: berbash116 en 7 Enero 2019, 14:36 pm
hola de nuevo, como dicjiste realice la estructura pero cunado corro el programa no me lo guarda en la listam, es mas, me guarda un 0

Código:
//Cola de datos.Programa de prueba
#include<iostream>
#include "list.h"
#include<cmath>
using namespace std;

template<class T>
void testList(List<T> &listObject, const char *type)
{
cout<<"Programa de prueba de una cola de valores "<<type<<".\n";
cout<<"Ingrese una de las siguientes opciones:\n"
<<" 1 para insertar al final de la cola.\n"
<<" 2 para eliminar al principio de la cola.\n"
<<" 3 para finalizar.\n";

struct polar {
double modulo,angulo;
};
int choice;

T polar;
do
{
cout<<"? ";
cin>>choice;
switch(choice)
{

case 1:

double angulo,real,imaginario,modulo;


cout<<"Por favor introduzca la parte real de su numero complejo: ";
cin>>real;
cout<<endl<<"Ahora la parte imaginaria: ";
cin>>imaginario;


angulo = (atan (imaginario/real))* 57,29578;
modulo = sqrt (real*real+(imaginario*imaginario));

cout<<"La expresion en forma polar es: ("<<modulo<<" con angulo "<<angulo<<")"<<endl;

listObject.insertAtBack(polar);
listObject.print();
break;

case 2:
if(listObject.removeFromFront(polar))
cout<<polar<<" removido de la cola.\n";
listObject.print();
break;
}
}
while(choice!=3);
cout<<"Finalizar prueba de cola.\n";
}
int main()
{
List<int>integerQueue;
testList(integerQueue,"entero");

List<double>doubleQueue;
testList(doubleQueue,"doble precision");

return 0;
}


Título: Re: ingresar datos a lista
Publicado por: K-YreX en 7 Enero 2019, 15:16 pm
Aquí tienes unos cuantos líos y cosas que no están bien entendidas...
Lo primero las clases y estructuras es mejor que las declares fuera de ninguna otra función. Es decir, antes de la función <testList()>.

Y ahora voy a intentar explicarte la idea de crear esa estructura. Si quieres hacer una lista de valores en forma polar, para no meter por un lado el módulo y por otro el ángulo, lo que se hace es un objeto que engloba ambos, es decir, en vez de tener dos variables de tipo <double> (modulo y angulo), se tiene una variable de tipo <polar> y esa variable por dentro lleva guardados tanto el módulo como el ángulo para que no guardarlos por ahí sueltos.
Entonces la lista tiene que ser de tipo <polar>, no de tipo <int> ni <double>.

Tú has creado una variable que creo que piensas que es de tipo <polar> pero no es así. Esa es una variable que es de tipo <int> o <double> según el caso y que se llama polar. Nada que ver con lo que quieres hacer. Para crear una variable de tipo polar y guardar valores dentro es así:
Código
  1. polar variable_polar;
  2. variable_polar.modulo = // lo que sea;
  3. variable_polar.angulo = // lo que sea;

Una vez que tengas esa variable de tipo <polar> con sus datos actualizados entonces es cuando ya puedes meterlo en la lista. Es decir, meter tu variable de tipo <polar> en tu lista de tipo <polar>.

Ahora vamos al <case 2:>:
Parece que quieres hacer una cola <queue> usando una lista. Si usas el método para sacar el elemento del frente, no necesita ningún parámetro, el elemento del frente sólo es uno, no hay otro. Si sacas el elemento de la cola ya no existe, entonces si quieres mostrarlo tienes que guardarlo en algún sitio. O lo que se suele hacer es mostrar primero el elemento que hay al frente de la cola y cuando ya lo has mostrado, lo sacas de esta. Estás usando continuamente la variable llamada <polar> que no pinta nada.

Y ya para terminar te recomiendo que hagas un <default> en el <switch> por si introduces un número que no sea {1,2,3} porque si es 1 o 2 haces lo que que has implementado, si es 3 acaba, pero si alguien introduce 4??

Creo que tienes un lío de conceptos y te recomiendo aclarar eso antes de seguir con programas mayores... Suerte :-X