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

Cadenas y Listas en C++

Estas en el tema de Cadenas y Listas en C++ en el foro de C/C++ en Foros del Web. Hola a todos, soy nueva en este foro y no se muy bien como va... :S . Mi duda es la siguiente, he empezado al ...
  #1 (permalink)  
Antiguo 13/08/2008, 09:24
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Cadenas y Listas en C++

Hola a todos, soy nueva en este foro y no se muy bien como va... :S . Mi duda es la siguiente, he empezado al carrera de licenciada en matematicas y desgraciadamente me suspendieron el lenguje C++ y ahora tengo que realizar un trabajo de listas y cadenas. EL programa me pide que dado un usuario todos los numeros que quiera, me muestre por pantalla los numeros introducidos de mayor a menos...y este es el codigo que yo he relaizado hasta ahora:


struct Valor
{
int num;
};

struct Nodo;
typedef Nodo *PNodo;

struct Nodo
{
Valor info;
PNodo sig;
};

typedef PNodo Lista;

int main (void)
{
Lista l;
int x;
char op;
PNodo anterior,nuevo,aux;

l=NULL;
do
{
cout << "\nNumero: ";
cin >> x;

nuevo=new(Nodo);
nuevo->info.num=x;

if (l==NULL)
l=nuevo;
else
anterior->sig=nuevo;

anterior =nuevo;
cout << "Ya has acabado de introducir numeros";
cout << " (s/S)?";
cin >> op;
}
while ((op!='s') && (op!='S'));

nuevo->sig=NULL;

cout<<"\nLa lista generada de mayor a menos es: \n"<< endl;

aux=l;

while (aux!=NULL)
{
cout <<(*aux).info.num << " " ;
aux=(*aux).sig ;
}

cout << "\n" << endl;

system ("pause");
return 0;
}

pero el programa con este codigo lo que me hace es mostrarme la lista simplemente, alguien me puede decir donde tengo el error??

Muchas gracias
  #2 (permalink)  
Antiguo 13/08/2008, 14:22
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Cadenas y Listas en C++

Sobre cómo ordenar de mayor a menor ha sido tratado varias veces. Por ejemplo:
http://www.forosdelweb.com/f96/ayuda-arrays-611040/

Si no es lo que buscas. Mira aquí.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 16/08/2008, 12:42
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Cadenas y Listas en C++

Gracias al post, que te dio David el Grande, hay un link que explica de esto, que puede que te sirva:

http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja#C

Aqui te pone el ordenamiento burbuja, un ejemplo con C y arriba hay una breve explicacion sobre el Ordenamiento de burbuja, si aun no te ha servido comenta

Saludos!
  #4 (permalink)  
Antiguo 16/08/2008, 14:13
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

he mirado los enlaces que me habeis colocado como sugerencia, y mi problema es que el codigo burbuja lo entinedo lo que no se es como aplicarlo a mi programa ya que yo hasta ahora en el no utilizo for... y en el codigo burbuja en todos los ejemplos que he visto utiliza eso y luego la variable i, j, las cuales no se cierto a que se refiere si al numero anterior y siguiente o a que....si me podeis ayudar un poquitin mas en el codigo os estare realmente agradecida.

Gracias.
  #5 (permalink)  
Antiguo 16/08/2008, 14:40
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Cadenas y Listas en C++

Cita:
Iniciado por Wikipedia

void bubble(int A[], int tamano_arreglo)
{
int temp, j, i;

for(i = (tamano_arreglo-1); i >= 0; i--)
{
for(j = 1; j <= i; j++)
{
{
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
}
}
}
}
Bueno! este es el codigo que haremos servir, quitado de Wikipedia en el enclase que te dije en el Ejemplo 2.

Como ves, la funcion acepta 2 parametros, el primero el array, y el segundo el tamaño del array. Vamos explicar paso a paso lo que hace este programa:

Primer Paso:
Código:
int temp, j, i;
Lo que hace es hacer 3 variables enteras podria escribirse tambien asi :

Código:
int temp;
int j;
int i;
Segundo Paso:

Código:
for(i = (tamano_arreglo-1); i >= 0; i--)
Esto es un bucle, una palabra clave del C/C++ que lo que hace es repetir lo que hay entre los bloques {} , y tiene tres parametros, separados por ;, el primer parametro, inicializa la variable ( en este caso, tamano_arreglo - 1 ), el segundo parametro se puede 'demostrar' asi, "Si i es mas grande o igual a 0", si esta condicion se cumple, entra en el bloque {, hace todo lo que tiene que hacer hasta que acaba con }, y despues se activa el tercer parametro, que lo que hace es incrementar, disminuir, cualquier variable en este caso i, despues se vuelve a preguntar lo siguiente "Si i es mas grande o igual a 0", hasta que la condicion no se cumple. Si has utilizado el bucle ''while'' es practicamente lo mismo, la unica diferencia esque solo tiene un parametro, y no puedes inicializar la variable dentro de ella, la tienes que inicializar a fuera.

Paso Tres:

Código:
for(j = 1; j <= i; j++)
Hace igual que lo de arriba, lo unico que cambia son las variables, y si te fijas hay un for dentro del for, como es logico, primero se tiene que acabar el for que hay dentro, para poder hacer el for que hay arriba, despues la j volveria a tener el valor 1.

Paso 4:

Código:
if(A[j-1] > A[j])
La palabra reservada if, es una condicion, que simplemente, si se cumple entra y si no, no entra. Este ejemplo lo podemos demostrar asi: "Si A en la posicion j-1 es mas grande que A en la posicion j", Si se cumple, entra. Si te fijas el como el parametro dos del for, lo unico que aqui no repite nada, solo se pregunta una condicion

Paso 5:

Código:
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
Empieza el intercambio de valores!, ahora voy a decir lo que hace el codigo de arriba:
el valor A de la posicion j-1, se guarda en una variable temporal ( temp ), para poder conservar el valor, despues el valor de A en la posicion j, pasa en A en la posicion j-1, despues la variable temporal, pasa el valor a A en la posicion j. Ejemplo con numeros reales:

temp = A[5]; // Temporal tiene el valor de A en la posicion 5
A[5] = A[6]; // A[6] pasa su valor a A[5].
A[6] = temp; // A[6], tiene un nuevo valor, el valor de temp.


Despues el ultimo codigo, se volveria a repetir hasta que j no se mas pequeño o igual que i. Si j no es mas pequeño o igual que i, se haria el for ''jefe'', y asi sucesivamente hasta que la condicion del for "jefe" no se cumpla.

Saludos! Espero que me haya explicado bien, y si no comentame!
  #6 (permalink)  
Antiguo 17/08/2008, 13:41
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

Si te has comentado bien, por lo menos entendi todos los pasos que hay que seguir, voy a ver si lo aplico a mi programa y si no me sale ya te digo donde fallo okis? un beset.

Gracias
  #7 (permalink)  
Antiguo 18/08/2008, 14:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

Jooooo no me sale, me da error en el arreglo es decir, me da error como que no tengo declaradas las variables pero si que las tengo, me podrias hacer un favor?? insertarme el codigo en mi programa exactamente como seria, es que creo que el error siempre es el mismo que haga lo que haga expreso mal las variables... si me haces ese favor te lo agradecería mucho.
  #8 (permalink)  
Antiguo 18/08/2008, 15:06
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Cadenas y Listas en C++

Me podrias decir, que variables son las que no son declaradas por favor? gracias, yo intentare hacer el programa de MI manera ( yo normalmente no hago servir structs ), despues, si hace falta modificas mi programa de TU manera.

Saludos!
  #9 (permalink)  
Antiguo 19/08/2008, 08:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

okis...me da error en las variables int A[] e int arreglo, a pesar de este error...tengo una duda y es que el bubble si lo introduzco dentro del main void () me da otro error, sin embargo si lo saco fuera de él me da como que esta bien, pero no me realiza nada.... porfavor si puedes hazlo a tu manera y yo lo observo okis? gracias
  #10 (permalink)  
Antiguo 19/08/2008, 13:19
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Cadenas y Listas en C++

Creo que no caldra que te haga el ejercicio... has declarado el prototipo de la funcion bubble?

Me explico:

Código:
#include <iostream>

using namespace std;
// Declaracion del Prototipo
void bubble(int A[], int tamano_arreglo); // Esto es declarar la funcion.

int main(void)
{
     int Array[10];


     for ( int int_ConFor01=0;int_ConFor01<10;int_ConFor01++)
     {
            cout << "Escribe un numero : ";
            cin >>  Array[int_ConFor01] ;
            cout << endl;
     }

     bubble(Array,10);

     for ( int int_ConFor01=0;int_ConFor01<10;int_ConFor01++)
     {
            cout << Array[int_ConFor01] << endl;
     }


}

// Definicion

void bubble(int A[], int tamano_arreglo)
{
int temp, j, i;

for(i = (tamano_arreglo-1); i >= 0; i--)
{
for(j = 1; j <= i; j++)
{
{
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
}
}
}
}


Si asi, con mi codigo, aun no te sale ( ya que yo no lo he compilado ni nada de eso ) borra, el parametro uno de bubble, y que quede asi:

Código:
bubble(int tamano_arreglo );
y pones, el array A[] ( con posiciones por ejemplo A[10] ), arriba de todo, debajo los includes y debajo de los prototipos de la funcion bubble ( recuerda cambiar el prototipo para que solo tenga un parametro ) y arriba del main ( osea, que el array sea global )

Saludos y espero que tu problema se haya solucionado.
  #11 (permalink)  
Antiguo 19/08/2008, 13:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

War lo que me hace tu codigo es lo mismo que el mio, jaja, es decir pide varios numeros pero luego no los ordena :S:S no se porque voy a intentar comparar lo que has hecho y le mio a ver si asi lo saco si no ya te comento okis?? una cosita si quieres agregame a [email protected] es que es mi correo y de normal estoy conectada alli un beso...es que estoy trabajando GRACIAS
  #12 (permalink)  
Antiguo 19/08/2008, 15:49
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Cadenas y Listas en C++

El código de WaRc3L está bien lo que pasa es que al copiarlo desde Wikipedia se le ha perdido un if al código (el if si está en el paso 4 de su explicación):
Código:
void bubble(int A[], int tamano_arreglo)
{
	int temp, j, i;
	for(i = (tamano_arreglo-1); i >= 0; i--)
	{
		for(j = 1; j <= i; j++)
		{
			if(A[j-1] > A[j])  // Faltaba esta línea
			{
				/* Intercambio de numeros*/
				temp = A[j-1];
				A[j-1] = A[j];
				A[j] = temp;
			}
		}
	}
}
  #13 (permalink)  
Antiguo 19/08/2008, 16:19
(Desactivado)
 
Fecha de Ingreso: agosto-2008
Mensajes: 3
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

http://ciudad-oia.myminicity.es/
  #14 (permalink)  
Antiguo 19/08/2008, 16:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

yack no es ese el problema, jaja como ya le dije a war lo que es es que me da error en las variables, y war aporvechando que le comento a yack te comento a ti que no me sirvio que aun asi no me da bien la ordenacion,,,,me sale solo le ultimo numero que introduzco por el teclado
  #15 (permalink)  
Antiguo 20/08/2008, 00:24
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Cadenas y Listas en C++

La verdad no había visto tú código detenidamente, solo le dí un vistazo, ahora me doy cuenta, lo que estas tratando de hacer es ordenar una lista enlazada, pero eso no se puede usando direccionamiento de arreglos (A[j-1] = A[j]), hay que usar apuntadores, la explicación de como hacerlo me quedaría demasiado larga y complicada, por lo que te paso el código ya terminado, es tú mismo código pero le he agregado una función para ordenar la lista:

Código:
#include <iostream>

using namespace std;

struct Valor
{
	int num;
};

struct Nodo;
typedef Nodo *PNodo;

struct Nodo
{
	Valor info;
	PNodo sig;
};

typedef PNodo Lista;

void ordenar(Lista l)
{
	int fin;
	PNodo nodo;
	if(!l) return;
	do {
		fin=0;
		for (nodo=l; nodo->sig; nodo=nodo->sig) {
			if (nodo->info.num<nodo->sig->info.num) {
				fin=nodo->info.num; // Uso fin como variable temporal
				nodo->info.num=nodo->sig->info.num;
				nodo->sig->info.num=fin;
				fin=1;
			}
		}
	} while(fin==1);
}

int main()
{
	Lista l;
	int x;
	char op;
	PNodo anterior,nuevo,aux;

	l=NULL;
	do {
		cout << "\nNumero: ";
		cin >> x;

		nuevo=new(Nodo);
		nuevo->info.num=x;

		if (l==NULL)
			l=nuevo;
		else
			anterior->sig=nuevo;

		anterior = nuevo;
		cout << "Ya has acabado de introducir numeros";
		cout << " (s/S)?";
		cin >> op;
	} while ((op!='s') && (op!='S'));

	nuevo->sig=NULL;

	cout<<"\nLa lista generada de mayor a menos es: \n"<< endl;

	ordenar(l); // Función de ordenación por método de la burbuja usando apuntadores

	aux=l;

	while (aux!=NULL) {
		cout <<(*aux).info.num << " " ;
		aux=(*aux).sig ;
	}

	cout << "\n" << endl;

	system ("pause");
	return 0;
}
  #16 (permalink)  
Antiguo 20/08/2008, 07:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Cadenas y Listas en C++

yack gracias, asi que necesitaba puntadores:S:S eso no lo sabia...yo lo inetente por los arreglos pero como tu me decias pues no podia aplicarlos directamente de ahi que me diera error... MUCHISIMAS GRACIAS... ERES UN CRACK

Un besazo BEA
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 19:16.