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!!!
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.
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.
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!!
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.
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.