Problemazo con ejercicio de C++ T_T"

SikorZ

Bueno os explico, hemos terminado de dar C, lo tengo todo aprobado y ahora empezamos con Java. No obstante el profesor quiere evaluarnos de C++ con un ejercicio. Basicamente solo hemos hecho clases y enseñado el cin y cout de C++, osea nada, unas clases y nos ha mandado un ejercicio a cada uno de la clase, que sera la nota de C++ y yo veo que me encuentro en un apuro, porque basicamente NI ENTIENDO el maldito ejercicio xDDD... no se por donde cogerlo lo mas minimo.

Parece que me ha cogido a mi de primo porque mientras que a mis compañeros les pide que metas una cantidad de dinero y te de el cambio en billetes y tal y otro no se que de una tienda y tonterias tan simples, que ademas ya tenemos hasta el codigo hecho anteriormente a mi me ha puesto esto, no se si porque me odia o yo que se XDD... A ver si algun alma caritativa me ayuda xDD:

Implemente la clase vector en el espacio, con tres miembros datos entreros y los métodos: Inicializar un vector, visualizarlo en pantalla, sumar dos vectores, el producto escalar de un vector (x,y,z) por un entero, el producto escalar de dos vectores y el producto vectorial de dos vectores.

VipeR_CS

#1 Yo lo que entiendo es que te manda hacer algunas operaciones con vectores.

Primero defines una clase llamada Vector, con 3 miembros que serían de tipo int y un método para cada operación de las que te manda: inicializar un vector, mostrarlo por pantalla (cout), sumar dos vectores, etc. xD

Échale un ojo a esto http://wwwdi.ujaen.es/mcdiaz/docencia/ejercicios/wiki/index.php?title=Operaciones_con_vectores

3 respuestas
SikorZ

#2 Me podrias explicar a que tipo de vector se refiere? y que es
? xD

1 respuesta
VipeR_CS

#3 Se suele llamar vector a una array unidimensional, y matrices a los arrays al menos bidimensionales (un vector de vectores, básicamente).

Para declarar un vector de 3 elementos enteros por ejemplo, pues:

int vector[3];

Para inializarlo, que sería la primera pregunta, simplemente llamas a un método donde le metas valores de esta forma por ejemplo:

vector[0] = 1;
vector[1] = 24;
vector[2] = 13;

El resto pues viene a ser un poco lo mismo, haciendo un método para cada una de las preguntas que te indican. Al menos es lo que yo entiendo, que lo mismo no es así porque tampoco está demasiado claro xD

1 respuesta
SikorZ

#4 Entonces cuando se refiere a vector en el problema se esta refiriendo a un array unidimensional y cuando se refiere a vector de vectores a uno como minimo bidimensional?

Parece que lo entiendo pero sigo sin saber hacerlo xDDD

1 respuesta
VipeR_CS

#5 El ejercicio no te habla en ningún momento de arrays bidimensionales (matrices). Todo lo que te manda hacer es con arrays unidimensionales (vectores). Suponiendo que ya tengas claro la diferencia entre vector y matriz, la definición y una posible inicialización ya te la he puesto arriba.

La suma de dos vectores por ejemplo, sería cuestión de definir e inicializar 2 vectores (imagino que con los numeros que te de la gana si no te dicen nada) y sumarlos posición a posición: a[0] + b[0], a[1] + b[1], a[2] + b[2], etc. No lo hagas uno a uno obviamente, con un bucle se hace del tirón. El producto escalar y el producto vectorial ya ni me acuerdo cómo eran, pero es cuestión de mirárselo en la wikipedia xD

1 respuesta
SikorZ

#6 =S, Que coraje de profesor xD, le pone cosas ultra sencillas que se tardan 10minutos en hacer a todos y a mi me pone esto-.-"...

Bueno pues lo buscare @ inet porque ninguno de mis compañeros sabe tampoco xD

Craw

Viendo que te habla de una CLASE vector con 3 miembros int, yo entiendo que quiere que hagas algo asi:

class Vector{
    private:
      //un "int" por cada dimensión del espacio
        int x;
        int y;
        int z;

public:
       //metodos que te pide
    
};

pd: igual tengo la práctica hecha y todo, voy a mirar en mi carpeta de la uni, q ya hace unos añitos desde que hice eso...

edit: He encontrado algo remotamente parecido, igual te sirve de algo. No he probado si funciona todo, no recuerdo si la acabé y ahora mismo no tengo nada instalado para probar el código.
Si todo funciona bien creo que esta parte "Inicializar un vector, visualizarlo en pantalla, sumar dos vectores," la tienes más o menos resuelta.

#include <iostream.h>

class vector
{
private:

int x;
int y;
int z;
public:

vector();
vector(int a, int b);
~vector();
operator + (vector & a);
operator - (vector & a);
operator = (vector &a);
operator - ();
operator++();
operator++(int);
friend vector & operator --(vector & a)
{
	a.x--;
	a.y--;
	return a;
}	
friend vector & operator --(vector & a,int)
{
	--a.x;
	--a.y;
	return a;
}
void mostrar();
};

vector::~vector(){
	cout << "destruyendo..." << endl;
}


vector::vector () {
  x = 0;
  y = 0;
}


vector::vector (int a, int b) {
  x = a;
  y = b;
}

vector::operator + (vector & a) {
  x = x + a.x;
  y = y + a.y;
}

vector::operator = (vector & a) {
	x=a.x;
	y=a.y;
}

vector::operator - (vector & a){

x=x-a.x;
y=y-a.y;
}

vector::operator - (){
	x= - x;
	y= - y;
}


vector::operator++() {
	x++;
	y++;
}

vector::operator++(int) { 
	x++;
	y++;
}

void vector::mostrar()
{
	cout << "x=" << x << endl;
	cout << "y=" << y << endl;
}


void main () {
	vector aux;
	vector prin(2,2);
	cout << "aux :" << endl;
	aux.mostrar();
	cout << "prin: " << endl;
	prin.mostrar();
	aux=prin;
	cout << "aux igualado a prin es:" << endl;
	aux.mostrar();
	aux + (prin);
	cout << " aux + prin es: " << endl;
	aux.mostrar();
	vector resta;
	aux -(prin);
	cout << " aux - prin es : " << endl;
	aux.mostrar();
	-aux;
	cout << "aux tras cambiarlo de signo es : " << endl;
	aux.mostrar();
	++aux;
	cout << "aux incrementado es : " << endl;
	aux.mostrar();
	aux++;
	cout << "aux incrementado otra vez es : " << endl;
	aux.mostrar();

--aux;
cout << "aux decrementado es : " << endl;
aux.mostrar();
aux --;
cout << "aux decrementado otra vez es : " << endl;
aux.mostrar();



}
3 respuestas
SikorZ

#8 Me sera de gran ayuda la verda, estaba ahora mismo intentando descifrar el enunciado que todavia no lo entiendo del todo jajaja... le preguntare a mi hermana, voy a ver que tal con tu codigo, por lo menos si es parecido tendre algo por donde empezar, menos es nada.

muchisimas gracias por hacer el esfuerzo de buscar el codigo, porque estoy ultra perdido... la practica es para el viernes al final... y la pm del profe que le pone a un compañero que le de el cambio de dinero al meter una cantidad jaja y a mi esta mierda xDD

EDIT: Mi hermana lo ha estado 'estudiando' y la conclusion que ha sacado es totalmente distina a la que yo tenia y a la de #2 xDxD

1 respuesta
Igneus

es lo que dice #2, no hay que darle mas vueltas.

Un vector es un array (array=matriz) de 1 sola linea. Te pide que hagas una clase 'vector', que incluya como propiedades o miembros sus tres terminos, (x, y, z) y que contenga unos metodos que hacen esas operaciones, como bien ha venido a hacer #8. No es tan complicado

VipeR_CS

#9 Y por curiosidad, ¿qué conclusión ha sacado tu hermana? xD Es cierto que el enunciado no está muy bien explicado, pero no veo otra interpretación posible :\

1 respuesta
SikorZ

#11 Ella dice que un vector puede tener multiples valores, no tiene porque ser unidimensional, segun recuerdo y me explico el producto escalar pero los demas no se acordaba bien.

Osea entonces seria algo asi no?

clase{
int x[255],y[255],z[255];
}

y luego jugar con cada valor de cada uno? osea, meter los valores y jugar con cada no?

2 respuestas
BLZKZ

#12 para nada, un vector espacial significa un vector con 3 coordenadas por lo tanto tiene coordenadas x,y,z que cada una es un int.

Estas confundiendo vector (array unidimensional en programación) con un vector "matematico". Es el tipico vector que es usa en fisica para calcular campos y mierdas del estilo, con 3 dimensiones. Que un vector pueda tomar multiples valores (infinitos) quiere decir que x puede ser 10 o 80 pero solo puede ser uno cada vez.

El producto escalar del vector por un numero entero es multiplicar todas las coordenadas por el entero, el escalar de dos vectores es el producto de sus modulos por el coseno del angulo que forman y asi xD

Simples matematicas.

Resumiendo:
1) 3 atributos enteros simples x,y,z (nada de arrays)
2) repasa fundamentos matematicos
3) ?
4) profit

3 respuestas
LOc0

Básicamente #13.

http://pstbn.com/Yqd9vYf (Si el jueves por la noche no lo tienes pero demuestras que te has esforzado y bla bla bla te paso la pass). Ánimo que puede que tu profe hasta te haya hecho un favor...

Salu2 ;)

1 respuesta
Igneus

#13 un vector matematico no tiene pork ser de dimension 3, puede ser de dimension 400, otra cosa es que no se pueda representar graficamente (o facilmente), pero por poder puedes decir:

(x,y,z,q,p) {dim 5}

(x,y) {dim 2}

al igual que en programacion puedes decir

Vector = new int[3]; // (x,y,z) {dim 3}

pero vamos k el enunciado lo dice claramente:

'...con tres miembros datos entreros...'

'...el producto escalar de un vector b[/b] por un entero...'

#13

'el escalar de dos vectores es el producto de sus modulos por el coseno del angulo que forman'

La jodimos, tu liale mas que al final nos monta una tesis doctoral de esa mierda de ejercicio xD

Producto escalar = producto termino a termino del mismo orden y luego se suman.

Edit: #16 ajajaja si, soy muy quisquilloso XDD. Solo queria aclararlo por si a #1 le quedaban dudas al respecto, porque entre el enunciado, la explicacion de la hermana y la nuestra, debe de tener un buen cacao xD

1 respuesta
BLZKZ

#15 josus chico en el enunciado pone que son de 3 dimensiones asi que es un vector de 3 dimensiones, no he dicho que no haya de mas o menos pero se sobreentiende -.-" a ver si no te sales del tiesto xD

Y si lo del producto escalar por un entero metí la pata hasta el fondo

2 respuestas
B

#12 Solo por curiosidad... por qué 255? xd Porque no encuentro ninguna explicación para poner eso. La que se está liando con esta tontería.

dagavi

Es lo que ha dicho #13, es una clase que represecte espacios vectoriales (no "arrays")

Implemente la clase vector en el espacio, con tres miembros datos entreros y los métodos:

Y las 3 dimensiones, como dice en #16, es porque el propio enunciado le está iciendo que lo haga con 3 dimensiones.

Es una simple clase con 3 enteros (sueltos, en un array o como de la gana guardarlos) que hace las operaciones matemáticas solicitadas.

SikorZ

#14 que hay ahi? xD


Bueno le he preguntado a mis compañeros de clase y uno dice que cree que lo entiende y que la inicializacion de vectores se hara en plan
int vectores[3];
y que cada posicion del array tendra una coordenada, en plan
vectores[1] - > X
[2] - > Y
[3] - > Z

Asi que estoy haciendo el ejercicio con ese estilo =S, como lo veis? no he podido preguntarle al profesor-.-

EDIT
#8 acabo de reinstalar el dev-c++ porque me daba problemas y al probar tu codigo y el proyecto .dev de un compañero no me compila, me da mil errores... alguna idea? XD

1 respuesta
BLZKZ

como almacenes x y z da igual, aun asi yo lo haria con 3 atributos enteros, para getters y setters lo veo más conveniente

1 respuesta
SikorZ

#20 ge... se... queee?! xDDD tened en cuenta que no he dado NADA de c++, ahi reside la gracia del 'trabajillo'... xDD

Ulmo

Pero por favor, q mal vamos de matemáticas, si todo lo q te pide se calcula al vuelo sabiendo q los vectores son espaciales, es decir de 3 dimensiones.

Lo de devolver el cambio es bastante más difícil que esta que en el peor de los casos se limita a un visita a la wikipedia para recordar q es el producto vectorial.

1 respuesta
SikorZ

#22 Perdona pero lo flipas un poco xD, ademas que lo del cambio ya teniamos hasta la funcion hecha vaya... eso lo hago en 0,1.

Y si, ando FATAL de matematicas, hace unos 3/4 años que no doy una clase real de matematicas xD... pero aun asi ni mi hermana que ha hecho empresariales y marketing y esta harta d dar clases d matematicas ha sabido explicarmelo bien, cada persona lo entiende de una manera xD

1 respuesta
Ulmo

#23 Hombre, sí y no, dar el cambio al menos tienes q ir con cuidado de saber q cantidades monetarias tienes, existencias y demás, podria incluso darse el caso q no puedas dar el cambio.

Las operaciones q te piden con vectores es inicializarlos --> guardar 3 enteros; sumarlos ---> hacer 3 sumas de 3 enteros, el producto escalar de un entero es multiplicar 3 enteros por un mismo número, el producto escalar de 2 vectores es 3 multiplicaciones de 2 enteros cada una, y el vectorial un calculo directo ligeramente más extenso.

Craw

#19 en un rato iré a la uni, y si eso le hecho un vistazo a los errores desde allí y te digo, pero llevo la tira de años sin tocar c++...

BLZKZ

te recomiendo que para estas cosas uses g++ a secas y el editor de texto que mas te guste. Para compilar cosas peques siempre uso g++ en linux porque por simpleza y rapidez es de 10 xD y no te crea chorrocientos archivos que no sirven para nada como si lo hacen ide's

1 respuesta
A1rStacK

#26 Pero si no sabe ni hacer una función simple, lo vas a poner a compilar con el terminal?

#28 Función, clase, llamalo x. Es todo la misma mierda.

2 respuestas
SikorZ

#27 Hombre funciones si que se hacer xDD, se programar (Aunque todavia me queda mucho por aprender en java xD) pero no en c++ xDD.

2 respuestas
BLZKZ

#27 g++ -o programa loquesea.cpp

no creo que sea excesivamente dificil meter ese comando

Igneus

#28 si no sabes lo que es un get y un set poco sabes de programar me parece a mi. Sin animo de meter mierda (que yo no se practicamente nada de programacion), pero me parece algo elemental en un lenguaje orientado a objetos como java. Que estudias?? por curiosidad.

1 respuesta