online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include<iostream> #include<locale.h> #include<string.h> #include<stdlib.h> #include<conio.h> /* Programa: Una empresa desea un pequeño sistema que les permita guardar los datos de 20 empleados; número de empleado y primer nombre. autor: Kevin Elián Valarezo Guamán date: 20/03/2024 */ int main(){ setlocale(LC_CTYPE, "Spanish"); /*Variables 'int' a usar opcion: Servirá para que el usuario pueda navegar por el menú de opciones del programa. n: Será la cantidad máxima de empleados, siendo menor a 20 y no menor o igual a 0. iInferior: Servirá para buscar a los empleados por su respectivo número en saber el que tiene una posición menor. Útil para la búsqueda binaria. iSuperior: Servirá para buscar a los empleados por su respectivo número en saber el que tiene una posición mayor. Útil para la búsqueda binaria. iCentro: Servirá para buscar a los empleados por su respectivo número en saber el que esta en el centro. Útil para la búsqueda binaria. buscar: Será la condición de búsqueda para el número del empleado. posicion: Servirá para ordenar a los empleados, contendrá la posición anterior de un empleado. aux: Servirá para ordenar a los empleados, guardará el número de empleado a comparar. e: Otro tipo de contador como lo son i y j. v: Servirá en verificar si ya se ingreso un empleado con su número para luego comparar con otros y que no sea igual. cont: Servirá para cambiar de posición a la cadena original fn[n]. cont2: Sirve para cambiar de posición a la cadena copia fnC[n]. */ //cont = 0. Usar en caso de querer un contador. int opcion = 0, n = 0, iInferior = 0, iSuperior = 0, iCentro = 0, buscar = 0, posicion = 0, aux = 0, e = 0, v = 0, cont = 0, cont2 = 0; /*Variables 'char' a usar. buscarN[20]: Será la condición de búsqueda para el nombre del empleado. bandera: Útil para verificar si se ha encontrado el número de empleado con otro. ayuda[20]: Ayuda para ordenar los nombres. banderaN: Útil para verificar si se ha encontrado el nombre de empleado con otro. */ char buscarN[20] = "", bandera = 'F', ayuda[20] = "", banderaN = 'F'; std::cout<<"LA FAVORITA\n"; //Bienvenida del programa, do{ std::cout<<"Ingrese la cantidad de empleados que va ingresar: "; std::cin>>n; if(n<=0 || n>20){ system("cls"); std::cout<<"Error: Máxima cantidad de empleados: 20\n"; } else{ system("cls"); } }while(n<=0 || n>20); //Ciclo do...while() para que el ingreso de empleados sea menor a 20 y mayor que 0 y diferente de este. /*Vectores 'int' a usar empleados[n]: Tendrá la cantidad máxima de empleados para saber su número. empleadosC[n]: Tendrá los valores de empleados[n] como respaldo. */ int empleados[n] = {}, empleadosC[n] = {}; /*Cadenas 'char' a usar fn[n][20] (first name): Contendrá el primer nombre del empleado. fnC[n][20]: Contedrá los datos de fn[n][20] como respaldo. vrf[n]: Verificará la posición donde se ha encontrado el nombre con otro empleado. */ char fn[n][20], fnC[n][20], vrf[n]; for(int i = 0; i<n; i++){ //Todas las posiciones de vrf en F. vrf[i] = 'F'; } std::cout<<"INGRESO DE EMPLEADOS\n\n";//Ingreso de empleados for(int i = 0; i<n; i++){ //Ciclo for para el ingreso de empleados con su número y primer nombre. do{ bandera = 'F'; std::cout<<"N° de empleado: "; std::cin>>empleados[i]; if(v == 1){ for(int j = 0; j<n; j++){ if(empleados[i] == empleadosC[j]){ bandera = 'V'; j = n; } } } if(empleados[i]<=0 || empleados[i]>n){ std::cout<<"\nNúmero de empleado fuera del límite de "<<n<<"\n\n"; }else if(bandera == 'V'){ std::cout<<"\nNúmero de empleado ya asignado.\n\n"; } }while(empleados[i]<=0 || empleados[i]>n || bandera == 'V'); std::cin.ignore(10000, '\n'); //Se lo pone aquí para que se pueda almacenar bien los nombres en fn[i]. std::cout<<"Primer nombre del empleado: "; std::cin.getline(fn[i], 20, '\n'); //Paso de datos. empleadosC[i] = empleados[i]; strcpy(fnC[i], fn[i]); std::cout<<std::endl; v = 1; //Despues que se haya ingresado un empleado se podrá comparar con otros empleados con su número. } /*Fase N°1 de prueba del programa. Comprobar el paso de datos del nombre de empleados. Aprendiendo algo nuevo: Al momento de pedir el ingreso de un valor númerico antes de ingresar una palabra en una cadena, no se almacenará, por ende, se debe poner std::cin.ignore(10000, '\n'); antes de pedir el ingreso de una cadena. */ /*for(int i = 0; i<n; i++){ std::cout<<empleadosC[i]; std::cout<<fnC[i]<<std::endl; }*/ //Método de ordenamiento por insercion. Ordena los empleados de manera ascedente. for(int i = 0; i<n; i++){ strcpy(ayuda, fn[i]); posicion = i; aux = empleados[i]; while((empleados[posicion-1] > aux) && posicion > 0){ empleados[posicion] = empleados[posicion - 1]; strcpy(fn[posicion], fn[posicion - 1]); posicion--; } empleados[posicion] = aux; strcpy(fn[posicion], ayuda); } do{ //Variables a utilizar en 0 en caso de que se vuelva a usar el mené de opciones y así evitar errores. cont = 0; cont2 = 0; buscar = 0; opcion = 0; bandera = 'F'; banderaN = 'F'; iCentro = 0; iInferior = 0; iSuperior = n-1; e = 0; v = 0; for(int i = 0; i<n; i++) vrf[i] = 'F'; //Menú de opciones. std::cout<<">> 1 Buscar el nombre de un empleado por su número de empleado.\n"; std::cout<<">> 2 Buscar el número de empleado por su nombre.\n"; std::cout<<">> 3 Saber si un usuario no existe.\n"; std::cout<<">> 4 Saber si hay nombres similares entre sus empleados.\n"; std::cout<<">> 5 Mostrar empleados de forma ascendente por número de empleado.\n"; std::cout<<">> 6 Mostrar empleados de forma descendente por número de empleado.\n"; std::cout<<">> 7 Salir del programa\n"; std::cout<<" Opción: "; std::cin>>opcion; system("cls"); switch(opcion){ case 1: std::cout<<"Ingrese el número del empleado: "; std::cin>>buscar; if(buscar <= 0 || buscar > n){ //if para verificar en primera nuevamente que el número de empleado sea //mayor a 0 y menor que la cantidad de empleados. std::cout<<"El número no corresponde a ningún empleado."; } else{ //Búsqueda binaria. Búsca a los empleados por medio de su número. while(iInferior <= iSuperior){ iCentro = (iInferior + iSuperior) / 2; if(empleados[iCentro] == buscar){ bandera = 'V'; break; } else if(empleados[iCentro] > buscar){ iSuperior = iCentro - 1; } else { iInferior = iCentro + 1; } } if(bandera == 'V'){ std::cout<<"\nEl empleado N°"<<buscar<<" es: "<<fn[iCentro]<<"\n\n"; } else{ std::cout<<"\nEl número no corresponde a ningún empleado.\n\n"; } } break; case 2: std::cin.ignore(10000, '\n'); //Evitar errores en escribir el nombre que se desea buscar. std::cout<<"Ingrese el nombre del empleado: "; std::cin.getline(buscarN, 20, '\n'); //Método de búsqueda secuencial. Para buscar a los empleados por su nombre. while(e<=n-1){ if(strcmp(buscarN, fn[e])==0){ vrf[e] = 'V'; banderaN = 'V'; } e++; } if(banderaN == 'V'){ for(int i = 0; i<n;i++){ if(vrf[i] == 'V'){ std::cout<<"El numéro del empleado "<<buscarN<<": "<<empleados[i]<<"\n"; } } } else std::cout<<"El nombre no corresponde a ningún empleado.\n"; std::cout<<std::endl; break; case 3: do{ std::cout<<"Saber si existe por:\n"; std::cout<<" 1 Número\n"; std::cout<<" 2 Nombre\n"; std::cout<<"\nOpción: "; std::cin>>opcion; switch(opcion){ case 1: std::cout<<"\nIngrese el número del empleado: "; std::cin>>buscar; //Método de búsqueda secuencial. Para buscar a los empleados por su nombre. while((bandera == 'F') && (e<=n-1)){ if(empleados[e] == buscar){ bandera = 'V'; } e++; } break; case 2: std::cin.ignore(10000, '\n'); //Evitar errores en escribir el nombre que se desea buscar. std::cout<<"\nIngrese el nombre del empleado: "; std::cin.getline(buscarN, 20, '\n'); //Método de búsqueda secuencial. Para buscar a los empleados por su nombre. while(e<=n-1){ if(strcmp(buscarN, fn[e])==0){ banderaN = 'V'; v++; } e++; } break; default: system("cls"); std::cout<<"Error: Opción no disponible\n"; break; } if(bandera == 'V' || banderaN == 'V'){ std::cout<<" Este empleado si existe\n"; if(opcion==2){ if(v==1) std::cout<<" Registrado una 1 vez\n"; else std::cout<<" Registrado "<<v<<" veces\n"; } std::cout<<std::endl; } else if((opcion<2 && opcion>0)||(bandera == 'F'||banderaN == 'F')){ //else if para que no salga este mensaje en caso de que el usuario ingrese una //opción del menú fuera de los parametros. std::cout<<"Este empleado no existe\n\n"; } }while(opcion <=0 || opcion >2); //Ciclo do...while() para verificar que la opcion no este fuera de los parametros. break; case 4: //Pendiente en verificar a empleados con el mismo nombre. std::cout<<"Empleados repetidos\n\n"; for(int i = 0; i<n; i++){ cont = i; std::cout<<"Empleado N°"<<cont+1<<" "<<fn[cont]<<" repetido con los empleados: \n"; for(int j = 0; j<n; j++){ cont2 = j; if((strcmp(fn[cont], fnC[cont2])==0)&&(empleados[cont]!=empleadosC[cont2])){ std::cout<<" N°"<<cont2+1<<" "<<fnC[cont2]<<std::endl; } } std::cout<<std::endl; } break; case 5: std::cout<<"Empleados ordenados de manera ascendente: \n\n"; for(int i = 0; i<n; i++){ std::cout<<"Empleado N°"<<empleados[i]<<"\n "<<fn[i]; std::cout<<std::endl; } std::cout<<std::endl; break; case 6: std::cout<<"Empleados ordenados de manera descendente: \n\n"; for(int i = n-1; i>=0; i--){ //Ciclo for para presentar los empleados de manera descendente en vez de ordenar de //otra manera. std::cout<<"Empleado N°"<<empleados[i]<<"\n "<<fn[i]; std::cout<<std::endl; } std::cout<<std::endl; break; case 7: std::cout<<"Gracias por usar este programa :D"; getch(); //No cerrará el programa de golpe. break; default: //En caso de que el usuario elija una opción fuera de los paranetros. system("cls"); std::cout<<"Error: Opción no disponible\n"; break; } }while(opcion<7 || opcion > 0); //Ciclo do...while(). Servirá para el usuario pueda navegar el menú. return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue