Buscar Caracter y Calcular la Longitud de una Cadena C++

septiembre 18, 2009 at 12:32 am (Cpp)

Bueno, leyendo un manual de C++ proponian unos problemas (2), yo los he hecho en un solo programa, los problemas consistían en buscar un caracter concreto en una cadena, dando como parámetros la cadena y el caracter y el otro problema consistía en calcular la longitud de una cadena dando como parámetro un puntero a char, aquí está el programa:

V1:
#include
using namespace std;

int LongitudCadena(char *cadena[]);
int BuscaCaracter(char cadena[], char caracter[]);

int main()
{
char *cadena = "Saambala";
char Cadena[9] = "Saambala";
char caracter[2] = "m";
cout << "Logitud de " << cadena << ": " << LongitudCadena(&cadena) << endl;
cout << "El caracter m en la cadena " << Cadena << " se encuentra en la posicion: " << BuscaCaracter(Cadena, caracter) << endl;
system("pause");
}

int LongitudCadena(char *cadena[])
{
int j = 0;
while(cadena[j] != NULL) { j++; }
return (j+1)/2;
}

int BuscaCaracter(char cadena[], char caracter[])
{
int i = 0, j = 0;
while(cadena[i] != caracter[j]) { i++; }
return i+1;
}

Con un if en vez de un while, o un for también habría funcionado, pero bueno, vi una especie de plantilla con while y decidí hacerlo así. La longitud de cadena tuve que dividirla entre 2, no se por qué me da el doble del resultado O.o. Ya he comprendido la utilidad de los punteros, aunque aun no les he aprendido a sacar mucho partido.. Se para qué y cómo se usan (tipo *puntero; puntero = &variablequeapuntan; *puntero++ equivale a variablequeapuntan++, puntero++ aumenta en 1 la posición que apuntan y como parámetro de funciones siempre poner la direccion a la que apuntan, &puntero. RESUMEN), pero aun no veo DONDE se usan xD. En otro ejemplo se podría apreciar que un vector de punteros a char (ejemplo) solo necesita una dimensión, en cambio un array char, necesita 2 dimensiones para almacenar 12 meses con 11 carácteres de máximo cada uno, ejemplo, repito, y bueno, todo esto sobre los punteros, iré probándolos mas a menudo =D.

Gracias.

Permalink Dejar un comentario

Gestor de Empleados C++

septiembre 17, 2009 at 2:38 pm (Cpp)

Buenas, pues hoy quiero presentaros mi último programa.. Es bastante simple de momento, pero tiene varias funciones que me parecieron necesarias.. El programa es un gestor de empleados diseñado para cualquier empresa, consta de 7 funciones entre las que destacan añadir empleado, borrar empleado, mandar mensajes entre empleados y leer mensajes.. Son bastante simples, pero en la función de mandar mensaje tengo un error identificado en 4 líneas continuas.. El programa me parece que está bastante logrado, y bien pensado, ya me diréis algo, mientras tanto iré mejorándolo.

V1:

#include <stdio.h>
#include <iostream>
using namespace std;

int Empleados = 0;
int plantilla = Empleados;
char sn[3];
int opcion;

//Todas las funciones necesarias para el programa
void AnadirEmpleado();
void BorrarEmpleado();
void ConsultarNumEmpleado();
void ConsultarTelefonos();
void ConsultarRango();
void MandarMensaje();
void LeerMensajes();
void ConsultarNumMensajes();

struct Plantilla
{
char Nombre[32];
char Apellido[32];
int TelefonoMovil;
int TelefonoParticular;
int EmpleadoNum;
int totalmensajes;
Plantilla(){ totalmensajes = 0; }
struct BandejaDeEntrada
{
char Texto[499];
char subject[32];
char destinoNombre[32];
char destinoApellido[32];
char remiteNombre[32];
char remiteApellido[32];
} Mensajes[50];
float Sexo;
char Direccion[32];
float Rango; //1 = empleado, 2 = ejecutivo, 3 = directivo
} Plantilla[200];

int main()
{
system("cls");
int opc;

cout << "Bienvenido al Gestor de Empleados, A continuacion seleccione la gestion que desee." << endl;
cout << "1.- Anadir Empleado" << endl << "2.- Borrar Empleado" << endl << "3.- Consultar Numero de Empleado" << endl;
cout << "4.- ConsultarTelefonos" << endl << "5.- Consultar Cargo" << endl << "6.- Mandar Mensaje" << endl;
cout << "7.- Consultar Mensaje" << endl << "8.- Consultar Bandeja de Entrada" << endl;
cin >> opc;

switch(opc)
{
case 1:
AnadirEmpleado();
break;
case 2:
BorrarEmpleado();
break;
case 3:
ConsultarNumEmpleado();
break;
case 4:
ConsultarTelefonos();
break;
case 5:
ConsultarRango();
break;
case 6:
MandarMensaje();
break;
case 7:
LeerMensajes();
break;
case 8:
ConsultarNumMensajes();
default:
cout << "Opcion incorrecta" << endl;
system("pause");
main();
break;
}
}

void AnadirEmpleado()
{

system("cls");
cout << "Nombre: ";
cin >> Plantilla[Empleados].Nombre;
cout << "\nApellido: ";
cin >> Plantilla[Empleados].Apellido;
cout << "\nDireccion: ";
cin >> Plantilla[Empleados].Direccion;
cout << "\nTelefono Movil: ";
cin >> Plantilla[Empleados].TelefonoMovil;
cout << "\nTelefono Particular: ";
cin >> Plantilla[Empleados].TelefonoParticular;
cout << "\nSexo (H=1, M=2): ";
cin >> Plantilla[Empleados].Sexo;
cout << "\nCargo (Empleado=1, Ejecuto=2, Directivo=3): ";
cin >> Plantilla[Empleados].Rango;
Plantilla[Empleados].EmpleadoNum = Empleados+1;
cout << "\n\nAnadir? (s/n): ";
cin >> sn;
if(sn == "s" || sn == "S")
{
FILE *fichero;
char NombreFichero[64] = "Plantilla[Empleados].Nombre.txt";
fichero = fopen(NombreFichero, "w");
cout << "Nombre: " << Plantilla[Empleados].Nombre << endl;
cout << "Apellido: " << Plantilla[Empleados].Apellido << endl;
cout << "Direccion: " << Plantilla[Empleados].Direccion << endl;
cout << "Telefono Movil: " << Plantilla[Empleados].TelefonoMovil << endl;
cout << "Telefono Particular: " << Plantilla[Empleados].TelefonoParticular << endl;
cout << "Sexo (H=1, M=2): " << Plantilla[Empleados].Sexo << endl;
cout << "Cargo (Empleado=1, Ejecuto=2, Directivo=3): " << Plantilla[Empleados].Rango << endl;
cout << "Numero de Empleado: " << Plantilla[Empleados].EmpleadoNum << endl;
cout << "Numero de Mensajes: " << Plantilla[Empleados].totalmensajes << endl;
fclose(fichero);
cout << "Empleado Anadido con exito, redireccionando al menu principal";
system("pause");
main();
} else {
cout << "Empleado NO anadido, redireccionando al menu principal" << endl;
system("pause");
main();
}
Empleados += 1;
plantilla += 1;
}

void BorrarEmpleado()
{
char Nombre[32];
int NumEmpl;
system("cls");
cout << "Nombre: ";
cin >> Nombre;
if(Nombre)
{
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == Nombre)
{
Plantilla[i] = Plantilla[Empleados];
plantilla -= 1;
cout << "\n\nEmpleado Borrado con exito, redireccionando a menu principal" << endl;
system("pause");
main();
}
}
} else {
cout << "Numero de Empleado: ";
cin >> NumEmpl;
if(!NumEmpl)
{
cout << "\nDebe introducir al menos un parametro, redireccionando al menu de borrar empleado." << endl;
system("pause");
system("cls");
BorrarEmpleado();
} else {
Plantilla[NumEmpl] = Plantilla[Empleados];
plantilla -= 1;
cout << "\n\nEmpleado Borrado con exito, redireccionando a menu principal" << endl;
system("pause");
main();
}
}
}

void ConsultarNumEmpleado()
{
char Nombre[32];
char Apellido[32];
system("cls");
cout << "Indique el nombre del empleado: ";
cin >> Nombre;
cout << "\nIndique el apellido del empleado :";
cin >> Apellido;
if(Nombre && Apellido)
{
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == Nombre && Plantilla[i].Apellido == Apellido)
{
cout << i << "es el numero de identificacion del empleado " << Plantilla[i].Nombre
<< " " << Plantilla[i].Apellido << endl;
cout << "Para realizar cualquier otra gestion ve al menu principal, redireccionando" << endl;
system("pause");
main();
} else {
continue;
}
}
} else {
cout << "\nDebe introducir el nombre y el apellido del empleado, redireccionando al menu de consultar empleado" << endl;
system("pause");
ConsultarNumEmpleado();
}
}

void ConsultarTelefonos()
{
char Nombre[32];
char Apellido[32];
int NumEmp;
system("cls");

cout << "Introduzca el Nombre del empleado: ";
cin >> Nombre;
cout << "\nIntroduzca el Apellido del empleado: ";
cin >> Apellido;
if(!Nombre || !Apellido)
{
cout << "\nO si no, introduzca el numero de empleado: ";
cin >> NumEmp;
if(!NumEmp)
{
cout << "\nDebe introducir al menos el nombre y apellido o el numero de empleado, redireccionando al menu de consulta de telefonos" << endl;
system("pause");
ConsultarTelefonos();
} else {
cout << "\nTelefono movil: " << Plantilla[NumEmp].TelefonoMovil << endl;
cout << "Telefono particular: " << Plantilla[NumEmp].TelefonoParticular << endl;
cout << "Redireccionando al menu principal" << endl;
system("pause");
main();
}
} else {
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == Nombre && Plantilla[i].Apellido == Apellido)
{
cout << "\nTelefono movil: " << Plantilla[i].TelefonoMovil << endl;
cout << "Telefono particular: " << Plantilla[i].TelefonoParticular << endl;
cout << "Redireccionando a menu principal" << endl;
system("pause");
main();
} else {
continue;
}
}
}
}

void ConsultarRango()
{
char Nombre[32];
char Apellido[32];
int NumEmp;
system("cls");

cout << "Introduzca el Nombre del empleado: ";
cin >> Nombre;
cout << "\nIntroduzca el Apellido del empleado :";
cin >> Apellido;
if(!Nombre || !Apellido)
{
cout << "\nEscriba el numero de empleao: ";
cin >> NumEmp;
if(!NumEmp)
{
cout << "Debe introducir el nombre y apellido o el numero de empleado, redireccionando al menu de consulta de cargo" << endl;
system("pause");
ConsultarRango();
} else {
cout << "El cargo del empleado es (1=Empleado, 2=Ejecutivo, 3=Directivo): " << Plantilla[NumEmp].Rango << endl;
cout << "Redireccionando al menu principal" << endl;
system("pause");
main();
}
} else {
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == Nombre && Plantilla[i].Apellido == Apellido)
{
cout << "El cargo del empleado es (1=Empleado, 2=Ejecutivo, 3=Directivo): " << Plantilla[i].Rango << endl;
cout << "Redireccionando al menu principal" << endl;
system("pause");
main();
} else {
continue;
}
}
}
}

void MandarMensaje()
{
char Texto[499];
char subject[32];
char destinoNombre[32];
char destinoApellido[32];
char remiteNombre[32];
char remiteApellido[32];
system("cls");

cout << "Escribe el nombre del destinatario: ";
cin >> destinoNombre;
cout << "\nEscribe el apellido del destinatario: ";
cin >> destinoApellido;
cout << "\nEscribe tu nombre: ";
cin >> remiteNombre;
cout << "\nEscribe tu apellido: ";
cin >> remiteApellido;
cout << "\nEscribe el asunto del mensaje: ";
cin >> subject;
cout << "\nEscribe el texto del mensaje: " << endl;
cin >> Texto;
if(destinoNombre && destinoApellido && remiteNombre && remiteApellido && subject && Texto)
{
cout << "\n\nDesea enviar el mensaje? s/n: ";
cin >> sn;
if(sn == "S" || sn == "s")
{
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == destinoNombre && Plantilla[i].Apellido == destinoApellido)
{
Plantilla[i].Mensajes[Plantilla[i].totalmensajes].remiteNombre = remiteNombre;
Plantilla[i].Mensajes[Plantilla[i].totalmensajes].remiteApellido = remiteApellido;
Plantilla[i].Mensajes[Plantilla[i].totalmensajes].subject = subject;
Plantilla[i].Mensajes[Plantilla[i].totalmensajes].Texto = Texto;
Plantilla[i].totalmensajes += 1;
} else {
continue;
}
}
} else {
cout << "\nEl mensaje no ha sido enviado, redireccionando al menu de enviar mensaje" << endl;
system("pause");
MandarMensaje();
}
} else {
cout << "\nDebes introducir todos los parametros, redireccionando a menu de mandar mensaje" << endl;
system("pause");
MandarMensaje();
}
}

void LeerMensaje()
{
char Nombre[32];
char Apellido[32];
int NumMensaje;
system("cls");

cout << "Introduzca el nombre: ";
cin >> Nombre;
cout << "\nIntroduzca el apellido: ";
cin >> Apellido;
cout << "\nIntroduzca el numero de mensaje a leer: ";
cin >> NumMensaje;
if(!Nombre || !Apellido || !NumMensaje)
{
cout << "\nDebe introducir todos los parametros, redireccionando al menu de leer mensaje" << endl;
system("pause");
LeerMensaje();
} else {
for(int i = 0; i == Empleados; i++)
{
if(Plantilla[i].Nombre == Nombre && Plantilla[i].Apellido == Apellido)
{
cout << "Asunto: " << Plantilla[i].Mensajes[NumMensaje].subject << endl;
cout << "Remitente: " << Plantilla[i].Mensajes[NumMensaje].remiteNombre << " " << Plantilla[i].Mensajes[NumMensaje].remiteApellido << endl;
cout << "Texto: " << Plantilla[i].Mensajes[NumMensaje].Texto << endl;
cout << "Redireccionando al menu principal" << endl;
system("pause");
main();
}
}
}
}

Bueno, el programa es bastante extenso, y tiene errores entre las líneas 325-328, el error es

ISO C++ forbids assignment of arrays

Gracias por leerme, espero que os esté resultando agradable. Saludos.

Permalink Dejar un comentario

Retomando C++

septiembre 15, 2009 at 10:53 pm (Cpp, Programación)

Buenas a todos, sólo unos pocos saben que estudié C++ hace unos meses, y lo estudié durante otro mes, que me bastó para llegar a tener conocimientos plenos sobre la mayoría de este lenguaje, quedándome antes de empezar con las clases y la herencia.. Bueno, el caso es que siempre he sido muy ambicioso en cuanto a conocimientos, y, por lo tanto, he retomado el estudio de este sensacional lenguaje de programación, para mi gusto, el mas potente y manejable de todos, aunque también unos en los que mas hay que esforzarse, ya que al ser de muy bajo nivel se requieren mas líneas para un simple sentencia en Visual Basic, por ejemplo.. Mediante vaya avanzando en mis estudios iré colocando algunos ejemplos de programas o problemas que me vayan surgiendo, y asi, podáis comentar.. Los que me leáis xD.. Ahora el clásico “Hola Mundo”, para calentar motores:

#include <iostream>
using namespace std;

int main()
{
cout << "Hola mundo" << endl;
system("pause"); // Solo para windows.. Linux ejecuta de otra manera, por asi decirlo.
}

Ahora explicaré cada línea, para la gente que no esté muy puesta en el tema:

#include <iostream> -> Esta línea no es necesaria, pero viene bien para familiarizarse con c++ y sus métodos, simplemente incluye una libreria estándar que viene con todos los compiladores C++ que cumplan la regla ANSI.

using namespace std; -> Esta línea hace que sea posible escribir “cout <<” sin necesidad de poner “std::” delante, pasa lo mismo con todos los elementos de esta libreria.

“” -> Una línea vacía, insignificante para el programa, simplemente cuenta como una línea más, aunque si es práctico a la hora de leer el programa por el programador, lo hace mas visual y agradable de leer.

int main() -> Esta línea es muy especial, está presente en todos los programas C++ y es la función que toma el mando en cuanto el programa es ejecutado, la primera palabra: int en este caso, indica el tipo de valor de retorno de esta función, en este caso entero, podría ser char (carácter), pero no con la función “main()”, siempre debe devolver entero, la segunda palabra: main en este caso, es el nombre de la función, el que será usado para invocar o llamar a la función, nunca veremos que sea llamada la función “main”, al menos de momento, si seguimos viendo los elementos de esta línea vemos “()”, son paréntesis que encierran a los argumentos requeridos por la función, “main” no admite parámetros, de ahí que la línea esté vacía, también podría ponerse un “main(void)”, pero es menos práctico.

{ -> Una llave, aparentemente no hace nada, simplemente encierra el cuerpo de la función, donde irán recogidas las sentencias y expresiones de la función.

cout << “Hola mundo” << endl; -> La primera sentencia de nuestro programa, se diferencia porque termina con un “;”, veamos elemento a elemento esta línea: cout << es el “comando” usado para imprimir texto en pantalla, si no hubiéramos escrito “using namespace std;” deberíamos haber escrito “std::cout <<“, es mas largo y difícil de recordar.. Es un elemento simple, que es muy usado en c++ en general, siguiente: “Hola mundo”, todo lo escrito entre comillas dobles será el texto impreso en pantalla, simple. Lo siguiente es << endl, ésto es el “comando” que finaliza la línea y hace que lo siguiente que se imprima en pantalla salga en una línea mas abajo, puede traducirse como “endline” = “endl”. Más fácil de recordar.

system(“pause”) ; // Solo para windows.. Linux ejecuta de otra manera, por asi decirlo. -> Otra sentencia, esta sirve para pausar el programa, sin esta línea el programa se cerraria de inmediato bajo una plataforma windows, al poner esto en la línea de comandos aparecerá un “Pulsa cualquier boton para continuar”, asi podremos leer el texto impreso en pantalla. Lo escrito después de // se llama comentario, el programa lo ignora y tiene mera función de guía, ya que es útil para el programador, y asi entender mejor el código. Es mejor acostumbrarse a comentar los programas y asi explicarlos, para ti mismo incluso.

} -> Cierra el cuerpo de la función, nada mas que comentar.

Bueno, con esto terminamos la explicación del código, espero que haya quedado claro y entendido, el primer programa, como véis, es muy simple y clásico (hola mundo xD). Seguiré publicando temas de este tipo, mientras vaya avanzando.

Un Saludo, y gracias por leerme.

Permalink Dejar un comentario

Bienvenidos

septiembre 15, 2009 at 1:57 pm (Uncategorized)

Bienvenidos a mi blog, donde escribiré artículos de todo tipo que me interese o que pueda interesaros.. Deciros también que acepto cualquier tipo de sugerencia para mejorar el blog o lo referente a él. Creo que debería advertiros acerca de que publicaré muchos artículos sobre programación y sus lenguajes, me encanta. Bueno, no quiero entreteneros con una aburrida bienvenida, asi que, sin mas.

Hasta luego.

Permalink Dejar un comentario

« Previous page