viernes, 8 de junio de 2012

programacion en c++ ejercicios resueltos y trucos escondidos 1



ejercicios en c++ 


agenda digital con manejo de archivos:
/********************************************************************************
¿Que hace el Programa?       
     Progrma que tiene el siguiente menu:
    - Crear Archivo( Lo unico que hace es crear un archivo: agenda.dat y borrar su contenido, claro si esta ya creado)
    - Agregar (Agrega en el Archivo Binario)
    - Eliminar(Elimina en el Archivo Binario)
    - Listar (Munestra los elementos por medio del Arhcivo Binario)
    - Bucar un Amigo (Busca algun elemento del Archivo, por medio del Archivo Binario)
    con la sig. información:     Nombre, Edad, Telefono y Direccion
    Utilizando solo Archivos Binarios. creado por gerardo paredes rodriguez
********************************************************************************/

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
    char nom[25];
    int edad;
    char tel[15];
    char dir[35];
}Amigo;

/*Funciones de Archivo*/
void Crear(void);
void Listar(void);
void Agregar(void);
void Modificar(void);
void Borrar(void);
void Encontrar(void);

/*Nombre del Archivo a guardar*/
char nombre_fichero[] = "agenda.dat";

FILE *abrir_fichero_b(char cadena[], int metodo);

void main(void)
{
    FILE *fp;
    int opc;
    char cad[3];
   
    fp = abrir_fichero_b(nombre_fichero,0);
    if( fp )
    {
        fclose(fp);
    }
    else
    {
        printf( "Error (NO ABIERTO)\n" );
        puts("Presiona cualquier tecla para continuar.... y Crear el Archivo");
        fp = abrir_fichero_b(nombre_fichero,1);
        fclose(fp);
        getch();    }
   
    do{
    system("cls");
        puts("1. Crear Archivo (Cuidado, elimina lo que ya se tiene en el Archivo)");
        puts("2. Agregar\n3. Eliminar\n4. Listar\n5. Buscar\n6. Modificar\n7. Salir");
        puts("?Introduce tu opcion y depues enter.");
       
        opc = atoi(gets(cad));
        while(opc<0 || opc>7) /*Limitando la entrada de las opciones*/   
            opc = atoi(gets(cad));
        system("cls");   
        switch(opc)
        {
        case 1:
                Crear();
                break;
        case 2:   
                Agregar();
                break;
        case 3:
                Borrar();
                break;
        case 4:
                Listar();
                break;
        case 5:
                Encontrar();
                break;
        case 6:
                 Modificar();
                break;
           
        }
       
        /*Solo parar cuando sea una de las opciones*/
        if(opc<7)
        {
            puts("\n\nPresiona Cualquier Tecla para Regresar al Menu");
            getch();
        }
    }
    while(opc!=7);
   
}



// FUNCION PARA CREAR UN ARCHIVO
/*****************************************************************
Funcion que sirve para borrar todo el Contenido del Archivo Binario*/
void Crear(void){
   FILE *fp;

   fp = abrir_fichero_b(nombre_fichero,0);
   if(fp)
   {
        printf("\n Error de apuertura del archivo agenda.dat\n");
        fclose(fp); 
   }
}


/********************************************************
Funcion que sirve para imprimir todos los  un registros del Archivo Binario*/
void Listar(void){
   FILE *fp;
   int i=1;
   Amigo aux;
    fp = abrir_fichero_b(nombre_fichero,0);
   if(!(fp))
       printf("\n Error de apuertura del archivo agenda.dat\n");
   else{
      printf("\n U S U A R I O S  E N  L A  A G E N D A\n");
      printf("---------------------------------------------------------------\n");
      while ((fread(&aux, sizeof(aux), 1, fp))!=0){
        printf("=> Datos del Amigo %d\n",i);
        printf("Nombre: %s | Edad: %d | Telefono: %s\n",aux.nom,aux.edad,aux.tel);
        printf("Direccion: %s\n",aux.dir);
        i++;
      }
      printf("---------------------------------------------------------------\n");
      fclose(fp);
   }
}

/********************************************************
Funcion que sirve para agregar un registro dentro del Archivo Binario*/
void Agregar(void){
   FILE *fp;
   Amigo aux;
   char cad[3];

   printf("\n Agregando un Amigo Nuevo al archivo binario agenda.dat\n");
   fp=abrir_fichero_b(nombre_fichero,2);
   if(!(fp))
        printf("\n Error de apuertura del archivo agenda.dat\n");
   else{
        /*Introduciendo los Datos del Amigo*/
        printf("Dame el nombre del Amigo: ");
        gets(aux.nom);
        printf("Dame la Edad del Amigo: ");
        aux.edad=atoi(gets(cad));
        printf("Dame el telefono del Amigo: ");
        gets(aux.tel);
        printf("Dame la direccion del Amigo: ");
        gets(aux.dir);

        fwrite(&aux, sizeof(aux), 1, fp);
        fclose(fp);
   }
}


/********************************************************
Funcion que sirve para Modificar un registro dentro del Archivo Binario*/
void Modificar(void){
   FILE *fp;
   Amigo    aux;
   int n;
   char cadena[25],cad[2];
    fp=abrir_fichero_b(nombre_fichero,3);
   if(!(fp))
       printf("\n Error de apuertura del archivo agenda.dat\n");
   else{
        printf("Como se llama al amigo que quieres Modificar: ");
        gets(cadena);
       
        /*Buscando el Amigo dentro del Archivo*/
      while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.nom,cadena)!=0);
      if (n==0)
         printf("No existe el cuate llamado: %s ",cadena);
      else{
         printf("\n Amigo encontrado....!!!\n");
         printf("Nombre: %s ",aux.nom);
         printf("Edad: %d ",aux.edad);
         printf("Telefono %s ",aux.tel);
         printf("Direccion: %s\n",aux.dir);
       
         printf("\n CAMBIANDO VALORES \n");
       
        printf("Dame el nombre nuevo del Amigo: ");
        gets(aux.nom);
        printf("Dame la nueva Edad del Amigo: ");
        aux.edad=atoi(gets(cad));
        printf("Dame el nuevo telefono del Amigo: ");
        gets(aux.tel);
        printf("Dame la nueva direccion del Amigo: ");
        gets(aux.dir);
        
       

         printf("\n GRABANDO Y CERRANDO ARCHIVO \n");
         fseek(fp,-1*sizeof(aux),SEEK_CUR);
         fwrite(&aux, sizeof(aux), 1, fp);
      }
      fclose(fp);   //Cerramos el archivo
   }
}

/********************************************************
Funcion que sirve para borrar un registro dentro del Archivo Binario*/
void Borrar(void){
   FILE *fp,*fd;
   Amigo    aux;
   int encontrado=0;
    char cadena[25];
  
   printf("Introduce el nombre del Amigo a borrar: ");
   gets(cadena);
  
   printf("\n BORRANDO REGISTROS  \n");
   fp=abrir_fichero_b(nombre_fichero,0);
   if(!(fp))
       printf("\n Error de apuertura del archivo agenda.dat\n");
   else{
        fd=abrir_fichero_b("paso.$$$",1);
      if(!(fd))
         printf("\n Error Imposible crear archivo auxiliar\n");
      else{
         while ((fread(&aux, sizeof(aux), 1, fp))!=0)
            if(stricmp(aux.nom,cadena)!=0)
              fwrite(&aux, sizeof(aux), 1, fd);
            else
              encontrado=1;
         fclose(fd);
      }
      fclose(fp);
      if(encontrado){
         system("del agenda.dat");
         system("ren paso.$$$ agenda.dat");
         printf("\n Registro BORRADO con Exito!!!\n");
      }
      else{
         system("del paso.$$$");
         printf("\n El Registro NO SE ENCONTRO, no fue borrado!!!");
      }
   }
}

/******************************************
Funcion para Encontrar un Amigo e imprimir sus datos*/
void Encontrar(void){
    FILE *fp;
    Amigo    aux;
    int n;
    char cadena[25];

    printf("Introduce el nomrbre del Amigo que buscas: ");
    gets(cadena);

    printf("\n Buscando a un Amigo  \n");
    fp=abrir_fichero_b(nombre_fichero,0);
    if(!(fp))
        printf("\n Error de apuertura del archivo agenda.dat\n");
    else{
        while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.nom,cadena)!=0);
      if (n==0)
         printf("No existe el cuate llamado: %s ",cadena);
      else{
         printf("\n Amigo encontrado....!!!\n");
         printf("Nombre: %s | Edad: %d | Telefono: %s\n",aux.nom,aux.edad,aux.tel);
         printf("Direccion: %s\n",aux.dir);
       
        /* getch();*/
       
        }
    }


}

/*************************************************
Funcion que Carga el Archivo y regresa un apuntador con que se va ha manejar el Archivo
Recibe:     El nombre del Archivo , Y el método con que se va abrir el Archivo
        Un Apuntador tipo Archivo, 0 - Solo Lectura , 1 - Para crearlo de nuevo desde cero,
        2 - Anhadir Informacion, 3 - para Lectura y Escritura.       
 Regresa:    El apuntador de Tipo FILE, con el cual se abrio*/
FILE *abrir_fichero_b(char cadena[], int metodo){
    FILE *x;
    switch(metodo){
        case 0:
            x = fopen(cadena,"rb");
            break;
        case 1:
            x = fopen(cadena,"wb");
            break;
        case 2:
            x = fopen(cadena,"ab");
            break;
        case 3:
            x = fopen(cadena,"r+b");
            break;
    }
    return x;
}
programa que muestra los dias que tienes de nacido solo teclea tu edad actual y listo:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int d=365,x,a,y,z;
 printf("\ndametu edad\n");
 scanf("%d",&a);
 x=a/4;
 y=d*a;
 z=y+x;
printf("\ntu tienes  %d dias de nacido\n",z);
system("pause");
}
programa que muestra caracteres ascc:




# include<stdio.h>
# include<conio.h>
main()
{
int i;
printf("Los Caracteres ASCII son: \n");
for(i=32;i<=164;i++)  {
    if(i<97 || i>122)
        printf("%c %d \t",i,i);
    }
getch();
}
programa que ordena numeros de mayor a menor

#include<iostream>
using namespace std;

int main()
{
  int n_num=0,num=0,elmayor=0,c=0;
  cout <<"Introduce cuantos numeros vas a utilizar: "; cin >> n_num;
  for(c=1;c<=n_num;c++)
  {
    cout <<"\nIntroduce el numero " << c <<": "; cin >> num;
    if(num>elmayor)
    {
      elmayor=num;
    }
  }
  cout <<"\n\tEl numero mayor fue el " << elmayor;
  cin.get();cin.get();

  return 0;
}
aprende c++ curso









  programa que calcula area y perimetro de figuras geometricas
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>

int a,b,c,d,e,p,x;

void trianguloarea()
{
     system("cls");
     printf("\n Dame el valor de la base: ");  
     scanf("%d",&a);
     printf("\n Dame el valor de la altura: ");
     scanf("%d",&b);
     x=a*b/2;
     printf("\n El area es %i",x);    
     getch();
}
void trianguloperimetro()
{
     system("cls");
     printf("\n Dame el valor del primer lado: ");  
     scanf("%d",&c);
     printf("\n Dame el valor del segundo lado: ");
     scanf("%d",&d);    
     printf("\n Dame el valor del tercer lado: ");
     scanf("%d",&e);
     p=c+d+e;    
     printf("\n el perimetro es %i",p);
     getch();
}
void rectanguloarea()
{
     system("cls");
     printf("\n Dame el valor de la altura: ");
     scanf("%d",&a);
     printf("\n Dame el valor de la base: ");  
     scanf("%d",&b);
     d=a*b;
     printf("\n El area es %i",d);
     getch();
}
void rectanguloperimetro()
{
     system("cls");
     printf("\n Dame el valor de la altura: ");
     scanf("%d",&a);
     printf("\n Dame el valor de la base: ");  
     scanf("%d",&b);
     d=2*a+2*b;
     printf("\n El area es %i",d);
     getch();
}
int main()
{
    do
      {
        system("cls");
        printf("\n       AREA Y PERIMETRO DE 2 DE FIGURAS\n  ");
        printf("\n      1 triangulo area\n");
        printf("\n      2 Triangulo perimetro\n");
        printf("\n      3 Rectangulo area\n");
        printf("\n      4 Rectangulo perimetro\n");
        printf("\n      5 Salir\n");
        printf("  \n     ELIGE UNA OPCION....: ");
        scanf("%d",&e);
        switch (e)
        {
        case 1:
             trianguloarea();
             break;
        case 2:
             trianguloperimetro();
             break;
        case 3:   
             rectanguloarea();
             break;
        case 4:
             rectanguloperimetro();
             break;    
        }
       
      }
      while(e!=5);
     
}programa que muestra el numero de letras y espacios que tiene una frase
/*Programa para contabilizar el número de letras y de espacios
que tiene una frase */
#include<iostream>
#include<string.h>
using namespace std;

int main()
{
  char frase[100], *parte, frasef[100]={0};
  int lng,spc=0;
  cout<<"Introduce una frase: "; cin.getline(frase, 100, '\n');
  parte=strtok(frase," ");
  strcat(frasef,parte);
  while((parte=strtok(NULL," ")) != NULL)
  {
    strcat(frasef,parte);
    spc++;
  }
  lng=strlen(frasef);
  cout<<"Tu frase tiene "<<lng<<" letras y "<<spc<<" espacios";
  cin.get();cin.get();
  return 0;
}