Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Mensaje iniciado por: netca en 25 Marzo 2011, 21:22 PM

Título: Duda pascal
Publicado por: netca en 25 Marzo 2011, 21:22 PM
 //Crea un programa que pida al usuario su contraseña. Deberá terminar cuando
//introduzca como contraseña la palabra "acceso", pero volvérsela a pedir
//tantas veces como sea necesario.

Program while;

var
   contrasena:char;
   acceso:boolean;


begin
acceso:=true;
while acceso do
   begin
   Writeln('Introduzca su contrasenaa por favor:  ');
   Readln(contrasena);
   

   if (contrasena='acceso' )then
      acceso:=false;


   end;




end.


Que es lo que estoy haciendo mal? o.o , porque si pongo acceso sigue pidiendo la contreña....
                                     
Título: Re: Duda pascal
Publicado por: Khronos14 en 26 Marzo 2011, 00:10 AM
Hola netca, te comento:

- Dependiendo del compilador que uses, utilizar la ñ como identificador de constantes, variables y funciones puede no estar soportado. La ñ forma parte del ASCII extendido, por eso puede que te de un error ahí. Delphi 2010 si que lo admite.

- La variable contraseña la estas declarando como tipo char, que sólo almacena un caracter. Deberías declararla como un array o utilizar el tipo string.

- El fallo de la condición es ese, contraseña sólo puede almacenar un caracter, por eso la condición nunca se va a cumplir.

Saludos.
Título: Re: Duda pascal
Publicado por: netca en 30 Marzo 2011, 20:57 PM
Si , gracias por responder. El problema principal es que la variable la puse en char y tenia que ponerla en string. Error de parte mia.

Saludos!
Título: Re: Duda pascal
Publicado por: d(-_-)b en 30 Marzo 2011, 21:46 PM
Una simple sugerencia por si te sirve de algo.

Una forma sencilla de permitir al programa introducir contraseña en minúscula como en mayúscula.

Código (delphi) [Seleccionar]
program User;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
Pass: String;
Acceso: Boolean;
begin
  Acceso := true;

  while Acceso do

   begin
    Writeln('Introduzca su Password por favor:');
    Readln(Pass);

   if (Pass = 'acceso') then
       Acceso := false

   else if (Pass = 'ACCESO') then
      Acceso := false;

   end;
end.


Suerte.

saludos...
Título: Re: Duda pascal
Publicado por: skapunky en 3 Abril 2011, 22:08 PM
Hecho en falta una cosa:

while Acceso do


Mientras "accéso" igual a que? en todo caso : Mientras Acceso = true

También se puede ahorrar un if, utilizando una instrucción "OR" cuando se comprueva si PASS = ACCESO.

if (Pass = 'acceso') or (Pass = 'ACCESO')  then
 Acceso := false


Nada, solamente estos dos detalles.