• Jueves 28 de Marzo de 2024, 23:21

Autor Tema:  Descargar El Buffer Del Teclado  (Leído 5656 veces)

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Descargar El Buffer Del Teclado
« en: Jueves 23 de Diciembre de 2004, 19:01 »
0
Hola a todos

Hay alguna funcion en Pacal q te descarge el buffer del teclado, en C creo q era fflush

Lo pregunto pregunto porque  cuando voy leyendo con funcion read() hay veces q no se para a leer, Coje el valor q ya habia introducido antes



Citar

Procedure OPCION1 ( var matrix1:TMatriz1; var matrix2:TMatriz2 );


        var
                cad:string; (* Guarda los dos caracteres del digrafo *)
                c:char; (*Control de errores*)

        Begin
                repeat
                        repeat

                                limpiar; (* - 01 - *)
                                writeln ('Introduce el diagrafo ');
                                read(cad);

                                IF (cad[1]='ñ') or (cad[2]='Ñ') then
                                Begin
                                        Limpiar;
                                        writeln('El caracter Ñ se trasforma en -ny- entonces ya forma un digrafo');
                                        writeln('¿Esta deacuerdo de que el digrafo a buscar sea -ny-  S/N ? ');
                                        read( c ) ;
                                        cad:='ny';
                                End
                                ELSE
                                Begin
                                        cad:= CAMBIO(cad[1]);            (* - 02 - *)
                                        cad:= cad + CAMBIO(Cad[2]);      (* - 02 - *)
                                        c:='S';
                                End;

                        until (c='s') or (c='S');

                        limpiar;
                        writeln ( cad,': ',matrix1[cad[1],cad[2]],' de:',CONT_DIGRAFOS(matrix1) );
                        writeln (cad[1],': ',matrix2[cad[1],1]);
                        writeln (cad[2],': ',matrix2[cad[2],1]);

                        writeln('--- PuLsa una tecla para continuar ---');
                    read(input);
                        repeat
                                limpiar;
                                writeln('Desea introducir otro digrafo S/N');
                                read( c );
                        until (c='n') or (c='s');
                until(c='n');
        End;




El problema lo tengo en este procedimiento; el los read. Solo se para a leer en el primero y en el ultimo, en los demas no se para, porque coje lo q habia escrito antes en el teclado.


Muchas gracias;

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #1 en: Viernes 24 de Diciembre de 2004, 13:34 »
0
Citar
read()
Este procedimiento no lee desde el teclado, sino de la pantalla.
Para leer desde el teclado deberias usar ReadKey[b/]
Código: Text
  1.  
  2. function ReadKey:Char;
  3.  
  4.  
Para usarlo...
Código: Text
  1.  
  2.   read( c )&#59; {ASI LEE DESDE LA PANTALLA}
  3.   c := ReadKey; {ASI LEE EL CHAR DESDE EL TECLADO Y VACIA EL BUFFER UNA VEZ LEIDO}
  4.  
  5.  

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #2 en: Viernes 24 de Diciembre de 2004, 18:02 »
0
Muchas gracias,


Esto donde lo tengo q poner
Citar
function ReadKey:Char;
Lo he declarado arriba donde las demas funciones

Al compilar me sale esto
Citar
[ferniet@jair practica]$ fpc p.pas
Free Pascal Compiler version 1.0.6 [2002/05/23] for i386
Copyright © 1993-2002 by Florian Klaempfl
Target OS: Linux for i386
Compiling p.pas
p.pas(15,9) Fatal: Syntax error, = expected but identifier READKEY found
[ferniet@jair practica]$

Readkey, es una funcion de Pacal ?

FELIZ NAVIDAD

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #3 en: Viernes 24 de Diciembre de 2004, 18:17 »
0
Citar
function ReadKey:Char;
En ningun lado, asi es como esta definida esta funcion en la librería CRT( es decir no se le pasa de parametro nada, y te devuelve char del teclado.)

Lo que tienes que hacer es Reemplasar el
Read( c )
por:
c := ReadKey;


Citar
Readkey, es una funcion de Pacal ?
Si esta en la libreria CRT.

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #4 en: Viernes 24 de Diciembre de 2004, 18:22 »
0
He quitado eso

y me he puesto
Citar
c:=Readkey;

y al compilar sale

Citar
[ferniet@jair practica]$ fpc p.pas
Free Pascal Compiler version 1.0.6 [2002/05/23] for i386
Copyright © 1993-2002 by Florian Klaempfl
Target OS: Linux for i386
Compiling p.pas
p.pas(273,7) Error: Identifier not found READKEY
p.pas(374) Fatal: There were 1 errors compiling module, stopping
[ferniet@jair practica]$

Igual es porque no tengo esa libreria?

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #5 en: Viernes 24 de Diciembre de 2004, 18:24 »
0
Citar
He quitado eso

y me he puesto

tienes que añadir la clausula de que vas a usar la unidad CRT.
Código: Text
  1.  
  2. program NombrePrograma;
  3. uses CRT;
  4.  
  5.  

Podrias adjuntar  todo el codigo fuente como un archivo.????

Citar
Igual es porque no tengo esa libreria?
Todos los  Compiladores Pascal la Traen ya sean para Linux o windows....

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #6 en: Viernes 24 de Diciembre de 2004, 18:37 »
0
ok, te explico un poco como el programa, (todabia esta en alfileres y todo muy descolocado)

El usuario introduce una frase por teclado y el programa te la tiene q convertir en digrafos
Citar
Ejemplo de los digrafos de Hola => ho ol la


despues hay una serie de opciones. la opcion 1 q es la q me esta creando tanta polemia va de introducir un digrafo por teclado y el programa te dice una serie de estadisticas.

La opcion 1 es (* - 10 - *)

No corre mucha prisa, eso lo tengo q hacer para estas Navidades. Y ahora me tengo q ir, q hay q ir a ayudar a preparar la cena de esta noche

Muchas gracias por todo y haber si me ayudas con esa bobadita.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #7 en: Sábado 25 de Diciembre de 2004, 00:23 »
0
Tx, lo acabo de probar y ya funciona llamando a esa libreria.

Me puedes explicar un poco  uses CRT;

por si me mandan explicarlo.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #8 en: Lunes 27 de Diciembre de 2004, 02:19 »
0
Que bien que te funcionó :rolleyes:  :rolleyes:
Yo lo probé y me mandaba error  en tiempo de ejecucion en la funcion
RE_M2(matriz2,Cadena_minusculas)

Igualmente te explico:

Los compiladores de Pascal modernos tales como el Free Pascal y el turbo Pascal y el TMT pascal vienen con  librerias de funciones.
Estas librerias contienen funciones tales como
ReadKey, Textcolor, MkDir, GetDate, etc..

Tu mismo puedes crear tus propias librerias y luego una vez compiladas como una libreria de Pascal, la agregas con
Código: Text
  1.  
  2. uses NombreUnidad;
  3.  
  4.  
a tu programa para poder reusar las funciones que esten alli.  Es decir que
Uses CRT;
Te permite usar estas y otras funciones:
ReadKey, para leer la tecla del teclado
TextColor(numero color) para cambiar el color del  texto
GotoXY(X,Y) para posicionar el puntero en la pantalla
y muchas mas.

Fijate en el caso del Compilador FreePascal:
Help>Contents>Standar Units Reference Manual>The CRT Unit

En el Caso de turbo Pascal(en tu caso no lo es):
Help>Standard Units>CRT

Si tienes dudas, no dudes en postearlas
Espero que sea suficiente... :lightsabre:


Me faltaba decir:
Citar
ok, te explico un poco como el programa, (todabia esta en alfileres y todo muy descolocado)

Pues a mi me pareció muy ordenado, es más, le pusiste numeros de comentario a las funciones que no es poco...
solo por curiosidad: ¿Escribiste el codigo tu solo, o lo hicieron entre varios?

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #9 en: Lunes 27 de Diciembre de 2004, 18:23 »
0
He estado fuera de linea estos dias,

El trabajo es entre 2, pero mi compañero es el primer año q da programacion y le cuesta. Yo se algo mas porque vengo del modulo y di C que se le parece mucho a  Pascal

Tambien me ha ayudado la profesora en algunas funciones.

y Gracias por las explicaciones.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #10 en: Lunes 27 de Diciembre de 2004, 20:23 »
0
Citar
El trabajo es entre 2, pero mi compañero es el primer año q da programacion y le cuesta. Yo se algo mas porque vengo del modulo y di C que se le parece mucho a Pascal
Es que  la forma des escribir de las palabras reservadas varia(por ej: FOR, For)
Citar
y Gracias por las explicaciones
De nada :hola:

Ferdinandum

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Descargar El Buffer Del Teclado
« Respuesta #11 en: Martes 28 de Diciembre de 2004, 18:49 »
0
Sigo teniendo problemas con el read


Citar
Procedure OPCION1 ( var matrix1:TMatriz1; var matrix2:TMatriz2 );
   
   
   var
  cad:string; (* Guarda los dos caracteres del digrafo *)
  c:char; (*Control de errores*) 
   
   Begin
  repeat
     

     repeat
    c:='n';
    limpiar; (* - 01 - *)
    writeln ('Introduce el diagrafo ');
    [/B]readln(cad);
    writeln(cad);
    IF length(cad)>2 then
       Begin
       writeln('El digrafo introducido tiene mas de 2 caracteres');
       writeln('Quieres q el programa te coja solo los 2 primeros');
       c:=readkey;
   
       End;
   
    IF (length(cad)<3) or ( (c='s') or (c='S') ) then
       Begin
       IF (cad[1]='ñ') or (cad[2]='Ñ') then
         Begin
      Limpiar;
      writeln('El caracter Ñ se trasforma en -ny- entonces ya forma un digrafo');
      writeln('¿Esta deacuerdo de que el digrafo a buscar sea -ny-  S/N ? ');     
      c:=readkey;
      cad:='ny';
      End
     
       ELSE
      Begin
      cad:= CAMBIO(cad[1]);   (* - 02 - *)
      cad:= cad + CAMBIO(Cad[2]);  (* - 02 - *)
      c:='S';
      End;
       End;
   
     until (c='s') or (c='S');

         
     
     limpiar;
     writeln ( cad,': ',matrix1[cad[1],cad[2]],' de:',CONT_DIGRAFOS(matrix1) );
     writeln (cad[1],': ',matrix2[cad[1],1]);
     writeln (cad[2],': ',matrix2[cad[2],1]);
     
     writeln('--- PuLsa una tecla para continuar ---');
     c:=readkey;
     repeat
    limpiar;
    writeln('Desea introducir otro digrafo S/N');
    read©;     
     until (c='n') or (c='s');     
  until(c='n');
   End;


El problema esta el la 4º linea  del 2º repeat (deberia estar en negrita y tabulado pero no se q pasa, estoy gafado hoy con la programacion ,:( )

La primera vez q entra en el bucle me lo hace bien, pero la segunda ya no me pide introducir algo, sino q lo vuelve a cojer de lo q estaba almacenado en el buffer

Necesito almacenar dos caracteres por lo q con el readkey no puedo,Q se le puede hacer?