jueves, 28 de octubre de 2010

Ejercicio calcular TOTAL y MEDIA

Leer 5 números por teclado y calcular la suma total y la media. Se debe poder cambiar el número de elementos que se introduzcan, sin realizar ningún otro cambio en el programa.

DIAGRAMA DE NASSI-SHNEIDERMAN


EJERCICIO EN JAVA

public class TotalMedia {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, numero, total;
        float media;
        final int CUANTOS;
        total = 0;
        CUANTOS = 5;
        System.out.println("Introduzca " + CUANTOS + " números enteros:");
        for (i = 1; i <= CUANTOS; i++){
            numero = entrada.nextInt();
            total = total + numero;
        }
        media = (float)total/CUANTOS;
        System.out.println("El resultado total es: " + total + " y la media es: " + media);
    }	
}

Ejercicio contar 'a'

Contar las sucesivas 'a' que pueda haber al principio de una palabra.
Por ejemplo, si la palabra es "aaavión", debe contar 3 'a'.

public class ContarA {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos=0;       //para ir indicando la posición de cada caracter
        int contador=0;  //cuenta las 'a'
        int comodin=0;   //he creado esta variable para comprobar el último caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        frase = frase.toLowerCase();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            if (frase.charAt(0) == 'a'){
                 do{
                    contador = contador + 1;
                    pos++;
                } while (frase.charAt(pos)=='a' & pos < (frase.length()-1));
                comodin = pos;
            }
            for (pos=1; pos < (frase.length()-1); pos++)
                if (Character.isLetter(frase.charAt(pos-1)) == false)
                    while(frase.charAt(pos) == 'a' & pos < (frase.length()-1)){
                        contador = contador + 1;
                        pos++;
                        comodin = pos;
                    }
            if ((comodin == pos | comodin == (frase.length()-1) | !Character.isLetter(frase.charAt(frase.length()-2))) & frase.charAt(pos=(frase.length()-1)) == 'a')
                contador = contador + 1;
            System.out.println("El número de 'a' es " +contador);
        }
    }	
}

No estoy del todo contenta con la solución, porque me quedó un poco largo y quizás no se entiende demasiado bien, pero como había empezado con esta solución, ya era una cuestión personal terminarla ;)

A continuación escribo la solución propuesta por el profesor:

public class ContarAMejor {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        boolean fueraPalabra;
        int pos, contador=0;
        fueraPalabra = true;
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        frase = frase.toLowerCase();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            for (pos=0; pos < frase.length(); pos++)
                if (frase.charAt(pos) == 'a' & fueraPalabra == true)
                    contador++;
                else
                    fueraPalabra = !Character.isLetter(frase.charAt(pos));
        }
        System.out.println("El número total de 'a' es: " + contador);
    }	
}

jueves, 21 de octubre de 2010

Ejercicios con "for" y "Strings"

1.- Realizar un programa que lea una frase por teclado y después muestre los caracteres 'a' que contiene dicha frase, junto a la posición que ocupa (las posiciones se comienzan a contar desde 0).

public class Ejer1 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else
            for (pos=0; pos < frase.length(); pos++)
                if (frase.charAt(pos) == 'a')
                    System.out.println("a - " + pos);
    }	
}

2.- El mismo ejercicio anterior, pero que busque los caracteres 'a' desde el final hasta el principio.

public class Ejer2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else
            for (pos= (frase.length()-1); pos >= 0; pos--)
                if (frase.charAt(pos) == 'a')
                    System.out.println("a - " + pos);
    }	
}

3.- El mismo programa, pero ahora debe mostrar sólo las 'a' que estén al principio de una palabra.

DIAGRAMA DE NASSI-SHNEIDERMAN



PROGRAMA EN JAVA

public class Ejer3 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        pos = 0;
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            if (frase.charAt(pos) == 'a')
                System.out.println("a - " + (pos));
            for (pos=0; pos < (frase.length()-1); pos++)
                if (Character.isLetter(frase.charAt(pos)) == false)
                    if (frase.charAt(pos + 1) == 'a')
                        System.out.println("a - " + (pos + 1));
        }
    }	
}

lunes, 18 de octubre de 2010

Ejercicios

1.- Programa que lea el precio de un producto y a partir de un precio () , lo incremente en un 11%. Si su valor final es inferior a 1000 €, deberá imprimir el precio del producto, pero a partir de 1000 € tan solo imprimirá el mensaje:
"Cariiiisimo"
... incluidas las comillas.

public class Precio {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float precio, total;
        System.out.println("Escriba el precio del producto que desee:");
        precio = entrada.nextFloat();
        total = 1.11F * precio;
        if (total < 1000)
            System.out.println("El precio final de producto elegido es: " + total + " euros.);
        else
            System.out.println("\"Cariiiisimo\"");             
    }	
}

2.- Programa que calcule el gasto de agua en una vivienda dado el número de litros gastados, siendo el sistema de cobro:
  • la cuota fija mensual es de 6 €.
  • los primeros 50 litros son gratis (opción 1).
  • entre 50 y 200 litros se cobra el litro a 0.1 € (opción 2).
  • a partir de 200 litros se cobra el litro a 0.3 € (opción 3).
public class CuotaMensual {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float litros, gasto, cuota;
        cuota = 6F;
        System.out.println("Introduzca el número de litros consumidos:");
        litros = entrada.nextFloat();
        if (litros <= 50)
            gasto = cuota;
        else
            if (litros <= 200)
                gasto = cuota + (litros-50F)*0.1F;
            else
                gasto = cuota + (litros-200F)*0.3F + 150*0.1F;
        System.out.println("El gasto mensual es de: " + gasto + " euros.");
    }	
}

3.- Dada una medida de tiempo expresada en horas, minutos y segundos con valores arbitrarios, elabore un programa que transforme dicha medida en una expresión correcta. Por ejemplo, dada la medida 3h 118m 195s, el programa deberá obtener como resultado 5h 1m 15s.

public class Hora {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int h1, m1, s1, h2, m2, s2, m3;
        //h: horas, m: minutos, s: segundos
        System.out.println("Escriba una medida de tiempo en el siguiente formato: horas minutos segundos");
        h1 = entrada.nextInt();
        m1 = entrada.nextInt();
        s1 = entrada.nextInt();
        if (s1 >= 60){
            s2 = s1 % 60;
            m2 = m1 + s1/60;
            if (m1 >= 60){
                m3 = m2 % 60;
                h2 = h1 + m2/60;
            }
            else{
                m3 = m2;
                h2 = h1;
            }
        }
        else{
            s2 = s1;
            if (m1 >= 60){
                m3 = m1 % 60;
                h2 = h1 + m1/60;
            }
            else{
                m3 = m1;
                h2 = h1;
            }
        }
        System.out.println("La expresión correcta es: "+h2+" horas "+m3+" min. "+s2+" seg.");
    }
}

jueves, 7 de octubre de 2010

Diagrama y programa en Java

Realizar un programa que ofrezca el siguiente menú al usuario :
  1. Sumar a + b.
  2. Multiplicar a * b.
  3. Dividir a / b.
  4. Mostrar el mayor de a y b.
Si la opción no es correcta, mostrar un mensaje que lo indique.


A continuación se muestra el diagrama de Nassi-Shneiderman:



Otra manera de hacerlo:



A continuación se muestra el programa en Java correspondiente al primer diagrama mostrado:

public class MenuOpciones {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int opcion;
        float a, b, resultado;
        System.out.println("Elija una de las siguientes opciones:");
        System.out.println("1. Sumar a + b");
        System.out.println("2. Multiplicar a * b");
        System.out.println("3. Dividir a / b");
        System.out.println("4. Mostrar el mayor entre a y b");
        opcion = entrada.nextInt();
        switch (opcion){
           case 1: System.out.println("Introduzca los valores de 'a' y 'b':");
                   a = entrada.nextFloat();
                   b = entrada.nextFloat();
                   resultado = a + b;
                   System.out.println("El resultado es "+ resultado);
                   break;

           case 2: System.out.println("Introduzca los valores de 'a' y 'b':");
                   a = entrada.nextFloat();
                   b = entrada.nextFloat();
                   resultado = a * b;
                   System.out.println("El resultado es "+ resultado);
                   break;

           case 3: System.out.println("Introduzca los valores de 'a' y 'b':");
                   a = entrada.nextFloat();
                   b = entrada.nextFloat();
                   resultado = a / b;
                   System.out.println("El resultado es "+ resultado);
                   break;

           case 4: System.out.println("Introduzca los valores de 'a' y 'b':");
                   a = entrada.nextFloat();
                   b = entrada.nextFloat();
                   if (a > b)
                       System.out.println("El mayor es: " + a);
                   else
                       System.out.println("El mayor es: " + b);
                   break;

           default: System.out.println("La opción elegida no es válida.");
                    break;
        }
    }	
}

Meses

Hacer un programa en Java que lea un número correspondiente a un mes y muestre el número de días de ese mes.

public class Meses1 {
    public static void main(String[] args) {
        int mes;
        Scanner entrada = new Scanner(System.in);
        System.out.println("Escribe el número correspondiente a un mes:");
        mes = entrada.nextInt();
        if (mes==1 | mes==3 | mes==5 | mes==7 | mes==8 | mes==10 | mes==12)
            System.out.println("El mes tiene 31 días.");
        else{
            if (mes==2)
                System.out.println("El mes tiene 28 días.");
            else{
                if (mes==4 | mes==6 | mes==9 | mes==11)
                    System.out.println("El mes tiene 30 días.");
                else
                    System.out.println("Sólo existen 12 meses.");
            }
        }
    }	
}

Otra forma de hacerlo sería utilizando "switch".

public class Meses2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int mes;
        System.out.println("Escribe el número correspondiente a un mes:");
        mes = entrada.nextInt();
        switch (mes){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println("El mes tiene 31 días.");
                break;
            case 2:
                System.out.println("El mes tiene 28 días.");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println("El mes tiene 30 días.");
                break;
            default:
                System.out.println("Debe introducir el número correspondiente a un mes. El número introducido no es correcto.");
                break;
        }
    }	
}

martes, 5 de octubre de 2010

Diagrama de Nassi-Shneiderman

Dado un número entero, saber si es negativo o positivo y si es par o impar.

Diagrama de Nassi-Shneiderman

Muestra el mayor y el menor de tres números enteros elegidos inicialmente.



Otra forma de hacerlo (propuesta por un compañero de clase):


viernes, 1 de octubre de 2010

Algoritmo (número mayor y número menor)

  1. Elige tres números enteros.
    • Al primero lo llamaremos "número 1".
    • Al segundo lo llamaremos "número 2".
    • Al tercero lo llamaremos "número 3".
  2. Compara "número 1" y "número 2".
  3. Elige la mayor de esas cantidades.
  4. Compara esa cantidad con "número 3".
  5. Elige la mayor del paso 4. Este es el número mayor de los tres que elegiste inicialmente.
  6. Compara los dos otros dos números entre sí, dejando a un lado el número elegido en el paso 5.
  7. Elige la menor de esas cantidades.
  8. Ese es el número menor de los tres del paso 1.

jueves, 30 de septiembre de 2010

Algoritmo (número mayor)

  1. Elige tres números.
    • Al primero lo llamaremos "número 1".
    • Al segundo lo llamaremos "número 2".
    • Al tercero lo llamaremos "número 3".
  2. Compara "número 1" y "número 2".
  3. Elige la mayor de estas dos cantidades.
  4. Compara ahora la cantidad anterior y "número 3", vuelve a elegir la mayor cantidad.
  5. Esta última cifra representa el mayor de los tres números que elegiste al principio.

Algoritmo (nuestro plato favorito)

  1. En primer lugar, prepara los ingredientes necesarios para hacer mi plato preferido:
    • aceite de oliva (4 cucharadas soperas).
    • 2 cebollas blancas del tamaño de una pelota de tenis.
    • 1 cajita de bacon picado en tiras.
    • 1 cajita de jamón cocido cortado en tacos.
    • 1 loncha de queso amarillo de aproximadamente 0.5 cm de grosor.
    • sal gruesa (media cucharada sopera).
    • 0.75 litros de agua.
    • 250 gramos de concha pequeña (pasta).
    • orégano (una cucharada de postre).
    • 2 tomates de salsa que estén maduros, del tamaño aproximado de una pelota de tenis.
  2. Si no tienes alguno de los ingredientes, debes comprarlo.
    • Pica las cebollas y el queso en dados. Deja el queso en un plato porque se utilizará al final del algoritmo.
    • Llena un caldero con el agua, añade la sal y una cucharada sopera de aceite. Ponlo a calentar a fuego alto y con el caldero tapado.
    • Pon el aceite restante en una sartén y ponlo a calentar a fuego medio. Pon en la sartén un dado de cebolla.
    • Cuando el aceite esté hirviendo (se notarán las burbujas alrededor del dado de cebolla que has añadido en el paso anterior), echa el resto de cebolla.
    • Mueve la cebolla de vez en cuando con una cuchara de palo, para que no se queme.
    • De vez en cuando mira el caldero con agua. Cuando esté hirviendo (el agua se moverá agitadamente formando muchas burbujas) echa la pasta y baja un poco el fuego. No tapes el caldero ahora.
    • Cuando la cebolla empiece a estar un poco dorada, echa en la sartén el bacon y el jamón. Remuévelo todo. cuando lleven 5 minutos, ralla los tomates sobre la sartén con un rallador. Vuelve a remover.
    • Deja la sartén sobre el fuego 5 minutos más, removiéndolo de vez en cuando. Pasado este tiempo, apaga el fuego sobre el que se encontraba la sartén y tápala.
    • Cuando el caldero lleve 12 minutos hirviendo, prueba una concha. Si está a tu gusto, apaga el fuego.
    • Si no, déjalo un par de minutos más y vuelve a probar. Repite este paso hasta que esté a tu gusto.
    • Cuando apagues el fuego del caldero, escurre la pasta (utiliza un escurridor).
    • Después sirve la pasta en una fuente grande, añade el contenido de la sartén y mézclalo todo bien.
    • Finalmente, añade el queso sobre la mezcla anterior para que se funda un poco.
    • Ahora está el plato listo para comer. ¡Qué aproveche!