Datos del Tema
Creado el 02.11.09 a las 18:36
- 0 Votos
-
0
Favoritos - 81
Visitas - 4
Mensajes
¡Tema agregado a Favoritos!
Ya tienes este tema en Favoritos
Error
¡Buen Tema!0 Votos Disponibles
¡Tu voto ha sido enviado!
Ya has votado por este tema
[Error]
No puedes votar tu propio tema
No puedes votar a usuarios baneados
No puedes votar en un tema cerrado
Temas Relacionados
| hola soy estudiante de ingeniería de primero y debo hacer un trabajo para mi asignatura de programación y no se en que estoy fallando y el porque me da error un programa. El programa debe de estar compuesto por tres funciones y deben de hacer: 1-long Comprobar_DI (long DI): Permite introducir un DNI como número entero, comprueba que está entre 0 y 100 millones (ambos excluídos) y devuelve el mismo DNI ó -1 si el DNI está fuera del rango. 2-char letra_DI (long DI): Permite introducir un DNI como número entero y devuelve la letra correspondiente. Debe hacer uso de la función Comprobar_DI. Caso de no poder devolver la letra, devolverá el carácter cero (‘0’). 3-int Comprobar_fecha (int dia, int mes, int anio): Permite comprobar si una fecha introducida como 3 números enteros (DIA, MES, AÑO) es una fecha correcta (devuelve 1) o es incorrecta (devuelve -1). Esta función se utilizará para validar cada una de las fechas introducidas. Una fecha es correcta cuando el año está por encima de 0 y los valores de día y mes son coherentes. y mi programa es: Código: #include<stdio.h>
#include<math.h>
int fecha (int edad)
{
int a=-1999;
int d=-1;
int m=-1;
int a2=-1999;
int m2=-1;
int d2=-1;
while(0>d||d>31||0>m||m>12||2010<a||a<1900)
{
puts("Introduzca su fecha de nacimiento:");
printf("Dia:\n");
scanf("%d",&d);
printf("Mes:\n");
scanf("%d",&m);
printf("Año:\n");
scanf("%d",&a);
if(d<0||d>31)
puts("Fecha incorrecta");
else if(m<0||m>12)
puts("Fecha incorrecta");
else if(a<1900)
puts("Fecha incorrecta");
}
while(0>d2||d2>31||0>m2||m2>12||a2<1900)
{
puts("Introduzca la fecha donde quiere saber su edad:");
printf("Dia:\n");
scanf("%d",&d2);
printf("Mes:\n");
scanf("%d",&m2);
printf("Año:\n");
scanf("%d",&a2);
if(d2<0||d2>31)
puts("Fecha incorrecta");
else if(m2<0||m2>12)
puts("Fecha incorrecta");
else if(a2<1900)
puts("Fecha incorrecta");
}
edad=a2-a;
if(a<a2 && d==d2 && m==m2)
printf("Hoy cumples:%d años",edad);
else if (a<a2)
printf("Tienes:%d años",edad);
else
printf("No has nacido");
return 0;
}
char letra_dni(long dni)
{
long letra;
char letras[]="TRWAGMYFPDXBNJZSQVHLCKE\0";
if(dni<=99999999)
{
letra=dni%23;
printf("Tu DNI es %ld - %c",dni,letras[letra]);
}else
{
printf("No has introducido un numero valido");
}
return 0;
}
long mirar_dni(long num)
{
printf("Introduzca el numero de su DNI:");
scanf("%ld",&num);
while ( num<0 || num>99999999 )
{
puts("DNI incorrecto");
printf("Introduzca el numero de su DNI:");
scanf("%ld",&num);
}
printf("Su DNI es :%9.ld",num);
return (num) ;
}
long q;
main()
{
fecha;
q = mirar_dni;
letra_dni (q);
return 0;
}
muchas gracias por adelantado Editado por el_bot: 02.11.09 a las 20:30 Razón: usa la eitqueda code para poner codigo | ||
| y que yo sepa, en C tenes que poner los parentesis y los parámetros en las llamadas de las funciones.... toda la función main es incorrecta. Más allá de esto, deberías leer con un poco más de detenimiento lo que te piden. Por ej, dice explicitamente que letra_dni(long) debe hacer uso de Comprobar_DI, algo que no haces (en realidad no tenes comprobar_di); ademas, en general NO tenes que pedirle los valores al usuario desde estás funicones (estas funciones, tiene que hacer lo que te piden y nada mas)... los valres se los tenes que dar a las funciones via los parámetros. letra_dni debería ser algo así Código: long Comprobar_DI (long DI)
{
if (DI <=0 || DI >= 100000000)
return -1;
return DI;
}
char char letra_DI (long DI)
{
if (Comprobar_DI(DI) < 0)
return '0'; //error, DI invalido
int i;
char letras[]="TRWAGMYFPDXBNJZSQVHLCKE"; //no es necesario el 0 final
//ya que el arreglo no va a ser tratado como una strign
i = DI % 23; //esto, junto a la llamada a Comprobar_DI
//asegura que i es mayor que 0 y menor que 23
return letras[i];
}
"It is better to be beatiful than to be good. But... it is better to be good than to be ugly." (Oscar Wilde) Era jodido Oscarcito... "Why do programmers get Halloween and Christmas mixed up? Because OCT(31) = DEC(25)" "De vez en cuando la vida toma conmigo ferne' ...." (el_bot) AntiMW VBS Tools (saca los virus con notepad!!!) Última edición por el_bot: 16 de agosto de 1981 a la tardecita. Razón: nací. | ||
| Yo te recomendaria que te busques el libro ansi-c de Kernigham y Ritchie, la 2da edición, te va a servir bastante... Saludos | ||
| muchas gracias el_bot, lo e echo asi pero no se porque me da error en el if (DI <=0 || DI >= 100000000) y en i=DI%23 lo k e echo es esto, x si la e cagado al escribirlo: #include<stdio.h> #include<math.h> long Comprobar_DI (long DI) { if (DI <=0 || DI >= 100000000) return -1; return DI; } char letra_DI (long DI) { if (Comprobar_DI(DI) < 0) return '0'; int i; char letras[]="TRWAGMYFPDXBNJZSQVHLCKE"; i = DI % 23; return letras[i]; } char letra; long dni; long comprobar; main() { printf("Introduzca su dni:"); scanf("%ld",&dni); comprobar=Comprobar_DI (dni); while (comprobar==-1) { puts("DNI erroneo"); printf("Introduzca su dni:"); scanf("%ld",&dni); comprobar=Comprobar_DI (dni); } letra=letra_DI (comprobar); printf("Su DNI es:%9.ld - %c ",comprobar,letra); return 0; } | ||
| pero que te dice el error? Yo no veo nada raro (salvo quiza que tengas que reemplazar "<=0" por esto "<= 0", e.d con un espacio entre el operador y el cero, pero creo que no es necesario). Más allá de esto tenes un error en letra=letra_DI (comprobar); debe ser letra=letra_DI (dni); "It is better to be beatiful than to be good. But... it is better to be good than to be ugly." (Oscar Wilde) Era jodido Oscarcito... "Why do programmers get Halloween and Christmas mixed up? Because OCT(31) = DEC(25)" "De vez en cuando la vida toma conmigo ferne' ...." (el_bot) AntiMW VBS Tools (saca los virus con notepad!!!) Última edición por el_bot: 16 de agosto de 1981 a la tardecita. Razón: nací. | ||
| Herramientas | Buscar en este tema |
| |


