Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con un Bucle

Estas en el tema de Problemas con un Bucle en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/05/2013, 20:56
Avatar de chdegraupv  
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 10 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;
}
  #2 (permalink)  
Antiguo 14/05/2013, 20:57
Avatar de chdegraupv  
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con un Bucle

Se me olvidó añadir que es en la función LeerVector
  #3 (permalink)  
Antiguo 14/05/2013, 22:10
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Problemas con un Bucle

supongamos que tam=5

entra al primer ciclo del i valiendo i=0
luego entra al otro ciclo j, y este se repetirá 5 veces imprimiendo el valor de i osea 0

por eso te imprime que i vale 0 siempre

cual termine el cilo de j, vuelve al ciclo de i pero ahora valiendo 1, y va a imprimir 5 veces el valor de i, osea 1.. y asi sucesivamente

Etiquetas: bucles, c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:14.