|
812
|
Programación / Programación C/C++ / Re: Problema con un programa:
|
en: 17 Mayo 2013, 08:26 am
|
Bueno y para evitar el goto Bucle (que incluso en el manual que estoy leyendo me dice que lo evite) como lo sustituiria . Y en cuanto a lo de tantos endl es por que quiero que se limpie la pantalla, me podrias explicar como usaria lo que has puesto del cls ??? Muchas gracias por la ayuda Mejor lo ves: #include <iostream> #include <cstring> #include <cstdlib> #define N 4 using namespace std; struct Fulanito { char Nombre[40]; int Telefono; } Fulanito[N]; int main() { int i,z,buscaTel=0,indice; char buscaNombre[40]={0}; for (i = 0; i < N; i++) { cout << " Introduce el nombre de la persona " << i+1 <<" de "<< N <<" :"; cin >> Fulanito[i].Nombre; cout << endl; cout << " Introduce el numero telefonico de " << Fulanito[i].Nombre<< ": "; cin >> Fulanito[i].Telefono; cout << endl << endl; } system("cls"); while(1) { indice=0; cout << " ******************** MENU ********************* " << endl << endl << endl << endl << endl; cout << " 1) Buscar por nombre " << endl << endl; cout << " 2) Buscar por numero " << endl << endl; cout << " 3) Salir " << endl << endl; cout << " Que desea realizar: "; cin >> z; system("cls"); if (z == 3) return 1; else if (z == 1) { cout << " Introduce el nombre de la persona que desea buscar: "; cin >> buscaNombre; cout << endl << endl; for (i = 0; i < N ;i++) { if (strcmp(Fulanito[i].Nombre, buscaNombre)==0){ cout <<" Telefono de "<< Fulanito[i].Nombre <<": " << Fulanito[i].Telefono; cout << endl << endl << endl; indice++; } } if (indice==0) cout << "No existe en la base esa persona"<< endl<< endl<< endl; } else if (z == 2) { cout << " Introduce el numero de la persona que desea buscar: "; cin >> buscaTel; cout << endl << endl; for (i = 0; i<N ;i++) { if ((buscaTel==Fulanito[i].Telefono)){ cout << " Nombre: " << Fulanito[i].Nombre; cout << endl << endl << endl; indice++; } } if (indice==0) cout << "No existe en la base ese numero"<< endl<< endl<< endl; } else cout<<"Opcion equivocada"<<endl<<endl<< endl; } return 0; }
Saluditos!. ....
|
|
|
814
|
Programación / Programación C/C++ / Re: Problema con un programa:
|
en: 16 Mayo 2013, 23:01 pm
|
................................................ Luego, para evitarte muchos cout << endl;, puedes hacer una funcion simple como la siguiente: void MuchosCout(int numerodecouts) { for(int i=0;i<numerodecouts;++i) cout << endl; }
Muy acertada la función. Aunque creo que lo que pretende es "pasar" líneas hasta que no se vea lo anterior y para eso yo le aconsejaría usar system("cls") para limpiar la pantalla, suponiendo esté en Windows y, eso sí, incluir la librería <cstdlib> para su uso.
Te compila?, veo que tienes varios errores, como: Código: cout << " Introduce el nombre de la persona: ";cin >> Fulanito.Nombre; cout << endl;
Cuando intentas acceder a un array, tienes que decirle a QUE POSICION QUIERES ACCEDER., es decir, Fulanito.Nombre[posicion].
Totalmente de acuerdo, pero es Fulanito[posicion].Nombre y aún en ese supuesto sí los tiene puestos. El problema radica en que al pegar el código sin usar las etiquetas GeSHi de C++, por favor usarlas y pegar el código en medio de esas etiquetas, pues a lo que iba, al no usar las susodichas etiquetas el código le sale en cursiva y se "come" los índices. Si editas su mensaje veras que si están puestos. Saluditos!. .....
|
|
|
815
|
Programación / Programación C/C++ / Re: Orientación con un problema
|
en: 16 Mayo 2013, 22:42 pm
|
Buff...arrays, aun no he tocado ese tema en el libro que estoy leyendo, de hecho, terminé con las funciones y ese es el que me toca ahora, así que lo leeré y después continuo con el problema, muchas gracias, cuando lo retome miraré otra vez tus consejos.
Pues ánimos y a por el tema de arrays, es fundamental porque te abrirá las puertas a muchos ejercicios.
Y casi seguro que después tendras el tema de punteros. Desde ya te aconsejo tomarlo con calma y ganas ya que es "la otra gran puerta".
Saluditos .....,nuevamente".......
|
|
|
816
|
Programación / Programación C/C++ / Re: Orientación con un problema
|
en: 16 Mayo 2013, 21:56 pm
|
Antes que nada un fuerte saludo otra vez y gracias por la alegría que me das al verte por aquí.
Para que te hagas una idea de lo que te proponen, ya que no vas a usar ficheros pues aún no has llegado -tranqui!, todo es cuestión de tiempo- puedes imaginarte un capítulo como un array compuesto de diversas palabras. Por ejemplo suponiendo que ninguna palabra exceda de 20 caracteres:char capitulo1[15][20]={"pincel","pipa","Cine","Teatro", ....-y así hasta quince....} char capi1[15][20]={0};
Y lo que podrías hacer es recorrer el array capitulo1 y guardar en capi1 las palabras abreviadas. Ahí veo una pequeña laguna en cuanto al número de letras a tomar como abreviaturas de las originales. Por hacerlo de forma esquemática yo te propondría que tomaras la longitud de la palabra, que la obtienes con strlen, menos tres de forma que pincel sería pin, como ejemplo.
Se trataría en esencia de ir recorriendo con un for el array capitulo1[i]
y en otro for interno al anterior de 0 a strlen-3 guardas los caracteres. Vamos algo así:
for (i=0;i<15;i++) for (j=0;j<strlen(capitulo1[i])-3;j++) { capi1[i] [j]=capitulo1[i] [j]; }
Se podría hacer con más capítulos pero en el formato array en lugar de fichero originaría arrays tridimensionales.
Se me ocurre que para dos capítulos fuera:char capituloi[2][15][20]={{"pincel","pipa","Cine","Teatro", ....-y así hasta quince....},{"papel","tijera", ....-y así hasta quince....}} char capi[2][15][20]={0};
Demasiado fuerte para empezar. Te aconsejaría el primero con un sólo capítulo.
Espero haberme explicado meridianamente bien y te sirva de orientación....... y que yo no haya metido la gamba.
Saluditos!. ......
P.D:Procura elegir mejor los ejercicios, éste es muy de fichero.
|
|
|
817
|
Programación / Programación C/C++ / Re: Creando una función para hallar la media y la desviación
|
en: 14 Mayo 2013, 17:04 pm
|
Tienes razón, no era un problema sino dos (el uso del VLA y las dos variables sin inicializar).
¿O son tres? Lo menciono porque:
1) Debido a que la definición de la función main omite el tipo de retorno no se puede compilar como C99 (no seria valido).
2) La declaración del array "data" requiere compilar como C99.
...
Ya sé que main debería ser declarado como int y que el uso de VLAs da problemas al no estar implementado en algunos compiladores, sin embargo en ese caso lo mejor es cambiar de compilador a uno más "funcional". En mi caso con Code::Blocks no he tenido problema alguno ni con main ni con los VLAs, que utilizo frecuentemente sin problemas.
Vamos que si el compilador "no tira" por falta de implementación de ciertas funcionalidades del C99 sencillamente cambiaría de compilador.
Saluditos!. .....
|
|
|
818
|
Programación / Programación C/C++ / Re: Ayuda con un programa
|
en: 14 Mayo 2013, 16:53 pm
|
Hola
¿ Podrían ayudarme por favor? Pues andaba aburrido y me dije ¡vamos a echarle un cabo a Luisa Ringo!.
Y me salio esta salida que es "casi" la esperada para lo que se pedía: Ingrese Nombre de Cines: >sorancio Ingrese Nombre de Cines: >leosan Ingrese Nombre de Cines: >masakre Ingrese Nombre de Cines: >rir3760 Ingrese Nombre de Cines: >pantalaimon Cines ordenados alfabeticamente: leosan masakre pantalaimon rir3760 sorancio Ingrese Nombre de Teatros: >amchacon Ingrese Nombre de Teatros: >leosansan Ingrese Nombre de Teatros: >caster Ingrese Nombre de Teatros: >puntoinfinito Ingrese Nombre de Teatros: >do-while Teatros ordenados alfabeticamente:> amchacon caster do-while leosansan puntoinfinito Teatros y Cines ordenados alfabeticamente:> amchacon caster do-while leosan leosansan masakre pantalaimon puntoinfinito rir3760 sorancio
Con este código, a mejorar poniendo más funciones para los trozos que se cuasi-repiten, pero algo tendrás que aportar tú:#include<stdio.h> #include<string.h> #define TAM 5 #define TAM2 2*TAM #define TAM_NOMBRE 20 void bubblesort(char cines[][TAM_NOMBRE], int tam ); int main() { int i; char cines[TAM][TAM_NOMBRE],teatros[TAM][TAM_NOMBRE],entretenimientos[TAM2][TAM_NOMBRE]; for(i=0;i<TAM;i++) { printf("\nIngrese Nombre de Cines:\n>"); scanf("%s",&cines[i]); } printf("\nCines ordenados alfabeticamente:\n"); bubblesort(cines,TAM); for(i=0;i<TAM;i++) printf("\n\t%s",cines[i]); for(i=0;i<TAM;i++) { printf("\nIngrese Nombre de Teatros:\n>"); scanf("%s",&teatros[i]); } bubblesort(teatros,TAM); printf("\nTeatros ordenados alfabeticamente:\n>"); for(i=0;i<TAM;i++) printf("\n\t%s",teatros[i]); for(i=0;i<TAM;i++) strcpy(entretenimientos[i],teatros[i]); for(i=TAM;i<TAM2;i++) strcpy(entretenimientos[i],cines[i-TAM]); bubblesort(entretenimientos,TAM2); printf("\nTeatros y Cines ordenados alfabeticamente:\n>"); for(i=0;i<TAM2;i++) printf("\n\t%s",entretenimientos[i]); return 0; } void bubblesort(char nombre[][TAM_NOMBRE], int n ) { int i,j,temp; char temp_[TAM_NOMBRE]; float comp; for(i=1;i<n;i++) { for(j=0;j<n-i;j++) { comp = strcmp( nombre[j], nombre[j+1] ); if(comp > 0) { strcpy(temp_,nombre[j]); strcpy(nombre[j],nombre[j+1]); strcpy(nombre[j+1],temp_); } } } }
¡Lo que me habría ahorrado con string!. En fin, eso te lo dejo a tí, como lo de ordenar de manera descendente el segundo array, el de teatros.
Saluditos!. ..... P.D:Hay algo a mejorar, que la letra inicial sea mayúscula, pero no te lo voy a dar todo hecho.
|
|
|
819
|
Programación / Programación C/C++ / Re: Creando una función para hallar la media y la desviación
|
en: 14 Mayo 2013, 15:41 pm
|
Quiero hacer un programa que genere N floats uniformemente distribuidos en un intervalo dado y que calcule la media y la dispersión mediante una función ...............................................................
Compila sin problemas pero los valores para la media y la varianza son incorrectos. El caso es que en una versión anterior del programa en la cual N no estaba pillado de la consola al menos la media funcionaba.
¿Alguna pista?
El problema radica, con permiso de rir, en que no inicializas las variables *media=0 y *varianza=0 antes de los correspondientes for. A mí, con esta pequeñísima corrección, me ha funcionado bien, creo.
Saluditos!. ......
|
|
|
820
|
Programación / Programación C/C++ / Re: quien me orienta con este ejercicio en c++
|
en: 11 Mayo 2013, 14:46 pm
|
Para empezar no es C++ sino más bien C.Además de lo comentado por amchacon, tienes dos switch y no tiene por qué continuar los case del uno con el otro, ambos pueden empezar de 1, eso sí con dos opciones diferentes para no liarla.
Las opciones con entero pueden dar bucles si el usuario entra una letra en lugar de un número, de ahí que yo los use como char y en los case, al ser char van entre las comillas simples.
Sería conveniente darle al usuario la opción de regresar al menú principal una vez que ha usado el menú secundario o segundo switch, así al menos es como funcionan los cajeros y limpiar o refrescar la pantalla según se vayan seleccionando opciones. Con estas opciones te propongo este código para seguir mejorándolo:#include<stdio.h> #include<stdlib.h> #define GRACIAS puts("GRACIAS POR SU PREFERENCIA") int main(){ int a; char opcion,opcion1; puts("\nESTE PROGRAMA MUESTRA COMO ES EL SISTEMA DE UN CAJERO AUTOMATICO"); while(1){ puts ("\nDame tu clave"); scanf(" %d",&a); if(a==123456){ system ("cls"); puts("\nEs correcto"); break; } else{ printf("\n Contraseña invalida"); printf("\nTeclea otra ves tu clave"); } } while (1){ system("\npause"); system ("cls"); puts("\nEste es el menu de opciones\n "); puts("1.-Traspaso\n"); puts("2.-Recargas\n"); puts("3.-Retiro en efectivo\n"); puts("4.-Salir\n"); puts("\nTeclea la opcion que quieras\n"); scanf(" %c",&opcion); switch(opcion) { case '1': { puts("Traspaso"); GRACIAS; break; } case '2': { puts("Recargas"); GRACIAS; break; } case '4': { puts("Elejiste la opcion de salir"); GRACIAS; system("\npause"); return 1; } default: puts("opcion erronea"); case '3': { system ("cls"); puts("\nRetiro en efectivo"); puts("\nCuanto deseas retirar:"); puts("\nElige la opcion que quieras para retirar"); puts("\nPuedes elegir:"); puts("1.- $20"); puts("2.- $50"); puts("3.- $100"); puts("4.- $200"); puts("5.- $500"); puts("6.- $1000"); puts("7.- Volver al menu principal"); puts("\nElige la opcion que quieras"); scanf("\n%c",&opcion1); switch(opcion1) { case '1': { puts("Elegiste la opcion de $20"); GRACIAS; break; } case '2': { puts("Elegiste la opcion de $50"); GRACIAS; break; } case '3': { puts("Elegiste la opcion de $100"); GRACIAS; break; } case '4': { puts("Elegiste la opcion de $200"); GRACIAS; break; } case '5': { puts("Elegiste la opcion de $500"); GRACIAS; break; } case '6': { puts("Elegiste la opcion de $1000"); GRACIAS; break; } case '7': { puts("Elegiste la opcion de volver al menu principal"); GRACIAS; break; } default: puts("opcion erronea"); break; } } } } return 0; }
Saluditos!. .....
|
|
|
|
|
|
|