Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
ayuda urgente!!!
Autor Mensaje
Emi03 Sin conexión
Militante
'invertir en saber, es saber i...
***

Ing. en Sistemas
Facultad Regional Resistencia

Mensajes: 99
Agradecimientos dados: 52
Agradecimientos: 2 en 2 posts
Registro en: Nov 2012
Mensaje: #1
ayuda urgente!!! Dudas y recomendaciones Algoritmos y Estructuras de Datos
hola! soy nueva en este foro y necesito ayuda estoy trabada con un ejercicio que me piden que lo realice en turbo pascal tengo tiempo de entregar el 18/11 a las 23.55 hs. Esta es la consiga:

"Generar una lista doblemente encadenada que cargue una palabra letra por letra (cada nodo es un caracter) mediante prim como pila y luego verifique si dicha palabra es un palíndrome."
ejemplo: TOPAPOT es palíndrome
CARACAS no es palíndrome

esto es lo que tengo hecho en pascal:

program PALO;
type
lista=^nodo;
nodo=record
letra:string;
ant:lista;
sig:lista;
end;

listadoble=record
pri:lista;
ult:lista;
end;

var
a:string;
prim,ult,q,r:lista;
palindrome:boolean;

begin
prim:=nil;
write ('ingrese letra: '); readln (a);
while (a<>'') do begin
new(q);
q^.letra:=a;
q^.ant:=nil;
if (prim=nil) then begin
q^.sig:=nil;
ult:=q;
end else begin
q^.sig:=prim;
prim^.ant:=q;
end;
prim:=q;
write ('ingrese letra: '); readln (a);
end;

q:=prim; r:=ult;
if (q^.letra=r^.letra) or (r^.sig=q) then
palindrome:=true
else begin
if (q^.letra<>r^.letra) then
palindrome:=false;
end;

if palindrome then begin
writeln ('la palabra es palindromo: ');
end else begin
writeln ('la palabra no es palindromo: ');
q:=q^.sig;
end;
end.

*cuando lo hago con el dato tipo string funciona pero en el ejercicio me pide que sea de tipo caracter y cuando lo hago entra en un bucle infinito.....agradecería que alguien me ayude porque no estoy encontrando el error......

gracias!
14-11-2012 15:58
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #2
RE: ayuda urgente!!!
En que parte te entra en un bucle infinito ?

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
15-11-2012 23:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Marvelek Sin conexión
Empleado del buffet
Nada por aqui...
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 5
Agradecimientos: 4 en 3 posts
Registro en: Jun 2012
Mensaje: #3
RE: ayuda urgente!!!
No podés hacerlo para que termine con un 0?

begin
prim:=nil;
write ('ingrese letra: '); readln (a);
while (a<>'0') do begin
new(q);
q^.letra:=a;
q^.ant:=nil;
if (prim=nil) then begin
q^.sig:=nil;
ult:=q;
end else begin
q^.sig:=prim;
prim^.ant:=q;
end;
prim:=q;
write ('ingrese letra: '); readln (a);
end;
16-11-2012 02:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #4
RE: ayuda urgente!!!
Seria mejor si sube el codigo posta que tiene que entregar, y ahi revisarlo.

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
16-11-2012 09:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Emi03 Sin conexión
Militante
'invertir en saber, es saber i...
***

Ing. en Sistemas
Facultad Regional Resistencia

Mensajes: 99
Agradecimientos dados: 52
Agradecimientos: 2 en 2 posts
Registro en: Nov 2012
Mensaje: #5
RE: ayuda urgente!!!
hola chicos! en el código que subí primero me faltaba hacer el recorrido para verificar si la palabra es o no palíndromo, eso lo agregué pero ahora el problema es cuando ingreso una palabra como 'ana' que es palíndromo y entra en un bucle infinito escribiendo que la palabra es palíndromo.

les adjunto el código que tengo hecho para que lo revisen......

program PALO;
type
lista=^nodo;
nodo=record
letra:char;
ant:lista;
sig:lista;
end;

var
a:char;
prim,ult,q,r:lista;
palindrome:boolean;

begin
prim:=nil;
write ('ingrese letra: '); readln (a);
while (a<>'')and (a<>'.') do begin
new(q);
q^.letra:=a;
q^.ant:=nil;
if (prim=nil) then begin
q^.sig:=nil;
ult:=q;
end else begin
q^.sig:=prim;
prim^.ant:=q;
end;
prim:=q;
write ('ingrese letra: '); readln (a);
end;

q:=prim; r:=ult;
while (q<>r) do begin
if (q^.letra=r^.letra) or (r^.sig=q) then
palindrome:=true
else begin
if (q^.letra<>r^.letra) then
palindrome:=false;
end;

if palindrome then begin
writeln ('la palabra es palindromo: ');
end else begin
writeln ('la palabra no es palindromo: ');
q:=q^.sig;
end;
end;
readln;
end.


desde ya muchas gracias chicos! roll
16-11-2012 13:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #6
RE: ayuda urgente!!!
while (q<>r) do
begin
if (q^.letra=r^.letra) or (r^.sig=q) then
palindrome:=true
else begin
if (q^.letra<>r^.letra) then
palindrome:=false;
end;

if palindrome then begin
writeln ('la palabra es palindromo: ');
end else begin
writeln ('la palabra no es palindromo: ');
q:=q^.sig;
end;
end;

Ahi esta el error, esta dentro del while, por eso te lo imprime infinitas veces.

Ademas tendrias que validar que no se te acaben los nodos. Sino q:=q^.sig tira error cuando q=nil

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
(Este mensaje fue modificado por última vez en: 16-11-2012 13:22 por el pibe.)
16-11-2012 13:20
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Emi03 Sin conexión
Militante
'invertir en saber, es saber i...
***

Ing. en Sistemas
Facultad Regional Resistencia

Mensajes: 99
Agradecimientos dados: 52
Agradecimientos: 2 en 2 posts
Registro en: Nov 2012
Mensaje: #7
RE: ayuda urgente!!!
a ver si entendí decís que coloque:

while (q<>nil) and (q<>r) do begin

así? o como?Confused
16-11-2012 13:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #8
RE: ayuda urgente!!!
Tendria que revisar la logica mas a fondo, creo que vos recorres hasta el ultimo nodo, asi que creo que no tendrias problema. De todas formas ponelo asi, mas seguridad.


No te olvides de lo importante, sacar esto de dentro del while:

if palindrome then begin
writeln ('la palabra es palindromo: ');
end else begin
writeln ('la palabra no es palindromo: ');
end;


Lo que tendrias que hacer, es agregarle otra bandera, si entra por el else setearla en falso. Y eso nunca cambia. Y al final del programa te fijas si esa bandera esta en true o false, y ahi informas si es un palindromo. En pseudocodigo barato:


bandera:=true;
while (mi linda condicion) do begin
logica;

if (condicion de palindromo) then
logica;
else begin
logica;
bandera:=false; <------------ Al modificarse solo por el false, aseguras de que no se te vuelva a poner en true
end;

mas_logica;

end; (del while)

if (bandera) then writeln('Es un palindromo');
else writeln('No es un palindromo');

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
(Este mensaje fue modificado por última vez en: 16-11-2012 16:38 por el pibe.)
16-11-2012 16:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Emi03 Sin conexión
Militante
'invertir en saber, es saber i...
***

Ing. en Sistemas
Facultad Regional Resistencia

Mensajes: 99
Agradecimientos dados: 52
Agradecimientos: 2 en 2 posts
Registro en: Nov 2012
Mensaje: #9
RE: ayuda urgente!!!
hola! mirá este es el programa definitivo, ingresa letras hasta que sea distinto de punto cuando es un punto me dice si la palabra es palindromo o no. Ayer le consulté a mi profesor de teoría y me dijo que tengo que ver la condición de que no se cruzen los punteros....lo compilé y funciona sólo el tema de la condición de los punteros no sé como plantearlos....

program PALO;
type
lista=^nodo;
nodo=record
letra:char;
ant:lista;
sig:lista;
end;

var
a:char;
prim,ult,q,r:lista;
palindrome:boolean;

begin
prim:=nil;
write ('ingrese letra: '); readln (a);
while (a<>'.') do begin
new(q);
q^.letra:=a;
q^.ant:=nil;
if (prim=nil) then begin
q^.sig:=nil;
ult:=q;
end else begin
q^.sig:=prim;
prim^.ant:=q;
end;
prim:=q;
write ('ingrese letra: '); readln (a);
end;

q:=prim; r:=ult;
while (q<>r) do begin
if (q^.letra=r^.letra) or (r^.sig=q) then
palindrome:=true
else begin
palindrome:=false;
end;
q:=q^.sig;
r:=r^.ant;
end;

if palindrome then begin
writeln ('la palabra es palindromo: ');
end else begin
writeln ('la palabra no es palindromo: ');
end;
readln;
end.
(Este mensaje fue modificado por última vez en: 17-11-2012 09:24 por Emi03.)
17-11-2012 09:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #10
RE: ayuda urgente!!!
Que no se cruzen los punteros esta planteado cuando haces while (q<>r) do begin


De todas formas me parece que el programa ese pincha.

Proba la siguiente palabra:

abbbbbbc

Deberia decirte que no es palindromo, sin embargo sospecho que te va a decir que si.

Si te dice que no. Listo, el programa ya esta.

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
17-11-2012 11:31
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Emi03 Sin conexión
Militante
'invertir en saber, es saber i...
***

Ing. en Sistemas
Facultad Regional Resistencia

Mensajes: 99
Agradecimientos dados: 52
Agradecimientos: 2 en 2 posts
Registro en: Nov 2012
Mensaje: #11
Big Grin RE: ayuda urgente!!!
hola! probé y me dice que no es palíndromo.....muchas gracias chicos por contestar!!!!
17-11-2012 13:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
el pibe Sin conexión
Presidente del CEIT
Benderista
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.235
Agradecimientos dados: 5
Agradecimientos: 115 en 32 posts
Registro en: May 2011
YouTube
Mensaje: #12
RE: ayuda urgente!!!
De nada. Suerte

[Imagen: tolivi10.jpg]
2 Veces congresista por eArgentina
13 Veces congresista por eBolivia
1 Vez Emperador por eBolivia
Ex-Ministro de Salud eArgentino

[Imagen: Necromancer616.png]
17-11-2012 13:34
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)