Ayuda Pascal

yimorz

Hola, necesito hacer un programa que lea un patron(número), y en un determinado rango que da el usuario, que diga cuantos numeros contienen ese patron
Por ejemplo:
Patron=3
Rango Inferior=1
Rango Superior=40
Los numeros serian:3,13,23,30,31,32,33,34,35,36,37,38 y 39

Con rangos inferiores a 100 me sale pero si pasan del 100 ya no.

lo q tng es esto:
contador:=0;
WHILE rangoinf<=rangosup DO
IF (rangoinf=patron) OR (rangoinf DIV 10=patron) OR (rangoinf MOD 10 = patron) THEN
contador:=contador+1;
rangoinf:=rangoinf+1;
ELSE
rangoinf:=rangoinf+1;

Se que lo que tengo que hacer es coger el resto entre 10, y a partir de ahi volver a dividir hasta que me salga el patron que es, xo no se si es metiendo otro WHILE o como mierdas

Grax.

LOc0

Un bucle for para comprobar TODOS los números empezando en inferior hasta superior. Dentro de ese for metes un while que vaya diviendo el número por el que vayas del for por 10 para ver si coincide el resto con el patrón (o hasta que ya no puedas dividir más por 10).

Salu2 ;)

grivcon

#2 En el caso del numero 3 con el patrón 3, al ser menor que 10, el "resto" seria el propio 3 no? (Al igual que todos los numeros menores que 10)

FreemAN-

Vas leyendo todos los números, pasando a string cada uno de ellos con Str(i,s), donde "i" es el entero y "s" el string. Una vez hecho ésto, recorres ese string con otro bucle y vas comparando carácter a carácter con el '3' (Str(patron,patronStr); patronStr[0]). Si lo encuentras incrementas el contador.

Espero que te sirva :\

Editado: Ahora que lo pienso, no creo que lo que he puesto sirva para "patrones" de más de una cifra, ya que se convertiría en un follón :. En C++ sí se podría :s

MTX_Anubis

puedes hacerlo dentro de otro while que compruebe los dígitos dentro del número, luego comprobar por qué se ha salido, si porque el resultado es 0 o porque contiene el patron. Si contiene el patrón lo muestras.

O puedes hacer una función recursiva que haga eso que son más chulas.

bool contienePatron (int num, int patron){
  if (num==0)return false; 
  else  (num%10== patron) return true; 
  else return contienePatron(num/10,patron); 
}

-Si el numero es 0, o lo que es lo mismo, ya no quendan digitos por comprobar, es que no contiene el patron, se devuelve false.
-Si hay números, sacamos las unidades del número y comprobamos contra el patron
-Si la unidad no era igual que el patron, llamamos a la funcion de nuevo quitando el último dígito.

El primer if se puede cambiar con el segundo, si los cambias te cogerá el 0 también si es el patrón y lo pasas como primer número.

y ahora el final

while (rangoinf<=rangomax){
  if (contiene patron(rangoinf,patron)) cout <<rangoinf;
  rangoinf++;
}

Y si no lo quieres hacer con recursividad:

//Ya tienes el patron, rangoinf y rangomax

bool encontrado=false;
int numero=0;

while (rangoinf<=rangomax){
  numero=rangoinf;
  while ((numero>0)&&(!encontrado)){
     if ((numero%10)==patron) {
        encontrado=true;
        cout <<rangoinf;
     }
     else numero = numero/10;
  }
  encontrado=false;
  rangoinf++;
}

O pon en el segundo while esto y te ahoras una variable (o_0)):


while ((numero>0)&&((numero%10)!=patron))    numero = numero/10;

if (numero>0) cout <<rangoinf;

Y si quieres contener el 0 pues un >= en el segundo while

yimorz

La idea que yo tengo es la de #2, xo con un while dentro del if, lo q no se es como ponerlo

WHILE rangoinf<=rangosup THEN
IF (rangoinf DIV 10=patron) OR (rangoinf MOD 10=patron) THEN
contador:=contador+1;
rangoinf:=rangoinf+1;
ELSE

y es aqui lo q no se lo que tengo que poner en el ELSE, es decir, creo que al valor rangoinf MOD 10 le deberia de asignar una variable,p.e aux (aux:=rangoinf MOD 10) y luego ese aux no se como lo tendria q hacer para que siguiese dividiendo, por ejemplo el 130 no lo leeria, xk el resto es 0,suponiendo que el patron sea 3, asi q me deberia de quedar con el cociente y el cociente dividirlo entre 10 para que me diese el patron 3, xo no se como hacerlo :S

Usuarios habituales

  • yimorz
  • MTX_Anubis
  • FreemAN-
  • grivcon
  • LOc0