|
|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Claudisimo
Páginas: [1]
1
« en: Viernes 4 de Diciembre de 2009, 05:33 »
Holas, estoy estudiando para una prueba y en la guía tengo este ejercicio de listas, el problema es que no tengo idea como hacerlo: Dada la siguiente estructura de datos:
struct bebida { char Nom_Bebida[20]; int Cal; //Calorias por 1⁄2 litro bebida *prox; }; struct examen { char tipo_Bebida[30]; //Bebida con gas, alcohol, etc bebida *l; examen *ri; *rd; };
Responda –sólo realice la función y/o procedimiento que realice lo pedido- a) Liste los tipos de bebida y todas las bebidas asociadas que tengan mas de X calorías b) Para cada Tipo indique a que bebida tiene menos calorías c) Elimine a todas las bebidas que tengan más de X calorías, debe mostrarlas antes de eliminarlas.
Es en c++. Alguien podría ayudarme? Es que no entiendo como relacionar una estructura con la otra. Además, en la linea "examen *ri; *rd;" pareciera indicar que es un arbol. Estoy totalmente confundido
2
« en: Jueves 12 de Noviembre de 2009, 18:33 »
Yo también estoy viendo arboles, y la verdad es que es bastante complicado. Sin embargo, te mando un link que te muestra como se van agregando los datos a un arbol AVL, mostrando las rotaciones y demases. http://cupi2.uniandes.edu.co/cursos/dat ... vl/avl.htmSaludos
3
« en: Jueves 12 de Noviembre de 2009, 18:24 »
Es una lata, no hay alguna librería o algo así que te facilite la vida, tienes que programar numero por numero. Al llegar al 16, le tienes que poner que si el numero es mayor a quince te escriba "dieci" y el último dígito. Al llegar a 100 lo mismo, y así hasta que te aburras. Bueno, aquí hay un programa que encontré en otra página al googlear (buscando en google como "leer numeros como letras". Primer resultado): http://www.mygnet.net/codigos/cplusplus ... etras.1509
4
« en: Jueves 12 de Noviembre de 2009, 18:17 »
si es solo para eso, podrias usar un define
#ifdef WINDOWS [codigo win] #else [codigo lin] #endif
pero solo haz esto si es UNA UNICA instruccion la que cambia, siempre es mejor hacerlo bien multiplataforma. Si no, mirate el patron FACTORY en google. Gracias, me funcionó muy bien. Tuve que escribirlo así #ifdef WIN32 #define system(clear) system("cls") #endif
Después de poner esto al principio, solo uso system("clear") para limpiar la pantalla (lo que me pareció extraño, porque compilandolo desde windows tuve que dejar, al lado del define, system(clear) en vez de system("clear").
5
« en: Jueves 12 de Noviembre de 2009, 05:47 »
Bueno, esa es mi duda. Existe alguna forma de generar un clrscr o system("cls") para que me limpie la pantalla y que funcione tanto en Windows como en Linux?
Es que en el laboratorio de la universidad hay pc's con windows, y a mi en mi casa me gusta usar Archlinux, y a veces es una lata andar cambiando uno por otro cada vez que estoy en x lado.
Bueno, si es que existe, claro, o si hay alguna forma de programarlo (de que la hay, la hay, pero mis conocimientos son bastante limitados).
6
« en: Domingo 31 de Mayo de 2009, 04:15 »
Solucionado, declarando el ifstream dentro del ciclo arregló el problema. Efectivamente la variable archivo estaba provocando todo. En todo caso me gustaría entender por que. Creo que despues comenzó a leer los archivos desde el final... pero nose. Aquí está el programa ya listo. #include<iostream> #include<string> #include<fstream> #include<string> #include<stdlib.h> #include<conio.h> #include<stdio.h> using namespace std; char mayusculas(char letra); //Transforma mayusculas en minusculas void dibujo(int oportunidades); //Muestra el dibujo del ahorcado int main () { char nombrearchivo[50],a,palabra[30],palabragen[30],palabraaux[30],letra[1],salcont[1]; int n,i,q,w,e,u,k,t,m,x; bool marcador; m=1; while(m!=0) { ifstream archivo; salcont[0]='.'; marcador=0; n=0; k=0; u=0; q=0; i=0; n=0; w=1; x=0; m=1; cout<<"Bienvenido al ahorcado, porfavor indique su opcion"<<endl<<endl; cout<<"1.-"<<'t'<<"Jugar al ahorcado (por defecto)"<<endl; cout<<"0.-"<<'t'<<"Salir del programa"<<endl; cin>>m; system("cls"); switch(m) { case 1: { cout<<"Ingrese el nombre del archivo a trabajar"<<endl; cin>>nombrearchivo; system("cls"); archivo.open(nombrearchivo); while(salcont[0]!='-') { archivo.get(a); if (a>='A' && a<='Z') a=mayusculas(a); palabra[n]=a; if (palabra[n]==' ') palabra[n]='n'; palabragen[i]=palabra[n]; palabraaux[i]=palabra[n]; if (palabra[n]=='n' || palabra[n]==' ') { if(i<3 || i>7) { cout<<"La palabra ""; while(q<i) { cout<<palabraaux[q]; q++; } cout<<"",ubicada en el archivo, esta fuera de rango"<<endl; system("pause"); system("cls"); } } if (palabra[n]=='n' && i>=3 && i<=7 || archivo.eof()) { if (i==0) { salcont[0]='-'; break; } for(q=0;q<i;q++) palabraaux[q]='-'; for(q=i;q<=30;q++) palabraaux[q]=' '; cout<<"Ingresa una letra para adivinar la palabra y salvar al hombre de ser ahorcado. Guiate por la pista"<<endl<<endl; cout<<endl<<"La palabra tiene "<<i<<" letras."<<endl; if(i==0) salcont[0]='-'; system("pause"); while(u<=6) { system("cls"); cout<<"Acertadas: "<<k<<" de "<<i<<endl; cout<<endl<<endl<<palabraaux<<endl; dibujo(u); q=0; letra[0]=getche(); while(q<i) { e=0; t=0; if(palabraaux[q]==letra[0]) { while(t<=i) { while(e<=i) { if(palabraaux[e]==letra[0]) { cout<<endl<<"La letra "<<letra[0]<<" ya se encuentra ingresada"<<endl<<"Ingrese otra letra"<<endl; t=0; marcador=1; letra[0]=getche(); } else t++; e++; } e=0; } } if (palabragen[q]==letra[0]) { system("cls"); cout<<"Acertadas: "<<k<<" de "<<i<<endl; palabraaux[q]=palabragen[q]; k++; cout<<endl<<endl<<palabraaux<<endl; dibujo(u); marcador=1; //marcador indica si le acerto a la palabra, asi no perderá una oportunidad. Por defecto está en 0 a menos que acierte } else { system("cls"); cout<<endl<<endl<<palabraaux<<endl; dibujo(u); } q++; } if(marcador==0) u++; marcador=0; if(u>=6) { system("cls"); cout<<"Acertadas: "<<k+1<<" de "<<i<<endl; cout<<endl<<endl<<palabraaux<<endl; dibujo(u); cout<<endl<<"Ha perdido, suerte a la proxima."<<endl; salcont[0]='-'; system("pause"); system("cls"); break; } if(k==i) { cout<<endl<<"Felicidades, ha acertado la palabra. Para continuar jugando, ingrese cualquier tecla. Para volver al menu presione -"<<endl; cin>>salcont; //salcont saldrá del programa si el usuario presiona - if(salcont[0]=='-') break; system("cls"); u=7; } if(salcont[0]=='-') break; } i=-1; k=0; if(salcont[0]=='-') break; } else if (palabra[n]=='n') i=-1; if(salcont[0]=='-') break; i++; q=0; e=0; w=1; u=0; k=0; e=0; n=0; } archivo.close(); break; } case 2 : break; default: 1; } } cout<<"Gracias por jugar ahorcado."<<endl;; } char mayusculas (char letra) { letra=letra+('a'-'A'); return letra; } void dibujo(int oportunidades) { if (oportunidades==0) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==1) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *^ ^* "<<endl; cout<<" # * - *"<<endl; cout<<" # *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==2) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *^ ^* "<<endl; cout<<" # * - *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==3) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *^ ^* "<<endl; cout<<" # * - *"<<endl; cout<<" # *"<<endl; cout<<" # **"<<endl; cout<<" # * *"<<endl; cout<<" # * *"<<endl; cout<<" # *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==4) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *^ ^* "<<endl; cout<<" # * - *"<<endl; cout<<" # *"<<endl; cout<<" # ***"<<endl; cout<<" # * * *"<<endl; cout<<" # * * *"<<endl; cout<<" # *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==5) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *^ ^* "<<endl; cout<<" # * - *"<<endl; cout<<" # *"<<endl; cout<<" # ***"<<endl; cout<<" # * * *"<<endl; cout<<" # * * *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" # *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } else if(oportunidades==6) { cout<<endl<<endl<<endl<<endl; cout<<" #################"<<endl; cout<<" # #"<<endl; cout<<" # |"<<endl; cout<<" # *"<<endl; cout<<" # *x x* "<<endl; cout<<" # * O *"<<endl; cout<<" # *"<<endl; cout<<" # ***"<<endl; cout<<" # * * *"<<endl; cout<<" # * * *"<<endl; cout<<" # *"<<endl; cout<<" # * *"<<endl; cout<<" # * *"<<endl; cout<<" # * *"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #"<<endl; cout<<" #########"<<endl; } }
Gracias a todos
7
« en: Domingo 31 de Mayo de 2009, 03:15 »
He descartado muchas cosas. Creo que el problema está en que la segunda vez que se abre un archivo comienza a leerlo desde el final. Hay alguna forma de indicar (tomando en cuenta que el archivo está abierto de la forma archivo.open(nombrearchivo)) que lea el archivo desde el principio??
8
« en: Sábado 30 de Mayo de 2009, 21:18 »
Verdad, se me había pasado eso, sin embargo lo hice y sigue con el mismo problema
9
« en: Sábado 30 de Mayo de 2009, 12:47 »
Sip, esa linea estaba mal. Aun asi, el problema continua
10
« en: Sábado 30 de Mayo de 2009, 01:26 »
Hola, una vez mas recurro a ustedes para resolver una duda que me tiene muy cabreado. Llevo bastante rato tratando de ver el error pero no logro encontrarlo. Estoy programando el ahorcado (bajo codeblocks con mingw), sin funciones, y el programa corre 1 vez bien (aun no hago el dibujo en todo caso). Después (ya sea se gane o pierda) vuelve al menú, ejecuto otra vez el juego y pide el nombre del archivo (las palabras deben venir de un archivo). Cuando lo ingreso nuevamente, o ingreso otro archivo el programa vuelve al menú, siendo que debería funcionar otra vez. Aqui está el código, espero alguien pueda responderme. Perdonen pero soy bastante desordenado: //Trabajo 1 Laboratorio Algoritmos y estructura de datos #include<iostream> #include<string> #include<fstream> #include<string> #include<stdlib.h> #include<conio.h> using namespace std; int main () { char nombrearchivo[50],a,palabra[30],palabragen[30],repetido,palabraaux[30],letra[1],salcont[1]; int n,contadorletras,i,q,w,e,u,k,t,m,x; bool marcador; ifstream archivo; while(m!=0) { nombrearchivo[0]=' '; salcont[0]='.'; marcador=0; n=0; k=0; u=0; q=0; i=0; n=0; w=1; x=0; cout<<"Bienvenido al ahorcado, porfavor indique su opción"<<endl<<endl; cout<<"1.-"<<'t'<<"Jugar al ahorcado (por defecto)"<<endl; cout<<"0.-"<<'t'<<"Salir del programa"<<endl; cin>>m; system("cls"); switch(m) { case 1: { cout<<"Ingrese el nombre del archivo a trabajar"<<endl; cin>>nombrearchivo; system("cls"); archivo.open(nombrearchivo); while(salcont[0]!='-') { archivo.get(a); palabra[n]=a; if (palabra[n]==' ') palabra[n]='n'; palabragen[i]=palabra[n]; palabraaux[i]=palabra[n]; if ((palabra[n]=='n' && i>=3 && i<=7) || archivo.eof()) { if (i==0) { salcont[0]='-'; break; } for(q=0;q<i;q++) palabraaux[q]='-'; for(q=i;q<=30;q++) palabraaux[q]=' '; cout<<"Ingresa una letra para adivinar la palabra y salvar al hombre de ser ahorcado. Guiate por la pista"<<endl<<endl; cout<<endl<<"La palabra tiene "<<i<<" letras."<<endl; if(i==0) salcont[0]=='-'; system("pause"); while(u<6) { system("cls"); cout<<"Acertadas: "<<k<<" de "<<i; cout<<endl<<endl<<palabraaux<<endl; q=0; letra[0]=getche(); while(q<i) { e=0; t=0; if(palabraaux[q]==letra[0]) { while(t<=i) { while(e<=i) { if(palabraaux[e]==letra[0]) { cout<<endl<<"La letra "<<letra[0]<<" ya se encuentra ingresada"<<endl<<"Ingrese otra letra"<<endl; t=0; letra[0]=getche(); } else t++; e++; } e=0; } } if (palabragen[q]==letra[0]) { system("cls"); palabraaux[q]=palabragen[q]; k++; cout<<endl<<endl<<palabraaux<<endl; marcador=1; //marcador indica si le acerto a la palabra, asi no perderá una oportunidad. Por defecto está en 0 a menos que acierte } else { system("cls"); cout<<endl<<endl<<palabraaux<<endl; } q++; } if(marcador==0) u++; marcador=0; if(u>=6) { cout<<"Ha perdido, suerte a la proxima."<<endl; salcont[0]='-'; system("pause"); system("cls"); break; } if(k==i) { cout<<"Felicidades, ha acertado la palabra. Para continuar jugando, ingrese cualquier tecla. Para salir del juego presione -"<<endl; cin>>salcont; //salcont saldrá del programa si el usuario presiona - if(salcont[0]=='-') break; system("cls"); u=6; } if(salcont[0]=='-') break; } i=-1; k=0; if(salcont[0]=='-') break; } else if (palabra[n]=='n') i=-1; if(salcont[0]=='-') break; i++; q=0; e=0; w=1; u=0; k=0; e=0; n=0; } archivo.close(); } case 2 : { m=2; cout<<"hola"; break; } default: 1; } } cout<<"Gracias por jugar"<<endl;; }
Aqui hay unas palabras para probar. Es cosa de copiar y pegar en un archivo y ponerlo en el programa, por si alguien quiere probarlo esta es una primera prueba basicamente para probar todas las opciones
Porfavor, les agradeceria ayuda. De verdad no entiendo por que en vez de continuar el programa vuelve al menu a la hora de pedir el archivo la segunda vez. Muchas gracias
11
« en: Viernes 29 de Mayo de 2009, 14:10 »
Perdón, estaba teniendo un problema que no tenia nada que ver y lo asocié con eso. Es verdad, con un simple archivo.get(a) (a como char) también lee los espacios. Pido disculpas.
Porfavor cerrar el tema.
12
« en: Viernes 29 de Mayo de 2009, 13:51 »
Hola a todos. Estoy en un programa que necesito sacar datos de un archivo, y me encontré con uno que tiene un espacio, lo cual deshizo totalmente mi programa. ¿Como puedo leer los espacios desde un archivo de texto sin mayor problema?
13
« en: Viernes 29 de Mayo de 2009, 13:04 »
Bueno, muchas gracias a ambos. Problema solucionado.
14
« en: Viernes 29 de Mayo de 2009, 12:48 »
No hay una manera standard de hacer eso, directa o indirectamente (mediante una libreria) tenes que usar los servicios del S.O. en cuestion. Logré hacerlo con getche (letra=getche()), pero al parecer no es una función standard de c++
15
« en: Viernes 29 de Mayo de 2009, 09:38 »
Mmh... ok... entonces, en su defecto, me gustaría averiguar como hacer un cin>>letra[0] y que lea solamente la primera letra de todo lo que escriba el usuario. Osea, que si escribe "hola" no lea mas que la h.
De antemano muchas gracias. Saludos.
16
« en: Viernes 29 de Mayo de 2009, 07:31 »
Hola, mi problema es que estoy programando el ahorcado y a la hora de ingresar los caracteres lo estoy haciendo con un simple cin>>letra. Necesito que ingrese la letra tan pronto la halla presionado el usuario, no teniendo que hacer enter cada vez que la escriba. Muchas gracias.
Saludos.
17
« en: Viernes 29 de Mayo de 2009, 07:29 »
Muchas gracias, problema solucionado. Era justo lo que decía Haidion, pero gracias a ambos.
Saludos.
18
« en: Jueves 28 de Mayo de 2009, 17:18 »
Holas, necesito enviar un char a una funcion, trabajarlo y retornarlo hacia la funcion principal. Sin embargo al hacerlo como si fuera cualquier otro tipo de dato me lanza un error diciendo que es imposible transformar de char* a char. Creo que es porque no puede devolver un array completo, sino un simple puntero. No hay forma de retornar una cadena de caracteres completa?
19
« en: Jueves 28 de Mayo de 2009, 17:16 »
No conocía la funcion rand(). Muchas gracias
20
« en: Jueves 28 de Mayo de 2009, 00:08 »
Hola a todos, tanto tiempo. Una vez mas recurro a uds. para hacerles una pregunta que al parecer es bastante sensilla, pero no he podido encontrar la solución. Tengo que programar el ahorcado y leer las palabras desde un archivo. El problema que tengo es que necesito leer palabras aleatorias de un listado en un archivo de texto. Ni idea de como podría hacer esto. Si alguien me puede dar una idea lo agradecería mucho.
Pd: Ya vi que esta el programa del ahorcado aquí, si bien puede que me sirva para sacar unas ideas no es lo que busco.
21
« en: Domingo 19 de Abril de 2009, 18:57 »
Antes de responder, diré algo 0 aporte: un programa generalmente se puede hacer de muchas formas distintas, recuerda que la idea es siempre ser lo mas óptimo posible. Sin ofender, pero eso de transformar los numeros a alfanumericos para trabajar de una forma muy fácil con ellos lo considero flojera. Los programadores tienen que generar un pensamiento algorítmico, y proponer soluciones tan poco formuladas y poco óptimas no hace mas que hacerles daño y retrasarlos. Te lo digo con todo el respeto del mundo, espero no haberte ofendido. Si es así, disculpame.
Ahora, volviendo al tema, te recomiendo declarar las variables, sacar el módulo de 405 sobre 10, eso lo guardas en una variable, después divides el numero por 10, sacas de nuevo el módulo y así hasta que ya no te queden factores. ¿Se entiende?
22
« en: Lunes 5 de Enero de 2009, 06:44 »
De hecho no se como hacerlo de forma no recursiva XD (bueno, me imagino que en un ciclo). Como sea, aqui tienes las instrucciones (se puede hacer de otras formas, así es como yo lo hago): 1) Primero (obviamente) declaras el árbol y sus nodos. Dentro del arbol declaras la función nodoaux. 2) Dentro de la funcion principal (o donde sea que vallas a insertar los elementos al arbol en realidad) llamas a la función nodoaux declarada. Ahora, esta función solo se preocupa de crear un nodo auxiliar: void arbol::nodoaux(int x) { nodo *aux; aux=R; aux=ingreso(aux,x); R=aux; }
3) Y aquí finalmente tienes la función ingreso: nodo* ingreso(nodo *A,int x) { if (A==NULL) { A= new nodo; if (!A) { cout << "NO HAY SUFICIENTE MEMORIA "; return A; } A->dato=x; A->izq=A->der=NULL; } else if (A->dato < x) A->der=ing1(A->der,x); else if (A->dato > x) A->izq=ing1(A->izq,x); else cout << "EL ELEMENTO YA EXISTE, NO PUEDE ESTAR REPETIDO"; return A; }
Siendo x el dato a ingresar. Saludos.
23
« en: Lunes 5 de Enero de 2009, 06:36 »
Hola, primera vez que posteo en este foro, se ve bastante buena su comunidad. Los felicito, sigan así, y espero poder integrarme. Ahora, quería hacer 3 preguntas sobre arboles, aquí van: 1) ¿Como determino la rama mas larga (o las mas largas) de un arbol? 2) ¿Es lo mismo para un arbol AVL? 3) ¿Como cuento los elementos de un arbol? Sin variables globales.... es que como es recursiva la función para recorrerlos, nosé como. Por último si no pueden ayudarme con código agradecería una idea como hacerlo. Muchas gracias
Páginas: [1]
|
|
|