Pascal/Turbo Pascal - LIMITAR CARACTERES MEDIANTE UNA VARIABLE

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

LIMITAR CARACTERES MEDIANTE UNA VARIABLE

Publicado por mateo (4 intervenciones) el 07/04/2020 17:40:22
Hola soy novato en este lenguaje..vengo de gwbasic y me entro el gusanillo por programar en pascal estoy estoy entrando poco a poco
me cuesta pero voy viendo resultados...
He hecho mi primer programa y queria compartirlo con el foro..a ver que le parece y
si lo estoy haciendo bien...pero mi pregunta es que como soy novato no se si se puede hacer de otra manera..Primero como elimino el goto(si se puede es para saber como se hace no he encontrado la manera correcta) y segundo los valores que le doy con el procedimiento win me gustaria añadirle 2 valores mas que seria la limitacion de caracteres que puedes introducir y pasarle esos valores almacenadas en variables al case del procedimiento..pero me dice constant expression expected..como podria pasarle los valores que yo quiero y ponerselos al procedure...aqui paso el programa.

POR EJEMPLO ....
Win(1,1,'Nombre:',15,Nombre,1) AQUI ME CREA UN CAMPO CON TITULO NOMBRE 15 CARACTERES MAXIMO Y EL 1 ES QUE PUEDES INTRODUCIR SOLO TEXTO QUE ESTA ASI EN EL PROCEDURE WIN
#65..#122: {Si pulsamos el Rango de caracteres desde el char #65(A) hasta char #122(z)}

AHORA QUISIERA HACER QUE EN EL...:
Win(1,1,'Nombre:',15,Nombre,65,122) AQUI ME CREA UN CAMPO CON TITULO NOMBRE 15 CARACTERES MAXIMO Y DELIMITACION DE CARACTERES DEL 65 AL 122
#CC..#FC: {Si pulsamos el Rango de caracteres DADAS POR LAS VARIABLES CC(COMIENZO CARACTER)..FC(FIN DE CARACTER).


Aqui envio el Programa que es funcional...pero me gustaria implementar esto para hacerlo con menos codigo,,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
{Programa Creado Por Mateo Vilreales      }
{-----------------------------------      }
{             Ver 1.0.                    }
{
{-----------------------------------      }
{Descripcion:                             }
{Programa que de Crea campos de texto     }
{limitados en cualquier posicion con      }
{diferentes tipos de datos,numericos o    }
{alfanumericos o ambos con limitacion de  }
{caracteres introducidos.                 }
{-----------------------------------------}
{            Uso:                         }
{ Win(X,Y,Text,Max,temp,Tci);             }
{                                         }
{ X=Posicion de Columna Valores de 1-80   }
{   en total de la suma de X+Text+Max.    }
{ Y=Posicion de Fila Valores de 1-25.     }
{ Text=Texto a Mostrar.                   }
{ Max=Limite de Caracteres a Introducir.  }
{ Temp=Variable temporal donde se         }
{ almacenara todo lo escrito en el proce  }
{ dure.                                   }
{ Tci=Tipo de Caracter a Introducir:      }
{ Valores admitidos: 1-3:                 }
{ 1:Solo Letras De (A..Z) y de (a..z).    }
{ 2:Solo Numeros De (0..9).               }
{ 3:Letras y Numeros De (A..Z) de (a..z)  }
{ y de (0..9)                             }
{ Ver Ejemplos......                      }
{-----------------------------------------}
 
Program Wintext;
Uses Crt;
 
Var Temp2:String;{Variable global que almacena el String de todo lo pulsado.}
 
{------------------------------ Comienzo Del Procedure Win -----------------------------------------}
Procedure Win(X,Y:Byte;Text:string;Max:Byte;Temp:String;Tci:byte);
 
Var
  Tecla:Char;{Variable que almacenara un caracter.}
  Ci:INTEGER;{Variable numerica que contara cuantos caracteres hemos introducido en tiempo real}
             {y para posicionar el texto con Gotoxy}
  Lt:integer;{Variable que almacenara la longitud del texto de la variable del procedure (text)}
  Ctibs:string;{Variable que copiara el texto introducido almacenado en la variable del}
               {procedure (temp) -1 caracter al pulsar retroceso}
  ltxmax:integer;{Variable que almacenara la longitud total de la variable del procedure}
                 {(text) mas la posicion del cursor de la variable del procedure (x)}
                 {mas el numero maximo de caracteres a introducir de la variable}
                 {del procedure(max)}
  label 1;{Etiqueta para el Goto}
 
Begin
 
 
{--- Control de valores en variables del Procedure win si los valores no son correctos ---------------}
 
{------------------ Comprobacion del Valor de X y Longitud Total -------------------------------------}
 
Lt:=Length(Text);{Almaceno la longitud del Texto}
Ltxmax:=Length(text)+x+max+1;{Determino la longitud total de las Variables}
 
If (x<1) or (ltxmax>80) Then
Begin
Clrscr;
Writeln('Variables en el Procedure Win');
Writeln;
Writeln('Win(X,Y,Text,Max,temp,Tci)');
Writeln;
Writeln('Numero de Caracteres en Variable Text de Win: ',text,' ',lt);
Writeln('Valor de X: ',x);
Writeln('Valor de Max: ',max);
Writeln('Total de la Suma: ',ltxmax);
Writeln('Valores admitidos 1: Para X si es menor Error.');
Writeln('Hasta 80: En total De la Suma De Text+X+Max.');
Writeln;
Write('Pulsa una tecla para salir.');
Writeln;
Readkey;
Halt;
End;
{----------------------------- Fin de Comprobacion ----------------------------------------------------}
{--------------------------- Comprobacion del Valor de Y ----------------------------------------------}
If (y<1) or (y>25) then
Begin
Clrscr;
Writeln('Variables en el Procedure Win');
Writeln;
Writeln('Win(X,Y,Text,Max,temp,Tci)');
Writeln;
Writeln('En Win Text:',text);
Writeln('Valor no valido en variable Y: ',y);
Writeln('Valores admitidos: 1-25.');
Writeln;
Write('Pulsa una tecla para salir.');
Writeln;
Readkey;
Halt;
End;
{----------------------------- Fin de Comprobacion ----------------------------------------------------}
{--------------------------- Comprobacion del Valor de Tci --------------------------------------------}
If (Tci<1) or (Tci>3) Then
Begin
Clrscr;
Writeln('Variables en el Procedure Win');
Writeln('Win(X,Y,Text,Max,temp,Tci)');
Writeln;
Writeln('En Win Text:',text);
Writeln('Valor no valido en variable Tci: ',Tci);
Writeln('Valores admitidos: 1-3:');
Writeln;
Writeln('1:Solo Letras De (A..Z) y de (a..z).');
Writeln('2:Solo Numeros De (0..9).');
Writeln('3:Letras y Numeros De (A..Z) de (a..z) y de (0..9).');
Writeln;
Write('Pulsa una tecla para salir.');
Writeln;
Readkey;
Halt;
End;
{----------------------------------- Fin de Comprobacion ------------------------------------------}
{------------------------- Fin del control de variables del procedure win -------------------------}
 
Gotoxy(x,y);Write(Text);{Posiciono el Cursor y escribo el texto de la variable del procedure (text)}
Ci:=1;{Pongo Contador de caracteres Introducidos a 1}
Lt:=Length(Text);{Determino la longitud de la variable Text y la almaceno en variable (Lt)}
 
 
Repeat
 
1:{Etiqueta del Goto}
 
Tecla:= Readkey;{Leo caracter y lo almaceno en tecla}
 
Case Tecla of {Procesamos la tecla pulsada}
 
{----------------------------- Comprobacion de Tecla Pulsada --------------------------------------}
    #8    :{Si pulsamos (char #8 (El retroceso o Backspace)}
Begin
    if Ci<1 then {Verifico si el contador es menor de 1 y la  tecla pulsada es Retroceso }
    Ci:=1        {pongo el valor del contador a 1}
    else if Ci>1 then {si ya he introducido caracteres y pulso Retroceso}
    Ci:=Ci-1;{Resto un caracter}
    gotoxy(Lt+Ci,Y);write(' ');{Posiciono el cursor y borro con un espacio en blanco}
    Ctibs:=copy(temp,1,Ci-1);{Copio los caracteres almacenados hasta el momento}
                             {(-1 que seria el del ultimo introducido el del retroceso)}
    temp:=Ctibs;{Almaceno la nueva cadena de caracteres en la variable del procedure(temp)}
    gotoxy(Lt+Ci,Y);{Posiciono el cursor en la posicion correcta sumando}
                    {la longitud del texto+los caracteres introducidos hasta el momento}
end;
{-------------------------------- Fin de comprobacion ---------------------------------------------}
 
{----------------------------- Comprobacion de Tecla Pulsada --------------------------------------}
    #48..#57: {Si pulsamos el Rango de caracteres desde el char #48(0) hasta char #57(9)}
 
Begin
    IF Tci=1 THEN GOTO 1;{Verifico que tipo de caracter quiero introducir el valor de Tci}
                         {lo determina la variable Tci del procedure win (ver valores del procedure)}
    Temp:=Temp+Tecla;{Almaceno el caracter pulsado(Tecla) en la variable temporal (Temp)}
    GOTOXY(Lt+Ci,Y);Write(Tecla);{ Posiciono el cursor en la posicion correcta sumando}
                                 {la longitud del texto+los caracteres introducidos hasta el momento}
                                 {y escribo el cacarter almacenado en(Tecla)}
    Ci:=Ci+1;{Sumo un nuevo caracter}
End;
{-------------------------------- Fin de comprobacion ---------------------------------------------}
 
{----------------------------- Comprobacion de Tecla Pulsada --------------------------------------}
    #65..#122: {Si pulsamos el Rango de caracteres desde el char #65(A) hasta char #122(z)}
 
Begin
    IF Tci=2 THEN GOTO 1;{Verifico que tipo de caracter quiero introducir el valor de Tci}
                         {lo determina la variable Tci del procedure win (ver valores del procedure)}
    temp:=temp+Tecla;{Almaceno el caracter pulsado(Tecla) en la variable temporal (Temp)}
    GOTOXY(Lt+Ci,Y);Write(Tecla);{ Posiciono el cursor en la posicion correcta sumando}
                                 {la longitud del texto+los caracteres introducidos hasta el momento}
                                 {y escribo el cacarter almacenado en(Tecla)}
    Ci:=Ci+1;{Sumo un nuevo caracter}
End;
{-------------------------------- Fin de comprobacion ---------------------------------------------}
 
End;{Este es el end del Repeat}
 
Until (Tecla = #13) OR (Tecla= #27) OR (Ci=MAX+1);{Finaliza el Bucle Cuando de Pulsa Enter o Esc}
Temp2:=temp;{Lo que he Escrito en Variable(Temp) local del Procedure Lo Paso a Variable Temporal global (Temp2)}
 
END;{End del Procedure}
 
{--------------------------------------------------------------------------------------------------}
Var
   Nombre,Dni,Telefono:string;{Declaro las Variables que utilizare en llamadas a procedure win}
   Cev:Byte;{Cev=Variable que almacena el codigo de error de val}
   Telefonocn:real;{Telefonocn=Variable donde se almacena el valor string para convertirlo a numerico}
 
 
{------------------------------------------- Ejemplos -----------------------------------------------}
Begin
Clrscr;
 
{Posicion X(1),Y(1),Texto(Nombre:),limitacion de campo (15),Variable temporal(Nombre),tipo de dato a introducir (1)}
 
    Win(1,1,'Nombre:',15,Nombre,1);
    Nombre:=Temp2;{Paso el valor de Temp2 Donde esta almacenado todo lo escrito a la variable Nombre}
    Win(1,2,'Telefono:',15,Telefono,2);
    Val(Temp2,Telefonocn,Cev);{Paso el valor de temp2 Donde esta almacenado todo lo escrito a la Variable Telefonocn}
   {y lo paso a Numerico porque el valor que le quiero dar a los datos sean para sumar,restar ect...}
    Win(1,3,'D.n.i:',15,dni,3);
    Dni:=Temp2;
{------------------------------------- Presentacion de Datos ----------------------------------------}
Clrscr;
Writeln('Tu nombre es:',nombre);
 
If Cev=1 Then {Si el codigo es 1 que no ha hecho Conversion Entonces}
 
Begin
    Writeln('Tu Telefono es:Sin Datos');
End
 
Else {Y si es diferente a 1 el codigo seria 0 ha hecho la conversion correctamente}
    Writeln('Tu Telefono es:',telefonocn:0:0);
    Writeln('Tu D.n.i es:',dni);
    Writeln;
    Write('Pulsa una tecla para salir.');
    Writeln;
Readkey;
 
End.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 6
Ha disminuido su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

LIMITAR CARACTERES MEDIANTE UNA VARIABLE

Publicado por mat (4 intervenciones) el 09/04/2020 18:55:54
YA LO HE SOLUCIONADO....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar