• Martes 12 de Noviembre de 2024, 21:28

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - blaise_pablitus

Páginas: [1]
1
Java / Comportamiento extraño de un Applet :O
« en: Martes 20 de Diciembre de 2011, 00:13 »
Hola a todos. Hoy estaba un poco aburrido en casa y programé una clase llamada "Punto" y un Applet para testear el funcionamiento de la clase.
El problema es que la salida de la Applet no es la esperada a mi entender. La salida debería decir:
La coordenada x es: 7.2
La coordenada y es: 11.5

La nueva posicion de p es: [10.0, 10.0]

Cuando en realidad dice:
La coordenada x es: 10.0
La coordenada y es: 10.0

La nueva posicion de p es: [10.0, 10.0]

¿ Alguien me puede explicar a qué se debe este error en la salida ? Les adjunto los archivos para que lo prueben en sus máquinas y me digan si les funciona o no.
Por las dudas aclaro que estoy usando el NetBeans IDE 7.0.1       :ayuda:     :ayuda:     :ayuda:    :ayuda:
Código: [Seleccionar]
public class Punto {
    protected double x, y; // Coordenadas del objeto Punto.
   
    // Constructor
    public Punto(double a, double b) {
        setPunto(a,b);
    }
   
    // Fijar las coordenadas x e y del Punto.
    public void setPunto(double a, double b) {
        x = a;
        y = b;
    }
   
    // Obtener la coordenada x
    public double getX() { return x; }
   
    // Obtener la coordenada y
    public double getY() { return y;  }
   
    // Convertir el punto en una representacion String.
    public String aString() { return "[" + x + ", " + y + "]"; }
   
}

Código del Applet :
Código: [Seleccionar]
import java.awt.Graphics;
import java.applet.Applet;

public class TestPunto extends Applet {
    private Punto p;
    public void init() {
        p = new Punto(7.2, 11.5);
    }
   
    public void paint(Graphics g) {
        g.drawString("La coordenada x es: " + p.getX(), 25, 25);
        g.drawString("La coordenada y es: " + p.getY(), 25, 40);
        p.setPunto(10, 10);
        g.drawString("La nueva posicion de p es: " + p.aString(), 25, 70);
    }
}

2
Pascal / SUMAR NATURALES DE HASTA 100 DIGITOS
« en: Lunes 4 de Enero de 2010, 22:08 »
:hola: Queridos colegas  "Pascaleros", quisiera compartir con uds. el código de un programa que estuve escribiendo: es un programa que permite sumar dos numeros naturales de hasta cien dígitos (recordemos que el entero mas grande que se puede representar directamente es 65536, o algo así), bueno, aquí va la letra del ejercicio y el código que escribí:

" Se desea trabajar con una aritmética de Naturales de hasta 100 dígitos. Los enteros de Pascal no soportan dicha aritmética, por lo que se piensa utilizar la siguiente representación de Naturales basada en arreglos con tope:

CONST
        MaxDig = 100;
TYPE
     Digito = 0..9;
     Natural = RECORD
                             digitos : ARRAY [1..MaxDig] OF Digito;
                             tope : 0..MaxDig;
                   END;

Escribir un programa que lleve a cabo la suma de naturales en terminos de la estructura anterior.

Código: Pascal
  1. (* Programa que permite sumar numeros naturales de hasta cien dígitos de longitud *)
  2. (* utilizando un array con tope *)
  3.  
  4. PROGRAM Aritnat(input,output);
  5.  
  6. CONST
  7.     MaxDig = 100;  (* Constante que indica longitud maxima del numero *)
  8.  
  9. TYPE
  10.    Digito = 0..9;  (* en cada celda del array se introducirán digitos del cero al nueve *)
  11.    Natural = RECORD
  12.                   digitos: ARRAY [1..MaxDig] OF Digito;
  13.                   tope: 0..MaxDig;
  14.              END;
  15. VAR
  16.   a, b, c:Natural;   (* a y b son los sumandos, c es el resultado de la suma *)
  17.   suma, acarreo, i, digit:integer;  (* Variables para procesar los datos *)
  18.   temp:integer;
  19.  
  20.  
  21. BEGIN
  22.  
  23.     (* Lectura de los números a sumar *)
  24.     writeln('Ingrese el primer numero:');
  25.    
  26.     readln(digit); (* Se ingresa el primer digito *)
  27.     a.tope := 0;   (* Se inicializa el tope *)
  28.     WHILE (digit IN [0..9]) AND ((a.tope < MaxDig) OR (a.tope = MaxDig)) DO
  29.          BEGIN   (* Mientras el digito que se ingrese pertenesca al subrango 0..9 y mientras no se haya terminado el array *)
  30.              a.tope := a.tope + 1;     (* Se incrementa en uno el tope del array *)
  31.              a.digitos[a.tope] := digit;  (* Se almacena el digito en la celda correspondiente *)
  32.              readln(digit)             (* Se lee el siguiente digito *)
  33.          END;
  34.  
  35.  
  36.     (* se solicita ingresar el segundo numero *)
  37.  
  38.     writeln('Ingrese el segundo numero:');
  39.     readln(digit);   (* Se lee el primer digito *)
  40.     b.tope := 0;     (* Se inicializa el tope *)
  41.     WHILE (digit IN [0..9]) AND ((b.tope < MaxDig) OR (b.tope = MaxDig)) DO
  42.          BEGIN     (* Mientras pertenesca al intervalo 0..9 y no se termine el array *)
  43.              b.tope := b.tope + 1;  (* Se incrementa el tope *)
  44.              b.digitos[b.tope] := digit;    (* Se almacena el digito en la celda correspondiente *)
  45.              readln(digit)              (* Se lee el siguiente digito *)
  46.          END;
  47.  
  48.  
  49.     (* Si un array tiene mas digitos que otro, entonces al que tiene menos hay que agregarle ceros al principio *)
  50.     (* Hasta que ambos tengan la misma longitud, de esa manera la suma se hará con mayor facilidad *)
  51.  
  52.     IF (a.tope > b.tope) THEN BEGIN
  53.        FOR i := b.tope DOWNTO 1 DO BEGIN
  54.            temp := b.digitos[i+(a.tope-b.tope)];
  55.            b.digitos[i+(a.tope-b.tope)] := b.digitos[i];
  56.            b.digitos[i] := temp;
  57.            b.tope := b.tope + (a.tope - b.tope);
  58.            END; (* FOR *)
  59.        FOR i := 1 TO (a.tope - b.tope) DO
  60.            b.digitos[i] := 0;
  61.        END   (* if *)
  62.        ELSE IF (b.tope > a.tope) THEN BEGIN
  63.                FOR i := a.tope DOWNTO 1 DO BEGIN
  64.                    temp := a.digitos[i+(b.tope-a.tope)];
  65.                    a.digitos[i+(b.tope-a.tope)] := a.digitos[i];
  66.                    a.digitos[i] := temp;
  67.                    a.tope := a.tope + (b.tope-a.tope);
  68.                    END;   (* FOR *)
  69.                FOR i := 1 TO (b.tope - a.tope) DO
  70.                    a.digitos[i] := 0;
  71.                END; (* ELSE IF *)
  72.    
  73.     c.tope := 0;
  74.     FOR i := 1 TO (a.tope) DO BEGIN
  75.         c.tope := c.tope + 1;
  76.         c.digitos[i] := 0
  77.         END;
  78.  
  79.     (* Ahora se le indicará a la máquina que sume los arreglos a y b como lo hacíamos en la escuela: digito a digito *)
  80.     (* empezando por las unidades y de derecha a izquierda *)
  81.     (* hay que considerar también el acarreo de las decenas, que por defecto, *)
  82.     (* se inicializa en cero *)
  83.  
  84.     acarreo := 0;
  85.     FOR i := (a.tope) DOWNTO 1 DO BEGIN
  86.         suma := a.digitos[i] + b.digitos[i] + acarreo;
  87.         IF (i = 1) AND (suma DIV 10 = 1) THEN BEGIN  (* caso excepcional: si al sumar el primer digito de a con el de b, el resultado es 10 o más, *)
  88.            c.digitos[c.tope+1] := c.digitos[c.tope];  (* entonces, al array c se le agrega una cifra más al principio: la cifra del acarreo *)
  89.            c.tope := c.tope + 1;
  90.            c.digitos[2] := suma MOD 10;
  91.            c.digitos[1] := suma DIV 10
  92.         END (* IF *)
  93.         ELSE BEGIN   (* sino, entonces sumamos cifra con cifra y almacenamos las unidades en la celda del array c, y las decenas que sobren en acarreo *)
  94.                  c.digitos[i] := suma MOD 10;
  95.                  acarreo := suma DIV 10
  96.              END;  (* ELSE *)
  97.         END;  (* FOR *)
  98.  
  99.     (* Para terminar, mostramos el resultado de la suma en pantalla *)
  100.     FOR i := 1 TO (c.tope) DO
  101.         write(c.digitos[i]);
  102.    
  103.     readln(i);
  104.  
  105. END.
  106.  
:rolleyes: Bueno, este código me funcionó, pero me gustaría saber si uds. piensan que es una buena forma de programar o si hay cosas que se pueden mejorar u obviar...Ah! Me olvido de decirles que yo programo en free pascal 2.2.2.
  :good: Saludos

Páginas: [1]