Pascal/Turbo Pascal - Problema solucion procedimiento

 
Vista:

Problema solucion procedimiento

Publicado por RDarius (1 intervención) el 28/11/2021 11:32:20
Estoy intentando realizar un programa del ahorcado en Pascal,
en el procedimiento Adivinar;
consigo que si hay coincidencia en letra y c{i] en copia se guarde en la posicion y la letra
pero no consigo encontrar como: aunque acierte no me lo cuente por fallos, y dos no encuentro la manera
de que la letra se guarde en array[1..7] y cuente como errores;
program ahorcado;

const
INI = 1;
FALLOS = 7; //maximo de intentos
type
TCadena = string[40];
TLetras = array [INI..FALLOS] of char;
var
i,j,k: integer; //las declaro globlales para no ser reiterativo

{==================================}

procedure CrearCadena (VAR c: TCadena);
begin
writeln('Dame una cadena');
readln(c);

end;

{=========================================}

procedure DownCase(VAR c: TCadena);
begin
for i:= INI to length(c) do
if c[i] = UPCASE(c[i]) then
c[i] := lowercase(c[i])
end;

{======================================}


procedure CrearCadenaAdivinar(c: TCadena; VAR copia: TCadena);

begin
copia := c;
for i := INI to length(c) do
if c[i] = ' ' then
copia [i] := ' '
else
copia [i] := '*';
end;

{========================================}
{Adivinando:
* PreC: string c, string copia pasado por referencia
* Proceso: peguntar usuario por letras y comprobar si esta en c, si esta
* intercambiar *, por letra en copia, ir mostrando los intentos y letras
* que se han introducido
* PostC: condiciones salida si ha llegado hasta el limite de fallos o hay
* coincidencia de c y copia.}

procedure Adivinando (c: TCadena; VAR copia: TCadena);

var
letras : TLetras;
letra : char;
sum: integer;
exito : boolean;

begin
sum:=0;

repeat
writeln('Dame una letra');
readln(letra);
for i:= INI to length(c) do begin
if (letra = c[i]) then
copia[i] := letra //Consigo que muestre la coincidencia
// pero me contabiliza un error a pesar de acertar
//NO cosigo que siga iterando, a pesar c distinta copia,
//ya que solo he acertado una letra.

end;
if (c = copia) then
exito := true
else
for k := INI to FALLOS do
letras[k] := letra;
writeln('letras intro ', letras[k]);
sum := succ(sum);
writeln(' Fallos ', sum);


until((exito) or (sum <= 7));

end;
{==========================================}


procedure Mostrar (c, copia: TCadena);

begin
for i:= INI to length(c) do
write(c[i], ' ');
writeln;

for i:= INI to length(copia) do
write(copia[i], ' ');
writeln;
end;

{===================================================}

procedure juego; //Error Illegal expression
{
Fatal: Syntax error, ";" expected but "indentier JUEGO" found
el error estaba en el procedimiento anterior, no se habia realizado
* correctamente la sintasis anidada de for}
var
c: TCadena;
copia: TCadena;
letras: TLetras;

begin
CrearCadena(c);
DownCase(c);
CrearCadenaAdivinar(c, copia);
Mostrar(c,copia);
Adivinando(c, copia);
Mostrar(c, copia);

end;


begin {programa principal}
Juego;
readln;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder