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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda para entender código en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda para entender código en c++  (Leído 4,155 veces)
migcv

Desconectado Desconectado

Mensajes: 14


Ver Perfil
ayuda para entender código en c++
« en: 7 Noviembre 2012, 08:29 am »

Hola amigos de elhacker.net XD
(Voy empezando en esto de la programación porfavor no insultos todos fueron como yo alguna ves). Bueno el caso es que estoy siguiendo un tutorial que me encontré en Internet de aprender c++  y dentro de este viene un ejemplo de una agenda el codigo es el siguiente:

#include <fstream>   // Biblioteca para el manejo de ficheros
#include <iostream>  // Biblioteca para la entrada-salida estándar
#include <cstdlib>   // Biblioteca estándar de C
using namespace std;
// Ejemplo de una agenda de teléfonos con toda la información en disco.
//CONSTANTES
const char FINCAD = char(0);
const int MAXCAD  = 80;
const int ENTER  = '\n';
const char SP = ' ';
//TIPOS
typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCAD
struct TPersona
{
  TCadena nombre;
  TCadena apellido1;
  TCadena apellido2;  
  int telefono;
};
// CABECERA DE PROCEDIMIENTOS Y FUNCIONES
char menu();
void pausa();
void borrar_pantalla();
bool confirmar_salida();
void LeerPersona(TPersona &p);
void EscribirPersona(TPersona p);
// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p);
void listarAgendaTXT(TCadena nombreFichero);
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p);
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p);

// PROGRAMA PRINCIPAL
int main()
{
  TPersona p;;
  char opcion;
int num;
bool fin,encontrado;
  TCadena nomFich;
  fin = false;
  do
{
    borrar_pantalla();
    opcion = menu();
  
    switch(opcion)
    {
      case 'A': cout << "Nombre del Fichero: ";
                cin >> nomFich;
                LeerPersona(p);
                insertarPersonaTXT(nomFich,p);                
                break;
      case 'B': cout << "Nombre del Fichero: ";
                cin >> nomFich;
                listarAgendaTXT(nomFich);                
                break;                            
      case 'X': fin = confirmar_salida();
                break;
    }
    
if (!fin)
    {
      pausa();
    }
  } while (!fin);
    
  pausa();
  return 0;
}
// IMPLEMENTACIÓN DE PROCEDIMIENTOS Y FUNCIONES
void pausa() //Funcion que hace una pausa en el sistema no retorna un valor
{
  system("PAUSE");}
  
void borrar_pantalla()//Funcion que borra la pantalla no retorna un valor
{
  system("CLS");
}

char menu() // Funcion que escribe el meni principal
{
  char op;
  cout << "AGENDA EN FICHERO" << endl;
  cout << "-----------------" << endl;
  cout << "Autor: <Apellidos> <Nombre>" << endl;
  cout << "A. Insertar Persona TXT" << endl;
  cout << "B. Listar TXT" << endl;
  cout << "X. Salir del Programa." << endl;
  cout << endl;
  cout << "Introduzca Opción:";
  
  cin >> op;
  op = toupper(op);
  while( ((op<'A') || (op>'B')) && (op!='X') )
  {
    cout << "... Opcion Incorrecta ..." << endl;
    cout << endl;
    cout << "Introduzca Opción:";
    cin >> op;
    op = toupper(op);
  }
  return op;
}

void LeerPersona(TPersona &p) //Funcion que pregunta al usauario los datos de la persona a guardar i los almacena en variables
{  
  cout << "Nombre    : " ;
  cin  >> p.nombre;
  cout << "Apellidos1: " ;
  cin  >> p.apellido1;
  cout << "Apellidos2: " ;
  cin  >> p.apellido2;
  cout << "Teléfono  : ";
  cin  >> p.telefono;
}

void EscribirPersona(TPersona p) //Funcion que escribe en pantalla los datos de la variable
{
  cout << "Nombre             : " << p.nombre << endl;
  cout << "Apellidos          : " << p.apellido1
       << " " << p.apellido2 << endl;
  cout << "Teléfono           : " << p.telefono << endl;
}

bool confirmar_salida() //Funcion que saca al usuario de donde esta
{
  char car;
  cout << "¿Está seguro de salir (S/N)?";
  cin >> car;
  car = toupper(car);
  
return (car=='S');
}

// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p)
{
  ofstream out;
  out.open(nombreFichero,ios::app);
  // Abro el fichero para añadir
  if (out.bad())
  { // El fichero no existe ... lo creo
    out.open(nombreFichero);
  }
  EscribePersonaFicheroTXT(out,p);
  out.close();
}

void listarAgendaTXT(TCadena nombreFichero)
{ ifstream in;
  TPersona persona;
  in.open(nombreFichero);
  if (in.bad())
  {
    cout <<  "Error al abrir el fichero: "
         << nombreFichero << endl;
  }
  else  
{
    LeePersonaFicheroTXT(in,persona);
    while (!in.eof())
    {
      EscribirPersona(persona);
      LeePersonaFicheroTXT(in,persona);
      pausa();
    }
    in.close();
  }
}
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p)
{
  fichero  >> p.nombre;
  fichero  >> p.apellido1;
  fichero  >> p.apellido2;
  fichero  >> p.telefono;
}
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p)
{
  fichero << p.nombre    << SP;
  fichero << p.apellido1 << SP;
  fichero << p.apellido2 << SP;
  fichero << p.telefono  << endl;
}


Bueno mi problema es que no entiendo varias partes de el código y me gustaría que me alludaran a comprender :D

Duda1: "const char FINCAD = char(0);" Como es que se declara esta variable se que es una constante del tipo char pero eso de  "= char(0);" que significa por que hace eso???????????

Duda2: "typedef char TCadena[MAXCAD+1];" Esta linea tampoco la entiendo bien creo que es la asignacion de una varible pero no me queda claro que es lo que hace

Duda3: "void EscribirPersona(TPersona p);" En la declaración de esta función por que entre "TPersona" y "p" no hay una coma??????
( según creo eso es para que al llamar a esa variable en la función  no se tenga que escribir el nombre completo y solo se escriba la "p" pero no estoy seguro corrijanme si estoy mal)

Duda4: "void LeerPersona(TPersona &p);" En esta función por que el  parámetro "p" tiene una "&" antes?????????

Duda5: "TPersona p;;" En verdad esta linea no la entiendo nada :S si aguien me pudiera iluminar un poco en porque el doble punto y coma al final y que es lo que hace

Duda6: "TCadena nomFich;" Igual como la anterior pero sin el doble punto y como pero que hace???????????

Bueno seria dos y agradecería mucho su ayuda y sus respuestas desde ya muchísimas gracias y se que mis dudas pueden ser tontas pero es que ya busque y busque en el tutorial y no viene nada de eso :'( no lo explica :'(


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ayuda para entender código en c++
« Respuesta #1 en: 7 Noviembre 2012, 18:10 pm »

Duda1: "const char FINCAD = char(0);" Como es que se declara esta variable se que es una constante del tipo char pero eso de  "= char(0);" que significa por que hace eso?
Construye un carácter con el valor cero.

Duda2: "typedef char TCadena[MAXCAD+1];" Esta linea tampoco la entiendo bien creo que es la asignacion de una varible pero no me queda claro que es lo que hace
No es una declaración, es la definición de un tipo. En ella se indica que el uso de "TCadena" sera equivalente a "char [MAXCAD+1]", a partir de esa definición puedes utilizar:
Código
  1. TCadena cadena_1;
  2. char cadena_2[MAXCAD+1];
Para declarar dos variables cuyo tipo es el mismo: array de 81 elementos de tipo "char".

Duda3: "void EscribirPersona(TPersona p);" En la declaración de esta función por que entre "TPersona" y "p" no hay una coma?
Porque como indicas es una declaración y en ella se debe indicar el tipo de cada uno de los argumentos a utilizar cuando se llame. En una declaración el nombre de los parámetros es opcional. Por ejemplo:
Código
  1. void EscribirPersona(TPersona);
  2. void EscribirPersona(TPersona p);
Tienen el mismo efecto: indican que la función con el nombre "EscribirPersona" no retorna un valor y al llamarse se debe pasar un argumento de tipo "TPersona".

Duda4: "void LeerPersona(TPersona &p);" En esta función por que el  parámetro "p" tiene una "&" antes?
Porque indica que el argumento sera pasado por referencia. Eso lo debes ver mas adelante en el curso, en el apartado sobre funciones (si estas empezando no entiendo porque ya estas tratando con funciones, te vas a complicar la vida).

Duda5: "TPersona p;;" En verdad esta linea no la entiendo nada :S si aguien me pudiera iluminar un poco en porque el doble punto y coma al final y que es lo que hace
El punto y coma de mas no hace nada, es un error.

Duda6: "TCadena nomFich;" Igual como la anterior pero sin el doble punto y como pero que hace?
Declara un objeto cuyo nombre es "nomFich" y su tipo es "TCadena". Si revisas tu primera pregunta te daras cuenta que esa variable se puede declarar de dos formas (por supuesto equivalentes):
Código
  1. TCadena nomFich;
  2.  
  3. // O tambien
  4. char nomFich[MAXCAD+1];
La variable "nomFich" es un array de caracteres cuyo objetivo es almacenar una cadena de caracteres que indique el nombre del fichero (archivo).

Bueno seria dos y agradecería mucho su ayuda y sus respuestas desde ya muchísimas gracias y se que mis dudas pueden ser tontas pero es que ya busque y busque en el tutorial y no viene nada de eso :'( no lo explica :'(
Si estas completamente seguro que ese tutorial es deficiente lánzalo a la basura y empieza con otro, puedes revisar recomendaciones utilizando el motor de búsqueda de los foros.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
migcv

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: ayuda para entender código en c++
« Respuesta #2 en: 8 Noviembre 2012, 06:22 am »

Bueno rir3760 primero que nada muchas gracias por tomarte la molestia de responder mis torpes dudas XD pero hay unas cosas que todavía no me quedan muy claro
1.-Por que en mi duda 5 dices que el doble punto y coma es un error???????? si el compilador lo ejecuta y si lo quito no lo compila bien???????
2.-En la duda1 que significa que construye un carácter con el valor cero osea que como para que hace eso ???????
seria todo y de nuevo muchas gracias por la paciencia ;)
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: ayuda para entender código en c++
« Respuesta #3 en: 8 Noviembre 2012, 15:26 pm »

@migcw:

La terminación de las instrucciones con doble piunto y coma es una sintaxis incorrecta.

Y en lo segundo el char '\0' representa la terminación de un string o cadena de caracteres en memoria. Porque si guardas un string en memoria y luego lo quieres mostrar, en algún sitio tiene que terminar.
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ayuda para entender código en c++
« Respuesta #4 en: 8 Noviembre 2012, 15:36 pm »

@migcw:

La terminación de las instrucciones con doble piunto y coma es una sintaxis incorrecta.

Falso, no es incorrecto, solo estas incluyendo una sentencia vacia al final de la linea. Aunque sobra (una sentencia vacia no realiza ninguna accion), la sintaxis no es incorrecta. De hecho puedes poner, uno detras de otro, todos los punto coma que quieras.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ayuda para entender código en c++
« Respuesta #5 en: 8 Noviembre 2012, 15:38 pm »

1.-Por que en mi duda 5 dices que el doble punto y coma es un error? si el compilador lo ejecuta y si lo quito no lo compila bien?
Como ya comento BatchianoISpyxolo el punto y coma se utiliza como terminador de sentencia. Si utilizas dos no es un error pero el segundo esta de mas, no es necesario y un compilador no puede quejarse por eso (alguna otra cosa estará mal en tu programa).

2.-En la duda1 que significa que construye un carácter con el valor cero osea que como para que hace eso ?
Utilizar "char(0)" indica que, en base al valor 0 de tipo "signed int", se genere el valor 0 de tipo "char". De esa forma coinciden los tipos de la variable y el valor inicial.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda Con Este Codigo Action Script!!!
Diseño Gráfico
Viequense 1 2,058 Último mensaje 26 Julio 2005, 20:42 pm
por Azielito
ayuda para crear un server de wow con la vers 2.3.0
Juegos y Consolas
xela92 2 4,152 Último mensaje 22 Marzo 2008, 13:12 pm
por elpuma
instalacion de un OS para entender el bug IIS
Hacking
shug0 0 2,568 Último mensaje 16 Diciembre 2009, 01:04 am
por shug0
ayuda con codigo para entender
Ingeniería Inversa
DragonsWP 1 2,720 Último mensaje 31 Diciembre 2009, 09:47 am
por MCKSys Argentina
ayuda con codigo para entender ASM (DIsculpa por el doble espot )
ASM
DragonsWP 4 4,428 Último mensaje 26 Enero 2010, 08:32 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines