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 - pedro,,

Páginas: [1] 2 3 4 5 6 ... 8
1
Hola.

Aquí dejo otra posible solución al ejercicio CU00913C del tutorial de programación Java avanzado.

Citar
EJERCICIO

Utilizando Comparable y compareTo resuelve el siguiente problema donde debemos partir de una clase Persona con atributos nombre, edad y altura. Queremos ordenar por edad y por altura a las siguientes personas:                   

Nombre      Altura      Edad
Mario           187          22
Pepe            173           52
Manuel         158           27
David            164          25
Alberto         184          80
 
Debemos comparar las personas y ordenarlas por altura primero (de mayor a menor) y por edad (de menor a mayor) después. Por pantalla debe mostrarse la lista de personas sin ordenar, ordenada por altura y ordenada por edad. Ejemplo de ejecución:

Clase Persona:

Código: [Seleccionar]
package interfacecomparable;

public class Persona implements Comparable<Persona>, Cloneable {
private String nombre;
private int altura;
private int edad;

public Persona() {}

public Persona(String nombre, int altura, int edad) {
this.nombre = nombre;
this.altura = altura;
this.edad = edad;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public void setAltura(int altura) {
this.altura = altura;
}

public void setEdad(int edad) {
this.edad = edad;
}

public String getNombre() {
return nombre;
}

public int getAltura() {
return altura;
}

public int getEdad() {
return edad;
}

@Override
public Persona clone() {
Persona clon = new Persona(this.nombre, this.altura, this.edad);
return clon;
}

@Override
public int compareTo(Persona persona) {
int resultado = 0;
if(this.altura < persona.altura) {
resultado = -1;
} else if(this.altura > persona.altura) {
resultado = 1;
} else {
resultado = 0;
}

return resultado;
}

public int compareToEdad(Persona persona) {
int resultado;
if(this.edad < persona.edad) {
resultado = -1;
} else if(this.edad > persona.edad) {
resultado = 1;
} else {
resultado = 0;
}
return resultado;
}

}

Clase TestCompararPersonas:
Código: [Seleccionar]
package interfacecomparable;

public class TestCompararPersonas {

public static void main(String[] args) {

Persona[] persona = new Persona[5];
Persona[] ordenadoPorAltura = new Persona[5];
Persona[] ordenadoPorEdad = new Persona[5];
persona[0] = new Persona("Mario", 187, 22);
persona[1] = new Persona("Pepe", 173, 52);
persona[2] = new Persona("Manuel", 158, 27);
persona[3] = new Persona("David", 164, 25);
persona[4] = new Persona("Alberto", 184, 80);
int posicion;

posicion = 1;
mustraArrays(persona, posicion, "Personas sin ordenar");

for(int i = 0; i < persona.length; i++) {
posicion = 0;
for(int j = 0; j < persona.length; j++) {
if(persona[i].compareTo(persona[j]) > 0) {
posicion++;
}
}
posicion = Math.abs(posicion-4);
ordenadoPorAltura[posicion] = persona[i].clone();
}
posicion = 1;
mustraArrays(ordenadoPorAltura, posicion, "Personas ordenadores por altura");

for(int i = 0; i < persona.length; i++) {
posicion = 0;
for(int j = 0; j < persona.length; j++) {
if(persona[i].compareToEdad(persona[j]) > 0){
posicion++;
}
}
ordenadoPorEdad[posicion] = persona[i].clone();
}
posicion = 1;
mustraArrays(ordenadoPorEdad, posicion,"Personas ordenadores por Edad");
}

public static void mustraArrays(Persona[] persona, int posicion, String msg) {
System.out.println(msg.concat("\n"));
for (Persona tmpItem : persona) {
System.out.println ("\t" + posicion++ + ". ".concat(tmpItem.getNombre().concat(" - Altura: ")) +
tmpItem.getAltura() + " - Edad: " + tmpItem.getEdad());
}
System.out.println("\n**************************************\n");
}
}


Como se pide comparar de dos formas distintas, para la primera de ellas, en la que se comparan las alturas,  usé el método compareTo(), y para la segunda comparación creé un método alternativo a compareTo() para comparar las edades.
También en la clase donde está el main, creé un método para no repetir tantas veces la parte en la que se muestra el listado por pantalla.

Saludos. ;D

2
Buenas.

Dejo una posible solución al ejercicio CU00912C.

Código: [Seleccionar]
EJERCICIO

Define una clase que tenga cuatro atributos de tipo String cada uno de los cuales podrá ser exclusivamente una cadena de 12 ceros o de 12 unos. Es decir, cada atributo puede valer o bien "000000000000" ó bien "111111111111". La clase debe implementar la interface Cloneable y disponer de un método que permita ver el resultado de concatenar sus atributos.

Crea otra clase con el main donde crees un objeto cuyos atributos serán: "000000000000", "000000000000", "000000000000", "000000000000".

A partir de este primer objeto, crea cuatro copias usando el método clone() y modifícalas para llegar a tener cinco objetos (el inicial más los otros cuatro copias del original y luego modificados) cuyo contenido mostrarás por pantalla, debiendo obtener el siguiente resultado:

000000000000000000000000000000000000000000000000

111111111111000000000000000000000000000000000000

000000000000111111111111000000000000000000000000

000000000000000000000000111111111111000000000000

000000000000000000000000000000000000111111111111

Clase CadenasDeDoce:
Código: [Seleccionar]
package clasecloneable;

public class CadenasDeDoce implements Cloneable{

private String cadena1;
private String cadena2;
private String cadena3;
private String cadena4;

public CadenasDeDoce() {
cadena1 = "000000000000";
cadena2 = "000000000000";
cadena3 = "000000000000";
cadena4 = "000000000000";
}

public CadenasDeDoce(String cadena1, String cadena2, String cadena3, String cadena4) {
this.cadena1 = cadena1;
this.cadena2 = cadena2;
this.cadena3 = cadena3;
this.cadena4 = cadena4;
}

public void setCadena1(String cadena1) {
this.cadena1 = cadena1;
}

public void setCadena2(String cadena2) {
this.cadena2 = cadena2;
}

public void setCadena3(String cadena3) {
this.cadena3 = cadena3;
}

public void setCadena4(String cadena4) {
this.cadena4 = cadena4;
}

public String getCadena1() {
return cadena1;
}

public String getCadena2() {
return cadena2;
}

public String getCadena3() {
return cadena3;
}

public String getCadena4() {
return cadena4;
}

@Override
public CadenasDeDoce clone() {
CadenasDeDoce clon = new CadenasDeDoce(this.cadena1, this.cadena2,
this.cadena3, this.cadena4);
return clon;
}

public String toString() {
String contenido;
contenido = cadena1.concat(cadena2.concat(cadena3.concat(cadena4)));
return contenido;
}
}

Clase TestCadenasDeDoce:
Código: [Seleccionar]
package clasecloneable;

public class TestCadenasDeDoce {

public static void main(String[] args) {
CadenasDeDoce ceros = new CadenasDeDoce("000000000000", "000000000000",
"000000000000", "000000000000");
CadenasDeDoce[] unosYceros = new CadenasDeDoce[4];

for(int i = 0; i < unosYceros.length; i++) {
unosYceros[i] = ceros.clone();
}
unosYceros[0].setCadena1("111111111111");
unosYceros[1].setCadena2("111111111111");
unosYceros[2].setCadena3("111111111111");
unosYceros[3].setCadena4("111111111111");

System.out.println(ceros.toString());
for(int i = 0; i < unosYceros.length; i++) {
System.out.println(unosYceros[i].toString());
}
}

}


Saludos. ;D

3
Hola, aquí dejo una posible solución a los dos ejercicios de la unidad CU00909C del curso avanzado de programación Java


Citar
EJERCICIO Nº 1

Crea un programa que elija dos números enteros aleatorios A y B pero no los muestre por pantalla aún. Si los dos números fueran iguales, deberá repetirse la elección hasta que sean distintos. El programa preguntará por quién apostamos, A o B (gana el número más alto). Una vez el usuario haya introducido su apuesta, el programa mostrará el valor de A y B, dirá si hemos ganado la apuesta (acertado el número más alto) o perdido y nos dirá cuántas partidas hemos ganado y perdido hasta el momento. Tras una jugada, nos preguntará si queremos jugar otra vez.

Ejemplo de ejecución:

Apuestas por A o por B ? : A
A saca un 9 y B saca un 6     HAS GANADO!!!
Llevas 1 partidas ganadas y 0 partidas perdidas
Quieres probar otra vez ? (S/N) : S
Apuestas por A o por B ? : A
A saca un 1 y B saca un 8     HAS PERDIDO!!!
Llevas 1 partidas ganadas y 1 partidas perdidas
Quieres probar otra vez ? (S/N) : N
Adiós

Clase TestApuestaPorUnNumero
Código: [Seleccionar]
public class TestApuestaPorUnNumero {

public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 100);
EntradaDeTeclado entrada = new EntradaDeTeclado();
Marcador marcador = new Marcador();
char otraVez;
int numA, numB;
char apuesta;
do{
numA = generador.getNumeroAleatorio();
numB = generador.getNumeroAleatorio();
while(numA == numB) {
numB = generador.getNumeroAleatorio();
}
System.out.println(numA + "; " +numB);
System.out.print("¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
while(apuesta != 'a' && apuesta != 'A' && apuesta != 'b' && apuesta != 'B') {
System.out.println(numA + "; " +numB);
System.out.print("Apuesta erronea, apueste otra vez!!!.\n¿Apuestas por A o por B? ");
apuesta = entrada.getChar();
}
System.out.print("A saca un " + numA + " y B saca un " + numB);
if((numA > numB && (apuesta == 'A' || apuesta == 'a')) ||
(numB > numA && (apuesta == 'B' || apuesta == 'b'))) {
marcador.addAcierto();
System.out.print("\tHAS GANADO!!!\n");
} else {
marcador.addError();
System.out.print("\tHAS PERDIDO!!!\n");
}
marcador.addPartida();
System.out.println("Llevas " + marcador.getPartidas() + " partidas. Has ganado " +
marcador.getAciertos() + " y perdido " + marcador.getErrores() + ".");
System.out.println("¿Quieres apostar otra vez? (S/N): ");
otraVez = entrada.getChar();
} while(otraVez == 's' || otraVez == 'S');

System.out.println("Adiós");
}

}

Clase Marcador
Código: [Seleccionar]
public class Marcador {

private int aciertos;
private int errores;
private int numPartidas;

public Marcador() {
aciertos = 0;
errores = 0;
numPartidas = 0;
}

public void setAciertos(int aciertos) {
this.aciertos = aciertos;
}

public void setErrores(int errores) {
this.errores = errores;
}

public void setNumPartidas(int numPartidas) {
this.numPartidas = numPartidas;
}

public int getAciertos() {
return aciertos;
}

public int getErrores() {
return errores;
}

public int getPartidas() {
return numPartidas;
}

public void addAcierto() {
aciertos++;
}

public void addError() {
errores++;
}

public void addPartida() {
numPartidas++;
}
}

Citar
EJERCICIO Nº 2

Ahora vamos a jugar a la “Lotería primitiva”. Para ello, se pedirá al usuario que introduzca 6 números enteros comprendidos entre el 1 y el 49 ambos incluidos. No estará permitido repetir número. Una vez elegidos los seis números el programa nos mostrará nuestros 6 números así como la combinación ganadora (ordenada de menor a mayor). Esta combinación constará de 6 números entre 1 y 49 elegidos al azar por el programa. Finalmente nos dirá cuántos aciertos hemos tenido y nos preguntará si queremos volver a jugar.

Ejemplo de ejecución:

Elige 6 numeros entre el 1 y el 49.
Elige el numero 1 : 3
Elige el numero 2 : 8
Elige el numero 3 : 14
Elige el numero 4 : 2
Elige el numero 5 : 34
Elige el numero 6 : 38
Numeros Elegidos    : 3  8  14  2  34  38
Combinación ganadora : 6  14   21  27  30  48
Has acertado : 1 números
Quieres probar otra vez ? (S/N) : n
Adiós

Clase TestLoteriaPrimitiva
Código: [Seleccionar]
public class TestLoteriaPrimitiva {
public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios(1, 49);
EntradaDeTeclado entrada = new EntradaDeTeclado();
ListaDeEnteros combinacionGanadora;
ListaDeEnteros apuesta;
int numeroCombinacion, numeroApuesta, aciertos;
char otraVez = 'n';

do{
aciertos = 0;
combinacionGanadora = new ListaDeEnteros();
apuesta = new ListaDeEnteros();
for(int i = 0; i < 6; i++) { // Crea la combinación ganadora
numeroCombinacion = generador.getNumeroAleatorio();
while(combinacionGanadora.getSiListaContiene(numeroCombinacion)){ // Comprueba que no se repita ningún número
numeroCombinacion = generador.getNumeroAleatorio();
}
combinacionGanadora.addNumero(numeroCombinacion);
}

System.out.println("Elija 6 números entre el 1 y el 49.");
for(int i = 0; i < 6; i++) {// Solicita seis números al usuario
System.out.print("Elija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
while(apuesta.getSiListaContiene(numeroApuesta) == true ||
numeroApuesta < 1 || numeroApuesta > 49){ // Comprueba que no se repitan los números introducidos por el usuario
System.out.print("El número introducido está fuera de ragon o repetido." +
"\nElija el numero " + (i+1) + ": ");
numeroApuesta = entrada.getInt();
}
apuesta.addNumero(numeroApuesta);
}
for(int i = 0; i < combinacionGanadora.getSize(); i++) { // Compara la combinación ganadora con la apuesta
if(apuesta.getSiListaContiene(combinacionGanadora.getContenidoPosicion(i))){
aciertos++;
}
}

System.out.println("Número elegidos: " + apuesta.getContenidoCombinacion());
System.out.println("Combinación ganadora: " + combinacionGanadora.getContenidoCombinacion());
System.out.println("Has acertado: " + aciertos + " números.");
System.out.print("¿Quieres probar otra vez? (S/N): ");
otraVez = entrada.getChar();

} while(otraVez == 's' || otraVez == 'S');

System.out.println("Adiós");
}
}

Clase ListaDeEnteros
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaDeEnteros {

    private ArrayList <Integer> listaEnteros;
   
    public ListaDeEnteros() {
    listaEnteros = new ArrayList <>();
    }
   
    public void addNumero(int numero) {
    listaEnteros.add(numero);
    }
   
    public ArrayList<Integer> getNumero() {
        return listaEnteros;
    }
   
    public boolean getSiListaContiene(int numero) {
    return listaEnteros.contains(numero);
    }
   
    public int getSize() {
    return listaEnteros.size();
    }
   
    public int getContenidoPosicion(int index) {
    return listaEnteros.get(index);
    }
   
    public String getContenidoCombinacion(){
        String msg = "";
            for(int numero: listaEnteros) {
                msg += numero + " ";
            }
        return msg;
    }

}

Aquí dejo dos clases más que se usan en ambos ejercercicios.

Clase GeneradorDeNumerosAleatorios
Código: [Seleccionar]
import java.util.Random;

public class GeneradorDeNumerosAleatorios {
private Random rnd;
private int limiteRango1;
private int limiteRango2;

public GeneradorDeNumerosAleatorios() {
rnd = new Random();
this.limiteRango1 = 0;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1, int limiteRango2) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = limiteRango2;
}

public void setLimiteRango1(int limiteRango1) {
this.limiteRango1 = limiteRango1;
}

public void setLimiteRango2(int limiteRango2) {
this.limiteRango2 = limiteRango2;
}

public int getLimiteRango1() {
return limiteRango1;
}

public int getLimiteRango2() {
return limiteRango2;
}

public int getNumeroAleatorio() {
if(limiteRango1 < limiteRango2) {
return rnd.nextInt(limiteRango2 - limiteRango1 + 1) + limiteRango1;
} else {
return rnd.nextInt(limiteRango1 - limiteRango2 + 1) + limiteRango2;
}
}
}

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado {
    Scanner entradaDeTeclado;
    public EntradaDeTeclado ()  {
        entradaDeTeclado = new Scanner(System.in);
    }
 
    public String getString () {
    return entradaDeTeclado.nextLine();
    }
   
    public int getInt() {
    return Integer.parseInt(entradaDeTeclado.nextLine());
    }
   
    public double getDouble() {
    return Double.parseDouble(entradaDeTeclado.nextLine());
    }
   
    public char getChar() {
    String entrada = entradaDeTeclado.nextLine();
    if(entrada.equals("")){
    return ' ';
    } else {
    return entrada.charAt(0);
    }
    }

}

Saludos. ;D

4
Buenas.

Aquí dejo una posible solución al ejercicio CU00908C del curso de programación avanzada en Java.

Clase Test
Código: [Seleccionar]
public class TestAdivnaElNumeroOculto {
public static void main(String[] args) {
GeneradorDeNumerosAleatorios generador = new GeneradorDeNumerosAleatorios();
EntradaDeTeclado entrada = new EntradaDeTeclado();
Marcador marcador;
int numPropuesto, numIntentos;
char otraVez = 'n';
String msgResultado;
do {
System.out.print("Introduce el número inicial del rango: ");
generador.setLimiteRango1(entrada.getInt());
System.out.print("Introduce el número final del rango: ");
generador.setLimiteRango2(entrada.getInt());
System.out.print("Introduce el número de intentos: ");
numIntentos = entrada.getInt();
int[] numEscondidos = new int[numIntentos];
marcador = new Marcador();
for(int i = 0; i < numIntentos; i++) {
numEscondidos[i] = generador.getNumeroAleatorio();
System.out.print("¿Qué número estoy pensando?: ");
numPropuesto = entrada.getInt();
if(numEscondidos[i] == numPropuesto) {
marcador.addAcierto();
System.out.println("Has acertado!!");
} else {
marcador.addError();
System.out.println("No has acertado!!");
}
}
msgResultado = "Has acertado " + marcador.getAciertos() + " veces y has fallado " +
marcador.getErrores() + " veces. Eran solución: " + numEscondidos[0];
if(numEscondidos.length > 1) {
for(int i = 1; i < numEscondidos.length; i++) {
msgResultado += ", " + numEscondidos[i];

}
}
System.out.println(msgResultado + ".");
System.out.print("¿Quieres probar otra vez? (S/N)");
otraVez = entrada.getChar();

} while(otraVez == 's' || otraVez == 'S');
System.out.println("Adiós");
}
}

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado {
    Scanner entradaDeTeclado;
    public EntradaDeTeclado ()  {
        entradaDeTeclado = new Scanner(System.in);
    }
 
    public String getString () {
    return entradaDeTeclado.nextLine();
    }
   
    public int getInt() {
    return Integer.parseInt(entradaDeTeclado.nextLine());
    }
   
    public double getDouble() {
    return Double.parseDouble(entradaDeTeclado.nextLine());
    }
   
    public char getChar() {
    String entrada = entradaDeTeclado.nextLine();
    if(entrada.equals("")){
    return ' ';
    } else {
    return entrada.charAt(0);
    }
    }

}

Clase Marcador
Código: [Seleccionar]
public class Marcador {

private int aciertos;
private int errores;
private int numPartidas;

public Marcador() {
aciertos = 0;
errores = 0;
numPartidas = 0;
}

public void setAciertos(int aciertos) {
this.aciertos = aciertos;
}

public void setErrores(int errores) {
this.errores = errores;
}

public void setNumPartidas(int numPartidas) {
this.numPartidas = numPartidas;
}

public int getAciertos() {
return aciertos;
}

public int getErrores() {
return errores;
}

public int getPartidas() {
return numPartidas;
}

public void addAcierto() {
aciertos++;
}

public void addError() {
errores++;
}

public void addPartida() {
numPartidas++;
}
}

Clase GeneradorDeNumerosAleatorios
Código: [Seleccionar]
import java.util.Random;

public class GeneradorDeNumerosAleatorios {
private Random rnd;
private int limiteRango1;
private int limiteRango2;

public GeneradorDeNumerosAleatorios() {
rnd = new Random();
this.limiteRango1 = 0;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = 0;
}

public GeneradorDeNumerosAleatorios(int limiteRango1, int limiteRango2) {
rnd = new Random();
this.limiteRango1 = limiteRango1;
this.limiteRango2 = limiteRango2;
}

public void setLimiteRango1(int limiteRango1) {
this.limiteRango1 = limiteRango1;
}

public void setLimiteRango2(int limiteRango2) {
this.limiteRango2 = limiteRango2;
}

public int getLimiteRango1() {
return limiteRango1;
}

public int getLimiteRango2() {
return limiteRango2;
}

public int getNumeroAleatorio() {
if(limiteRango1 < limiteRango2) {
return rnd.nextInt(limiteRango2 - limiteRango1 + 1) + limiteRango1;
} else {
return rnd.nextInt(limiteRango1 - limiteRango2 + 1) + limiteRango2;
}
}
}

Saludos. ;D

5
Hola. Dejo una posible solución al ejercicio CU00907C del curso avanzado de programación Java.

Citar
EJERCICIO

Crea un programa para el cálculo del importe final a partir del importe inicial y un porcentaje de impuestos. El importe inicial y el porcentaje de impuestos deben solicitarse al usuario. El programa debe mostrar el resultado ateniéndose a estas reglas: debe mostrarse el impuesto como resultado de calcular el importe inicial por el porcentaje dividido entre 100, con precisión de dos decimales y redondeo al entero más próximo o en caso de equidistancia, redondeo al entero mayor. Debe mostrarse el importe final como resultado de sumar el importe inicial con el impuesto, por tanto tendrá precisión de dos decimales.

Ejemplo de resultados a obtener:

Por favor introduzca el importe inicial: 0.70
Por favor introduzca el porcentaje de impuestos: 5
El impuesto a pagar es: 0.04
El importe final es: 0.74

Código: [Seleccionar]
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class TestEjercicio {

public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);
BigDecimal impuestoFinal, importeFinal, importe, impuesto;

System.out.print("Introduzca el importe inicial: ");
importe = BigDecimal.valueOf(Double.parseDouble(entrada.nextLine()));

System.out.print("\nIntroduzca el porcentanje de impuestos: ");
impuesto = BigDecimal.valueOf(Double.parseDouble(entrada.nextLine()));
entrada.close();

impuestoFinal = redondearNumeroBigDecimal(2, calcularImpuesto(importe, impuesto));
System.out.println("\nEl impuesto a pagar es: " + impuestoFinal);
importeFinal = redondearNumeroBigDecimal(2, sumarDosBigDecimal(importe, impuestoFinal));
System.out.println("El importe final es: " + importeFinal);

}

public static BigDecimal sumarDosBigDecimal(BigDecimal num1, BigDecimal num2) {
BigDecimal resultado = num1.add(num2);
return resultado;
}
public static BigDecimal calcularImpuesto(BigDecimal importeInicial, BigDecimal impuestos) {
BigDecimal impuesto = importeInicial.multiply(impuestos).divide(BigDecimal.valueOf(100));
return impuesto;
}

public static BigDecimal redondearNumeroBigDecimal(int numDecimales, BigDecimal numBig) {
numBig = numBig.setScale(numDecimales, RoundingMode.HALF_UP);
return numBig;
}

}

Saludos.  ;D

6
Buenas.

Aquí dejo otra posible solución al ejercicio del tema CU00905C del tutorial de programación orientada a objetos avanzada.

Citar
EJERCICIO

Crea un programa que pida por pantalla cuatro países y a continuación tres ciudades de cada uno de estos países. Los nombres de ciudades deben almacenarse en un array multidimensional cuyo primer índice sea el número asignado a cada país y el segundo índice el número asignado a cada ciudad.

Código: [Seleccionar]
import java.util.Scanner;

public class Ejercicio {

public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String[][] paises = new String[4][4];

for(int i = 0, j = 0; i < paises.length; i++) {
System.out.print("Introduzca un país: ");
paises[i][j] = entrada.nextLine();
for(j = 1; j < paises[i].length; j++) {
System.out.print("Introduzca ciudad [" + j + "]: ");
paises[i][j] = entrada.nextLine();
}
j = 0;
}
entrada.close();
for(int i = 0, j = 0; i < paises.length; i++) {
System.out.print("Las ciudades de " + paises[i][j] + " introducidas son: ");
for(j = 1; j < paises[i].length; j++) {
if(j == (paises[i].length-1)) {
System.out.print(" y " + paises[i][j] + ".");
} else if(j == (paises[i].length-2)){
System.out.print( paises[i][j]);
} else {
System.out.print( paises[i][j] + ", ");
}
}
j = 0;
System.out.println();
}
}

}

Saludos. ;D

7
Hola, aquí dejo una posible solución al ejercicio CU00904C del curso de programación avanzada en Java.

Citar
EJERCICIO

En España cada persona está identificada con un Documento Nacional de Identidad (DNI) en el que figura un número y una letra, por ejemplo 56999545W

La letra que sigue al número se calcula siguiendo la metodología que vamos a indicar. Crea un programa que calcule la letra de un DNI a partir del número de DNI que introduzca el usuario. Es decir, se debe pedir el DNI sin la letra por teclado y el programa nos devolverá el DNI completo (con la letra).

Para calcular la letra, se debe tomar el resto de dividir nuestro número de DNI entre 23. El resultado debe estar por tanto entre 0 y 22.

Crea un método obtenerLetra(int numeroDNI) donde según el resultado de la anterior fórmula busque en un array de caracteres la posición que corresponda a la letra. Esta es la tabla de caracteres:

Posición     0   1   2   3  4   5   6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22

Letra            T   R  W A  G  M  Y  F  P  D  X    B   N    J    Z    S   Q    V   H    L   C   K   E

Por ejemplo, si introducimos el  DNI 20267079, el resto de dividirlo por 23 sería 8, luego la letra sería la P, que es la que ocupa esa posicion  en la matriz de caracteres.

Clase DNI
Código: [Seleccionar]
public class DNI {

private static final char[] LETRA = {'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'};

public DNI() {}

public char obtenerLetraDNI(int numDNI) {
return LETRA[numDNI%23];
}
}

Clase test

Código: [Seleccionar]
import java.util.Scanner;

public class Test{

public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);
int numDNI;
DNI letra = new DNI();
System.out.print("Introduzca número del DNI: ");
numDNI = Integer.parseInt(entrada.nextLine());
System.out.println("\nEl DNI con letra es: " + numDNI + letra.obtenerLetraDNI(numDNI));
entrada.close();

}

}

Saludos. ;D

8
Bueno, ahora que tengo algo de tiempo empiezo con el curso de Java avanzado.

Citar
EJERCICIO 1

Crea un array numérico con 5 elementos. Los números de cada elemento deben ser valores pedidos por teclado al usuario. Muestra por consola el índice y el valor al que corresponde. Debes utiliza bucles tanto para pedir los valores de los elementos del array como para mostrar su contenido por pantalla.

Código: [Seleccionar]
import java.util.Scanner;

public class Ejercicio1 {

public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
int[] numeros = new int[5];

for(int i = 0; i < 5; i++) {
System.out.print("\nIntroduzca un número entero: ");
numeros[i] = Integer.parseInt(entrada.nextLine());
}
System.out.println();
for(int i = 0; i < 5; i++) {
System.out.println("numeros[" + i + "] contiene el valor " + numeros[i]);
}
entrada.close();
}

}

Citar
EJERCICIO 2

Crea un programa en el que se pida por consola el nombre de 2 alumnos y la nota de cada uno de ellos como valor numérico. El resultado que debe mostrarse es el nombre de cada alumno, su nota y su calificacion como texto (Sobresaliente, Notable, Bien o Suspenso).

Para ello crea un array numérico y otro de String (ambos unidimensionales). En el array numérico se insertarán las calificaciones facilitadas por el usuario entre 0 y 10 (debemos controlar que inserte una nota valida), pudiendo ser decimal. En el array de Strings se insertarán los nombres de los alumnos.

Crea también un array de String donde insertaremos el resultado de la nota con palabras admitiéndose estos valores: Sobresaliente, Notable, Bien o Suspenso.

El programa debe comprobar la nota de cada alumno teniendo en cuenta esta equivalencia:

Si la nota está entre 0 y 4,99 será un Suspenso.

Si la nota está entre 5 y 6,99 será un Bien.

Si la nota está entre 7 y 8,99 será un Notable.

Si la nota está entre 9 y 10 será un Sobresaliente.

Código: [Seleccionar]
import java.util.Scanner;

public class Ejercicio2 {

public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);

System.out.print("Introduzca el número de alumnos: ");
int numAlumnos = Integer.parseInt(entrada.nextLine());

String[] nombres = new String[numAlumnos];
double[] notasN = new double[numAlumnos];
String[] notasS = new String[numAlumnos];

System.out.println();
for(int i = 0; i < nombres.length; i++) {
System.out.print("Introduzca el nombre del alumno: ");
nombres[i] = entrada.nextLine();
do{
System.out.print("\nIntroduzca la nota: ");
notasN[i] = Double.parseDouble(entrada.nextLine());
if(notasN[i] >= 0 && notasN[i] < 5){
notasS[i] = "Suspenso";
} else if(notasN[i] >= 5 && notasN[i] < 7) {
notasS[i] = "Bien";
} else if(notasN[i] >= 7 && notasN[i] < 9) {
notasS[i] = "Notable";
} else if(notasN[i] >= 9 && notasN[i] <= 10) {
notasS[i] = "Sobresaliente";
} else {
notasS[i] = "Nota erronea";
}
} while(notasN[i] < 0 || notasN[i] > 10);
}
entrada.close();
for(int i = 0; i < nombres.length; i++) {
System.out.println("La nota de " +  nombres[i] +  " es " + notasN[i] + ", " + notasS[i]);
}
}



}

Saludos ;D

9
Hola.

Voy  a dejar un pequeño código que he elaborado, y consiste en generar sumas y restas(sin llevadas) de una sola cifra. Lo hice básicamente para que mis hijos practiquen en su aprendizaje. Es algo muy básico pero me gustaría que le echasen un ojo para ver que puedo mejorar. La idea es mejorarlo tomando tiempos, guardando datos, etc..

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Juego Sumas</title>
<meta charset="utf-8" />
<style>
*{font-family: arial}
body{
background: #FFE4C4;
}
#contenedor{
width: 800px;
margin: 10px auto;
padding: 1%;
text-align: center;
}

#contOperacion{
margin-top: 5px;
}
#contOperacion div{
float: left;
}
#propuestaResultado{
outline: 0px;
border: solid 1px #FFFFFF;
text-align: center;
font-size: 150px;
border-radius: 11px;
width: 222px;
}
#operacion{
font-size: 150px;
width: 60%;
}
#propResultado{
width: 40%;
}
#mensaje{
font-size: 150px;
width: 100%;
height: 200px;
}
#contRadios {
width: 100%;
font-size: 44px;
padding: 5px;
}
.boton{
color: #FFFFFF;
border: solid 1px #FFFFFF;
border-radius: 40px;
background: #5F9EA0;

}
#botonResultado, #botonSiguiente{
outline: 0px;
font-size: 77px;
text-align: center;
padding:15px;
margin-top: 5px;
box-shadow: 0px 3px 15px 0px rgb(0, 105, 202);
transition: all 0.10s ease-in-out;
position:relative;
cursor: pointer;
}
#botonResultado:active, #botonSiguiente:active{
top:5px;
box-shadow: 0px 1px 0px 0px rgb(0, 105, 202)
}
</style>
<script>
'use strict';
window.onload = function(){
crearSuma();
var nodoRadioSuma = document.getElementById('suma');
var nodoTipoOperacion = document.getElementsByName('tipoOperacion');
var btnSiguiente = document.getElementById('botonSiguiente');
var btnComprobar = document.getElementById('botonResultado');

// Evento que se ejecuta al hacer click en el botón "Comprobar".
btnComprobar.addEventListener('click', comprobarChecked);

/* Evento para decidir como se actuará al hacer click en el botón "Siguiente"
dependiendo de la opción que este marcada en los botones radio.   */
btnSiguiente.addEventListener('click', function(){
if(nodoRadioSuma.checked){
crearSuma();
}else{
crearResta();
}
});

// Evento que recoge cualquier tipo de pulsación de teclado y comprueba si se ha pulsado la tecla intro.
document.addEventListener('keypress', function(codTecla){
var foco = document.activeElement.id;
if(codTecla.keyCode==13 & foco=='propuestaResultado'){comprobarChecked();}
});

// Evento que se producirá al hacer click en la opción "suma" del botón radio. 
nodoTipoOperacion[0].addEventListener('click', crearSuma);

// Evento que se producirá al hacer click en la opción "suma" del botón radio.
nodoTipoOperacion[1].addEventListener('click', crearResta);

/* Función que usan dos de los eventos anteriores para saber que opción está marcada en el botón radio y
dependiendo de esto, invocar una función determinada.*/
function comprobarChecked(){
if(nodoRadioSuma.checked){
comprobarResultado('suma');
}else{
comprobarResultado('resta');
}
}
}

/**
  * Función que recibe un parámetro booleano, que se encarga del diseño de algunos elementos
  * según si se ha cometido un error o no en la respuesta dada, también
  * indicará que elemento debe de coger el foco después de la comprobación.
*/
function apariencia(hayError){
if(hayError){
document.getElementById('propuestaResultado').disabled = false;
document.getElementById('propuestaResultado').focus();
document.getElementById('mensaje').innerHTML = '';
document.getElementById('propuestaResultado').value = '';
document.getElementById('botonSiguiente').disabled = true;
} else {
document.getElementById('botonSiguiente').disabled = false;
document.getElementById('botonSiguiente').focus();
document.getElementById('propuestaResultado').disabled = true;
}

}

/**
  *Función que crea dos números aleatorios entre el 0 y el 9 que formará la operación(suma).
  */
function crearSuma(){
var sumando = [];
apariencia(true);
sumando[0] = Math.floor(Math.random()*(9-1))+1;
sumando[1] = Math.floor(Math.random()*(9-1))+1;
document.getElementById('operacion').innerHTML = sumando[0] + ' + ' + sumando[1] + ' = ';
}

/**
  * Función que crea dos números aleatorios, el primero entre el 0 y el 9, y el segundo entre 0 y
  * el número anterior, que formará la operación(resta).
  */
function crearResta(){
var minuendo = 0;
var sustraendo = 0;
apariencia(true);
minuendo = Math.floor(Math.random()*(10-1))+1;
sustraendo = Math.floor(Math.random()*(minuendo-1))+1;
document.getElementById('operacion').innerHTML = minuendo + ' - ' + sustraendo + ' = ';
}

/**
  * Función que recibe un parámetro que contiene una cadena de texto, 'suma' o 'resta',
  * a partir de ese parámetro comprobará el resultado de la operación creada anteriormente,
  * dependiendo de si es una resta o una suma y acabará mostrando en pantalla 'erroneo' o
  * 'correcto' dependiendo del resultado.
  */
function comprobarResultado(sumaResta){
var msgBienMal = document.getElementById('mensaje');
var resultadoPropuesto = Number(document.getElementById('propuestaResultado').value);
var operacionPropuesta = document.getElementById('operacion').textContent;
if(sumaResta=='suma'){
var resultado = Number(operacionPropuesta.slice(0,1)) + Number(operacionPropuesta.slice(4,5));
}else{
var resultado = Number(operacionPropuesta.slice(0,1)) - Number(operacionPropuesta.slice(4,5));
}
if(resultado==resultadoPropuesto){
msgBienMal.style.color = 'green';
msgBienMal.innerHTML = '¡Correcto!';
apariencia(false);
}else{
msgBienMal.style.color = 'red';
msgBienMal.innerHTML = '¡Incorrecto!';
}
}

</script>
</head>
<body>
<div id="contenedor">
<div id="contRadios" class="boton">
<label ><input type="radio" name="tipoOperacion" id="suma" checked="checked"/>Suma</label>
<label><input type="radio" name="tipoOperacion" id="resta"/>Resta</label>
</div>
<div id="contOperacion">
<div id="operacion"></div>
<div id="propResultado"><input type="text" id="propuestaResultado"/></div>
</div>
<div id="contBotones" >
<button class="boton" id="botonResultado" >Comprobar</button>
<button id="botonSiguiente" class="boton" >Siguiente</button>
</div>
<div id="mensaje"></div>
</div>
</body>
</html>


Saludos. ;D

10
Buenas, dejo una posible solución al ejercicio CU00552F del tutorial aprende a programar en C como si estuvieras en primero.


Citar
EJERCICIO

Reescribe el programa siguiente para que todas las funciones tengan un tipo de retorno y que los mensajes no sean mostrados por las distintas funciones, sino que la muestra de mensajes sea realizada exclusivamente por la función main. Esto se corresponde con reorganizar o reescribir un código para mejorarlo, y a esto se le suele denominar “refactorización del código”.

Código: [Seleccionar]
//Programa cálculos con impares02
#include <stdio.h>
#include <stdlib.h>

#define NMAX 19
int obtenerValorParaCalculo(); void resolverSumatorio (int numeroItemsSum);
void resolverProducto (int numeroItemsProd);

int main() {
    int valorParaCalculo=0;    int opcionUsuario = 1;
    while (opcionUsuario!=4) {
        printf("\n\n1: Introducir valor\n2: Calcular serie 1+3+5...\n");
        printf("3: Calcular serie 1*3*5...\n4: Salir\n\nElija opcion: ");
        scanf("%d", &opcionUsuario);
        if (opcionUsuario==1) {
            valorParaCalculo =  obtenerValorParaCalculo();
        }

        if (opcionUsuario==2) {
            if (valorParaCalculo!=0) {
                resolverSumatorio(valorParaCalculo);
            } else {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }

        if (opcionUsuario==3) {
            if (valorParaCalculo!=0) {
                resolverProducto(valorParaCalculo);
            } else {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}


int obtenerValorParaCalculo() {
    int imparElegido = 0;
    do {
        printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
        scanf("%d", &imparElegido);
    } while (imparElegido<=0 || imparElegido>NMAX ||imparElegido%2==0);
    return imparElegido; // Ejercicios resueltos de programación aprenderaprogramar.com
}

void resolverSumatorio (int valorCalculoSum) {
    int impar = -1;      long resultadoSum =0;
    do {
        impar = impar + 2;
        resultadoSum = resultadoSum + impar;
    } while (impar < valorCalculoSum);
    printf("n = %d El valor del sumatorio es: %ld", valorCalculoSum, resultadoSum);
}

void resolverProducto (int valorCalculoProd) {
    int impar = -1;     long resultadoProd = 1;
    do {
        impar = impar + 2;
        resultadoProd = resultadoProd * impar;
    } while (impar < valorCalculoProd);
    printf("n = %d El valor del producto es: %ld", valorCalculoProd, resultadoProd);
}

Solución:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

#define NMAX 19
int obtenerValorParaCalculo();
long resolverSumatorio (int numeroItemsSum);
long resolverProducto (int numeroItemsProd);
int main() {
    int valorParaCalculo=0;    int opcionUsuario = 1;
    while (opcionUsuario!=4) {
        printf("\n\n1: Introducir valor\n2: Calcular serie 1+3+5...\n");
        printf("3: Calcular serie 1*3*5...\n4: Salir\n\nElija opcion: ");
        scanf("%d", &opcionUsuario);
        if (opcionUsuario==1) {
            valorParaCalculo =  obtenerValorParaCalculo();
        }
        if (opcionUsuario==2) {
            if (valorParaCalculo!=0) {
                printf("n = %d El valor del sumatorio es: %ld", valorParaCalculo, resolverSumatorio(valorParaCalculo));
            } else {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }
        if (opcionUsuario==3) {
            if (valorParaCalculo!=0) {
                printf("n = %d El valor del producto es: %ld", valorParaCalculo, resolverProducto(valorParaCalculo));
            } else {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}
int obtenerValorParaCalculo() {
    int imparElegido = 0;
    do {
        printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
        scanf("%d", &imparElegido);
    } while (imparElegido<=0 || imparElegido>NMAX ||imparElegido%2==0);
    return imparElegido; // Ejercicios resueltos de programación aprenderaprogramar.com
}
long resolverSumatorio (int valorCalculoSum) {
    int impar = -1;      long resultadoSum =0;
    do {
        impar = impar + 2;
        resultadoSum = resultadoSum + impar;
    } while (impar < valorCalculoSum);
    return resultadoSum;
}
long resolverProducto (int valorCalculoProd) {
    int impar = -1;     long resultadoProd = 1;
    do {
        impar = impar + 2;
        resultadoProd = resultadoProd * impar;
    } while (impar < valorCalculoProd);
    return resultadoProd;
}

Saludos.  ;D

11
Hola, dejo una posible solución al ejercicio CU00551F del taller de programación aprende lenguaje C.

Citar
EJERCICIO
Crea un programa en C que pida una cadena al usuario y muestre por pantalla la cadena invertida.
Por ejemplo, si la cadena introducida es calor, deberá mostrarse por pantalla rolac. Si la cadena introducida es aprenderaprogramar.com deberá mostrarse por pantalla moc.ramargorparednerpa

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char cadena[200];
    int i = 0;
    int j;
    printf("Introduce una cadena de texto: \n");
    gets(cadena);
    printf("\nLa cadena introducida es: %s\n\n", cadena);
    while(cadena[i]!='\0'){
        i++;
    }
    printf("La cadena al rev\x82s es:\n\t");
    for (j=i-1; j>=0; j--){
        printf("%c", cadena[j]);
    }
    puts("");
    return 0;
}

Saludos.  ;D

12
Buenas, dejo una posible solución a este ejercicio (CU00550F del curso para aprender a programar en lenguaje C).

Citar
EJERCICIO Nº1
Refactoriza el código que hemos visto como ejercicio resuelto para que cumpla con estos requisitos:
a) La función entraDatos deberá tener como tipo de retorno int en lugar de void, de modo que devolverá el valor introducido por el usuario.
b) La función proceso ya no existirá y en su lugar tendremos dos funciones: calcularRaiz(int num) y calcularSumatorio (int num)
c) La función resultados ya no existirá y su cometido será realizado dentro del main.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int entraDatos(); double calculaRaiz(int num); int calcularSumatorio(int num);
int main() {
    int num = entraDatos();
    printf("La ra\xA1z cuadradada de %d es: %lf\n", num, calculaRaiz(num));
    printf("El sumatorio de %d es: %d", num, calcularSumatorio(num));
    return 0;
}

int entraDatos() {
    int dato = 0;
    do {
        printf("\nPor favor introduzca numero entero entre 0 y 100: ");
        scanf("%d", &dato);
    } while (dato<0 || dato>100);
    return dato;
}

double calculaRaiz(int num){
    double resultado;
    resultado = sqrt(num);
    return resultado;
}

int calcularSumatorio(int num) {
    int resultado = num;
    int i = num -1;
    for (i; i>0; i--) {
        resultado = resultado + i;
    }
    return resultado;
}

Citar
EJERCICIO Nº 2
Estudia el siguiente código y responde a las preguntas:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
// Ejercicios curso C aprenderaprogramar.com

//---------------------------------
void fun(int arr[]) {
int i;
for(i=0;i< 5;i++)
 arr[i] = arr[i] + 10;
}
//--------------------------------
void main() {
int arr[5],i;
clrscr();
printf("\nEnter the array elements : ");
for(i=0;i< 5;i++)
 scanf("%d",&arr[i]);

printf("\nPassing entire array .....");
fun(arr);  // Pass only name of array

for(i=0;i< 5;i++)
 printf("\nAfter Function call a[%d] : %d",i,arr[i]);

getch();
}

Citar
a) Busca información sobre conio.h, clrscr() y getch() ¿Forman parte del estándar de C?

No,La librería conio.h no se considera parte de la biblioteca estándar de C.

Citar
) Si el programa no te funciona, reescríbelo para que funcione.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

void fun(int arr[])
{
    int i;
    for(i=0; i< 5; i++)
        arr[i] = arr[i] + 10;
}
void main()
{
    int arr[5],i;
    printf("\nEnter the array elements : ");
    for(i=0; i< 5; i++)
        scanf("%d",&arr[i]);

    printf("\nPassing entire array .....");
    fun(arr);  // Pass only name of array

    for(i=0; i< 5; i++)
        printf("\nAfter Function call a[%d] : %d",i,arr[i]);
}

Citar
c) ¿Qué objetivo tiene este programa? ¿Qué resultado debe devolver si se introducen los números 1, 2, 3, 4, 5?

Introducimos valores en un array de enteros de 5 elementos, luego cambiamos los valores de cada elemntos sumandole 10 a cada uno y luego lo mostramos por pantalla.
    Passing entire array .....
    After Function call a[0] : 11
    After Function call a[1] : 12
    After Function call a[2] : 13
    After Function call a[3] : 14
    After Function call a[4] : 15

Citar
d) ¿Es válido un bucle for sin llaves delimitadoras { … } de las instrucciones a ejecutar?

Si.

Saludos. ;D

13
Hola, dejo una posible solución al ejercicio CU00549F del tutorial de programación online en lenguaje C.

Citar
EJERCICIO Nº1
Escribe una función que use un bucle for para calcular la potencia de un número al que denominaremos base sobre otro número al que denominaremos exponente, ambos recibidos como parámetros.
Ejemplo: la función recibe como base el 4 y como exponente el 3. El resultado devuelto debe ser el resultado de multiplicar la base por sí misma 3 veces, en este ejemplo 4*4*4 = 64.
Escribe un programa donde se pida al usuario base y exponente y se muestre el resultado de calcular la potencia (base elevada al exponente). Tras esto, se debe pedir al usuario si quiere repetir con otros datos o no (s/n). En caso de que el usuario elija s se le volverá a pedir base y exponente, y en caso contrario el programa debe finalizar.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double potencia(double numBase, int numExponente);

int main(){
    double base = 0;
    int exponente = 0;
    char respuesta = 's';
    puts("Calcular la potencia de un n\xA3mero.\n\n");
    while(respuesta == 's' || respuesta == 'S') {
        printf("Introduce la base de la potencia: ");
        scanf("%lf", &base);
        printf("Introduce el exponente de la potencia: ");
        scanf("%d", &exponente);
        printf("El resultado de %.2lf elevado a %d es: %.2lf\n", base, exponente, potencia(base, exponente));
        printf("\n\nCalcular otra potencia (S/N)? ");
        fflush( stdin ); // Se usa para limpiar el intro que queda en el buffer
        scanf("%c", &respuesta);
    }
    return 0;
}
double potencia(double numBase, int numExponente) {
    int i = 0;
    double resultado = numBase;
    for(i=0; i<numExponente-1; i++){
        resultado = resultado * numBase;
    }
    return resultado;
}

Citar
EJERCICIO Nº 2
Estudia el siguiente código y responde a las preguntas:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Ejercicios curso C aprenderaprogramar.com
void stars2 (int n) {
    int i;
    for (i=1; i<=n; ++i) {
        printf ("*");
    }
    printf ("\n");
}

int main (void) {
    int a;
    a=10;
    stars2 (20);
    stars2 (a);
    stars2 (a+2);
    return (0);
}

Citar
a) ¿Cuántas funciones se declaran en este código? ¿Es main una función?

Hay dos funciones. Si.

Citar
b) Explica cuántos parámetros reciben y de qué tipo son los parámetros para cada una de las funciones que existan en este código.

La función stars2 recive un parámetro de tipo entero.
La función main recive "void", es decir no recibe nada.

Citar
c) ¿Cuántas veces se invoca la función stars2 en el código? ¿Qué ocurre con cada una de esas invocaciones? ¿Cuál es el valor devuelto por la función stars2?

Tres veces. La primera vez, se imprimen por pantalla 20 asteriscos, las segunda 10 y la tercera 12.
Esta función no devuelve ningún valor.

Citar
d) ¿Qué ocurre si escribimos stars2(0)? ¿Por qué?

Que en la función stars2() no se ejecutara el bucle for, ejecutandose nada más la última línea de esta función
que imprime un salto de línea. Esto ocurre porque el bucle debería de ir desde i=1 hasta i<=n, y n al ser cero, i ya no
puede ser menor que n.


Saludos. ;D

14
Hola, aquí dejo una posible solución al ejercicio CU00548F del curso de programación en lenguaje C.

Citar
EJERCICIO
Estudia el código que se muestra más abajo y responde a las preguntas

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int check_prime(int num);

int main(){
   int n1,n2,i,flag;
   printf("Enter two numbers(intervals): ");
   scanf("%d %d",&n1, &n2);
   printf("Prime numbers between %d and %d are: ", n1, n2);
   for(i=n1+1;i<n2;++i)
   {
      flag=check_prime(i);
      if(flag==0)
         printf("%d ",i);
   }
   return 0;
}

int check_prime(int num) {
   int j,flag=0;
   for(j=2;j<=num/2;++j){
        if(num%j==0){
            flag=1;
            break;
        }
   }
   return flag; // Ejercicios aprenderaprogramar.com
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve la función check_prime? ¿Qué resultado devolverá si le pasamos el número 4? ¿Por qué?

Comprueba si un número es primo, si lo es, devuelve 0, y sino devuelve 1.
Devolverá 1, porque 4%2 = 0.

Citar
b) En dicha función se usa la siguiente definición de bucle: for(j=2;j<=num/2;++j) ¿Por qué crees que el bucle tiene un valor inicial 2? ¿Por qué crees que el bucle tiene un valor final num/2?

Porque para saber si un número es primo, lo normal es empezar dividiéndolo por el número primo mas pequeño, y este es el 2.
Porque para comprobar los divisores de un número, el primer divisor después de el mismo, no puede ser mayor de la mitad
de dicho número.

Citar
c) ¿La variable flag que se usa en el main es la misma que se usa en la función check_prime? ¿Es posible declarar y usar dos variables con el mismo nombre en la función main? ¿Y declarar y usar dos variables con el mismo nombre en la función main y otra función? ¿Por qué?.

No, porque ambas son de ámbito local a la función.
No.
Si, porque ambas tendrían ámbito local a la función en la que estén.

Citar
d) Crea una tabla de variables del programa que conste de las siguientes columnas: nombre de variable, ámbito, utilidad. Por ejemplo la variable i tiene nombre de variable i, ámbito la función main, y utilidad servir como índice en el bucle for del main.

Nombre variable ÁmbitoUtilidad
n1main() tendrá el valor del primer número
n2 main()tendrá el valor del segundo número
i main()servir como índice en el bucle for del main()
flag main() almacenar el valor que devuelve la función check_prime()
jcheck_prime() servir como índice en el bucle for
flagcheck_prime() almacenar el resultado que devolverá la función check_prime()

Citar
e) Si se introducen como números 11 y 30 ¿Son evaluados 11 y 30? ¿Qué resultado se obtiene? ¿Por qué?

No.
13, 17, 19, 23, 29
Porque se evaluarán los número comprendidos enre i=n1+1 hasta i<n2.


Saludos. ;D

15
Hola, dejo una posible solución para el ejercicio CU00547F del curso online de programación en Lenguaje C.

Citar
EJERCICIO
Estudia el siguiente código:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int max(int num1, int num2);
 
int main () {
   int a = 100;
   int b = 200;
   int ret;
   ret = max(a, b);
   printf( "Max value is : %d\n", ret );
   return 0;
}
 
int max(int num1, int num2) {
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;
   return result; //Ejercicios aprenderaprogramar.com
}
Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve la función max? ¿cuál será el resultado del programa?
Para determinar cual de los dos números es mayor.
"Max calue is : 200"

Citar
b) ¿En qué línea se produce la llamada a la función max? ¿Qué valor se almacenará en la variable ret y por qué?
ret = max(a, b);
200, que es el resultado que devuelve la función max.

Citar
c) Reescribe el código de modo que todos los if lleven corchetes delimitadores { … } tanto para los if como para los else.
Código: [Seleccionar]
int max(int num1, int num2);
 
int main () {
   int a = 100;
   int b = 200;
   int ret;
   ret = max(a, b);
   printf( "Max value is : %d\n", ret );
   return 0;
}
 
int max(int num1, int num2) {
   int result;
   if (num1 > num2){
      result = num1;
   }else{
      result = num2;
   }
   return result; //Ejercicios aprenderaprogramar.com
}

Citar
d) Crea un programa análogo a este con una función que permita determinar, dados tres números, cuál es el mayor. Invoca la función pasándole como datos 23, 87, 45 y muestra el resultado devuelto por la función por pantalla.
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int max(int num1, int num2, int num3);

int main() {
    int num1 = 23;
    int num2 = 87;
    int num3 = 45;
    int resultado;

    resultado = max(num1, num2, num3);
    printf( "El valor m\xA0ximo es : %d\n", resultado );
    return 0;
}
int max(int num1, int num2, int num3) {
    int resultado = 0;
    if (num1 > num2 && num1 > num3){
        resultado = num1;
    } else if (num2 > num1 && num2 > num3){
        resultado = num2;
    } else if (num3 > num1 && num3 > num2){
        resultado = num3;
    }
    return resultado;
}

Saludos. ;D

16
Hola, aquí dejo una posible solución a este ejercicio CU00546F del curso de programador en Lenguaje C.

Citar
EJERCICIO Nº1
Estudia el siguiente código y responde a las preguntas:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/*  C program to demonstrate the working of goto statement. */

int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs: ");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       goto jump;             /* control of the program with goto */
       sum=sum+num;
}
jump:
  average=sum/(i-1);       
  printf("Average: %.2f",average);
  return 0;
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?
Programa que calcula la media de n números enteros. Sumará esos tres números y el resultado lo dividirá entre 3, para mostrar por pantalla la media de esos tres números. Que calculará la media de solo un número, en este caso el 10, y dará como resultado 10, porque el goto hace que el programa salga del for, sin que se pueda seguir introduciendo datos después de introducir un número negativo.

Citar
b) Ejecutando el código ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?
Que "average = 5.67", por lo explicado en el apartado anterior. Que average vale 10, por lo explicado en la pregunta anterior.

Citar
c) ¿Qué signficado tiene ++i en el contexto de este programa?
El mismo que si usamos i++, es decir, sumamos 1 a i.

Citar
d) ¿Es equivalente escribir      if( num<0.0) goto jump;      y      if( num < 0.0) { goto jump; }  ?
Si.

Citar
e) Haz que el código ofrezca los mismos resultados evitando el uso de goto.
Código: [Seleccionar]
int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs: ");
   scanf("%d",&n);
   for(i=1;i<=n;i++){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num==0 || num>0){sum=sum+num;}
    }
  average=sum/(i-1);
  printf("Average: %.2f",average);
  return 0;
}

Citar
EJERCICIO Nº2
Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/*  C program to demonstrate the working of goto statement. */

int main() {
   int age;
   Vote:
     printf("you are eligible for voting");

   NoVote:
     printf("you are not eligible to vote");

   printf("Enter you age:");
   scanf("%d", &age);
   if(age>=18)
        goto Vote;
   else
        goto NoVote;

   return 0;
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos el número 22?
Para comprobar si se tiene mayoría de edad para poder votar.
Que se imprimirá por pantalla los tres printf que hay, y nos vuelve a preguntar otra vez lo mismo, y dependiendo de si la edad es menor o mayo que 18, el programa se ejecutará sobre el primer printf o el segundo, generando una especie de recursión de la cual el programa no saldrá nunca, según está diseñado.

Citar
b) Crea otro programa equivalente (que produzca los mismos resultados) sin hacer uso de la sentencia goto.
Código: [Seleccionar]
int main() {
   int age;
   printf("Enter you age:");
   scanf("%d", &age);
   if(age>=18){
       printf("you are eligible for voting");
   } else {
        printf("you are not eligible to vote");
   }
   return 0;
}

Saludos. ;D

17
Buenas, dejo una posible solución al ejercicio CU00545F del tutorial básico de programación en lenguaje C.

Citar
EJERCICIO
Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com

int main () {
   /* local variable definition */
   int a = 10;
   /* while loop execution */
   while( a < 20 ) {
      printf("value of a: %d\n", a);
      a++;       
      if( a > 15) {
         break;
      }   
   }
   return 0;
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿cuál será el resultado del programa?
Que se mostrara por pantalla el mensaje desde que "a" valga 10 hasta que "a" valga 16, y luego  mediante la sentencia "break" se saldrá del "while".

Citar
b) Ejecutando el código ¿cuál es el resultado del programa?
Que se muestra por pantalla  desde que a vale 10 hasta que a vale 15. Es decir que cuando se ejecuta la sentencia "break", las líneas anteriores en la iteración no se ejecutan.

Citar
¿Qué signficado tiene a++ en el contexto de este programa?
Cada vez que se ejecuta "a++" se incrementa en 1 el valor que tuviese anteriormente "a".

Citar
¿Es equivalente escribir      if( a > 15) break;      y      if( a > 15)  { break; }  ?
Si, da el mismo resultado.

Citar
Haz que el código cuente desde 10 hasta 15 sin hacer uso de break (usa sólo las condiciones naturales de un bucle while).


Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main () {
   /* local variable definition */
   int a = 10;
   /* while loop execution */
   while( a <= 15) {
      printf("value of a: %d\n", a);
      a++;
      //if( a > 15)
       // break;
   }
   return 0;
}

Saludos. ;D

18
Hola, dejo una posible solución al ejercicio CU00544F del curso online de programación en lenguaje C.

Citar
EJERCICIO Nº 1
Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Ejercicios aprenderaprogramar.com

int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs\n");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       break;
       sum=sum+num;
}
  average=sum/(i-1);       
  printf("Average=%.2f",average);
  return 0;
}
Citar
a) ¿Para qué crees que sirve este código?
Programa que nos dirá la media n números.

Citar
b) Qué ocurre si introducimos como maximum no. of inputs 8 e introducimos los números 1.5, 12.5 y -1 ¿Por qué ocurre eso? ¿Qué significado tiene lo que se muestra por pantalla?
Que en cuanto introducimos un número negativo, el programa solo nos devolverá el resultado de calcular de la media de los número introducidos, exceptuando el número negativo. Esto ocurre porque así lo indica en esta línea:
   
Código: [Seleccionar]
if(num<0.0) break;
Citar
c) ¿Qué signficado tiene %.2f dentro de este programa?
Que se imprimirá una variable tipo float con 2 decimales.

Citar
EJERCICIO Nº 2
Estudia el siguiente código y responde a las preguntas:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Ejercicios aprenderaprogramar.com

int main(){
    int i,num,product;
    for(i=1,product=1;i<=4;++i){
        printf("Enter num%d:",i);
        scanf("%d",&num);
        if(num==0)
            continue; 
        product*=num;
}
    printf("product=%d",product);
return 0;
}

Citar
¿Para qué crees que sirve este código?
Nos dice el producto de 4 números que introduciremos previamente.
Ej: si introducimos estos 4 números: 4, 3, 2, 1 nos devolverá 4*3*2*1.

Citar
Qué ocurre si introducimos como números 3, 0, -5, 2 ¿Por qué ocurre eso? ¿Qué significado tiene lo que se muestra por pantalla?
Que solo multiplica los número que sean distintos de 0. Esto ocurre porque en el if se comprueba si se introduce 0 como valor, y si es así, usamos continue para que el código no multiplique 0 por la variable donde hemos ido almacenando el valor de las multiplicaciones anteriores.

Citar
¿Es legal escribir un if sin los corchetes { … }?
No.

Citar
Qué ocurre si introducimos como números 0, 0, 0, 0 ¿Por qué ocurre eso? ¿Qué significado tiene lo que se muestra por pantalla?
Que el producto nos devuelve 1, porque es el valor que le hemos asignado a la variable product anteriormente.

Saludos. ;D

19
Buenas.

Dejo posible solución al ejercicio CU00543F del tutorial para principiantes de lenguaje de programación C.

Citar
EJERCICIO

En un archivo denominado miTexto.txt existen varias líneas de texto. Crear un programa que extraiga el contenido de las líneas hasta el final del archivo usando eof ó feof y las muestre por pantalla.

Ejemplo: si el contenido del archivo es el siguiente.

Cumpliendo con mi oficio
piedra con piedra, pluma a pluma,
pasa el invierno y deja
sitios abandonados.
 

El resultado de ejecución deberá ser el siguiente:

Linea 1 contiene: Cumpliendo con mi oficio
Linea 2 contiene: piedra con piedra, pluma a pluma,
Linea 3 contiene: pasa el invierno y deja
Linea 4 contiene: sitios abandonados.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main() {
    char texto[20][200];
    int i = 0;
    FILE* fichero;
    fichero = fopen("miTexto.txt", "rt");
    while (!feof(fichero)) {
        fgets(texto[i], 200, fichero);
        printf("L\xA1nea %d contiene: %s\n", i+1, texto[i]);
        i++;
    }
    fclose(fichero);
    return 0;
}

Y el archivo de texto contiene:
Código: [Seleccionar]
Cumpliendo con mi oficio
piedra con piedra, pluma a pluma,
pasa el invierno y deja
sitios abandonados.

Saludos.  ;D

20
Posible solución al ejercicio CU00542F del curso básico de programación en lenguaje C.

Citar
EJERCICIO

Crear un programa que muestre en pantalla un diamante formado por asteriscos, dado un valor de número de asteriscos máximo en el punto central del diamante o rombo. Ejemplo: si el valor en el punto central es 5 el rombo sería:

Ejemplo:

    *

   **

  ***

 ****

*****

 ****

  ***

   **

   *

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>


int main()
{
    int i = 0;
    int j = 0;
    int limiteMaximo = 0; // número máximo de asteriscos que contendra la línea central del diamante
    int numEspacios;

    // pedimos que se introduzca el número de asteriscos que contendrá la línea central del diamante.
    printf("Vamos a dibujar un diamante formado por asteriscos.\n\n"
        "Si el n\xA3mero introducido es par, el rombo tendr\xA0 un espacio entre cada asterisco.\n"
        "Si el n\xA3mero introducido es impar, el rombo no tendr\xA0 espacios entre los asteriscos.\n"
        "Introduce un n\xA3mero mayor que 3 para saber cuantos asteriscos contendr\xA0 la l\xA1nea central del diamante: ");
    scanf("%d", &limiteMaximo);
    numEspacios = limiteMaximo / 2;

    if (limiteMaximo > 3 && !(limiteMaximo%2==0)) {
        for (i=1; i<=limiteMaximo; i++) {
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            for (j=0; j<(limiteMaximo-(numEspacios*2)); j++) {
                printf("*");
            }
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            printf("\n");
            if (i < ((limiteMaximo/2)+1)){
                numEspacios--;
            } else {
                numEspacios++;
            }
        }
    } else if(limiteMaximo > 3) {
        limiteMaximo = limiteMaximo+(limiteMaximo);
        numEspacios = limiteMaximo/2;
        for (i=1; i<=limiteMaximo; i++){
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            for (j=0; j<(limiteMaximo-(numEspacios*2)); j++) {
                if(i%2==0){
                   if(((j+numEspacios)%2)!=0){
                        printf("*");
                    } else {
                        printf(" ");
                    }
                } else {
                    if(((j+numEspacios)%2)==0){
                        printf("*");
                    } else {
                        printf(" ");
                    }
                }
            }
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
             printf("\n");
            if (i < ((limiteMaximo/2)+1)){
                numEspacios--;
            } else {
                numEspacios++;
            }
        }
    } else {
        puts("\n\n\t\tEl n\xA3mero introducido no es mayor que 3.");
    }
    return 0;
}

Resolví el ejercicio de dos formas distintas, dependiendo de si se introduce un número par o impar como respuesta a la pregunta ¿Cuantos asteriscos contendrá la fila central del diamante?, si el número es impar se resolverá como el ejemplo del enunciado y si es par, se dejará un espacio en blanco entre cada asterisco.


Saludos.  ;D

Páginas: [1] 2 3 4 5 6 ... 8
Esto es un laboratorio de ideas...
Aprender a programar

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".