elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con explicacion de codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con explicacion de codigo  (Leído 2,614 veces)
Fatmf44

Desconectado Desconectado

Mensajes: 3


Ver Perfil
ayuda con explicacion de codigo
« en: 23 Junio 2010, 23:51 pm »

hola a todos me podrian dar una pequeña clase y explicar las lineas d codigos de este pequeño fragemento de codigos.
gracias de antemano
saludos cordiales


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5. #include <iostream>
  6. #define MAXSTR 0xFF
  7.  
  8. using namespace std;
  9.  
  10. typedef struct ClaseAlumno{
  11.    int matricula;
  12.    char* nombre;
  13. }Alumno;
  14.  
  15. int comparar_alumno (const void *alumno1, const void *alumno2);
  16. void imprimir_alumno (Alumno *alumno);
  17. Alumno* agregar_alumno (Alumno *alumnos, Alumno *alumno, int *n);
  18. char* leer_linea    (const char *mensaje);
  19. char* leer_cadena   (const char *mensaje, char *cadena);
  20. int   leer_entero   (const char *mensaje, int menor, int mayor);
  21. float leer_real     (const char *mensaje);
  22. char  leer_caracter (const char *mensaje);
  23. int   leer_campo (FILE *archivo, char *cadena);
  24.  
  25. int main(){
  26.    Alumno alumno, *alumnos = NULL, *p;
  27.    int opcion, n=0, i;
  28.    char cadena[MAXSTR], *ruta = "D:\\alumnos.txt";
  29.    FILE *archivo;
  30.    archivo = fopen(ruta, "r");
  31.    if (archivo!=NULL)
  32.    {
  33.        while (leer_campo(archivo, cadena))
  34.        {
  35. alumno.matricula = atoi(cadena);
  36.            leer_campo(archivo, cadena);
  37.            alumno.nombre = strdup (cadena);
  38.            alumnos = agregar_alumno(alumnos, &alumno, &n);
  39.        }
  40.        fclose(archivo);
  41.    }
  42.    do{
  43.        system ("cls");
  44.        cout<<endl
  45. <<"MENU DEL SISTEMA DE MATRICULA DE ALUMNOS"<<endl
  46. <<"1.- Agregar nuevo alumno"<<endl
  47. <<"2.- Consultar un alumno"<<endl
  48. <<"3.- Modificar un alumno"<<endl
  49. <<"4.- Eliminar un alumno"<<endl
  50. <<"5.- Reporte de todos los alumnos"<<endl
  51. <<"6.- Salir del sistema"<<endl
  52. <<endl;
  53.        opcion = leer_entero("Seleccione una opcion: ", 1, 6);
  54.        if(opcion<5)
  55.        {
  56.            alumno.matricula=leer_entero("Ingrese el matricula del alumno: ", 0, INT_MAX);
  57.            p = n==0? NULL:(Alumno*) bsearch(&alumno, alumnos, n, sizeof(Alumno), comparar_alumno);
  58.            if(p!=NULL)
  59.                imprimir_alumno (p);
  60.        }
  61.        if(p!=NULL && opcion==1)
  62.            cout<<"El alumno ya existe"<<endl;
  63.        else if (p==NULL && opcion>=2 && opcion<=4)
  64.            cout<<"Alumno no encontrado"<<endl;
  65.        else switch(opcion)
  66.        {
  67.            case 1:
  68.                alumno.nombre = leer_linea("Ingrese el nombre: ");
  69.                alumnos = agregar_alumno (alumnos, &alumno, &n);
  70.                cout<<"Registro agregado correctamente"<<endl;
  71.                break;
  72.            case 3:
  73.                free(p->nombre);
  74.                p->nombre = leer_linea("Ingrese el nombre: ");        
  75.                cout<<"Alumno actualizado correctamente"<<endl;
  76.                break;
  77.            case 4:
  78.                free(p->nombre);
  79.                if (p!=&alumnos[n-1])
  80.                    memcpy (p, &alumnos[n-1], sizeof(Alumno));
  81.                n--;
  82.                alumnos=(Alumno*) realloc(alumnos, sizeof(Alumno) * n);
  83.                qsort(alumnos, n, sizeof(Alumno), comparar_alumno);
  84.                cout<<"Alumno borrado correctamente"<<endl;
  85.                break;
  86.            case 5:
  87.                for (i=0; i<n; i++)
  88.                    imprimir_alumno (&alumnos[i]);
  89.                break;
  90.        }
  91.        if(opcion<6 && opcion>=1)
  92.        {
  93.            system("pause");
  94.        }
  95.    } while(opcion!=6);
  96.    archivo=fopen(ruta, "w");
  97.    if(archivo!=NULL)
  98.    {
  99.        for (i=0; i<n; i++)
  100.            fprintf (archivo, "%d,%s\n", alumnos[i].matricula, alumnos[i].nombre);
  101.        fclose(archivo);
  102.    }
  103.    return EXIT_SUCCESS;
  104. }
  105.  
  106. int comparar_alumno(const void *alumno1, const void *alumno2)
  107. {
  108.    return((Alumno*)alumno1)->matricula-((Alumno*)alumno2)->matricula;
  109. }
  110.  
  111. void imprimir_alumno(Alumno *alumno)
  112. {
  113.    printf("matricula: %d\n", alumno->matricula);
  114.    printf("nombre   : %s\n", alumno->nombre);
  115. }
  116.  
  117. Alumno* agregar_alumno(Alumno *alumnos, Alumno *alumno, int *n)
  118. {
  119.    *n = *n + 1;
  120.    alumnos=(Alumno*)realloc(alumnos, sizeof(Alumno)*(*n));
  121.    memcpy(&alumnos[(*n)-1], alumno, sizeof(Alumno));
  122.    qsort(alumnos, *n, sizeof(Alumno), comparar_alumno);
  123.    return alumnos;
  124. }
  125.  
  126. char *leer_linea(const char *mensaje)
  127. {
  128.    char linea[MAXSTR];
  129.    leer_cadena(mensaje, linea);
  130.    return strdup(linea);
  131. }
  132.  
  133. char* leer_cadena(const char *mensaje, char *cadena)
  134. {
  135.    char *salto;
  136.    cout<<mensaje;
  137.    fgets(cadena, MAXSTR, stdin);
  138.    salto=strchr(cadena, '\n');
  139.    if(salto!=NULL)
  140.        *salto = '\0';
  141.    return cadena;
  142. }
  143.  
  144. int leer_entero(const char *mensaje, int menor, int mayor)
  145. {
  146.    int valor;
  147.    do {
  148.        valor =(int)leer_real (mensaje);
  149.        if (valor<menor || valor>mayor)
  150.            cout<<"Numero no valido"<<endl;
  151.    } while(valor<menor || valor>mayor);
  152.    return valor;
  153. }
  154.  
  155. float leer_real(const char *mensaje)
  156. {
  157.    char cadena[MAXSTR];
  158.    leer_cadena(mensaje, cadena);
  159.    return atof(cadena);
  160. }
  161.  
  162. char leer_caracter(const char *mensaje)
  163. {
  164.    char linea[MAXSTR];
  165.    leer_cadena(mensaje, linea);
  166.    return linea[0];
  167. }
  168.  
  169. int leer_campo(FILE *archivo, char *cadena)
  170. {
  171.    fscanf(archivo, "%[^,\n\r]", cadena);
  172.    if(feof(archivo))
  173. return 0;
  174.    fgetc(archivo);
  175. return 1;
  176. }
  177.  
  178.  


En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ayuda con explicacion de codigo
« Respuesta #1 en: 24 Junio 2010, 00:10 am »

Fatmf44 ya posteaste lo mismo en otro hilo. Lee nuevamente las respuestas que te dieron en el, y en el caso que tengas alguna duda puntual, la realizas allí.

Recuerda que en esta sección no se hacen tareas, dale una leída a las reglas

Saludos

Cerrado


En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
explicacion de codigo
Programación C/C++
flony 3 2,950 Último mensaje 12 Octubre 2010, 14:06 pm
por flony
[C++ Linux] Explicación de codigo [Principiante] « 1 2 »
Programación C/C++
EAX_ 14 6,012 Último mensaje 28 Enero 2012, 19:39 pm
por EAX_
Explicación de un codigo
Programación C/C++
Nabore 2 2,113 Último mensaje 8 Mayo 2016, 06:38 am
por Nabore
Explicación de estas líneas (Flash) y simplificar el código.
Programación General
Tachikomaia 1 1,581 Último mensaje 9 Junio 2024, 18:51 pm
por EdePC
Explicación de este código de Ransomware - Blackhunt 2.0
Ingeniería Inversa
Fslynx 0 864 Último mensaje 9 Junio 2024, 23:59 pm
por Fslynx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines