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.