• Domingo 22 de Diciembre de 2024, 22:49

Autor Tema:  Practica necesito ....  (Leído 1683 veces)

fjmc22

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Practica necesito ....
« en: Jueves 15 de Enero de 2009, 18:29 »
0
Bueno mi problema es que al compilar mi programa me pone fatal: Unexpected end of file, y no se porque. Os voy a poner lo que me pide la practica y lo que tengo hecho, y por favor me la podeis mirar haber en que fallo, o algo que tenga mal, muchas gracias.

Lo que pide:

Un número entero está formado por secuencias de dígitos en un determinado orden. Si analizamos esas secuencias de dígitos podremos observar como, cada número, está formado por una cantidad de otros dígitos más pequeños que
denominaremos patrones. Por ejemplo:
Dado el patrón 13
Podemos deducir que entre 1 y 100 solo hay un número que lo contiene, esto es, el 13.
Sin embargo, entre 100 y 1000 hay 19 que lo contienen. Así, por ejemplo, el 131 y el 213.
Entre 1000 y 10000 hay 279 números que contienen el patrón 13.
Entre 10.000 y 100.000 encontramos 3671 números que repiten el patrón.
Hay que tener en cuenta que solo contabilizamos el patrón si se encuentra unido, es decir, 103 no contiene el patrón 13 sin embargo, 133 si contiene dicho patrón.
Práctica:
Dada esta información, se pide que desarrolléis un programa, que utilizará los subprogramas que creáis necesarios, que permita:
- Determinar cuántos enteros en un rango dado contienen un determinado patrón
- Mostrar los enteros comprendidos en ese rango dado que contienen dicho patrón
- Mostrar, en caso de que los haya, los dos números mayores, dentro del rango dado, que contienen dicho patrón. En caso de que solo exista un número que contenga el patrón, el primero tendrá un valor negativo (-1) y
el segundo contendrá dicho número. En caso de que no exista ningún número, ambos mostrarán un número negativo (-1).
Para ello el programa solicitará que el usuario elija la opción que desea ejecutar
y, a continuación, pedirá:
- Un entero positivo n que indicará el patrón y que puede tener desde 1 a 5
cifras y
- Dos enteros a y b (cuyos valores oscilarán entre 1 y MAXINT y siendo a menor que b).
A modo de ayuda, se presentan varios ejemplos de ejecución del programa (en negrita los mensajes mostrados por el programa y en cursiva los datos
introducidos por el usuario).

Codigo:
Código: Text
  1.  
  2. PROGRAM Pobligatoria;
  3.  
  4. VAR
  5. inicio,fin,patron,opcion:integer;
  6.  
  7. FUNCTION comprobar(x:integer):boolean;
  8. VAR
  9.  aux1,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9:integer;
  10. BEGIN
  11.   CASE x OF
  12.           1..9:BEGIN
  13.                   IF x=patron THEN
  14.                      comprobar:=true;
  15.                END;
  16.  
  17.         10..99:BEGIN
  18.                   IF patron<10 THEN
  19.                      aux1:= x div 10;
  20.                      aux2:= aux1 mod 10;
  21.                      IF (x=aux1) OR (x=aux2) THEN
  22.                         comprobar:=true;
  23.                      END;{IF}
  24.                    END;{IF}
  25.                   IF (patron>9) AND (x=patron) THEN
  26.                       comprobar:=true;
  27.                   END;{IF}
  28.                 { END;{CASE 10..99}
  29.       100..999:BEGIN
  30.                 IF patron<10 THEN
  31.                   aux1:= x div 10;
  32.                   aux2:= aux1 mod 10;{el valor ultimo}
  33.                   aux3:= aux1 div 10;{el primer valor}
  34.                   aux4:= aux3 mod 10;{el valor central}
  35.                   IF (x=aux2) OR (x=aux3) OR (x=aux4) THEN
  36.                       comprobar:=true;
  37.                   END;{IF}
  38.                 END;_{IF patron<10}
  39.                 IF (patron>=10) AND (patron<=99) THEN
  40.                    aux1:= x div 10; {parte izquierda}
  41.                    aux2:= x div 100;
  42.                    aux3:= aux2 mod 100; {parte derecha}
  43.                    IF (x=aux1) OR (x=aux3) THEN
  44.                    comprobar:=true;
  45.                    END; {IF}
  46.                 END;{IF patron entre 10 hasta 99}
  47.                 IF (patron>99)  AND (patron<1000) AND (patron=x) THEN
  48.                    comprobar:=true;
  49.                 END;
  50.  
  51.     1000..9999:BEGIN
  52.                 IF patron<10 THEN
  53.                     aux1:= x div 1000; {el primer valor}
  54.                     aux2:= x div 10;
  55.                     aux3:= aux2 mod 10; {el cuarto valor}
  56.                     aux4:= aux2 div 10;
  57.                     aux5:= aux4 mod 10; {el tercer valor}
  58.                     aux6:= aux4 div 10;
  59.                     aux7:= aux4 mod 10; {el segundo valor}
  60.                     IF (x=aux1) OR (x=aux7) OR (x=aux5) OR (x=aux3) THEN
  61.                         comprobar:=true;
  62.                     END;
  63.                 END; {if del patron menor de 10}
  64.                 IF (patron>=10) AND (patron<=99) THEN
  65.                     aux1:= x div 100;{2 primeros numeros}
  66.                     aux2:= aux1 mod 100; {2 ultimos numeros}
  67.                     aux3:= x div 10;
  68.                     aux4:= aux3 div 100;
  69.                     aux5:= aux4 mod 100; {2 numeros del centro}
  70.                     IF (x=aux1) OR (x=aux2) OR (x=aux5) THEN
  71.                        comprobar:=true;
  72.                     END;
  73.                 END;{if de patron 10..99}
  74.                 IF (patron>=100) AND (patron<1000) THEN
  75.                    aux1:= x div 10; {los 3 primeros numeros}
  76.                    aux2:= x div 1000;
  77.                    aux3:= aux2 mod 1000; {los 3 ultimos numeros}
  78.                    IF (x=aux1) OR (x=aux3) THEN
  79.                       comprobar:=true;
  80.                    END;
  81.                 END; {if de patron 100..999}
  82.                 IF (patron>=1000) AND (patron<=9999) THEN
  83.                    IF patron=x THEN
  84.                       comprobar:=true;
  85.                    END;
  86.                 END;
  87.  
  88.   10000..32767:BEGIN
  89.                IF (patron>=0) AND (patron<=9) THEN
  90.                   aux1:= x div 10;
  91.                   aux2:= aux1 mod 10; {quinto numero}
  92.                   aux3:= aux1 div 10;
  93.                   aux4:= aux3 mod 10; {cuarto numero}
  94.                   aux5:= aux3 div 10;
  95.                   aux6:= aux5 mod 10; {tercer numero}
  96.                   aux7:= aux5 div 10;
  97.                   aux8:= aux7 mod 10; {segundo numero}
  98.                   aux9:= aux7 div 10; {primer numero}
  99.                   IF (x=aux2) OR (x=aux4) OR (x=aux6) OR (x=aux8) OR (x=aux9) THEN
  100.                       comprobar:=true;
  101.                   END;
  102.                END;
  103.                IF (patron>=10) AND (patron<=99) THEN
  104.                   aux1:= x div 100;
  105.                   aux2:= aux1 mod 100; {2 ultimos numeros}
  106.                   aux3:= x div 1000; {2 primeros numeros}
  107.                   aux4:= x div 10;
  108.                   aux5:= aux4 div 100;
  109.                   aux6:= aux5 mod 100; {2 penultimos}
  110.                   aux7:= aux1 div 100;
  111.                   aux8:= aux7 mod 100; {el 2 y 3}
  112.                   IF (x=aux2) OR (x=aux3) OR (x=aux6) OR (x=aux8) THEN
  113.                      comprobar:=true;
  114.                   END;
  115.                END;
  116.                IF (patron>=100) AND (patron<=999) THEN
  117.                   aux1:= x div 100; {numeros 123}
  118.                   aux2:= x div 1000;
  119.                   aux3:= aux2 mod 1000; {numeros 345}
  120.                   aux4:= x div 10;
  121.                   aux5:= aux4 div 1000;
  122.                   aux6:= aux5 mod 1000; {numeros 234}
  123.                   IF (x=aux1) OR (x=aux3) OR (x=aux6) THEN
  124.                       comprobar:=true;
  125.                   END;
  126.                END; {if de entre 100 y 999}
  127.                IF (patron>=1000) AND (patron<=9999) THEN
  128.                    aux1:= x div 10; {numeros 1234}
  129.                    aux2:= x div 10000;
  130.                    aux3:= aux2 mod 10000; {numeros 2345}
  131.                    IF (x=aux1) OR (x=aux3) THEN
  132.                       comprobar:=true;
  133.                    END;
  134.                END; {if de patron 1000..9999}
  135.                IF (patron>=10000) AND (patron<=32767) THEN
  136.                   IF x=patron THEN
  137.                      comprobar:=true;
  138.                   END;
  139.                END;
  140.  
  141. END;
  142.  
  143. PROCEDURE MostrarNumEnteros(ini,f,p:integer);
  144. VAR
  145.  
  146. BEGIN
  147.      cont:=0;
  148.      FOR i:=ini TO f DO BEGIN
  149.         comprobar(i);
  150.         IF comprobar=true THEN
  151.           cont:=cont+1;
  152.         END;{IF}
  153.      END;{FOR}
  154.      writeln('Existen ',cont,' numeros entre ',ini,' y ',f,' que tienen patron ',p);
  155.  
  156. END;
  157.  
  158. PROCEDURE EscribirEnteros(inicio,fin,patron:integer);
  159. VAR
  160. BEGIN
  161.  
  162.      FOR i:=ini TO f DO BEGIN
  163.         comprobar(i);
  164.         IF comprobar=true THEN
  165.           writeln('El numero: ',i,' contiene el patron: ',p);
  166.         END;{IF}
  167.      END;{FOR}
  168. END;
  169.  
  170. PROCEDURE Dosultimos(ini,f,p:integer);
  171. VAR
  172. BEGIN
  173.    cont:=0;
  174.    REPEAT
  175.       FOR i:=f DONWTO ini TO
  176.         comprobar(i);
  177.         IF comprobar:=true THEN
  178.           cont:=cont+1;
  179.             IF cont=1 THEN
  180.               aux1:=i;
  181.               IF cont=2 THEN
  182.                 aux2:=i;
  183.               END;
  184.            END;
  185.         END;
  186.    UNTIL (cont=2) OR (i<ini);
  187.    IF cont=0 THEN
  188.       writeln('Los 2 numeros mayores comprendidos entre: ',ini,' y ',f,' son -1 y -1');
  189.    END;
  190.    IF cont=1 THEN
  191.       writeln('Los 2 numeros mayores comprendidos entre: ',ini,' y ',f,' son -1 y ',aux1);
  192.    END;
  193.    IF cont=2 THEN
  194.       writeln('Los 2 numeros mayores comprendidos entre: ',ini,' y ',f,' son ',aux1,' y ',aux2);
  195.    END;
  196.  
  197. END;
  198.  
  199. PROCEDURE salir;
  200. BEGIN
  201.   writeln('Ha decidido salir del programa.');
  202. END;
  203.  
  204.  
  205. BEGIN
  206.   REPEAT
  207.     writeln('a.- Mostrar cu ntos enteros en un rango dado contiene un patr¢n: ');
  208.     writeln('b.- Mostrar los enteros en un rango dado que contiene un patr¢n: ');
  209.     writeln('c.- Mostrar los dos mayores n£meros que contiene un patr¢n en un rango dado: ');
  210.     writeln('d.- Finalizar');
  211.     readlln(opcion);
  212.     CASE opcion OF
  213.       'a':BEGIN
  214.            write('¨Patr¢n?: ');
  215.            readln(patron)
  216.            write('Valor inferior del rango: ');
  217.            readln(inicio);
  218.            write('Valor superior del rango: ');
  219.            readln(fin);
  220.           MostrarNumEnteros(inicio,fin,patron);
  221.           END;
  222.  
  223.       'b':BEGIN
  224.            write('¨Patr¢n?: ');
  225.            readln(patron)
  226.            write('Valor inferior del rango: ');
  227.            readln(inicio);
  228.            write('Valor superior del rango: ');
  229.            readln(fin);
  230.            EscribirEnteros(inicio,fin,patron);
  231.           END;
  232.  
  233.       'c':BEGIN
  234.               write('¨Patr¢n?: ');
  235.               readln(patron)
  236.               write('Valor inferior del rango: ');
  237.               readln(inicio);
  238.               write('Valor superior del rango: ');
  239.               readln(fin);
  240.             Dosultimos(inicio,fin,patron);
  241.  
  242.       'd':salir;
  243.       UNTIL (opc='d') OR (opcion='D');
  244. END.
  245.  

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Practica necesito ....
« Respuesta #1 en: Jueves 15 de Enero de 2009, 21:46 »
0
a simple vista creo que no tienes mucha idea de la sintaxis de un IF en este lenguaje...
usas cosas como estas que estan totalmente fuera de lugar:

Código: Pascal
  1.         10..99:BEGIN
  2.                   IF patron<10 THEN
  3.                      aux1:= x div 10;
  4.                      aux2:= aux1 mod 10;
  5.                      IF (x=aux1) OR (x=aux2) THEN
  6.                         comprobar:=true;
  7.                      END;{IF} {end IF????? }
  8.                    END;{IF} { end IF????? }
  9.                   IF (patron>9) AND (x=patron) THEN
  10.                       comprobar:=true;
  11.                   END;{IF}{end IF????? otro mas!}
  12.                 { END;{CASE 10..99}{si tiene que estar el END; porque es el que cierra el BEGIN de arriba}
  13.  
repasemos:

1) Para un if con una sola sentencia se utiliza:

Código: Pascal
  1. if <condición> then
  2.   <sentencia>; 
  3.  
2) para un if con varias sentecias se utilizas:

Código: Pascal
  1. if <condición> then
  2.   begin
  3.     <sentencia 1>;
  4.     <sentencia 2>;
  5.     <sentencia 3>;
  6.     ...
  7.     <sentencia N>;
  8.   end
  9.  

revisa tu codigo y repasa como se programa en este lenguaje!

 :beer:


italiana

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Practica necesito ....
« Respuesta #2 en: Viernes 16 de Enero de 2009, 12:55 »
0
Yo hace poco tuve q hacer una practica igual y creo q no te falta ni sobra ningun end, mira bien el lenguaje por si has metido algo de mas.
Creo q mas bien te sobran llaves, ejemplo:
         10..99:BEGIN
                  IF patron<10 THEN
                     aux1:= x div 10;
                     aux2:= aux1 mod 10;
                     IF (x=aux1) OR (x=aux2) THEN
                        comprobar:=true;
                     END;{IF}
                   END;{IF}
                  IF (patron>9) AND (x=patron) THEN
                      comprobar:=true;
                  END;{IF}
                { END;{CASE 10..99}

Esa llave creo q no pinta nada ahi.
Espero servirte de ayuda.

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Practica necesito ....
« Respuesta #3 en: Viernes 16 de Enero de 2009, 16:07 »
0
lo que se me ocurre es que trato de pasar un algoritmo en C a pascal y se le trastocaron los break del switch... esperemos que responda para saber que le paso  ^_^