Dev - C++ - Problema clase vectores.

 
Vista:
Imágen de perfil de José Antonio

Problema clase vectores.

Publicado por José Antonio (1 intervención) el 12/08/2015 11:53:40
Hola buenas, estoy realizando una clase "Vector" con ciertos métodos públicos, pero hay uno que se me está atascando y me está costando grande quebraderos de cabeza. El código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <iostream>
using namespace std;
 
#define MAXIMO 100
 
class vector {
	int celda[MAXIMO]; // array para almacenar los elementos
	int nelem; // nº de elementos del vector
 
	public:
		vector(int n); // constructor
		vector(int n, int valores[]); // constructor
		int longitud(); // devuelve el nº de elementos del vector
		int get(int n); // devuelve el valor de celda[n]
		int &put(int n); // devuelve una referencia a celda[n]
		vector invertir();
		void mostrar();
		int operator ==(vector v);
		vector mezcla(vector v);
};
 
vector::vector(int n){
	if(n < 1 || n > MAXIMO){
		cout<<"Error, numero de elementos validos [1-100]";
		nelem=0;
	}else{
		nelem;
		for(int i=0; i<n; i++){
			celda[i]=0;
		}
	}
}
 
vector::vector(int n, int valores[]){
	if(n < 1 || n > MAXIMO){
		cout<<"Error, numero de elementos validos [1-100]";
		nelem=0;
	}else{
		nelem=n;
		for(int i=0; i<n; i++){
			celda[i]=valores[i];
		}
	}
}
 
int vector::longitud(){
	return nelem;
}
 
int vector::get(int n){
	int valor;
 
	if(n < 1 || n > nelem){
		cout<<"Elemento fuera de rango";
		valor=0;
	}else{
		valor=celda[n-1];
	}
	return valor;
}
 
int &vector::put(int n){
	if(n<1 || n>nelem){
		cout<<"\nElemento fuera del rango";
		n=1;
	}
	return celda[n-1];
}
 
vector vector::invertir(){
 
	int i,j,elem;
	vector copia(nelem);
 
	for(i=0,j=nelem-1;i<nelem/2;i++,j--){
		elem=celda[i];
		celda[i]=celda[j];
		celda[j]=elem;
	}
	for(i=0;i<nelem;i++){
		copia.celda[i]=celda[i];
	}
	return copia;
}
 
void vector::mostrar(){
	int i;
 
	for(i=0;i<nelem;i++){
		cout<<celda[i];
	}
}
 
int vector::operator ==(vector v){
	int i,res;
 
	if(nelem!=v.nelem){
		res=0;
	}else{
		res=1;
		i=0;
		while(i < nelem && res){
			if(v.celda[i]!=celda[i]){
				res=0;
			}else{
				i++;
			}
		}
	}
 
	return res;
}
 
vector vector::mezcla(vector v){
	int i,j,aux;
	vector mezclado(nelem);
 
	for(i=0;i<nelem;i++){
		for(j=0;j<(nelem-i);j++){
			if(celda[j]>celda[j+1]){
				aux=celda[j];
				celda[j]=celda[j+1];
				celda[j+1]=aux;
			}
		}
	}
 
	for(i=0;i<v.nelem;i++){
		for(j=0;j<(v.nelem-i);j++){
			if(v.celda[j]>v.celda[j+1]){
				aux=v.celda[j];
				v.celda[j]=v.celda[j+1];
				v.celda[j+1]=aux;
			}
		}
	}
 
	for(i=0;i<(nelem+v.nelem);i++){
		if(celda[i]>v.celda[i]){
			mezclado.celda[i]=v.celda[i];
			mezclado.celda[i++]=celda[i];
		}else{
			mezclado.celda[i]=celda[i];
			mezclado.celda[i++]=v.celda[i];
		}
	}
 
	return mezclado;
}
 
int main(){
	int i, t[]={1,2,3,4,5};
	vector a(10),b(5,t),c(5,t);
	system("cls");
	cout<<"Los valores de los vectores a, b y c son:\n\n";
	cout<<"a: ";a.mostrar();
	cout<<"b: ";b.mostrar();
	cout<<"c: ";c.mostrar();
	cout<<"\nIntroduce los valores de a: ";
	for(i=1;i<=a.longitud();i++){
		cin>>a.put(i);
	}
	cout<<"\nLos valores de los vectores a, b y c son:\n\n";
	cout<<"a: ";a.mostrar();
	cout<<"b: ";b.mostrar();
	cout<<"c: ";c.mostrar();
 
}

Mi problema recae en el método "put" que cuando debería pedirme que introduzca los datos del vector a simplemente salta a la siguiente instrucción.
¿Alguna idea del porqué podría ser?
Gracias de antemano.
Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder