program hki;
Uses
crt;
var
(*VARIABLES PARA EL PASAJE DE STRING INTEGER!*)
ladoDelCuadrado:integer;
cantidadDeCaracteres:integer;
auxCantidadCaracteres:integer;
multiplicador,resultado:integer;
auxNumero:string;
caracter:char;
i:integer;
polaridad:boolean;
interruptor:boolean;
cambioPolaridad:boolean;
respuesta:boolean;
(*VARIABLES PARA DIBUJAR EL CUADRADO!*)
anchoUno:integer;
cantidadDeLineas:integer;
auxAncho:integer;
BEGIN
ClrScr;
i:=1;
interruptor:= false; (* si los varoles son correctos esta en true, cuando entra a un else de algun case se apaga y asi queda*)
polaridad:= true; (* Numero positivo*)
cambioPolaridad:=false;
respuesta:= true;
write('Ingrese el lado del cuadrado: ');
readLn(auxNumero); (*Lee el numero string*)
cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;
while (interruptor <> true) do
begin
interruptor:= true;
if (cantidadDeCaracteres = 1) then
begin
caracter:= auxNumero[1];
case caracter of
'0':
begin
ladoDelCuadrado:= 0;
end;
'1':
begin
ladoDelCuadrado:= 1;
end;
'2':
begin
ladoDelCuadrado:= 2;
end;
'3':
begin
ladoDelCuadrado:= 3;
end;
'4':
begin
ladoDelCuadrado:= 4;
end;
'5':
begin
ladoDelCuadrado:= 5;
end;
'6':
begin
ladoDelCuadrado:= 6;
end;
'7':
begin
ladoDelCuadrado:= 7;
end;
'8':
begin
ladoDelCuadrado:= 8;
end;
'9':
begin
ladoDelCuadrado:= 9;
end;
else
begin
interruptor:= false;
end
end;
end
else
begin
while (i < cantidadDeCaracteres) do (*Me Falta sumar el ultimo digito itera 4 veces*)
begin
caracter:= auxNumero[1];
if (i = 1) then
begin
if (caracter = '+') then
begin
auxNumero:= copy(auxNumero,2,cantidadDecaracteres);
end;
if (caracter = '-') then
begin
auxNumero:= copy(auxNumero,2,cantidadDecaracteres);
interruptor:= false;
polaridad:= false; (* SE PONE EN MENOS*)
cambioPolaridad:= true;
end;
end;
caracter:= auxNumero[i];
(*if (interruptor <> false) then
begin*)
case caracter of
'0':
begin
if ((auxNumero[1]) <> '+') or ((auxNumero[1]) <> '-') then
begin
if (i > 1) then
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado);
end;
end
else
begin
if (i > 2) then
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado);
end;
end;
end;
'1':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 1 * resultado);
end;
'2':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 2 * resultado);
end;
'3':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 3 * resultado);
end;
'4':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 4 * resultado);
end;
'5':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 5 * resultado);
end;
'6':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 6 * resultado);
end;
'7':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 7 * resultado);
end;
'8':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 8 * resultado);
end;
'9':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 9 * resultado);
end
else
begin
respuesta:=false;
end;
end;
(*end;*)
resultado:= resultado * 10;
i:= i + 1;
end;
end;
(* SACANDO EL ULTIMO DIGITO POR FIN! *)
if (cantidadDeCaracteres <> 1) then
begin
if (cambioPolaridad = true) then
begin
cantidadDeCaracteres:= cantidadDeCaracteres + 1;
caracter:= auxNumero[cantidadDeCaracteres];
end
else
begin
caracter:= auxNumero[cantidadDeCaracteres];
end;
case caracter of
'1','2','3','4','5','6','7','8','9','0':
begin
end;
else
begin
respuesta:= false;
end;
end;
if (interruptor = true) and (respuesta = true) and (ladoDelcuadrado > 9) then
begin
if (cambioPolaridad = true) then
begin
cantidadDeCaracteres:= cantidadDeCaracteres + 1;
caracter:= auxNumero[cantidadDeCaracteres];
end
else
begin
caracter:= auxNumero[cantidadDeCaracteres];
end;
case caracter of
'1':
begin
ladoDelCuadrado:= ladoDelCuadrado + 1;
end;
'2':
begin
ladoDelCuadrado:= ladoDelCuadrado + 2;
end;
'3':
begin
ladoDelCuadrado:= ladoDelCuadrado + 3;
end;
'4':
begin
ladoDelCuadrado:= ladoDelCuadrado + 4;
end;
'5':
begin
ladoDelCuadrado:= ladoDelCuadrado + 5;
end;
'6':
begin
ladoDelCuadrado:= ladoDelCuadrado + 6;
end;
'7':
begin
ladoDelCuadrado:= ladoDelCuadrado + 7;
end;
'8':
begin
ladoDelCuadrado:= ladoDelCuadrado + 8;
end;
'9':
begin
ladoDelCuadrado:= ladoDelCuadrado + 9;
end
end;
end
else
begin
writeln('No ingreses valores torpes o(-.-)o: ');
write('Ingrese el lado del cuadrado: ');
readLn(auxNumero);
i:=1;
interruptor:= false;
polaridad:= true; (* Numero positivo*)
cambioPolaridad:=false;
respuesta:= true;
cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;
end;
end
else (*SI TIENE 1 CARACTER*)
begin
if(interruptor = false) then
begin
writeln('No ingreses valores torpes o(-.-)o: ');
write('Ingrese el lado del cuadrado: ');
readLn(auxNumero);
i:=1;
interruptor:= false;
polaridad:= true; (* Numero positivo*)
cambioPolaridad:=false;
respuesta:= true;
cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;
end;
end;
end; (*FIN WHILE*)
(*YA TENDRIA EL VALOR INTEGER*)
writeln('Valor: ',ladoDelCuadrado);
(*ESCRITURA DEL CUADRADO!!!! POR FIN -.- *)
auxAncho:=0;
anchoUno:= 0;
cantidadDeLineas:=1;
if (ladoDelCuadrado = 1) then
begin
writeLn('*');
end
else
begin
while (anchoUno <> ladoDelCuadrado) do
begin
write('*');
anchoUno:= anchoUno + 1;
end;
anchoUno:= 0;
writeLn(' ');
while ((ladoDelCuadrado >= 3) and ( cantidadDeLineas <= (ladoDelCuadrado - 2))) do
begin
write('*');
while (auxAncho < (ladoDelCuadrado -2)) do
begin
write(' ');
auxAncho:= auxAncho + 1;
end;
auxAncho:= 0;
writeLn('*');
cantidadDeLineas:= cantidadDeLineas + 1;
end;
while (anchoUno <> ladoDelCuadrado) do
begin
write('*');
anchoUno := anchoUno + 1;
end;
writeLn(' ');
end;
readkey;
END.