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
eguitler
Nivel 2


Edad: 32
Registrado: 06 Sep 2013
Mensajes: 19
Ubicación: Lanus
Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Mie Oct 30, 2013 9:58 am  Asunto: Alerta ! Negacion de boolean Responder citandoFin de la PáginaVolver arriba

Tengo un problema, para algunos seguramente muy estupido. Siempre al usar un boolean, usé en mis estructuras de control (while e if sobre todo) expresiones como: 'while bol=true do', o 'while bol=false do'.
Pero veo que eso no se usa, el profesor nos explico el uso del not, y le pregunte algunas veces porque nunca termine de entenderlo.
Si alguien me puede dar una mano seria genial para sacarme esta duda. Como es que funciona el not para negar un boolean? como se para donde corre el programa?

Un ejemplo. Estamos ahora en archivos, y nos dieron la funcion de lectura anticipada, y no entiendo el not.

Código:
Function lectura (var arch:Tarch; var reg:Treg):boolean

begin
    if (eof(arch)) then lectura:= false
        else
            begin
                read(arch,reg);
                lectura:=true;
            end;
end;


Y luego en el programa se usa asi:

Código:
Fin_Maestro := lectura(ArchMae,RegMae);
while not fin_maestro do
    begin
        :
  (proceso)
        :
    end;


Espero que se entienda, y puedan ayudarme. Desde ya muchas gracias!!!


Capricornio Género:Masculino Cabra OfflineGalería Personal de eguitlerVer perfil de usuarioEnviar mensaje privadoEnviar emailVisitar sitio web del usuario
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Mie Oct 30, 2013 10:16 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Sin entrar específicamente en Pascal.

Las estructuras de control suelen tener pinta de:

While booleano do...
If booleano then...
etc.

Cuando vos ponés una expresión "booleano = False" o "booleano = True" el operador de comparación te está devolviendo otro booleano. "booleano = True" es lo mismo que "booleano" a secas; "booleano = False" es lo mismo que "not booleano".

Cómo funciona el not, agarrá los apuntes de Pensamiento Científico y revisá la parte de lógica.

La idea de las variables booleanas es ponerles nombres representativos, donde queda claro qué significa True y qué significa False. Si "fin_maestro" no te resulta lo suficientemente clara, utilizá algo tipo "se_termino_el_archivo_maestro".

Una expresión como:

"If se_termino_el_archivo_maestro"
o
"If Not se_termino_el_archivo_maestro"

no deberías tener ni que pensarla, se lee como lenguaje natural (in English, of course); "si se terminó el archivo" o "si no se terminó el archivo".

Escribir, en cambio "if se_termino_el_archivo_maestro = True" no sólo es una redundancia sino que es bastante menos natural a la lectura y el entendimiento.

¿Responde esto tu duda?

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
_nacho_
Nivel 9



Registrado: 08 Oct 2007
Mensajes: 1271

Carrera: No especificada
uruguay.gif
MensajePublicado: Mie Oct 30, 2013 10:19 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Quizá no entienda la pregunta, pero el boolean no tenés que compararlo porque ya tiene un valor. La comparación devuelve un boolean (True si se cumple, False si no). Ponele, las siguientes tres cosas son equivalentes:

if bool = False
if bool <> True
if not bool

Cualquiera de las tres se cumple si el bool es False.

El programa que tenés ahí llama a la función lectura para leer una archivo. Si al abrir el archivo encuentra un eof (End Of File), devuelve un valor False, si no lee el archivo y devuelve un valor True. Después el programa (si no terminó el archivo) hace lo que tiene que hacer.

Ahora, no sé qué hace el programa, pero me imagino que adentro de ese while tenés que poner un Fin_Maestro := lectura(ArchMae,RegMae); para seguir leyendo los otros registros.

Saludos.

_________________

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


Edad: 32
Registrado: 06 Sep 2013
Mensajes: 19
Ubicación: Lanus
Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Mie Oct 30, 2013 11:39 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Sebastian Santisi escribió:
Sin entrar específicamente en Pascal.

Las estructuras de control suelen tener pinta de:

While booleano do...
If booleano then...
etc.

Cuando vos ponés una expresión "booleano = False" o "booleano = True" el operador de comparación te está devolviendo otro booleano. "booleano = True" es lo mismo que "booleano" a secas; "booleano = False" es lo mismo que "not booleano".

Cómo funciona el not, agarrá los apuntes de Pensamiento Científico y revisá la parte de lógica.

La idea de las variables booleanas es ponerles nombres representativos, donde queda claro qué significa True y qué significa False. Si "fin_maestro" no te resulta lo suficientemente clara, utilizá algo tipo "se_termino_el_archivo_maestro".

Una expresión como:

"If se_termino_el_archivo_maestro"
o
"If Not se_termino_el_archivo_maestro"

no deberías tener ni que pensarla, se lee como lenguaje natural (in English, of course); "si se terminó el archivo" o "si no se terminó el archivo".

Escribir, en cambio "if se_termino_el_archivo_maestro = True" no sólo es una redundancia sino que es bastante menos natural a la lectura y el entendimiento.

¿Responde esto tu duda?


_nacho_ escribió:
Quizá no entienda la pregunta, pero el boolean no tenés que compararlo porque ya tiene un valor. La comparación devuelve un boolean (True si se cumple, False si no). Ponele, las siguientes tres cosas son equivalentes:

if bool = False
if bool <> True
if not bool

Cualquiera de las tres se cumple si el bool es False.

El programa que tenés ahí llama a la función lectura para leer una archivo. Si al abrir el archivo encuentra un eof (End Of File), devuelve un valor False, si no lee el archivo y devuelve un valor True. Después el programa (si no terminó el archivo) hace lo que tiene que hacer.

Ahora, no sé qué hace el programa, pero me imagino que adentro de ese while tenés que poner un Fin_Maestro := lectura(ArchMae,RegMae); para seguir leyendo los otros registros.

Saludos.


Gracias a los dos, me sirvio mucho la explicacion de ambos para tenerlo mas claro. Yo habia perdido de viste que la comparacion me daba otro booleano, y por eso me mareaba y no entendia.
Y si nacho, antes de terminar el while va de nuevo "Fin_Maestro := lectura(ArchMae,RegMae);" pero no lo puse porque me olvidé.
Muchas gracias, en serio!!


Capricornio Género:Masculino Cabra OfflineGalería Personal de eguitlerVer perfil de usuarioEnviar mensaje privadoEnviar emailVisitar sitio web del usuario
_nacho_
Nivel 9



Registrado: 08 Oct 2007
Mensajes: 1271

Carrera: No especificada
uruguay.gif
MensajePublicado: Mie Oct 30, 2013 1:04 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Un detalle: me parece que tenés los valores booleanos al revés, porque si llegás a fin de archivo devolvés False. En ese caso, te convendría guardar el resultado en una variable "leyo_bien":

Código:

leyo_bien := lectura(ArchMae,RegMae);
while leyo_bien do
    begin
        :
  (proceso)
        :
      leyo_bien := lectura(ArchMae,RegMae);
    end;


Y una cosa más. No estoy seguro si se puede hacer en Pascal, pero muchas veces la comparación y la lectura se hacen en el mismo lugar:

Código:

while lectura(ArchMae,RegMae) do
    begin
        :
  (proceso)
        :
    end;


y así te evitás tener que llamar la función adentro y afuera del loop.

_________________

 Género:Masculino  OfflineGalería Personal de _nacho_Ver 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.2799s ][ Pedidos: 20 (0.2045s) ]