Título: Programacion orientada a objetos Publicado por: edwinabril1992 en 9 Octubre 2013, 06:14 am Hola disculpen estoy haciendo un progarma de verificar la cedula de identidad en programacion orientada aobjetos en borland c++ pero no ejecuta el programa podrian darme viendo que esta mal...........
#include<iostream.h> #include<conio.h> #include<stdio.h> class ccedula { public: double c,dv,nd,sp,sim,pim,ds,st,dv2; int i; //solicitar el ingreso de la cedula sin guion void leer() { cout<<"\nPrograma para validar la cedula de identidad ecuatoriana"; cout<<"\nIngrese el numero de cedula sin guion"; cin>>c; } int validar() { dv=c%10; c=c/10; i=9; while(i>=1) { nd=c%10; c=c/10; if(i%2==0) { sp=nd+sp; } else { pim=nd*2; if(pim>9) { pim=pim-9; } sim=sim+pim; } i=i-1; } st=sp+sim; if((st>=1)&&(st<=9)) { ds=10; } else if((st>=10)&&(st<=19)) { ds=20; } else if((st>=20)&&(st<=29)) { ds=30; } else if((st>=30)&&(st<=39)) { ds=40; } else if((st>=40)&&(st<=49)) { ds=50; } else if((st>=50)&&(st<=59)) { ds=60; } else if((st>=60)&&(st<=79)) { ds=70; } else if((st>=70)&&(st<=89)) { ds=80; } else if((st>=80)&&(st<=89)) { ds=90; } dv2=ds-st; return(dv2); } void imprimir() { if(validar()==dv) { cout<<"\nNumero de cedula correcta"; } else { cout<<"\nNumero de cedula incorrecto"; cout<<"\nIntente nuevamente"; } } } void main() { clrscr(); ccedula odocumento; odocumento.leer(); odocumento.validar(); odocumento.imprimir(); getch(); } Título: Re: Programacion orientada a objetos Publicado por: erest0r en 9 Octubre 2013, 06:23 am No estas especificando el espacio de nombres cuando usas "cout", que vendria a ser std::cout, al igual que std::cin aunque mejor que uses otro IDE ya que ese es bastante antiguo.
Normalmente los atributos de una clase tienden a ser private. Al encabezado iostream no es necesario .h, solo basta hacerlo #include <iostream> Título: Re: Programacion orientada a objetos Publicado por: eferion en 9 Octubre 2013, 08:47 am Aparte de lo comentado por erest0r un par de consejos:
1. En el foro, encapsula el texto con las etiquetas GeSHi. Así los que intentamos ayudarte no nos dejaremos los ojos intentando leer tu código. 2. Intenta optimizar. Cuando tienes que poner una secuencia larga de ifs, en la mayoría de los casos, deberías pensar que hay una solución mejor. Me explico: Código
Lo primero de este código ( por cuestión de estilo y legibilidad ), sería evitar tantos niveles de tabulado, ya que su legibilidad mejora enormemente si los niveles de tabulación no son excesivos. Esto lo puedes conseguir poniendo el else y el if en la misma línea: Código
Se lee mejor así, no crees ? Aún así, llegados a este punto, podrías simplificar aún más este código. Una opción sería quitar de los else la condición que sobra. Si te fijas, empiezas preguntando si st está en el rango {1, 9}, después si está en el rango {10, 19}... La primera parte de la condición te sobra, ya que si llega al segundo if está claro que st es mayor que 9: Código
Y luego, para este caso, hay otra opción muy sencilla. Si te das cuenta, ds es siempre el múltiplo de diez que está inmediatamente por encima de st... puedes reducirlo todo a una operación matemática: Código
3. Usa nombres que signifiquen algo A la hora de declarar variables intenta buscarles un nombre significativo. Entiendo que para contadores se suelen usar i, j, k, ... todo el mundo lo entiende... pero que el número de cedula lo guardes en una variable de nombre c... eso no, por favor. Imagínate un archivo con 3.000 líneas plagado de variables tipo a, b, c, d ... el código sería ilegible. Además el programa no va a ser más largo ni más lento... elige nombres significativos, el rendimiento será el mismo, el programa ocupará exactamente lo mismo y tu código pasará a ser bastante más legible. 4. Usa el tipo de variable adecuado No tiene sentido que para almacenar un entero utilices un double. double es para números en coma flotante ( con decimales ). Los cálculos con números decimales son bastante más costosos que con números enteros... además, tanto float como double pueden presentar problemas de precisión si pones números con muchos dígitos significativos. Si vas a usar enteros, usa int. El tipo int lo inventaron para algo... 5. En C++ las variables deberían ser privadas por defecto Una de las gracias de la programación orientada a objetos es que puedes encapsular el código o, dicho de otra forma, puedes restringir y limitar tanto el uso que se le da al código como el acceso a las variables. Si creas una clase y, por defecto, declaras todas las variables como públicas estás haciendo algo mal. Fíjate que fuera de la clase no se accede directamente a ninguna variable... todas podrían y deberían ser privadas. Una ventaja de la encapsulación es que, al tener que usar funciones para recuperar / modificar las variables de una clase, es fácil implementar filtros que eviten que las variables contenidas en la clase tengan valores incorrectos ( a esto se le denomina inconsistencia ) Además, si las variables se usan solo dentro de una función miembro, dichas variables deberían estar declaradas única y exclusivamente dentro de dicha función. Las variables que declaras dentro de una clase tienen que tener algún sentido para la propia clase ( como una variable nombre dentro de la clase "Persona", sin embargo, la variable "i", que se usa como contadores en algunas funciones, no aporta nada a la clase "Persona" como tal ) La declaración de tu clase debería tener un aspecto más parecido a éste: Código
Y ya está, la declaración no necesita nada más. Todas las variables que faltan deberían estar definidas en la función correspondiente que las usa, no en el cuerpo de la clase. En cuanto a la implementación... Código
Y bueno, hay cosas que programaría diferente, pero eso ya es el diseño de cada uno. Un saludo. |