Problema con ejercicio Pascal

dorno

Buenas estoy realizando un ejercicio de lenguaje pascal i tengo que realizar, pero no hay manera, nose como hacerlo.

Tengo que:

S1 es un String
S2 es un String

Ahora tengo que hacer un true/false en funcion de que la ultima letra de S1 esté 2 o más veces dentro de la string de S2

Estoy probando cosas xD pero por el momento tengo esto:

writeln(El ultimo caracter de s1 se encuentra almenos 2 veces dentro de s2:' ,((s1[length(s1)]s2)>2) and ([lenght(s1)]s2)<2));

Si alguien es tan amable de ayudarme se lo agradeceria!

B

Hace tiempo que no toco Pascal.

S1= candena1
S2= cadena2

Cuento lo que hay en la cadena 1:

longitud = Length (S1)

Coges la ultima letra de S1 utilizando la longitud de la cadena:

letra = S1[longitud]

HASTA AQUI ES LO QUE YA TIENES HECHO

Usa una variable contador.
Ahora te toca recorrer la cadena2 de principio a fin (Length (S2)), y sabiendo la longitud pues recorres la cadena, comparando cada elemento de s2 con la letra, si coinciden pues sumas uno al contador, cuando termines de recorrer toda la cadena solo tienes que comprobar si contador => 2 y yasta.

PD: no te pongo el codigo no xq sea un perraco, sino porque se supone que ya deberias saber utilizar un for.
PD2: ahora mismo no me acuerdo si el primer elemento de una cadena es S1[0] o S1[1] compruebalo

1 respuesta
dorno

#2 a tanto no hemos llegado xD entiendo lo que me quieres decir pero nose como aplicarlo.

ahora he probado esto: (pos(s1[lenght(s1)],s2)mod 2=0) and (pos(s1[lenght(s1)],s2)<>0))

pero me da un error dice que no ha encontrado el identificador lenght...

2 respuestas
m0rG

#3

Has puesto lenght en lugar de length que es lo correcto (longitud en inglés). Por eso Pascal no reconoce la función y lo interpreta como un identificador.

B

#3

yo siempre e declarado todo en variables, declara una variable para longitud otra para el caracter etc, asi te liaras menos.

Utiliza:

sino: boolean;
contador: int;
i: int;

 {esto recorre cadena2 letra a letra}
for i := 1 to LongitudCadena2 do
    if cadena2[i]= letra then
         contador:= contador +1;

If contador >= 2 then sino:=true else sino:=false

No te fies de la sintaxis porque hace porlomenos 5 años que no gasto Pascal xDD xo creo que era asi

2 respuestas
tirano

Pascal lo di hace 4 años, pero creo recordar que la longitud de la cadena estaba en la posicion 0 del string es decir en cadena1[0]

#5 Seria mejor que lo hiciera con un bucle while para que al encontrar dos veces la misma letra ya no siguiera haciendo iteraciones en el bucle

i:=1;
contador:=0;
encontrado:=false;
while not encontrado and i<=cadena2[0] begin
     if cadena2[i]=letra then begin
           contador := contador +1;
           if contador=2 then
               encontrado:=true;
          end;
end;
2 respuestas
B

#6 Correcto si, xo y si luego te piden que digas las veces que aparece la letra? xDD

Como decia lo de 2 veces o mas, pues con un FOR que lo recorres todo, xo si, si no hay necesidad de recorrererlo todo utilizando el while te ahorras recorrer toda la cadena si las 2 primeras letras son la que buscas jeje.

1 respuesta
dorno

#5 #6 #7 Gracias! veré que puedo hacer ya que estas funciones no me las han dado en clase

B

No? La otra manera es utilizar solo if, xo es inviable ya que si la cadena2 cambia te fataran o te sobraran linias d codigo.

Xcierto a estas alturas de curso y todavia sin dar bucles? Que haveis exo asta ahora?

1 respuesta
dorno

#9 Si... xD la funcion if no me la deja usar para esta practica, finalmente he resuelto el problema asi:

n4:=pos(s1[length(s1)],s2);
n5:=copy (s2,n4+1,length(s2));
n6:=pos(s1[length(s1)],n5);

(n4<>0) and (n6<>0));

1 respuesta
B

#10
Ajjajaja que weno, no se me havia ocurrido xDD mira que es rebuscado e? xD.

Usuarios habituales