martes, 15 de octubre de 2013

Agenda con estructura dinamica

___Users_alejandro_Desktop_LISTA_lista_c.html
#include "lista.h"

void menu(){
     
     printf("\n1. Insertar estudiante");     
     printf("\n2. Recorrer lista ");       
     printf("\n3. SALIR "); 
}

alumno* leerDatos(alumno *inicio){
     alumno *nuevo; 
     alumno *nodoSiguiente;
     
     nuevo= (alumno *)malloc(sizeof(alumno));
     printf("\n Nombre:"); 
     scanf(" %[^\n]", nuevo->nom);      
     printf(" Matricula:"); 
     scanf(" %[^\n]", nuevo->mat);       
     printf(" Edad:"); 
     scanf("%d", &(nuevo->edad));
     printf(" Prom General:"); 
     scanf("%lf", &(nuevo->promG));
     nuevo->sig=NULL;
     
     if (inicio== NULL){
       inicio= nuevo;
     }  
     else{
        nodoSiguiente=inicio;
        
        while(nodoSiguiente->sig != NULL ){
           nodoSiguiente=nodoSiguiente->sig;                      
        }
        nodoSiguiente->sig=nuevo; 
     }     
     return inicio;
}

void mostrarLista(alumno *inicio){
     alumno *ultimo;
     int i=1;
     if (inicio == NULL)
        printf("\nNO HAY LISTA\n");
     else {
        ultimo=inicio;   
        printf("\n       LISTA");    
    
        printf("\nNum Nombre\t\tMatricula\tPromedio ", i);   
        do{              
           printf("\n %d. %s\t\t\t\t%s\t%g ", i, ultimo->nom, ultimo->mat,ultimo->promG);                  
           ultimo=ultimo->sig;
           i++;
        }while(ultimo != NULL );
     }
}

___Users_alejandro_Desktop_LISTA_lista_h.html
#include <stdio.h>
#include <stdlib.h>



struct estudiante {
    char mat[20];
    char nom[80];
    int edad;
    double promG;
    struct estudiante *sig;    
};


typedef struct estudiante alumno;

void menu();
alumno* insertarEstudiante(alumno *inicio);
void mostrarLista(alumno *inicio);

___Users_alejandro_Desktop_LISTA_lista_c.html
#include "lista.h"

void menu(){
     
     printf("\n1. Insertar estudiante");     
     printf("\n2. Recorrer lista ");       
     printf("\n3. SALIR "); 
}

alumno* leerDatos(alumno *inicio){
     alumno *nuevo; 
     alumno *nodoSiguiente;
     
     nuevo= (alumno *)malloc(sizeof(alumno));
     printf("\n Nombre:"); 
     scanf(" %[^\n]", nuevo->nom);      
     printf(" Matricula:"); 
     scanf(" %[^\n]", nuevo->mat);       
     printf(" Edad:"); 
     scanf("%d", &(nuevo->edad));
     printf(" Prom General:"); 
     scanf("%lf", &(nuevo->promG));
     nuevo->sig=NULL;
     
     if (inicio== NULL){
       inicio= nuevo;
     }  
     else{
        nodoSiguiente=inicio;
        
        while(nodoSiguiente->sig != NULL ){
           nodoSiguiente=nodoSiguiente->sig;                      
        }
        nodoSiguiente->sig=nuevo; 
     }     
     return inicio;
}

void mostrarLista(alumno *inicio){
     alumno *ultimo;
     int i=1;
     if (inicio == NULL)
        printf("\nNO HAY LISTA\n");
     else {
        ultimo=inicio;   
        printf("\n       LISTA");    
    
        printf("\nNum Nombre\t\tMatricula\tPromedio ", i);   
        do{              
           printf("\n %d. %s\t\t\t\t%s\t%g ", i, ultimo->nom, ultimo->mat,ultimo->promG);                  
           ultimo=ultimo->sig;
           i++;
        }while(ultimo != NULL );
     }
}

Plantilla generica para una cola

Cola.htm
/*
  
  
  Author:Carlos Martin ramirez Garcia
  Date: 15/10/13 12:11
  Description:Plantilla generica de una cola 
*/

#include"NodoE.h"
#include"ColaE.h"
#include"NodoE.cpp"
#include"ColaE.cpp"
#include<iostream>
using namespace std;

int main()
{
ColaE<int> cola; 
cola.agregar(10);
cola.agregar(11);
cola.agregar(12);
cola.agregar(13);
cola.agregar(14);
cola.agregar(15);
cola.imprimir();

system("pause");
return 0;
}


ColaEEeee.htm
#ifndef COLAE_H
#define COLAE_H
#include"NodoE.h"
template<class T>
class ColaE
{
 public:
 NodoE<T> *primero;
 NodoE<T> *ultimo;
 ColaE();
int estaVacia();
void agregar(T dato);
T extraer();
T primerElemento();
void limpiar();
void imprimir();
};
#endif


ColaEEee.htm
#include<iostream>
using namespace std;

#include"NodoE.h"
#include"ColaE.h"

template <typename T>
ColaE<T>::ColaE()
 {
  primero=NULL;
  ultimo=NULL;
}
template <typename T>
int ColaE<T>::estaVacia()
{
  return(primero==NULL);      
}
template <typename T>
void ColaE<T>::agregar(T dato)
{
  NodoE<T> *nodo=new NodoE<T>(dato);
  if(estaVacia())
  {
    primero=nodo;
    ultimo=nodo;
   }
   else
   {
     ultimo->sig=nodo;
     ultimo=nodo;
     }
     }
template <typename T>
T ColaE<T>::extraer()
{
  NodoE<T> *nodo;
  nodo=primero;
  if(estaVacia())
  {
    return ;
  }
  else
  {
    primero=nodo->sig;
      if(primero==NULL)
      {
        ultimo=NULL;
        return nodo->dato;
        }
        }
        }
template <typename T>
T ColaE<T>::primerElemento()
{
  if(estaVacia())
  return NULL;
  else
  {
     return primero->dato;
     }
     }
template <typename T>     
void ColaE<T>::limpiar()
{
   primero=NULL;
   ultimo=NULL;
}
template <typename T>     
void ColaE<T>::imprimir()
{
  NodoE<T> *nodo;
  nodo=primero;
  int i=1;
  if(estaVacia())
  {
    cout<<"no existen datos"<<endl;
  }
  else
  {
  while(nodo!=NULL)
  {
     cout<<"nodo "<<i<<":"<<nodo->dato<<endl;
     nodo=nodo->sig;
     i++;
     }
     }
     }
     
   

Col.htm
#ifndef NODOE_H
#define NODOE_H
template<class T>
class NodoE
{
public:
      T dato;
      NodoE *sig;
      NodoE(T);
      NodoE();
             };
             #endif


ColaEEe.htm
#include"NodoE.h"
#include<iostream>
using namespace std;
template <typename T>
NodoE<T>::NodoE(T dato)
{
   this->dato=dato;
   sig=NULL;
}
template<typename T>
NodoE<T>::NodoE()
{
   dato=NULL;
   sig=NULL;
}

   


lunes, 14 de octubre de 2013

Calcula dias fecha1 entre fecha2 y fecha1 + n dias=fecha2

calll.htm
/*
  
  Author: Carlos Marin Ramirez Garcia
  Date: 14/10/13 21:07
  Description: Programa que recibe fecha inicial,
  fecha final y calcula los dias transcurridos y tambien suma
  n dias a la fecha incial para obtener la fecha final.
  
*/

#include<stdio.h>
#include<conio.h>
void valida_fecha(int *);
void fechaFinal(int *, int);      
int validaBisiesto(int *);
void cuentaDias(int *, int *);
void validarAnio(int *);
void validarMes(int *);
main()
{
      int i,f1[3],f2[3];
      int n, total;
      printf("\n\t\t\tingresa la primer fecha\n");
      printf("ingresa el dia:");
      scanf("%d",&f1[0]);
      printf("ingresa el mes:");
      scanf("%d",&f1[1]);
      printf("ingresa el anio:");
      scanf("%d",&f1[2]);
      valida_fecha(f1);
      printf("\n\t\t\tingre la segunda fecha\n");
      printf("ingrese el dia:");
      scanf("%d",&f2[0]);
      printf("ingrese el mm:");
      scanf("%d",&f2[1]);
      printf("ingrese el nn:");
      scanf("%d",&f2[2]);
      valida_fecha(f2);
      cuentaDias(f1,f2);  
      printf("\ningresa cantidad de dias:");
      scanf("%d",&n);
      printf("fecha inicial %d-%d-%d + %d = FECHA FINAL :",f1[0],f1[1],f1[2],n);
      fechaFinal(f1,n);
      getch();
      }





void validarAnio(int f1[])
{
   while(f1[2]<=0)
   {
         printf("anio invalido\n");
         printf("ingrese el anio:");
         scanf("%d",&f1[2]);  
     }
 } 




void validarMes(int f1[])
{
    while(f1[1]<=0 || f1[1]>12)
    {
       printf("mes invalido\n");
       printf("ingrese el mm:");
       scanf("%d",&f1[1]);  
     }
 }
      
  


 void valida_fecha(int f1[]) 
{
  validarMes(f1);
  validarAnio(f1);
  int mes[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  int i, aux;
  aux=validaBisiesto(f1);
  if(aux!=0)
    mes[1]=29;
    while((f1[0]<=0 || f1[0]>mes[f1[1]-1] ))
    {
        printf("d invalido\n");
        printf("ingrese el dia:");
     }
        printf("\n\t\t\tla fecha es correcta\n\n");
        printf("\n\t\t%d-%d-%d\n",f1[0],f1[1],f1[2]);
  }




int validaBisiesto(int f1[])
{
    if(f1[2]%4==0)
    return 1;
    else if(f1[2]%400==0 && f1[2]%100==0)
    return 1;
    else
    return 0;
}




void cuentaDias(int f1[], int f2[])
{
    int i,sumaDf1=0,sumaDf2=0, verifica,anios,totalDias;
    int mes[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int aux[3];
    anios=f2[2]-f1[2];
    for(i=0;i<3;i++)
    {
       aux[i]=f1[i];
    }
         while(aux[2]<=f2[2])
        {
            if(verifica=validaBisiesto(aux)!=0 && aux[1]>3)
             {
                mes[1]+1;
              }
               aux[2]=aux[2]+1;
         }
              for(i=0; i<f1[1]-1; i++)
              {
                  sumaDf1+=mes[i];
               }
                  for(i=0; i<f2[1]-1; i++)
                  {
                      sumaDf2+=mes[i];
                  }
                        totalDias=(anios*365)-sumaDf1+sumaDf2-f1[0]+f2[0];
                        printf("total:%d",totalDias);
   }
 

 
 void fechaFinal(int f1[], int n)
 {
      int tDias=0, verifica;
      int mes[12]={31,28,31,30,31,30,31,31,30,31,30,31};
      while(n > 0)
      {      
         while(f1[1]<=12 && n>27) 
         {
            if(verifica=validaBisiesto(f1)!=0)
             {
                mes[1]+1;
              }  
               n=n-mes[f1[1]-1];
               f1[1]=f1[1]+1;
               while(f1[1]>12)
                { 
                   f1[2]=f1[2]+1;
                   f1[1]=1;
                 }
             }
                if(f1[0]+n==mes[f1[1]-1])
               {
                f1[0]=mes[f1[1]-1];
                n=n-n;
                }
                else if(f1[0]+n>mes[f1[1]-1])
               {
                   tDias=f1[0]+n-mes[f1[1]-1];
                   f1[1]=f1[1]+1;
                   f1[0]=tDias;
                   n=n-n;
                }
                   else
                   {
                      f1[0]= f1[0]+n;
                       n=n-n;
                    }
      }
                       printf("%d-%d-%d",f1[0], f1[1], f1[2]);            
                       getch();
 }