Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/05/2013, 20:56
Avatar de chdegraupv
chdegraupv
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Problemas con un Bucle

DUDA C++:


Hola buenas, vengo aquí para ver si pueden ayudarme con un problema que seguro que es una tontería pero con la tontería llevo 4 horas rompiéndome la cabeza.


Mi duda es la siguiente:

Si tengo dentro de un bucle otro bucle, es decir:

for( i=0 ; i < tam ; i++)
{
for( j = 0 ; j < tam ; j++ )
{
// instrucciones
cout << " i es " << i << endl;

¿Por qué al pedir que me muestre el valor de i dentro del segundo bucle me dice que es 0 todo el tiempo?

En teoría tendría que darme 0, 1, 2,.., hasta tam
pero me da 0

Tengo el código aquí abajo, espero que me ayudéis GRACIAS





Código:
#include <iostream>
#include <stdlib.h>
using namespace std;

const int MAX = 100;
typedef int Vector[MAX];

int LeerVector(Vector & v1, int & tam, int & i, int & j, int & tam2);
void MostrarVector(Vector & v1, int & tam);
void EliminarRepetidos( Vector & v1, int & tam2, bool & cond);

int main()
{
	Vector v1;
	int tam = 0;
	int tam2 = 0;
	bool cond = false;
	
	cout << " Dime el tamanyo del vector " << endl;
	cin >> tam;
	
	int i = 0;
	int j = 0;
	
	tam2 = tam;
	int tam3 = tam;
	i = LeerVector(v1, tam, i, j, tam2);
	
	MostrarVector(v1, tam2);
	
	if(v1[0] == v1[tam - 1])
	cond = true;

	EliminarRepetidos(v1, tam2, cond);
	
	cout << " \n El vector sin repeticiones es : \n " << endl;
	MostrarVector(v1, tam2);
	
	cout << " El tamanyo de el vector sin procesar si tiene repeticiones es : " << tam3 << endl;
	cout << " El tamanyo de el vector procesado es " << tam2 << endl;
	                                                                                               					 			                                                                                            
	system("pause");
	return 0;
	
}


int LeerVector(Vector & v1, int & tam, int & i, int & j, int & tam2)
{
	while( tam > 0)
	{
		for(i; i < tam2; i++)
		{
			v1[i] = rand() % 100;
			
			for(j; j < tam2 ; j++)
			{
				//cout << " la i es " << i << endl;
				
				if( (v1[i] == v1[j]) && (i != j))
				{
					i = i - 1;
					j = j - 1;
					LeerVector(v1, tam, i , j, tam2);
					
				}
			}
		
			tam = tam -1;
		}
	
		
	}
	
	return i;
}
	

void MostrarVector(Vector & v1, int & tam)
{
	int i;
	char x;
	
	cout << " Para mostrar el vector en horizontal pulse 'h' ( vectores pequenyos) \n O en vertical pulse 'v' (grandes) . " << endl;
	cin >> x;
	
	if( x == 'v')
	{
		cout << " \n El vector aleatorio  sin repeticiones es  : \n " << endl;
		for(i = 0; i < tam; i++ )
		cout << " [ " << v1[i] << " ] " << endl;
	}
	
	else if( x == 'h')
	{
		cout << " \n El vector introducido es : \n " << endl;
		for(i = 0; i < tam; i++ )
		cout << " [ " << v1[i] << " ] ";
		cout << endl;
		
	}
	
	return;
}

void EliminarRepetidos( Vector & v1, int & tam2, bool & cond)
{
	int i, j, k;
	
	if(cond)
	while(v1[0]!= v1[tam2])
	{
		tam2--;
	}
	
	for(i = 0; i < tam2 ; i++)
	{
		for( j = 0; j < tam2; j++)
		{
			if( v1[i] == v1[j] && (i != j))
			{
				for( k = j; k < tam2 ; k++)
				{
					v1[k] = v1[k+1];
					
					if((k+1) > tam2)
					v1[k] = v1[k];
					
				}
				tam2--;
			}
			
		}
		
	}
	
	
	
	return;
}