Mostrando entradas con la etiqueta Función. Mostrar todas las entradas
Mostrando entradas con la etiqueta Función. Mostrar todas las entradas

domingo, 11 de marzo de 2012

Ejercicios MCD y MCM

EJERCICIO 1 - Máximo Común Divisor
Realizar una aplicación que calcule el máximo común divisor de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, a As Integer
        Dim n1, n2 As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        n1 = numero1
        n2 = numero2

        If (numero1 < numero2) Then
            a = numero2
            numero2 = numero1
            numero1 = a
        End If

        ' Algoritmo de Euclides
        While (numero1 Mod numero2 <> 0)
            a = numero1
            numero1 = numero2
            numero2 = a Mod numero2
        End While

        Console.WriteLine("El MCD de " & n1 & " y " & n2 & " es: " & numero2)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2 - Mínimo Común Múltiplo
Realizar una aplicación que calcule el mínimo común múltiplo de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, mcm As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        mcm = (numero1 / MCD(numero1, numero2)) * numero2

        Console.WriteLine("El mcm de " & numero1 & " y " & numero2 & " es: " & mcm)

        Console.ReadKey()

    End Sub

    Function MCD(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
        Dim a As Integer
        If (num1 < num2) Then
            a = num2
            num2 = num1
            num1 = a
        End If

        ' Algoritmo de Euclides
        While (num1 Mod num2 <> 0)
            a = num1
            num1 = num2
            num2 = a Mod num2
        End While

        Return num2
    End Function

End Module

Ejercicios de búsqueda en tablas

EJERCICIO 1
Realizar una aplicación que contenga la función "Buscar", a la que se le pasará un array de números enteros y el elemento a buscar. Debe devolver un Boolean indicando si lo ha encontrado (true) o no (false).

Module Module1

    Sub Main()
        Dim numeros() As Integer = {32, 5, 3, 2, 66, 2, 7, 45, 90}
        Dim num As Integer = 91
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim encontrado As Boolean = False

        For Each n As Integer In numeros
            If (n = num) Then
                encontrado = True
            End If
            'Si lo encuentra, sale del "for"
            If encontrado Then Exit For
        Next

        Return encontrado
    End Function

End Module

EJERCICIO 2
Modificar la función anterior para que implemente el algoritmo de búsqueda dicotómica. En este caso se le pasará un array ordenado de menor a mayor.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 4
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return True
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return False

    End Function

End Module

EJERCICIO 3
Modificar de nuevo la función para que en lugar de un Boolean indicando si ha encontrado o no el elemento buscado, devuelva un entero indicando la posición donde se encuentra dicho elemento. Si el array no contiene ese elemento, devolverá -1.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 90
        Dim posicion As Integer = Buscar(numeros, num)

        If (posicion = -1) Then
            Console.WriteLine("No encontrado")
        Else
            Console.WriteLine("Encontrado en la posicion: " & posicion)
        End If

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Integer
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return centro
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return -1

    End Function

End Module

jueves, 1 de septiembre de 2011

Ejercicio función totaliza

Realizar la siguiente función:
  • static int totaliza (Reader in). Recibe un flujo de datos de tipo "Reader" y lee los números enteros que contiene. La función irá sumando estos números hasta tener el total, que es el dato que se retorna.
Si se produce error al leer alguna línea y pasarlo a entero, se atrapará la excepción y se sacará un mensaje con el número de la línea que no se ha leído.
Se añade el programa principal con el que se probó la función.

public class EjercicioFlujo3 {
    public static void main (String [] args) throws FileNotFoundException, IOException {
        String ruta="/home/veronica/Documentos/fichero";
        int total;
        FileReader leerFich = new FileReader(ruta);
        total=totaliza(leerFich);
        leerFich.close();
        System.out.println(total);
    }
    public static int totaliza (Reader in) throws IOException {
        int resultado=0;
        int linea=1;
        String num;
        BufferedReader aux = new BufferedReader(in);
        while ((num=aux.readLine()) != null) {
            try {
                resultado += Integer.parseInt(num);
            }
            catch(NumberFormatException e) {
                System.err.println("Fallo en la línea: "+linea);
            }
            linea++;
        }
        aux.close();
        return resultado;
    }
}

miércoles, 31 de agosto de 2011

Ejercicio función invertir

Implementa la siguiente función, utilizando un objeto de la clase Stack.
  • Nombre y parámetros: List<Point> invertir (Iterator<Point> i , Point p)
  • Retorna: List<Point> (realmente será un objeto ArrayList<Point>)
  • Tarea: Crea un ArrayList de objetos Point que contenga los puntos obtenidos con el iterador pero en orden inverso, excluyendo los puntos que sean iguales al recibido en el segundo parámetro.
  • Si el segundo parámetro es null, se excluyen los puntos (0,0) 
  • Excepciones: IllegalArgumentException en caso de que el iterator no nos diera ni un solo Punto o bien fuese null.
Se añade el programa principal con el que se probó la función.

public class EjercicioStack {
    public static void main (String[] args) {
        Point a = new Point(0,0);
        Point b = new Point(1,1);
        Point c = new Point(2,2);
        Point d = null;
        ArrayList<Point> puntos = new ArrayList<Point>();
        ArrayList<Point> puntosInv;
        puntos.add(a);
        puntos.add(b);
        puntos.add(c);
        System.out.println(puntos);
        Iterator<Point> it = puntos.iterator();
        puntosInv = (ArrayList<Point>) invertir(it, d);
        System.out.println(puntosInv);
    }
    public static List<Point> invertir (Iterator<Point> i, Point p) {
        Stack<Point> pila = new Stack<Point>();
        ArrayList<Point> puntos = new ArrayList<Point>();
        Point aux;
        if (i == null || !i.hasNext()) {
            throw new IllegalArgumentException();
        }
        if (p == null) {
            p = new Point(0, 0);
        }
        while (i.hasNext()) {
            aux = i.next();
            if (!aux.equals(p))
                pila.push(aux);
        }
        while (!pila.empty()) {
            puntos.add(pila.pop());
        }
        return puntos;
    }
}

Ejercicio funciones insertar

Realizar las funciones:
  • int insertar (List<Comparable> l, Comparable d). La función recibe una lista de datos comparables, que debe estar ordenada, y un dato comparable que es el que se quiere insertar en la lista anterior. Como resultado se retorna la posición en la que ha sido insertado el dato.
  • void insertar (List<Comparable> l, Collection<Comparable> c). Recibe una lista de datos comparables, que estarán ordenados, y una colección de datos que se insertarán en el lugar correspondiente de la lista anterior. No retorna nada.
Se añade el programa principal con el que se probó la función.

public class Insertar {
    public static void main (String[] args) {
        LinkedList<String> nombres = new LinkedList<String>();
        LinkedList<String> nombres2 = new LinkedList<String>();
        int pos;
        pos = insertar((List)nombres, "Juan");
        System.out.println(nombres);
        System.out.println(pos);
        pos = insertar((List)nombres, "Antonio");
        System.out.println(nombres);
        System.out.println(pos);
        pos = insertar((List)nombres, "Manuela");
        System.out.println(nombres);
        System.out.println(pos);
        nombres2.add("Julia");
        nombres2.add("Angel");
        nombres2.add("Carlos");
        nombres2.add("Verónica");
        insertar((List)nombres, (Collection)nombres2);
        System.out.println(nombres);
    }
    public static int insertar(List<Comparable> l, Comparable d) {
        int i=0;
        ListIterator<Comparable> it = l.listIterator();
        while (i < l.size() && d.compareTo(it.next()) > 0) {
            i++;
        }
        if (i < l.size())
            it.previous();
        it.add(d);
        return i;
    }
    public static void insertar(List<Comparable> l, Collection<Comparable> c) {
        Iterator<Comparable> itC = c.iterator();
        while (itC.hasNext()) {
            insertar(l, itC.next());
        }
    }
}

martes, 12 de julio de 2011

Ejercicio invertir tabla

Crear una función que invierta el contenido de una tabla de String que recibe como atributo, utilizando un objeto PilaFrase.

public static void invertir (String[] tabla){
    int i;
    PilaFrases aux = new PilaFrases(tabla.length);
    for (i=0; i<tabla.length; i++){
        aux.push(tabla[i]);
    }
    for (i=0; i<tabla.length; i++){
        tabla[i] = aux.pop();
    }
}

jueves, 16 de junio de 2011

Ejercicio crear clase "Ficha"

Crear una clase llamada Ficha, con los siguientes atributos:
  • HOMBRE. De tipo char, estático y constante (público).
  • MUJER. De tipo char, estático y constante (público).
  • nombre. De tipo String (público).
  • edad. De tipo entero (público).
  • sexo. De tipo char (público).
  • dni. De tipo long (público).

public class Ficha {
    public static final char HOMBRE = 'H';
    public static final char MUJER = 'M';
    public String nombre;
    public int edad;
    public char sexo;
    public long dni; //sin letra
}

Realizar un programa para probar la clase anterior que pida los datos de varias fichas (utilizando una tabla de Ficha) al usuario. Además, el programa tendrá dos funciones estáticas:
  1. ordenar(Ficha[] f). Recibe una tabla de objetos Ficha y la ordena por edad.
  2. mostrar(Ficha f). Muestra los datos que contiene el objeto Ficha que recibe.

public class PruebaFicha {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        Ficha[] f = new Ficha[3];
        String aux;
        int pos;
        for (pos=0; pos<f.length; pos++){
            System.out.println("FICHA "+(pos+1));
            f[pos] = new Ficha();
            System.out.print("Nombre: ");
            f[pos].nombre = entrada.nextLine();
            System.out.print("Edad: ");
            f[pos].edad = entrada.nextInt();
            System.out.print("DNI: ");
            f[pos].dni = entrada.nextLong();
            entrada.nextLine();
            System.out.print("Sexo (H/M): ");
            aux = entrada.nextLine();
            if(aux.equals("H"))
                f[pos].sexo=Ficha.HOMBRE;
            else
                f[pos].sexo=Ficha.MUJER;
        }
        ordenar(f);
        System.out.println();
        for (pos=0; pos<f.length; pos++){
            mostrar(f[pos]);
        }
    }
    public static void ordenar(Ficha[] f) {
        int ini, fin, i;
        boolean intercambio;
        Ficha aux; //no hace falta iniciarlo
        ini=0;
        fin=f.length - 1;
        intercambio = true;
        while (ini<fin & intercambio){
            intercambio=false;
            for(i=ini; i<fin; i++){
                if (f[i].edad > f[i+1].edad){
                    aux = f[i];
                    f[i] = f[i+1];
                    f[i+1] = aux;
                    intercambio = true;
                }
            }
            fin--;
            if (intercambio){
                intercambio = false;
                for(i=fin-1; i>=ini; i--){
                    if (f[i].edad > f[i+1].edad){
                        aux = f[i];
                        f[i] = f[i+1];
                        f[i+1] = aux;
                        intercambio = true;
                    }
                }
            }
            i++;
        }
    }
    public static void mostrar(Ficha f1) {
        System.out.print("Nombre: "+f1.nombre);
        System.out.println();
        System.out.print("Edad: "+f1.edad);
        System.out.println();
        System.out.print("DNI: "+f1.dni);
        System.out.println();
        if (f1.sexo == Ficha.MUJER)
            System.out.print("Sexo: MUJER");
        else
            System.out.print("Sexo: HOMBRE");
        System.out.println();
        System.out.println();
    }
}

Ejercicio crear clase "TipoTexto"

Crear una nueva clase llamada TipoTexto, cuyos atributos serán:
  • frase. Tipo String (Público).
  • numLetras. Tipo entero (Público).

public class TipoTexto {
    public String frase;
    public int numLetras;

}

Realizar un programa que cree un objeto de la clase "TipoTexto" y que le asigne una frase cualquiera a su atributo "frase". El programa tendrá una función que contará las letras de la frase y guardará ese número en el atributo "numLetras".

public class PruebaTipoTexto {
    public static void main(String[] args) {
        TipoTexto t = new TipoTexto();
        t.frase = "Pepe vive en la ciudad de La Laguna...";
        cuentaLetras(t);
        System.out.println(t.numLetras);
    }
    public static void cuentaLetras(TipoTexto text) {
        int pos, contador=0;
        for (pos=0; pos<text.frase.length(); pos++){
            if (Character.isLetter(text.frase.charAt(pos)))
                contador++;
        }
        text.numLetras = contador;
    }
}

Ejercicio sustituir valores de tabla

Realizar una función que reciba 3 parámetros:
  1. Tabla de enteros.
  2. Número entero que estará en esa tabla (puede no estar).
  3. Número por el que queremos sustituir el anterior en la tabla.
La función devolverá un número entero que indicará el número de sustituciones que se han realizado y lanzará IllegalArgumentException si la tabla está vacía.
Se añade el programa principal con el que se probó la función.

public class Sustituir {
    public static void main(String[] args) {
        int[] tabla={3, 6, 44, 3, 12, 3, 3, 3, 33, 51, 3};
        int numA=3, numB=13;
        int veces;
        veces = sustituir(tabla, numA, numB);
        System.out.println(veces + " sustituciones.");
    }
    public static int sustituir(int[] t, int a, int b) {
        int i, contador=0;
        if (t==null)
            throw new IllegalArgumentException("La tabla está vacía");
        for (i=0; i<t.length; i++){
            if (t[i] == a){
                t[i] = b;
                contador++;
            }
        }
        return contador;
    }
}

Ejercicio número en un rango

Dado un rango entre dos números enteros, realizar una función que reciba estos dos números y pida al usuario que introduzca un número del rango. el programa seguirá pidiendo el número hasta que el usuario introduzca un número válido.
Se añade el programa principal con el que se probó la función.

public class Rango {
    public static void main(String[] args) {
        int desde, hasta, resultado;
        desde = 1;
        hasta = 15;
        System.out.println("Numero entre "+desde+" y "+hasta);
        resultado = leerRango(desde, hasta);
    }
    public static int leerRango(int ini, int fin) {
        Scanner entrada = new Scanner(System.in);
        int numero=0;
        boolean valido;
        do{
            try{
                numero = entrada.nextInt();
                if (numero < ini | numero > fin)
                    valido = false;
                else
                    valido = true;
            }
            catch(InputMismatchException e){
                valido = false;
            }
            entrada.nextLine();
        }while (!valido);
        return numero;
    }
}

Ejercicio trocear tabla

Dada una tabla de números float, realizar una función que la trocee, es decir,  que cree una tabla de dos dimensiones que tenga en cada fila 3 datos de la primera tabla. En la última fila tendrá los datos que sobren.
Se añade el programa principal con el que se probó la función.

public class Trocear {
    public static void main(String[] args) {
        float[] numeros = {12.23F, 53.23F, 1.423F, 54.22F, 75.72F, 0.125F, 5.34F, 6.33F};
        float[][] resultado;
        int a, b;
        resultado = trocea(numeros);
        for (a=0; a<resultado.length; a++){
            for (b=0; b<resultado[a].length; b++)
                System.out.print(resultado[a][b]+"  ");
            System.out.println();
        }
    }
    public static float[][] trocea(float[] t) {
        float[][] tabla = new float[(t.length+2)/3][];
        int i, j, k=0, c = t.length;
        for (i=0; i<tabla.length; i++){
            tabla[i] = new float[(c>=3)?3:c];
            c = c-3;
            for (j=0; j<tabla[i].length; j++){
                tabla[i][j] = t[k];
                k++;
            }
        }
        return tabla;
    }
}

Varios ejercicios con funciones

Realizar una función que reciba un número entero y diga si es par o impar.

public class ParImpar {
    public static void par_o_impar(int numero) {
        if ((numero % 2) == 0)
            System.out.println("El número es par.");
        else
            System.out.println("El número es impar.");
    }
}

Realizar una función que reciba dos números (un double y un entero). Retornará como resultado lo que le dé al elevar el número double al entero.
Se añade el programa principal con el que se probó la función.

public class Exponente {
    public static void main(String[] args) {
        double num, res;
        int exponente;
        num=2.5;
        exponente=3;
        res = exp(num, exponente);
        System.out.println(num+" elevado a "+exponente+" es:" +res);
    }
    public static double exp(double n, int e) {
        double acumulador=1;
        int i=0;
        while (i<e){
            acumulador = acumulador * n;
            i++;
        }
        return acumulador;
    }
}