Sábado 14 de Diciembre de 2024, 21:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
una mano con menu en Turbo C++
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: una mano con menu en Turbo C++ (Leído 5593 veces)
HuexoFxp
Nuevo Miembro
Mensajes: 5
una mano con menu en Turbo C++
«
en:
Lunes 25 de Agosto de 2008, 07:12 »
0
hola! Soy nuevo en el foro y me estoy iniciando en la programacion en C++ y necesito ayuda con lo siguiente:
quiero haces un programa que maneje el puerto paralelo y envia datos para manejar una plaqueta que tiene leds. la intencion es hacer distintas secuencias.
lo que tendria que hacer es lo siguiente:
1) cuando lo ejecute, muestre un menu de 5 opciones. Esas opciones son distintas secuencias, o sea, presiono 1, hace una secuencia, presiono 2, otra distinta etc. son 5 en total.
2)cuando la secuencia termina, aparesca un cartel que diga "desea salir S/N" y obviamnete al presionar S me devualva al menu principal donde figuran las opciones de las secuencias. y si presiono N que se ejecute la secuencia nuevamente.
aca les dejo mi programa que maneja el puerto. espero que me puedan ayudar:D
Código: Text
#include<stdio.h>
#include<conio.h>
#include<dos.h>
main()
{int a, puerto, dato[4]={129, 66, 36, 24};
clrscr();
puerto=peekb(0x40, 0x08);
do
{
for(a=0; a<=3;a++)
{clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
for(a=3; a>=3;a--)
{clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
}while(!kbhit());
getch();
return(0);
}
desde ya muchas gracias!
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #1 en:
Lunes 25 de Agosto de 2008, 10:58 »
0
Primero, comentarte que formateas fatal el código. Mucho más legible así:
Código: Text
#include<stdio.h>
#include<conio.h>
#include<dos.h>
main()
{
int a, puerto, dato[4]={129, 66, 36, 24};
clrscr();
puerto=peekb(0x40, 0x08);
do
{
for(a=0; a<=3;a++)
{
clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
for(a=3; a>=3;a--)
{
clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
} while(!kbhit());
getch();
return(0);
}
Segundo, usas return(0); cuando no has declarado que main() devuelva ningún valor.
Tercero, el segundo bucle for "for(a=3; a>=3;a--)" es un bucle raro puesto que sólo se ejecuta una vez, cuando a vale 3, dado que en la siguiente iteración a vale 2 y la condición a>=3 devuelve falso.
Tampoco entiendo por qué dos bucles seguidos que hacen lo mismo...
En cuanto a tus dudas, la (1) es bastante sencilla. Puedes usar printf() para poner las opciones en pantalla y getch() para recuperar el carácter pulsado. Si es uno de los números del menú, entonces ejecutas la opción correspondiente. Sino, pues simplemente la ignoras o imprimes un mensaje de error.
La (2) igual, puedes recuperar S/N usando getch(). Ten en cuenta que tu código debe ir dentro de un while para que se repita en caso de que sea 'S'.
Si tienes dudas, pregunta. Un saludo.
Fr33k K0mpu73r
HuexoFxp
Nuevo Miembro
Mensajes: 5
Re: una mano con menu en Turbo C++
«
Respuesta #2 en:
Lunes 25 de Agosto de 2008, 15:46 »
0
lo de que el codigo valla con while ya me lo comentaron el tema es que no se como usarlo en el programa. Te dejo mi programa con un menu que realize pero no me funca.
Código: Text
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
int opcion1();
int opcion2();
int opcion3();
int opcion4();
int main()
{
char b;
int opcion;
clrscr();
do{
printf ("n M E N Un");
printf (" =========nn");
printf (" 1. Secuencia N§ 1n");
printf (" 2. Secuencia N§ 2n");
printf (" 3. Secuencia N§ 3n");
printf (" 4. Secuencia N§ 4n");
printf (" 5. Secuencia N§ 5nn");
printf (" Elija una opcion: ");
opcion=getch();
switch (opcion){
case 49:
opcion1();
break;
case 50:
opcion2();
break;
case 51:
opcion3();
break;
case 52:
opcion4();
break;
case 53:
//esta opcion nos sacaria del menu al pulsar 5
break;
printf("Desea continuar S/N");
b==getchar();
}while(b='S')
return(0);
}
}
int opcion1(){
printf("Hola Mundo xD!");
getch();
return (0);
}
int opcion2(){
int a, puerto, dato[4]={129, 66, 36, 24};
char b;
clrscr();
puerto=peekb(0x40, 0x08);
do
{
do
{
for(a=0; a<=3;a++)
{clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
for(a=3; a>=3;a--)
{clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
}while(!kbhit());
printf("Desea continuar S/N");
b=getchar();
}while (b =='S');
return(0);
}
int opcion3(){
//aqui meterias lo que quieres que se ejecute al elegir la tercera opcion pulsando 3
return(0);
}
int opcion4(){
//aqui meterias lo que quieres que se ejecute al elegir la cuarta opcion pulsando 4
getchar();
return(0);
}
}
si me podes dar una mano por favor voy a estar agradecido
saludos!
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #3 en:
Lunes 25 de Agosto de 2008, 16:08 »
0
Tienes mal esta línea (45):
Código: Text
b==getchar();
Tampoco cierras el switch(opcion) con su correspondiente "}"
Esto en el primer vistazo
Fr33k K0mpu73r
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #4 en:
Lunes 25 de Agosto de 2008, 16:16 »
0
Otras cosillas:
¿Para qué quieres declarar opcion1(), opcion2(), etc... como que devuelven int? Si no necesitas que una función devuelva nada, usa void, por ejemplo:
Código: Text
void opcion1();
Así te ahorras los return().
Esto sigue estando mal (línea 74):
Código: Text
for(a=3; a>=3;a--)
ya que el bucle se ejecuta una sola vez como ya te comenté anteriormente. Sigo sin saber para qué 2 fors que hacen lo mismo. ¿Es para probar a++ y a--
?
Y por último tienes que aprender a formatear el código. Menos mal que es sencillo sino ni lo habría visto.
Fr33k K0mpu73r
HuexoFxp
Nuevo Miembro
Mensajes: 5
Re: una mano con menu en Turbo C++
«
Respuesta #5 en:
Lunes 25 de Agosto de 2008, 18:10 »
0
yo hice lo de los fors asi por que asi me lo indico un profesor amigo, si lo ejecutas al programa mostraria los siguiente:
129, 66, 36, 24, 24, 36, 66, 129 etc, se sigue repitiendo esa secuencia hasta que presione una tecla, el tema es que cuando lo hago me saca del programa y yo quiero que me devuelva al menu...
los fors quye tienen ++ y -- es para que valla aumentando los bits y que los muestre en la pantalla.
espero explicarme bien
.
me podrias explicar bien como lo tendria que hacer?
desde ya muchas gracias
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #6 en:
Martes 26 de Agosto de 2008, 09:16 »
0
Cita de: "HuexoFxp"
aumentando los bits
Sí, efectivamente a++ es postincremento y a-- postdecremento, es decir, que se suma/resta 1 después de la línea en que aparezca. Es decir, a==a++ es verdadero. El preincremento/predecremento es ++a y --a y se realiza antes de cualquier otra cosa en su línea, es decir, a==++a es falso. Pero no aumenta los bits, sino el int (no confundamos términos).
Lo pongo bien formateado porque sino es un lío:
Código: Text
int opcion2(){
int a, puerto, dato[4]={129, 66, 36, 24};
char b;
clrscr();
puerto=peekb(0x40, 0x08);
do
{
do
{
for(a=0; a<=3;a++)
{
clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
for(a=3; a>=3;a--)
{
clrscr();
outport(puerto, dato[a]);
printf("n Lo que esta en el puerto es %d", dato[a]);
delay(1000);
}
} while(!kbhit());
printf("Desea continuar S/N");
b=getchar();
} while (b =='S');
return(0);
}
No sé para qué asignas valores a dato[] en su declaración puesto que los sobreescribes con outport() más tarde.
Me parece muy bien lo del profesor, pero
for(a=3; a>=3;a--)
sigue estando mal. ¿Seguro que la has copiado bien? ¿No será por casualidad
for(a=3;
a>=0
;a--)
? Vamos, digo yo.
El problema que me comentas radica en que tienes este código
Código: Text
printf("Desea continuar S/N");
b=getchar(); /*Corregido*/
mal puesto dentro de un Case. ¿Por qué? Pues porque al volver de opcion2() ejecutas el break (línea 34) y por tanto se sale del switch(), pasando a ejecutar while(b
==
'S') (por cierto, esto también lo tenías mal (while(b='S')
) y como b no es 'S' sale del while y ejecuta return(0) saliendo de main y del programa.
Ahora que sabes dónde está el problema, ¿cómo lo resolverías?
Fr33k K0mpu73r
HuexoFxp
Nuevo Miembro
Mensajes: 5
Re: una mano con menu en Turbo C++
«
Respuesta #7 en:
Martes 26 de Agosto de 2008, 16:12 »
0
mira, por las dudas de que lo pienses, yo no busco que me hagas el programa, si busco saber por que no anda bien el programa y usar el Do...While. como ya te dije antes yo recien estoy empezando y no me doy muchas ideas de esto...
Gracias = por perder el tiempo conmigo.
saludos
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #8 en:
Martes 26 de Agosto de 2008, 21:31 »
0
Cita de: "HuexoFxp"
busco
saber
por que no anda bien el programa
Bueno si lo que quieres es que te haga el programa nada más, tú mismo:
Código: C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
void
opcion1
(
)
;
void
opcion2
(
)
;
void
opcion3
(
)
;
void
opcion4
(
)
;
int
main
(
)
{
char
b
;
int
opcion
;
clrscr
(
)
;
do
{
printf
(
"n M E N Un"
)
;
printf
(
" =========nn"
)
;
printf
(
" 1. Secuencia N§ 1n"
)
;
printf
(
" 2. Secuencia N§ 2n"
)
;
printf
(
" 3. Secuencia N§ 3n"
)
;
printf
(
" 4. Secuencia N§ 4n"
)
;
printf
(
" 5. Secuencia N§ 5nn"
)
;
printf
(
" Elija una opcion: "
)
;
opcion
=
getch
(
)
;
switch
(
opcion
)
{
case
49
:
opcion1
(
)
;
break
;
case
50
:
opcion2
(
)
;
break
;
case
51
:
opcion3
(
)
;
break
;
case
52
:
opcion4
(
)
;
break
;
case
53
:
//esta opcion nos sacaria del menu al pulsar 5
break
;
}
printf
(
"Desea continuar S/N"
)
;
b
=
getchar
(
)
;
}
while
(
b
==
'S'
)
return
(
0
)
;
}
}
void
opcion1
(
)
{
printf
(
"Hola Mundo xD!"
)
;
getch
(
)
;
}
void
opcion2
(
)
{
int
a
,
puerto
,
dato
[
4
]
;
char
b
;
clrscr
(
)
;
puerto
=
peekb
(
0x40
,
0x08
)
;
do
{
do
{
for
(
a
=
0
;
a
<=
3
;
a
++
)
{
clrscr
(
)
;
outport
(
puerto
,
dato
[
a
]
)
;
printf
(
"n Lo que esta en el puerto es %d"
,
dato
[
a
]
)
;
delay
(
1000
)
;
}
for
(
a
=
3
;
a
>=
0
;
a
--
)
{
clrscr
(
)
;
outport
(
puerto
,
dato
[
a
]
)
;
printf
(
"n Lo que esta en el puerto es %d"
,
dato
[
a
]
)
;
delay
(
1000
)
;
}
}
while
(
!
kbhit
(
)
)
;
printf
(
"Desea continuar S/N"
)
;
b
=
getchar
(
)
;
}
while
(
b
==
'S'
)
;
}
void
opcion3
(
)
{
//aqui meterias lo que quieres que se ejecute al elegir la tercera opcion pulsando 3
}
void
opcion4
(
)
{
//aqui meterias lo que quieres que se ejecute al elegir la cuarta opcion pulsando 4
getchar
(
)
;
}
Fr33k K0mpu73r
HuexoFxp
Nuevo Miembro
Mensajes: 5
Re: una mano con menu en Turbo C++
«
Respuesta #9 en:
Viernes 29 de Agosto de 2008, 04:00 »
0
no entiendo que quisiste decirme mostrando el programa... si sos tan amable por fas decime
saludos
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: una mano con menu en Turbo C++
«
Respuesta #10 en:
Viernes 29 de Agosto de 2008, 11:06 »
0
Así está correcto (o por lo menos eso creo porque no está probado). Adiós.
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
una mano con menu en Turbo C++