Autor
|
Tema: Problema con este programa en Pascal. (Leído 5,073 veces)
|
Manimecker
Desconectado
Mensajes: 47
|
Me encuentro realizando el siguiente ejercicio: Añadir al programa anterior lo necesario para que clasifique las llamadas en Nacionales (N), Provinciales (P) y Locales (L) y realizar los mismo cálculos que antes para cada tipo de llamada (duración y numero de llamadas Nacionales, duración y numero de llamadas Provinciales y duración y numero de llamadas Locales). El programa también debe solicitar, después de presentar los resultados, si se desea realizar de nuevo todo el proceso anterior.
El resultado debe ser similar a esto:
Introduzca la duración de la llamada en minutos (0 para terminar): 5 Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p
Introduzca la duración de la llamada en minutos (0 para terminar): 15 Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: n
Introduzca la duración de la llamada en minutos (0 para terminar): 20 Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: l
Introduzca la duración de la llamada en minutos (0 para terminar): 40 Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p
Introduzca la duración de la llamada en minutos (0 para terminar): 0
-Especificación llamadas Nacionales, Provinciales y Locales-
El numero de llamadas nacionales a sido: 1 y su duración: 15.00 minutos. El numero de llamadas provinciales a sido: 2 y su duración: 45.00 minutos. El numero de llamadas locales a sido: 1 y su duración: 20.00 minutos.
-Totales-
Numero de llamadas: 4 Duración total: 80.00 minutos. Duración media: 20.00 minutos.
Desea continuar para realizar otra lista de llamadas? S/N: n Todo lo llevo perfecto, sólo que en la última parte, que pregunta si desea continuar, si pongo n o N, se vuelve a ejecutar el bucle y nunca acaba, y no sé por qué. Les dejo el código estructurado que llevo hasta ahora en el siguiente enlace. http://pastebin.com/09M7FxycDejo el link ya que el código es demasiado extenso y es mejor estructurarlo en un pastebin. Gracias de antemano.
|
|
|
En línea
|
|
|
|
imoen
Desconectado
Mensajes: 1.589
|
no te he mirado el codigo pero digo yo que lo que pasa es que no controlas el fin o la rotura del bucle.
Digamos que deberias de tener esta estructura
Repeat
programa
a = Presiona Y/N upcase a until a = " N"
O tambien lo mismo con un bucle while o simplemente
if a = "N" break
un saludo
bs imoen
EDITOOOOO
Vale ya te he visto el codigo
Veamos cosas que se pueden hacer , lo primero parece que esta bien, pero prueba una cosa , traza el programa, e inspecciona el valor de chos , yo creo que no coje el valor puede ser poq usas read , aunque sea char inicializala dale un valor.
Cambia el bucle principal por un while asi la condicion se comprueba al principio del bucle. While chos <> N begin end otra cosa cuando leas chos , pasalo a mayusculas y te ahorras la doble comparacion creo que es con upcase.
Si me dices el compilador que usas me lo bajo y lo miro XD
|
|
« Última modificación: 20 Marzo 2011, 12:07 pm por imoen »
|
En línea
|
Medion Akoya p6624 i-3 370 8 gigas DDR 3 RAM //750 hd 5400 gforce gt425 optimus XDD Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!
srta imoen
|
|
|
Manimecker
Desconectado
Mensajes: 47
|
Muchísimas gracias por tu ayuda, mira que lo he solucionado, al menos parcialmente. El problema era en el segundo y último read(), ya que no me detectaba la pulsación o algo así, y los cambie ambos por readln() y ahora sí me lo detectan; viene otro problema, al principio, que pongo: # write('Duracion de la llamada (0 para terminar): '); readln(Dur); write('Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local : '); read(Tipo); En la primera parte, que si pongo 0 se debe terminar el bucle, cuando inserto el 0, en vez de pararlo automáticamente, me pregunta por la otra variable, y entonces ya para el bucle, y quisiera saber como evitar eso. Muchas gracias. PD: Uso FreePascal como compilador (si a eso te refieres, soy algo novato en el tema).
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
Podrías cambiar el repeat por un while y dejar el código de esta forma:
write('Duracion de la llamada (0 para terminar): '); readln(Dur); while(Dur<>0) do write('Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local : '); read(Tipo);
if (Tipo = 'N') or (Tipo = 'n') then BEGIN N1 := N1+1; Cont1 := Cont1+Dur END;
if (Tipo = 'P') or (Tipo = 'p') then BEGIN P1 := P1+1; Cont2 := Cont2+Dur END;
if (Tipo = 'L') or (Tipo = 'l') then BEGIN L1 := L1+1; Cont3 := Cont3+Dur END;
Cont01 := Cont01+1; Cont0 := Cont0+Dur; RE := RE+Dur; write('Duracion de la llamada (0 para terminar): '); readln(Dur); end.
Así conseguirías que si pones 0 no vuelva a preguntar lo de llamada provincial.......
Espero que te haya ayudado.
PD: No se si habré escrito correctamente lo del while, compruebalo tu mismo con el compilador porque hace ya un año que no uso Pascal xD
Saludos.
|
|
|
En línea
|
|
|
|
imoen
Desconectado
Mensajes: 1.589
|
Otra idea que me surge para esa lectura , se podria usar el readkey ?¿ mejor que el readln.
Jeje miles de sugerencias xDD
|
|
|
En línea
|
Medion Akoya p6624 i-3 370 8 gigas DDR 3 RAM //750 hd 5400 gforce gt425 optimus XDD Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!
srta imoen
|
|
|
skapunky
|
Seguramente si se puede, pero en general, los "menus" en pascal se hacen de la forma que tienes en el codigo.
Yo soy otro de los que contesta sin mirar tu codigo, pero si tienes declarada la variable Tipo como char, tu codigo es válido completamente. De esta forma siempre he hecho los menus en pascal yo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
programa pascal
Ejercicios
|
rudyairlines
|
1
|
5,281
|
5 Enero 2008, 19:30 pm
por rudyairlines
|
|
|
tengo un problema con este programa.
Programación C/C++
|
Danyel_Casvill
|
9
|
4,653
|
12 Noviembre 2010, 22:29 pm
por flony
|
|
|
problema con programa en Pascal
Programación General
|
SXF
|
8
|
5,605
|
19 Enero 2011, 11:52 am
por skapunky
|
|
|
Problema con este programa básico
Programación C/C++
|
Manimecker
|
3
|
2,347
|
22 Octubre 2011, 01:41 am
por rir3760
|
|
|
NVIDIA no mostró Pascal en el CES de este año
Noticias
|
wolfbcn
|
0
|
1,023
|
10 Enero 2016, 03:02 am
por wolfbcn
|
|