[ Foro de Pascal ]

Equivalencia en pascal???

22-Jun-2011 15:17
oscar gomez
6 Respuestas

Cordial saludo profesor Nacho.

profesor queria pedir tu ayuda respecto a lo siguiente:

en el lenguaje C, encontre lo siguiente:

char dig=0;

for(int j=1;j<=i*2;j++)
{
 printf("%c",dig+'a'); //****????
 dig=(dig+1)%26;       //****????
}

me gustaria saber en pascal cual seria el equivalente y si me puedes explicar que hace mas o menos dicho trozo de codigo.

Y el equivalente en pascal para este otro:

char telefono[10]
for(i=0;i<strlen(telefono);i++)
 {
   if(!isdigit(telefono[i])
     {
       telefono[i]=(((telefono[i]-'A')/3)+2)%10;
       telefono[i]+=48;
     }
     printf("%c",telefono[i]);
   }


mil gracias


24-Jun-2011 16:45
Nacho Cabanes (+84)

Como puedes observar, C es mucho menos legible que Pascal... ;-D

Para entender esta orden:

printf("%c",dig+'a');

Tienes que saber un poco de C y un poco sobre el código ASCII. Por ejemplo:

- En C puedes sumar una letra y un número. Por ejemplo 'a'+1 sería 'b' y 'a'+2 sería 'c'

- Cada carácter se guarda internamente como un número. La equivalencia más empleada es la que se conoce como "código ASCII" (American Standard Code for Information Interchange). Por ejemplo una letra "A minúscula" (a) equivale al número 97. Por eso, si escribes printf("%d",'a') obtendrás en pantalla un 97, y si escribes printf("%c",97) obtendrás en pantalla una 'a'.

Y la orden

dig=(dig+1)%26;

hace que "dig" vaya desde 0 hasta 25: incrementa su valor, y luego lo que guarda es realmente el resto de la división entre 26 (que será un número de 0 a 25). Prueba esto:

for (int i=0; i < 100 i++)
 printf("%d ", i%10);

y me cuentas lo que hace... y por qué lo hace.  ;-D

En el segundo fragmento que pones, "strlen" te dice la longitud de una cadena (el equivalente en Pascal es "length"), e "isdigit" dice si es una cifra del 0 al 9. Prueba tú mismo el resultado de ese fragmento, y trata de imitarlo desde Pascal.


24-Jun-2011 18:10
oscar gomez

cordial saludo profesor nacho.ayudame es que estoy hecho un lio!!!

me decias que te dijera que haria:
for(int i=0;i<100;i++)
 printf("%d",i%10);

yo entiendo que la variable i va desde cero hasta 99, con incremento de uno por cada pasada y en cada una de ellas va imprimiendo el resto de la division de cada i entre 10, asi mostraria , 0,1,2,3 .....

por favor corrigeme si estoy mal en lo anterior.



ahora bien ,

char dig=0;

for(int j=1;j<=i*2;j++)
{
 printf("%c",dig+'a'); //****????
 dig=(dig+1)%26;      //****????
}

profesor la instrucción  char dig =0; no debería ser char dig=’0’;al estar declarada como char y asi distinguir el cero de entero a cero de carácter?
Y si fuera asi entonces quiere decir que la varable dig inicialmente vale ‘0’ , por lo tanto entonces que se imprime exactamente con :   printf("%c",dig+'a');
Pues según me explica  printf(“%c”,97) es a, pero en este caso tengo es:
Printf(“%c”,dig+’a’); y no printf(“%d”,dig+’a’);

que esta realizandose es que la verdad no lo he entendido.gracias


25-Jun-2011 01:38
Nacho Cabanes (+84)

Decías

> yo entiendo que la variable i va desde cero hasta 99, con incremento de uno por cada pasada y en cada una de ellas va imprimiendo el resto de la division de cada i entre 10, asi mostraria , 0,1,2,3 .....

Te falta indicar un detalle importante: muestra los números del 0 al 9, separados por un espacio, repetidos 10 veces.

Mira este caso, usando el resto de la división entre 3:

for(int i=0; i<30; i++)
 printf("%d ",i%3);

Eso escribirá

0 1 2 0 1 2 0 1 2 ...

¿Eso está claro?  Si la respuesta es que sí, ahora piensa qué escribirá:


for(int i=0; i<30; i++)
 printf("%c ",i%3 + 'a');


27-Jun-2011 11:17
oscar gomez

cordial saludo profesor Nacho.

me decias:

ahora piensa qué escribirá:


for(int i=0; i<30; i++)
 printf("%c ",i%3 + 'a');


no se si este mal mi respuesta profesor pero se que en ese caso sabras corregirme.

creo que la respuesta seria:

abc abc abc abc abc abc abc abc abc abc

si esto es correcto cual seria el equivalente en pascal ??? pues he investigado que para representar un codigo ascii se puede utilizar el simbolo #, asi #97 equivale a la "a", pero la verdad profesor no se como podria ser  en pascal para obtener lo mismo que en c:

abc abc abc abc abc abc abc abc abc abc

se que el modulo en pascal es con mod, asi
i mod 3= 0

por favor ayudame a verlo como seria en pascal pues en c me lo has explicado muy bien con buenos ejemplos y lo he entendido pero en pascal me esta costando disculpa mi ignorancia y gracias por ayudarnos.


29-Jun-2011 20:45
Nacho Cabanes (+84)

El equivalente en Pascal a

for(int i=0; i<30; i++)
 printf("%c ",i%3 + 'a');

Podria ser algo como

for i := 0 to 29 do
 WriteLn( chr(97 + i mod 3) );

Porque para mostrar una letra a partir de su código ASCII en Pascal, no basta con usar %c, sino que hay que emplear la función "chr", que es la que convierte de número a carácter.


30-Jun-2011 10:34
oscar gomez

Gracias profesor Nacho ,una explicacion muy clara.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)