Pascal/Turbo Pascal - Programa adivina

 
Vista:

Programa adivina

Publicado por david (9 intervenciones) el 22/11/2012 19:57:27
Hola. He hecho el siguiente programa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program adivinaloquehago;
uses crt;
var ini, fin : byte;
var cadena,cadenabis:string;
 
BEGIN
clrscr;
write ('Escribe un texto: ');
readln(cadena);
fin:=length(cadena);
cadenabis[0]:=cadena[0];
for ini:=1 to fin do
cadenabis[fin-ini+1]:=cadena[ini];
if(cadena=cadenabis) then
	writeln('La cadena es OK')
else
	writeln('La cadena no es ok');
END.


Este programa lo que hace es que si el texto que introducimos esta formado por un mismo caracter, el programa nos dira que es OK, en cambio, si introducimos un caracter distinto, nos dira que no es OK.

ejemplo: ('a a a a a a ') --> es OK
('a a a a b a ')--> No es ok

Mi problema es que quiero reescribir el bucle for utilizando solo 1 variable. con la variable "ini" ya es suficiente pero no se me ocurre como hacerlo.
gracias
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

Programa adivina

Publicado por ramon (2158 intervenciones) el 22/11/2012 22:50:40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{Podía servir así}
 
program adivinaloquehago;
uses crt;
var ini, fin : byte;
var cadena,cadenabis:string;
 
BEGIN
clrscr;
write ('Escribe un texto: ');
readln(cadena);
fin := 0;
for ini := 2 to Length(cadena) do
begin
 if ord(cadena[ini - 1]) mod ord(cadena[ini]) <> 0 then
 fin := 2;
 end;
    if fin = 0 then
    writeln('La cadena es OK')
  else
   writeln('La cadena no es ok');
   readln;
  END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Programa adivina

Publicado por david (9 intervenciones) el 22/11/2012 23:07:37
Muchas gracias Ramon. La respuesta es totalmente buena, pero lo que me interesa es hacer el bucle for sin usar la variable "fin". Todas las demas variables las puedo utilizar. Mi complicacion esta en no usar la variable "fin".

Gracias de todos modos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa adivina

Publicado por ramon (2158 intervenciones) el 23/11/2012 00:44:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{Podía servir así}
 
program adivinaloquehago;
uses crt;
var ini, fin : byte;
var cadena,cadenabis:string;
 
BEGIN
clrscr;
write ('Escribe un texto: ');
readln(cadena);
for ini := 2 to Length(cadena) do
begin
if ord(cadena[ini - 1]) mod ord(cadena[ini]) <> 0 then
break;
end;
if ini = Length(cadena) then
writeln('La cadena es OK')
else
writeln('La cadena no es ok');
readln;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Programa adivina

Publicado por emerson Palacios (2 intervenciones) el 23/11/2012 01:58:08
es similar a mi solucion solo que podria habr un error en el if ini=lenght(cadena) pues si el bucle llega hasta el ultimo elemento y quiza ahi esta el elemento diferente ini sera igual a lenght pero los elementos pueden ser diferenteeees.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa adivina

Publicado por ramon (2158 intervenciones) el 23/11/2012 16:25:14
{Corregido el posible error de la ultima entrada pero eso lo tenias que ver tu yo solo pongo ejemplos
de como el afinar es vuestro suerte}

program adivinaloquehago;
uses crt;
var ini, fin : byte;
var cadena,cadenabis:string;

BEGIN
clrscr;
write ('Escribe un texto: ');
readln(cadena);
for ini := 2 to Length(cadena) do
begin
if ord(cadena[ini - 1]) mod ord(cadena[ini]) <> 0 then
begin
ini := ini - 1;
break;
end;
end;
if ini = Length(cadena) then
writeln('La cadena es OK')
else
writeln('La cadena no es ok');
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Programa adivina

Publicado por emerson Palacios (2 intervenciones) el 23/11/2012 00:09:46
No veo la manera de hacerlo sin utilizar algo que limite el bucle si embargo podrias hacer algo como esto solo con 2 variables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program adivinaloquehago;
uses crt;
var x, : byte;
var cadena,string;
 
BEGIN
clrscr;
write ('Escribe un texto: ');
readln(cadena);
for X:=2 to length(cadena)  do
if(cadena[1]!= cadena[x]) then -- no se pascal pero la condicion debe ser: "Si cadena[1]  diferente de                                caadena[x]"
	X:=length(cadena) + 1 ; -- con esto rompees el for y a la vez sabes que no es ok
--esto iria mas abajo despues del for
if (x=length(cadena) + 1) then
        writeln('La cadena no es ok');
else
        writeln('La cadena  es ok');
END.


seria algo asi tu ya lo acomodas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar