[C con Clase] Problemas de Estructuras (tema 11) para corregir
Marcos Collado Martín
marquitos.mcm en gmail.com
Vie Abr 20 22:12:19 CEST 2012
Son dos problemas en uno, meti todos los problemas en el mismo archivo. El
primer main corresponde al problema 1 y el otro main a los problemas 2,3,4
y 5 que van conjuntos :)
Un saludo ^^
El 20 de abril de 2012 20:02, Santiago Tabarez
<santiago230792 en gmail.com>escribió:
> ¿no escribiste el cuerpo de la funcion main 2 veces? me parece que la
> redefiniste
>
> /*Escribir un programa que almacene en un array los nombres y números
> de teléfono de 10 personas.
> El programa debe leer los datos introducidos por el usuario y
> guardarlos en memoria (en el array).
> Después debe ser capaz de buscar el nombre correspondiente a un número
> de teléfono y el teléfono
> correspondiente a una persona. Ambas opciones deben se accesibles a
> través de un menú, así como
> la opción de salir del programa. El menú debe tener esta forma, más o
> menos:
> a) Buscar por nombre
> b) Buscar por número de teléfono
> c) Salir
>
> Pulsa una opción: */
>
> #include <iostream>
> #include "string.h" // El compilador de Code::Blocks no ve <string> nu
> se porque.
> using namespace std;
>
> struct datos
> {
> char Nombre[200];
> int Telefono;
> } Datos[11]; // 10 personas + 1 (nulo)
>
> int main()
> {
> int x = 0;
> while(x < 10)
> {
> cout << "Ingrese el nombre:" << endl;
> cin >> Datos[x].Nombre;
> cout << "Ingrese el numero de telefono:" << endl;
> cin >> Datos[x].Telefono;
> x++;
> }
>
> int action;
>
> cout << "Menu Principal:" << endl << endl;
> cout << " 1- Buscar por nombre:" << endl;
> cout << " 2- Buscar por telefono:" << endl;
> cout << " 3- Salir del programa" << endl;
> cin >> action;
>
> bool encontrado = false;
> switch(action)
> {
> case 1: // Busqueda por nombre
> char nombre[200];
> cout << "Introduce el nombre:" << endl;
> cin >> nombre;
> for(int x = 0; x < 10; x++)
> {
> if (strcmp(Datos[x].Nombre, nombre) == 0)// No
> hemos dado lo que se
> tenia que hacer aqui realmente
> {
> cout << "Existe el nombre" << endl;
> cout << "El telefono de la persona es:" <<
> Datos[x].Telefono << endl;
> encontrado = true;
> }
> }
> if(!encontrado)
> {
> cout << "No existe ese nombre en la estructura" <<
> endl;
> return 0; // fin del programa
> }
> break;
> case 2: // Busqueda por telefono
> int tel;
> cout << "Introduce el telefono:" << endl;
> cin >> tel;
>
> for(int x = 0; x < 10; x++)
> {
> if(Datos[x].Telefono == tel)
> {
> cout << "Existe el telefono" << endl;
> cout << "El poseedor de ese telefono es:"
> << Datos[x].Nombre << endl;
> encontrado = true;
> }
> }
>
> if(!encontrado)
> {
> cout << "No existe ese telefono en nuestra base de
> datos" << endl;
> return 0; // fin del programa
> }
> break;
> case 3: // Salir
> return 0;
> }
>
> return 0;
> }
>
>
> /*Para almacenar fechas podemos crear una estructura con tres campos:
> ano, mes y dia.
> Los días pueden tomar valores entre 1 y 31, los meses entre 1 y 12 y
> los años, dependiendo de la aplicación,
> pueden requerir distintos rangos de valores. Para este ejemplo
> consideraremos suficientes 128 años, entre 1960
> y 2087. En ese caso el año se obtiene sumando 1960 al valor de ano. El
> año 2003 se almacena como 43.
> Usando estructuras, y ajustando los tipos de los campos, necesitamos
> un char para dia, un char para mes y otro para ano.
> Diseñar una estructura análoga, llamada fecha, pero usando campos de
> bits. Usar sólo un entero corto sin signo
> (unsigned short), es decir, un entero de 16 bits. Los nombres de los
> campos serán: dia, mes y anno.
> Basándose en la estructura de bits del ejercicio anterior, escribir
> una función para mostrar fechas: void Mostrar(fecha);.
> El formato debe ser: "dd de mmmmmm de aaaa", donde dd es el día,
> mmmmmm el mes con letras, y aaaa el año. Usar un array
> para almacenar los nombres de los meses.
> Basandose en la estructura de bits del ejercicio anterior, escribir
> una función bool ValidarFecha(fecha);, que verifique
> si la fecha entregada como parametro es válida. El mes tiene que estar
> en el rango de 1 a 12, dependiendo del mes y del año,
> el dia debe estar entre 1 y 28, 29, 30 ó 31. El año siempre será
> valido, ya que debe estar en el rango de 0 a 127.
> Para validar los días usaremos un array int DiasMes[] = {31, 28, 31,
> 30, 31, 30, 31, 31, 30, 31, 30, 31};. Para el caso de
> que el mes sea febrero, crearemos otra función para calcular si un año
> es o no bisiesto: bool Bisiesto(int); Los años bisiestos
> son los divisibles entre 4, al menos en el rango de 1960 a 2087 se cumple.
> Seguimos con el tema de las fechas. Ahora escribir dos funciones más.
> La primera debe responder a este prototipo:
> int CompararFechas(fecha, fecha);. Debe comparar las dos fechas
> suministradas y devolver 1 si la primera es mayor,
> -1 si la segunda es mayor y 0 si son iguales.
> La otra función responderá a este prototipo: int Diferencia(fecha,
> fecha);, y debe devolver la diferencia en días entre las
> dos fechas suministradas.
> */
>
> #include <iostream>
> #include "string.h"
> using namespace std;
>
> struct fecha
> {
> unsigned short int dia:5;
> unsigned short int mes:4;
> unsigned short int anno:7;
> } fechas[2];
> char meses[12][11] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo",
> "Junio", "Julio", "Agosto",
> "Septiembre", "Octubre", "Noviembre", "Diciembre"};
> int DiasMes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
>
> void Mostrar(fecha);
> bool ValidarFecha(fecha);
> bool Bisiesto(int anno);
> int CompararFechas(fecha, fecha);
> int Diferencia(fecha, fecha);
> int Suma(fecha);
>
> int main() // La pongo porque si, ya que no lo pide en el problema
> {
> int aux;
>
> for(int i = 0; i < 2; i++) // 2 fechas a comparar
> {
> cout << "Introduce el dia de la primera fecha" << endl;
> cin >> aux;
> fechas[i].dia = aux;
> cout << "Introduce el mes de la primera fecha" << endl;
> cin >> aux;
> fechas[i].mes = aux;
> cout << "Introduce el anno de la primera fecha" << endl;
> cin >> aux;
> fechas[i].anno = (aux - 1960);
>
> if(ValidarFecha(fechas[i]))
> cout << "Fecha correcta" << endl;
> else
> {
> cout << "Fecha incorrecta" << endl;
> i--;
> }
> }
> cout << "Comparando las dos fechas:" << endl;
> int c = CompararFechas(fechas[0], fechas[1]);
> if(c > 0)
> cout << "La primera fecha es mayor" << endl;
> else
> if(c == 0)
> cout << "Las dos fechas son iguales" << endl;
> else
> cout << "La segunda fecha es mayor" << endl;
>
> cout << " Diferencia entre las dos fechas:" << Diferencia(fechas[0],
> fechas[1]) << endl;
> cin.get();
> return 0;
> }
>
> void Mostrar(fecha f)
> {
> cout << "El dia seleccionado es:" << f.dia << "de" << meses[f.mes -
> 1] << "de" << f.anno + 1960 << endl;
> }
>
> bool ValidarFecha(fecha f)
> {
> if(f.dia > DiasMes[f.mes-1] || f.dia == 0 || f.mes > 12 || f.mes ==
> 0
> || (f.anno + 1960) < 1960)
> return false;
> return true;
> }
>
> bool Bisiesto(int Anno)
> { // No entendi muy bien a que se referia en la nota.
> if(Anno % 4 == 0 && Anno % 100 != 0)
> return true;
> return false;
> }
>
> int CompararFechas(fecha f1, fecha f2)
> {
> int diasF1, diasF2;
>
> if(ValidarFecha(f1) && ValidarFecha(f2)) // Primero comprobamos si
> son validas
> {
> diasF1 = Suma(f1);
> diasF2 = Suma(f2);
>
> // Ahora comparamos
> if(diasF1 > diasF2)
> return 1;
> else if(diasF1 < diasF2)
> return -1;
> else // Si no es ni mayor ni menor, seran iguales.
> return 0;
> }
> else
> cout << " Las fechas a comparar son invalidas" << endl;
>
> }
>
> int Suma(fecha f)
> {
> int diasF = 0;
> for(int i = 1; i < f.anno; i++) // Hay anno 0?
> {
> if(Bisiesto(i + 1960))
> diasF += 365;
> else
> diasF += 364;
> }
> for(int i = 1; i < f.mes; i++)
> diasF += DiasMes[f.mes - 1];
> diasF += f.dia;
>
> return diasF;
> }
> int Diferencia(fecha f1, fecha f2)
> {
> int diasF1, diasF2;
>
> if(ValidarFecha(f1) && ValidarFecha(f2)) // Primero comprobamos si
> son validas
> {
> diasF1 = Suma(f1);
> diasF2 = Suma(f2);
> diasF1 -= diasF2;
> return diasF1;
> }
> else
> cout << "Las fechas a comparar son invalidas" << endl;
> }
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120420/44e7ddad/attachment.html>
Más información sobre la lista de distribución Cconclase