Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
PauFP
Nivel 8


Edad: 33
Registrado: 31 Ene 2010
Mensajes: 862
Ubicación: Ituzaingó
Carrera: Industrial
argentina.gif
MensajePublicado: Mar Mar 01, 2011 10:04 pm  Asunto:  Duda simple ejercicio Pascal Responder citandoFin de la PáginaVolver arriba

En pocas palabras, tengo esta consigna:

"Elaborar un programa que permita cargar una matriz de 10x10 con numeros del 0-255 por teclado.
Una vez cargada debera imprimir el caracter correspondiente a cada elemento.
Considerar que solo debera mostrar elementos de la tabla ASCII standard (caracteres del 0-127);
por ello si existe un elemento correspondiente a la tabla extendida llevarla a la estandar con la
operacion modulo. Realizar una fel problema."

Para la cual hice el siguiente código (yo usé una matriz de 4x4, de pajera nomás Wink )

Program final1;
Uses crt;

Type
biarreglo=array[1..4,1..4]of integer;

Var
matriz:biarreglo;

Procedure ingresamatriz(var matriz:biarreglo);
Var
I,J:byte;
Begin
For I:=1 to 4 do
begin
for J:=1 to 4 do
begin
writeln('Ingrese elemento de la matriz:');
readln(matriz[I,J]);
if ((matriz[I,J]<0) or (matriz[I,J]>255))then
begin
writeln('Numero no valido. Ingrese otro:');
readln(matriz[I,J]);
end;
end;
end;
writeln(' ');
End;

Procedure muestramatriz(matriz:biarreglo);
Var
I,J:byte;
Begin
writeln('Matriz ingresada:');
For I:=1 to 4 do
begin
for J:=1 to 4 do
write(matriz[I,J],' ');
writeln(' ');
end;
End;

Function pasaascii(matriz:biarreglo):char;
Var I,J:byte;
Begin
Readln(matriz[I,J]);
If (matriz[I,J]< 9Cool then
Begin
matriz[I,J]:=char(matriz[I,J]);
end;
{PARTE A COMPLETAR}
End;

{PROGRAMA}
Begin
ingresamatriz(matriz);
muestramatriz(matriz);
Readkey;
End.


Mi duda es cómo completar la parte que dice "PARTE A COMPLETAR", obviamente, es decir, la función que se pide. Cuando compilo me salta un error de tipo, que no sé solucionar.

PD. Si algún informático va a responder esto, por favor que sea con palabras claras y simples. Considérenme una ignorante en lo que respecta a programación Oops


Escorpio Género:Femenino Caballo OcultoGalería Personal de PauFPVer perfil de usuarioEnviar mensaje privado
PauFP
Nivel 8


Edad: 33
Registrado: 31 Ene 2010
Mensajes: 862
Ubicación: Ituzaingó
Carrera: Industrial
argentina.gif
MensajePublicado: Mar Mar 01, 2011 10:06 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Donde está el emoticón con gafas, en realidad debería decir "menor que 98"


Escorpio Género:Femenino Caballo OcultoGalería Personal de PauFPVer perfil de usuarioEnviar mensaje privado
_nacho_
Nivel 9



Registrado: 08 Oct 2007
Mensajes: 1271

Carrera: No especificada
uruguay.gif
MensajePublicado: Mar Mar 01, 2011 11:03 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

A ver... ¿cómo sería el pseudocódigo para hacer eso?

Código:
Fila i entre 1 y 10
   Columna j entre 1 y 10
        Repetir
              Matriz(i,j) entra de teclado
        Hasta que 0 <=Matriz(i,j) < 255

Fila i entre 1 y 10
   Columna j entre 1 y 10
        Imprimir el caracter(Matriz(i,j) % 128)
   Imprimir Fin de linea


Donde "%" significa la operación módulo (el resto de la operación entera).


 Género:Masculino  OfflineGalería Personal de _nacho_Ver perfil de usuarioEnviar mensaje privado
_nacho_
Nivel 9



Registrado: 08 Oct 2007
Mensajes: 1271

Carrera: No especificada
uruguay.gif
MensajePublicado: Mar Mar 01, 2011 11:04 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

(perdoná que lo escriba en pseudocódigo, pero no me acuerdo casi nada de Pascal, así que lo que escriba va a ser una mezcla de C, Fortran, Python con andá a saber qué).

_________________

 Género:Masculino  OfflineGalería Personal de _nacho_Ver perfil de usuarioEnviar mensaje privado
Guido_Garrote
Moderador


Edad: 35
Registrado: 14 Oct 2007
Mensajes: 3319
Ubicación: AHÍ!
Carrera: Civil
haiti.gif
MensajePublicado: Mar Mar 01, 2011 11:08 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

no entiendo, que es lo que tiene que hacer esa funcion?

_________________
Image

Piscis Género:Masculino Serpiente OcultoGalería Personal de Guido_GarroteVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuarioMSN Messenger
Gualicho
Nivel 8


Edad: 35
Registrado: 18 Sep 2007
Mensajes: 715
Ubicación: En el templo de Momo...
Carrera: Informática
blank.gif
MensajePublicado: Mie Mar 02, 2011 1:46 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El problema, al margen de algun error de compilación, pasa por como lo estas planteando. Vos estas planteando que le pasarías una matriz a esa función y que te devolvería UN char(solo uno a partir de toda la matriz!) . Digamos... por ahí la única función que necesitas es una que a partir de un numero te devuelva el caracter. Esa función existe y se llama chr. La otra parte del problema se reduce a iterar la matriz y aplicarle la operacion mod 128 a cada numero. Es basicamente lo que escribio nacho en pseudocodigo...

No tengo ningún compilador a mano, pero proba el siguiente codigo, creo que debería funcionar. No recuerdo muchas cosas de la sintaxis de pascal asi que debo haber puesto bocha de cosas al pedo (empezando por ';') :P

Código:

Procedure muestraMatrizAscii(matriz:biarreglo);
Var
I,J:integer;
Begin
   writeln('Matriz en ascii:');
   for I:=1 to 4 do
      begin
         for J:=1 to 4 do
            begin
               matriz[I,J]:= matriz[I][J] mod 128;
               write(chr(matriz[I,J]),' ');      
            end;   
      writeln(' ');
      end;
End;


Saludos.

_________________
"Por eso te pido (amigo desconocido), si ves a mi rock perdido, lo traigas por aqui!"

Cancer Género:Masculino Dragón OcultoGalería Personal de GualichoVer perfil de usuarioEnviar mensaje privadoEnviar email
Kartlan
Nivel 5


Edad: 42
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Mie Mar 02, 2011 11:23 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Bueno ya tenes bastante como para haberlo arreglado pero por las dudas... como el enunciado dice "imprimí" lo que te paso gualicho esta mal por que modifica la matriz y encima la esta pasando por copia... pero hablando en serio...

Código:

Procedure muestramatriz(matriz:biarreglo);
  Var
    I,J:byte;
  Begin
    writeln('Matriz ingresada:');
    For I:=1 to 4 do
      begin
        for J:=1 to 4 do
         {write(matriz[I,J],' '); imprime los numeros.}
         {write( chr(matriz[I,J]),' '); imprime el caracter ascii extendido.}
         write( chr(matriz[I,J] mod 128),' '); {imprime el caracter ascii.}
       writeln(' ');
     end;
  End;


Suerte...


Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
PauFP
Nivel 8


Edad: 33
Registrado: 31 Ene 2010
Mensajes: 862
Ubicación: Ituzaingó
Carrera: Industrial
argentina.gif
MensajePublicado: Mie Mar 02, 2011 4:11 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Gracias por los datos, auqnue no me lo solucionan del todo...

No puede ser un procediemiento, sino que DEBE ser una función (por eso yo había definido que me devolviera un dato tipo ascii)..

Y hacer chr(número) en Pascal no ha funcionado, alguien sabe alguna otra forma????
Lo de la función módulo, seguros que es "%"??


Escorpio Género:Femenino Caballo OcultoGalería Personal de PauFPVer perfil de usuarioEnviar mensaje privado
Pablon
Nivel 5


Edad: 32
Registrado: 16 Feb 2010
Mensajes: 168
Ubicación: Banfield
Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Mie Mar 02, 2011 6:33 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

En Pascal el resto es con mod creo.

_________________
ImageImage
ImageImage

Geminis Género:Masculino Cabra OfflineGalería Personal de PablonVer perfil de usuarioEnviar mensaje privado
BlackMamba
Nivel 2



Registrado: 04 Ene 2011
Mensajes: 13

Carrera: Sistemas
blank.gif
MensajePublicado: Mie Mar 02, 2011 6:52 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Hola, mira te tiro el codigo asi rápido como me sale para que pruebes como funciona todo dps acomodalo a tu enunciado y hace todas las validaciones necesarias.Hace mucho que no uso Pascal no se si compilara, te pongo el readln al final para que lo ejecutes desde el Turbo y no cierre sin que veas el resultado.

Program Pas;

Uses Crt;

Var
numero:byte;
caracter:char;

BEGIN

ClrScr;
Writeln('Ingrese un numero:');
readln(numero);
if numero > 127 then;
begin
numero:=numero mod 128;
end;
caracter:=Char(numero);
Writeln (numero,' = ',caracter);
readln;
end.


 Género:Femenino  OfflineGalería Personal de BlackMambaVer perfil de usuarioEnviar mensaje privado
koreano
Nivel 9



Registrado: 15 Jul 2010
Mensajes: 1796

Carrera: No especificada
blank.gif
MensajePublicado: Mie Mar 02, 2011 7:02 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

http://www.ideone.com/KbAyN

Ahí tenés las dos versiones, como function o como procedure. La versión procedure es mas eficiente en términos de uso de memoria (y velocidad) porque no implica trabajar con copias de la matriz.

EDIT: borré el código que estaba embebido porque el foro lo parseaba mal y faltaban partes Rolling Eyes




Última edición por koreano el Jue Mar 03, 2011 7:36 am, editado 1 vez
   OcultoGalería Personal de koreanoVer perfil de usuarioEnviar mensaje privado
PauFP
Nivel 8


Edad: 33
Registrado: 31 Ene 2010
Mensajes: 862
Ubicación: Ituzaingó
Carrera: Industrial
argentina.gif
MensajePublicado: Mie Mar 02, 2011 7:34 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

koreano, según eso que posteaste vos, "toascii" es una función??


Escorpio Género:Femenino Caballo OcultoGalería Personal de PauFPVer perfil de usuarioEnviar mensaje privado
koreano
Nivel 9



Registrado: 15 Jul 2010
Mensajes: 1796

Carrera: No especificada
blank.gif
MensajePublicado: Jue Mar 03, 2011 7:33 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Por mas que sea Pascal, "eso" se llama código! Very Happy

Sí, hice una función separada que procesa cada caracter. Probablemente lé pifié con lo que tiene que hacer -exactamente- con el módulo para ajustar el ascii a 0-127 pero si tenés que editarlo está todo el algoritmo ahí ya que la función/procedimiento que procesa la matriz entera llama a esta función.

EDIT: Si la pregunta fue basada en el código que estaba en el foro, mirá el código que está en el link.


   OcultoGalería Personal de koreanoVer perfil de usuarioEnviar mensaje privado
Kartlan
Nivel 5


Edad: 42
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 03, 2011 2:03 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Ya se ya se... es completamente al pedo... pero bueno... si sirve para que alguno que hace computación entienda una mejor forma de resolver todos estos problemas de "recorrer matrices en pascal" ... bienvenido sea... todo se basa en la idea de "funciones por parametro" y tal vez par aun final es mucho mejor escribir dos veces el ciclo y hacer cosas distintas en cada uno y a la merd... pero si nadie les cuenta que esto se puede hacer cuando quieren hacer numerico se rompen la cabeza tratando de entender como hacerlo más lindo... o hacerlo siquiera...

Código:

Program final1;
Uses crt;

Const
   size = 4;
Type
   trabajador = Procedure(var x: integer);
   separador = Procedure();
   rango = 1..size;
   biarreglo = array[rango,rango] of integer;
Var
   matriz:biarreglo;

Procedure imprimirInteger(var x: integer); Begin write(x); End;
Procedure imprimirASCII  (var x: integer); Begin write (chr(x mod 128)); End;
Procedure imprimirASCIIE (var x: integer); Begin write (chr(x)); End;
Procedure espacio(); Begin write(' '); End;
Procedure tabulador(); Begin write('   '); End;
Procedure saltoDeLinea(); Begin writeln(); End;
Procedure NoOp(); Begin End;

Procedure LeerElemento(var x: integer);
Begin
   writeln('Ingrese elemento de la matriz:');
   readln(x);
   while ((x<0>255)) do
   begin
      writeln('Numero no valido. Ingrese otro:');
      readln(x);
   end;
End;

Procedure recorrerMatriz(var matriz:biarreglo; t: trabajador; sc: separador; sf:separador);
Var
   i,j: byte;
Begin
   for i:=1 to size do
   begin
      for j:=1 to size do
      begin
         t(matriz[i,j]);
         sc();
      end;
      sf();
   end;
End;

{PROGRAMA}
Begin
   {cargar Matriz;}
   recorrerMatriz( matriz, @LeerElemento, @NoOp, @NoOp);
   writeln();
   {mostrar numeros}
   recorrerMatriz( matriz, @imprimirInteger, @espacio, @saltoDeLinea );
   writeln();
   {mostrar ascii}
   recorrerMatriz( matriz, @imprimirASCII, @espacio, @saltoDeLinea );
   writeln();
   {mostrar ascii extendido}
   recorrerMatriz( matriz, @imprimirASCIIE, @espacio, @saltoDeLinea );
   Readkey;
End.


Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
nax78
Nivel 3


Edad: 46
Registrado: 15 Sep 2010
Mensajes: 33

Carrera: Sistemas
uruguay.gif
MensajePublicado: Jue Mar 03, 2011 5:32 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Kartlan escribió:
Ya se ya se... es completamente al pedo... pero bueno... si sirve para que alguno que hace computación entienda una mejor forma de resolver todos estos problemas de "recorrer matrices en pascal" ... bienvenido sea... todo se basa en la idea de "funciones por parametro" y tal vez par aun final es mucho mejor escribir dos veces el ciclo y hacer cosas distintas en cada uno y a la merd... pero si nadie les cuenta que esto se puede hacer cuando quieren hacer numerico se rompen la cabeza tratando de entender como hacerlo más lindo... o hacerlo siquiera...


Muy bueno Kartlan, gracias


Aries Género:Masculino Caballo OfflineGalería Personal de nax78Ver perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.3576s ][ Pedidos: 20 (0.2693s) ]