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.


Mensajes - CoduJ

Páginas: [1] 2
1
Y para agregar algo más a la respuesta de Kabuto; la práctica es algo muy valioso (sobre todo en este tipo de área). Te recomiendo mejorar tu lógica de programación y resolver ejercicios constantemente; a veces yo suelo de tomar de referencias algunos y los modifico un poco (de vez en cuando no entiendo bien lo que dice el enunciado, así que lo "adapto" a cómo lo entiendo), también suelo crear mis propios ejercicios. Si quieres hacer varios ejercicios, te recomiendo una página que me ha ayudado mucho y he avanzado bastante (pero aún no tengo un código muy limpio, ja); la página es https://projecteuler.net/; si en el principio te quedas muy atascado, no te preocupes, de hecho, eso es bueno, ya que ahí puedes identificar que realmente necesitas desarrollar ciertas cosas. A mí, por ejemplo, me tomó más de 3 semanas avanzar, pero todo ese tiempo invertido me dieron frutos. Suerte.

2
Aprender a programar desde cero / Re: Ayuda en C++
« en: 14 de Enero 2021, 00:07 »
Hola.
Un consejo, puedes utilizar la etiqueta
Código: [Seleccionar]
"[ code ]" "[ / code ]" (sin comillas y sin  espacios dentro de los corchetes).
Mmm... perdón si estoy mal, pero a los dichosos "subprogramas" que mencionas, ¿te refieres a las funciones?

3
Hola, comunidad.
Hice un sencillo programa que trata de disimular la tarea de ir de compras a un mercado; cabe mencionar que el hecho de que no halla funciones para dividir este problema, es adrede, quería intentar cómo sería hacerlo sin esa "técnica".  Invito a que ustedes también puedan compartir una manera más de resolverlo.

Código: [Seleccionar]
#include<iostream>

using namespace std;

/*
run: variable bool para ser constante en la ejecución del programa
money: variable int que simulara dinero para la compra de productos
minusMoney: variable int que restará el valor de "money" según el precio del producto
multProduct: variable int que sirve para multiplicar el precio de un producto según sea la cantidad pedida
shoppCart: variable string, array; simulará un carrito de compras
marketProduct: variable iny, array; serán los productos
*/
int main(){
int vegeFruts[3]; //vegetales y frutas
vegeFruts[0] = 2; //tomates
vegeFruts[1] = 4; //papas
vegeFruts[2] = 4; //lechuga
int breadRep[3]; //panaderia y reposteria
breadRep[0] = 2; //pan
breadRep[1] = 4; //pastel
breadRep[2] = 2; //dona
int snack[3]; //snacks
snack[0] = 2; //mani
snack[1] = 3; //nuez
snack[2] = 4; //papas fritas
int drink[3]; //bebidas
drink[0] = 5; //soda
drink[1] = 5; //jugo
drink[2] = 4; //te
int money = 2000, minusMoney = 0, multProduct = 0, opc = 0, indFil = 0, indCol = 0;
string shoppCart[16];
string totalProductNum[16];
string totalProduct[3][4];
//vegetales y frutas
totalProduct[0][0] = "Tomate";
totalProduct[1][0] = "Papa";
totalProduct[2][0] = "Lechuga";
//panaderia y reposteria
totalProduct[0][1] = "Pan";
totalProduct[1][1] = "Pastel";
totalProduct[2][1] = "Dona";
//snack
totalProduct[0][2] = "Mani";
totalProduct[1][2] = "Nuez";
totalProduct[2][2] = "Mani confitado";
//bebidas
totalProduct[0][3] = "Soda";
totalProduct[1][3] = "Jugo";
totalProduct[2][3] = "Te";
string multProductString;
bool run = true;

for(int i = 0; i < 16; i++){
shoppCart[i] = "[vacio]";
}
while(run){
do{
system("cls");
cout<<"\t--- Bienvenido a la tienda ---\nUsted cuenta con "<<money<<" de dinero."<<endl;
cout<<"1. Vegetales y frutas.\n2. Panaderia y reposteria.\n3. Snacks.\n4. Bebidas.\n5. Ver carrito.\n6. Salir."<<endl;
cin>>opc;
indCol = opc-1;
}while(opc < 1 || opc > 6);
switch(opc){ //opciones
case 1: //vegetales y frutas
do{
system("cls");
cout<<"1. Tomate | $2\n2. Papa | $4\n3. Lechuga | $4"<<endl;
cin>>opc;
indFil = opc-1;
}while(opc <= 0 || opc > 3);
minusMoney = vegeFruts[opc-1];
break;
case 2: //panaderia y reposteria
do{system("cls");
cout<<"1. Pan | $2\n2. Pastel | $4\n3. Dona | $2"<<endl;
cin>>opc;
indFil = opc-1;
}while(opc <= 0 || opc > 3);
minusMoney = breadRep[opc-1];
break;
case 3: //snack
do{
system("cls");
cout<<"1. Mani | $2\n2. Nuez | $3\n3. Mani confitado | $4"<<endl;
cin>>opc;
indFil = opc-1;
}while(opc <= 0 || opc > 3);
minusMoney = snack[opc-1];
break;
case 4: //bebidas
do{
system("cls");
cout<<"1. Soda | $5\n2. Jugo | $4\n3. Te | $4"<<endl;
cin>>opc;
indFil = opc-1;
}while(opc <= 0 || opc > 3);
minusMoney = drink[opc-1];
break;
case 5: //carrito
do{
system("cls");
for(int i = 0; i < 16; i++){
if(shoppCart[i] == "[vacio]"){
cout<<i+1<<". "<<shoppCart[i]<<endl;
}else{
cout<<i+1<<". "<<totalProductNum[i]<<" x "<<shoppCart[i]<<endl;
}
}
cout<<"1: Quitar producto del carro. | 2: Salir."<<endl;
cin>>opc;
if(opc == 1){
do{
cout<<"Escriba el numero que corresponde al producto que desea retirar; 0 para salir."<<endl;
cin>>opc;
if(opc == 0){
break;
}
shoppCart[opc-1] = "[vacio]";
}while(opc <= 0 || opc > 16 || shoppCart[opc-1] == "[vacio]");
}else if(opc == 2){
break;
}
}while(opc <= 0 || opc > 2);
opc = 5;
break;
case 6: //salir
run = false;
}
if(opc < 5){
do{
cout<<"Cantidad: "; cin>>multProduct; //multiplicar el precio del producto segun la cantidad
}while(multProduct <= 0);
minusMoney *= multProduct;
if(money - minusMoney > 0){ //restar dinero
for(int i = 0; i < 16; i++){
if(shoppCart[i] == "[vacio]"){
totalProductNum[i] = to_string(multProduct);
shoppCart[i] = "[" + totalProduct[indFil][indCol] + "]";
break;
}
}
money -= minusMoney;
}else{
cout<<"No hay suficiente dinero."<<endl;
system("pause");
}
}
}

return 0;
}

4
Muy buenas, espero que se encuentren bien. He programado un sencillo programa en donde puedes sumar vectores, quería, además de compartir el código, que me retroalimenten sobre el mismo, aporten consejos, crítica, etc.; me gustaría ver otras formas en las que ustedes harían esto.
Código: [Seleccionar]
#include<iostream>
#include<math.h>

using namespace std;

int main(){
int largoVector1 = 0, largoVector2 = 0, largoVectorMayor = 0;
bool largoVector = true; //true: vector 1 false: vector 2

cout<<"Largo del vector 1: "; cin>>largoVector1; //dar los valores de largo del vector
cout<<"Largo del vector 2: "; cin>>largoVector2;
int vector1[largoVector1]; //declaraciones de vectores
int vector2[largoVector2];
if(largoVector1 > largoVector2){ //ver cual de los dos vectores ses mayor
largoVectorMayor = largoVector1;
}else{
largoVectorMayor = largoVector2;
largoVector = false;
}
for(int i = 0; i < largoVectorMayor; i++){ //dejar en 0 cada espacion de los vectores
vector1[i] = 0;
vector2[i] = 0;
}
cout<<"\tVector 1:"<<endl;
for(int i = 0; i < largoVector1; i++){ //declarar valores de los vectores
cout<<"Vector: "; cin>>vector1[i];
}
cout<<"\tVector 2:"<<endl;
for(int i = 0; i < largoVector2; i++){
cout<<"Vector: "; cin>>vector2[i];
}
if(largoVector){ //hacer operatoria e imprimer el primer vector
cout<<"V1: | ";
for(int i = 0; i < largoVector1; i++){
cout<<vector1[i]<<" | ";
}
cout<<"\nV2: | ";
for(int i = 0; i < largoVector2+(largoVector1 - largoVector2); i++){
cout<<vector2[i]<<" | ";
}
for(int i = 0; i < largoVector1; i++){ //sumar vectores
vector1[i] += vector2[i];
}
cout<<"\nR:  | ";
for(int i = 0; i < largoVector1; i++){ //imprimir vectores
cout<<vector1[i]<<" | ";
}
}else{ //en caso de que el segundo vector sea mayor
cout<<"V1: | ";
for(int i = 0; i < largoVector1+(largoVector2 - largoVector1); i++){
cout<<vector1[i]<<" | ";
}
cout<<"\nV2: | ";
for(int i = 0; i < largoVector2; i++){
cout<<vector2[i]<<" | ";
}
for(int i = 0; i < largoVector2; i++){ //sumar vectores
vector2[i] += vector1[i];
}
cout<<"\nR:  | ";
for(int i = 0; i < largoVector2; i++){ //imprimir vectores
cout<<vector2[i]<<" | ";
}
}

return 0;
}

5
Citar
Lo único que le faltaría añadir sería una opción para poder salir del programa, ya que el bucle de "juego" se repite infinitas veces.
No tenía pensado realmente añadirlo, ya que pretendía que el juego tuviera alguna meta o algo por el estilo (quería crear algo como Nethack, pero en Java), pero como veo que es algo complicado "manipular" cosas así, es buena idea añadir una opción para salir del juego.
Citar
y se llama "retorno de carro". No de "coche", de carro.
Oops, disculpa por eso.

Bien, creo que ahora sí comprendo mucho mejor. Entonces, este "problema" llamado "retorno de carro", se debe a que estoy utilizando valores que no devuelven un "/r" (generado por la tecla Enter) y este se queda almacenado en el Scanner; el Scanner, al no ver un carácter que devuelve "/r", simplemente se lo queda guardado hasta que vea uno,  por ejemplo:
Código: [Seleccionar]
Entrada de números/char: X, Y, Z... //no hay "/r"
Luego...
Entrada de carácteres: " " //podemos utilizar el "/r" que nos "sobraba", ya que este sí lo devuelve.
Al momento de que la entrada éste disponivle, toma el "/r" del Scanner, y como "/r" representa el tecleo de Enter, el Scanner lo considera como si el usuario ya terminó
Y para evitar este "problema", es mejor que todo se escriba como nextLine(), para luego transformarlo a un tipo diferente de dato.

6
Buenas, espero que se encuentren bien.

He estado programando un algoritmo para simular un movimiento de un carácter en la consola, este mismo se puede mover en 4 direcciones, me gustaría saber su opinión y de que otras formas se les hubiera ocurrido hacer esto.


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

public class Main{
   public static void main(String[] args){
      Scanner input = new Scanner(System.in);
      Random numRandom = new Random();
      int x = 0, y = 0, dir = 0, planoX = 0, planoY = 0, opcTipoMapa = 0;
      //x = y = cordenada del jugador
      //dir = direccion del jugador
      //planoX = planoY = indice de la matriz de la posicion del jugador
      //opcTipoMapa = el mapa puede ser generado por valores que el usuario colocara o seran valores aleatorios
      boolean juego = true;
      char jugador = ' ';
     
      //aspecto del jugador
      System.out.print("Jugador: ");     
      jugador = input.next().charAt(0);
      //declarar valores del largo y ancho del mapa
      System.out.println("1: Escoger los valores del mapa | 2: Valores aleatorios (1-100)");
      opcTipoMapa = input.nextInt();
      while(opcTipoMapa < 1 || opcTipoMapa > 2){
         System.out.println("No ha seleccionado de manera correcta. . .");
         System.out.println("1: Escoger los valores del mapa | 2: Valores aleatorios (1-100)");
         opcTipoMapa = input.nextInt();
      }
      switch(opcTipoMapa){
         case 1:
            System.out.print("Ancho: ");
            planoX = input.nextInt();
            System.out.print("Largo: ");
            planoY = input.nextInt();
         break;
         case 2:
            planoX = numRandom.nextInt(100)+1;
            planoY = numRandom.nextInt(100)+1;
            System.out.println("Ancho: " + planoX + "\nLargo: " + planoY);           
         break;
      }
      int plano[][] = new int[planoX][planoY];
      plano[0][0] = jugador;
     
      //juego
      while(juego){
         for(int i = 0; i < planoY; i++){
            for(int j = 0; j < planoX; j++){
               if(plano[j][i] == jugador){
                  System.out.print("[" + jugador + "]");
               }else{
                  System.out.print("[ ]");
               }
            }
            System.out.println();
         }
         System.out.println("Direccion: 1: Derecha | 2: Izquierda | 3: Arriba | 4: Abajo");
         dir = input.nextInt();
         while(dir < 1 || dir > 4){
            System.out.println("No ha seleccionado de manera correcta. . .");
            System.out.println("Direccion: 1: Derecha | 2: Izquierda | 3: Arriba | 4: Abajo");
            dir = input.nextInt();
         }
         switch(dir){
            case 1: //x++
               x++;
               if(x == planoX){ //limite del mapa
                  x = 0;
                  plano[x][y] = jugador;
                  plano[x+planoX-1][y] = ' ';
               }else{ //movimiento
                  plano[x][y] = jugador;
                  plano[x-1][y] = ' ';
               }
            break;
            case 2: //x--
               x--;
               if(x < 0){ //limite del mapa
                  x = planoX-1;
                  plano[x][y] = jugador;
                  plano[0][y] = ' ';
               }else{
                  plano[x][y] = jugador;
                  plano[x+1][y] = ' ';
               } 
            break;
            case 3: //y--
               y--;
               if(y < 0){
                  y = planoY-1;
                  plano[x][y] = jugador;
                  plano[x][0] = ' ';
               }else{
                  plano[x][y] = jugador;
                  plano[x][y+1] = ' ';
               }
            break;
            case 4: //y++
               y++;
               if(y == planoY){
                  y = 0;
                  plano[x][y] = jugador;
                  plano[x][y+planoY-1] = ' ';
               }else{
                  plano[x][y] = jugador;
                  plano[x][y-1] = ' ';
               }
            break;
         }
      }
   }
}

Tengo una pequeña duda, hace ya mucho tiempo, creé un hilo sobre una duda que tenía acerca del objeto Scanner, el usuario Kabuto me respondió, y quede fuera de dudas, sin embargo, por alguna razón me estoy emepzando a cuestionar y se me generó una nueva pregunta. El problema que tenía era de que a veces el Scanner no me leía los datos y los "saltaba", es decir...

Código: [Seleccionar]
variableInt = input.nextInt();
System.out.println("Numero: " + variableInt);
variableString = input.nextLine(); //el objeto Scanner ignora esto
System.out.println("Frase: " + variableString);

A este suceso se le llama "retorno de coche", y he aquí mi duda, por lo que entiendo, al momento de utilizar X valor con el objeto Scanner, y cambiar ese mismo valor de manera bruta, puede que provoque este fenómeno, ¿no?

7
Buenas, espero que se encuentren bien. Otro hilo en donde expongo mi código buscando recibir una retroalimentación; he estado aprendiendo la POO de Java y demás, pero quise probar con las funciones, para eso, programé un programa para hacer compras, similar a un proyecto que había hecho, pero en este caso quería mejorarlo.


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

public class Test_12{
   static Scanner Input = new Scanner(System.in);
   static Random DineroR = new Random();   
   static byte opc = 0; //toma de decisiones SI/NO
   static int indiceProducto = 0, cantidadProductos = 0, productoCosto = 0, dinero = 10, dineroAux = 0, dineroExtra = 0;
   static boolean estadoCompra = false;
   public static void main(String[] args){
      int cantidadProductos = 0;
      byte opc = 0;
      boolean estadoTienda = true;
      while(estadoTienda == true){
         dineroAux = dinero;
         estadoCompra = true;
         System.out.println("\t--- TIENDA ---\nSeleccione categoria: 1: Comida | 2: Herramientas | 3: Decoraciones | 4: Mostrar dinero | 5: Sacar dinero | 6: Salir");
         opc = (byte) Integer.parseInt(Input.next());
         while(opc < 1 || opc > 6){ //error al insertar datos
            System.out.println("No ha seleccionado de manera correcta. . .");
            System.out.println("\t--- TIENDA ---\nSeleccione categoria: 1: Comida | 2: Herramientas | 3: Decoraciones | 4: Mostrar dinero | 5: Sacar dinero | 6: Salir");
            opc = (byte) Integer.parseInt(Input.next());
         }
         switch(opc){ //menu
            case 1: //comida
               Comida();
            break;
            case 2: //herramienatas
               Herramientas();
            break;           
            case 3: //decoraciones
               Decoraciones();
            break;
            case 4: //mostrar dinero
               System.out.println("Dinero: $" + dinero);
            break;
            case 5:
               dineroExtra = DineroR.nextInt(1000) + 1;
               dinero += dineroExtra;
               System.out.println("Has recibido " + "$" + dineroExtra);
            break;
            case 6: //salir
               estadoTienda = false;
               System.out.println("Usted ha salido de la tienda. . .");
            break;
         }
      }
   }

   public static void Comida(){ //menu opcion 1
      int costo[] = {5, 15, 20};
      String comida[] = {"Papas", "Manzanas", "Pollo"};
      while(estadoCompra == true){
         for(int i = 0; i < comida.length; i++){ //imprimir comidas
            System.out.println("Comida N°"+ (i+1) + ": " + comida[i] + " | " + "$" + costo[i]);
         }
         System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: "); //seleccionar producto
         indiceProducto = (byte) Integer.parseInt(Input.next());         
         while(indiceProducto < 1 || indiceProducto > 3){ //error al insertar datos
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            for(int i = 0; i < comida.length; i++){ //imprimir comidas
               System.out.println("Comida N°"+ (i+1) + ": " + comida[i] + " | " + "$" + costo[i]);
            }
            System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: ");
            indiceProducto = (byte) Integer.parseInt(Input.next());           
         }
         productoCosto = costo[indiceProducto-1];
         indiceProducto--;
         System.out.print("Cuanto desea llevar: "); //cantidad de producto
         cantidadProductos = Integer.parseInt(Input.next());
         while(cantidadProductos < 1){ //error al insertar datos a la cantidad de productos
            System.out.println("No puede llevar " + cantidadProductos + " de " + comida[indiceProducto]);
            System.out.print("Cuanto desea llevar: ");
            cantidadProductos = Integer.parseInt(Input.next());
         }
         productoCosto *= cantidadProductos;
         dineroAux -= productoCosto;
         if(dineroAux < productoCosto){ //operacion de cantidad de productos y restar dinero
            System.out.println("\tNo queda suficiente dinero\n\t\tVuelva mas tarde");
            break;
         }else{
            dinero -= productoCosto;
         }
         System.out.println("Salir: 1: SI | 2: NO"); //salir
         opc = (byte) Integer.parseInt(Input.next());
         while(opc < 1 || opc > 2){ //error opciones SI o NO de salir del bucle
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            System.out.println("Salir: 1: SI | 2: NO");
            opc = (byte) Integer.parseInt(Input.next());
         }
         if(opc == 1){ //aceptar salir del bucle
            estadoCompra = false;
         }
      }
   }
   public static void Herramientas(){ //menu opcion 2
      int costo[] = {25, 40, 80};
      String herramientas[] = {"Martillo", "Destornillador", "Sierra"};
      while(estadoCompra == true){
         for(int i = 0; i < herramientas.length; i++){ //imprimir herramientas
            System.out.println("Herramienta N°" + (i+1) + ": " + herramientas[i] + " | " + "$" + costo[i]);
         }
         System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: "); //seleccionar producto
         indiceProducto = (byte) Integer.parseInt(Input.next());         
         while(indiceProducto < 1 || indiceProducto > 3){ //error al insertar datos
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            for(int i = 0; i < herramientas.length; i++){ //imprimir herramientas
               System.out.println("Herramienta N°" + (i+1) + ": " + herramientas[i] + " | " + "$" + costo[i]);
            }
            System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: ");
            indiceProducto = (byte) Integer.parseInt(Input.next());           
         }
         productoCosto = costo[indiceProducto-1];
         indiceProducto--;
         System.out.print("Cuanto desea llevar: "); //cantidad de producto
         cantidadProductos = Integer.parseInt(Input.next());
         while(cantidadProductos < 1){ //error al insertar datos a la cantidad de productos
            System.out.println("No puede llevar " + cantidadProductos + " de " + herramientas[indiceProducto]);
            System.out.print("Cuanto desea llevar: ");
            cantidadProductos = Integer.parseInt(Input.next());
         }
         productoCosto *= cantidadProductos;
         dineroAux -= productoCosto;
         if(dineroAux < productoCosto){ //operacion de cantidad de productos y restar dinero
            System.out.println("\tNo queda suficiente dinero\n\t\tVuelva mas tarde");
            break;
         }else{
            dinero -= productoCosto;
         }
         System.out.println("Salir: 1: SI | 2: NO"); //salir
         opc = (byte) Integer.parseInt(Input.next());
         while(opc < 1 || opc > 2){ //error opciones SI o NO de salir del bucle
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            System.out.println("Salir: 1: SI | 2: NO");
            opc = (byte) Integer.parseInt(Input.next());
         }
         if(opc == 1){ //aceptar salir del bucle
            estadoCompra = false;
         }
      }
   }
   public static void Decoraciones(){ //menu opcion 3
      int costo[] = {4, 20, 30};
      String decoraciones[] = {"Jarron", "Mueble", "Planta de plastico"};     
      while(estadoCompra == true){
         for(int i = 0; i < decoraciones.length; i++){ //imprimir decoraciones
            System.out.println("Decoracion N°" + (i+1) + ": " + decoraciones[i] + " | " + "$" + costo[i]);
         }
         System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: "); //seleccionar producto
         indiceProducto = (byte) Integer.parseInt(Input.next());         
         while(indiceProducto < 1 || indiceProducto > 3){ //error al insertar datos
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            for(int i = 0; i < decoraciones.length; i++){ //imprimir decoraciones
               System.out.println("Decoracion N°" + (i+1) + ": " + decoraciones[i] + " | " + "$" + costo[i]);
            }
            System.out.print("\tEscriba lo que desea llevar segun el numero del producto\nLLevar: ");
            indiceProducto = (byte) Integer.parseInt(Input.next());           
         }
         productoCosto = costo[indiceProducto-1];
         indiceProducto--;
         System.out.print("Cuanto desea llevar: "); //cantidad de producto
         cantidadProductos = Integer.parseInt(Input.next());
         while(cantidadProductos < 1){ //error al insertar datos a la cantidad de productos
            System.out.println("No puede llevar " + cantidadProductos + " de " + decoraciones[indiceProducto]);
            System.out.print("Cuanto desea llevar: ");
            cantidadProductos = Integer.parseInt(Input.next());
         }
         productoCosto *= cantidadProductos;
         dineroAux -= productoCosto;
         if(dineroAux < productoCosto){ //operacion de cantidad de productos y restar dinero
            System.out.println("\tNo queda suficiente dinero\n\t\tVuelva mas tarde");
            break;
         }else{
            dinero -= productoCosto;
         }
         System.out.println("Salir: 1: SI | 2: NO"); //salir
         opc = (byte) Integer.parseInt(Input.next());
         while(opc < 1 || opc > 2){ //error opciones SI o NO de salir del bucle
            System.out.println("\t\tNo ha seleccionado de manera correcta. . .");
            System.out.println("Salir: 1: SI | 2: NO");
            opc = (byte) Integer.parseInt(Input.next());
         }
         if(opc == 1){ //aceptar salir del bucle
            estadoCompra = false;
         }
      }
   }
}

8
Aprender a programar desde cero / Re:Thread.sleep() en Java
« en: 21 de Julio 2020, 22:47 »
Mmm... Creo que logro entender, ¿pero a qué te refieres exactamente con "hilos"?

9
Aprender a programar desde cero / Re:Duda con un código - Java
« en: 21 de Julio 2020, 22:32 »
Citar
No me ha quedado del todo claro, pero creo que no entiendes cómo realizar el código para reordenar un array en Java.
Perdón si me explique mal; sé como realizar el código de ordenar un array, en este caso, con el método burbuja, tenía la pregunta del porqué hay un for() anidado.
Citar
Pasando a comentar, me gustaría saber qué es eso de "Array" en tu porción de código que pasaste antes, ya que a no ser que se trate de una clase tuya propia, la de Java se llama "Arrays". Pero de todas formas, no entiendo cómo no te daba fallos en el IDE donde programas con Java, ya que al copiarme tu código a mi espacio de trabajo eso era una sangría.
El nombre tan flojo de ese vector es porque ya había hecho un proyecto similar, este es solo una prueba. Estoy usando el IDE jGRASP.
Citar
Sé que todo esto que te he escrito solamente está relacionado con el problema base en sí, esto es, cómo ordenar un array de menor a mayor. Sin embargo, me gustaría responderte a lo que comentaste hacia el final del post. No te enfoques a una sola manera de resolver un problema, ya sea ordenar una array, sacar los primos de una lista de reales, o cómo sacar el índice del menor número de una lista usando la Búsqueda Binaria. En la programación hay más de un camino que lleva a Roma, y en el enlace de SO se puede apreciar eso.
Realmente siempre que tengo que solucionar un  problema trato de ser lo más original posible, sé que la programación es dinámica. En este caso quise saber cómo funciona este método de ordenamiento.
Citar
Volviendo al código que proporciono es la que prefiero y sobretodo porque no me gusta "re inventar la rueda". Aquí tienes un enlace de alguien que tuvo tu misma duda y, como puedes ver, la gente aporta gran variedad de opciones.
Gracias por la información y tu respuesta.

10
Buenas. Estoy utilizando el Thread.sleep() para parar la consola en una fracción de tiempo marcada en milisegundos. Tengo una duda, al escribir a secas "Thread.sleep(X)" me sale el siguiente error:

Código: [Seleccionar]
error: unreported exception InterruptedException; must be caught or declared to be thrown

Sé que al lado de la clase main hay que colocar lo siguiente:

Código: [Seleccionar]
public static void main(String[] args) throws InterruptedException

Pero, ¿por qué debe estar eso ahí?; investigue acerca de "throws", (resulta que existe "throw" y "throws"), y según lo que entendí, es algo para poder manejar errores en Java durante la ejecución de un programa, pero no logró relacionar estos conceptos, ¿qué está pasando?

11
Buenas, espero que se encuentren bien. Tengo una duda con un código, para ser más exactos, un algoritmo; en sí, quiero una "confirmación" de lo que pienso que pasa:

Código: [Seleccionar]
for(int j = 0; j < Array.length-1; j++){
   for(int i = 0; i < Array.length-1; i++){
      if (Array[i] > Array[i+1]){
      aux = Array[i];
      Array[i] = Array[i+1];
      Array[i+1] = aux;
   }
}

Al principio, lo hice con un solo bucle for(), pero vi que no funciona del todo, ya que me hace un "orden", pero no uno en donde se organicen de menor a mayor, entonces probé con otro bucle, y ahora si funciona, por lo que entiendo, es necesario tener for() anidados, es decir, dentro del bucle for(), hay otro, este hace un orden "superficial", el cual es perfeccionado por el que está afuera, ¿pero qué pasa realmente?

12
A Kabuto:

Ja, que coincidencia, yo igual traté desde un principio hacer ese tipo de estilo con mi agenda, pero no se me ocurrió de que manera hacer que los datos queden así. Ahora todo está más claro.
En cuanto a mis dudas:
Citar
Código: [Seleccionar]
teclado.close();
Por lo que puedo inferir, supongo que eso hace que la entrada de datos se detenga o cierre, pero, ¿qué hace realmente?, ¿es recomendable usarlo?
Y acerca de las arrays bidimensionales, me compliqué un poco en cuanto a esto, esto es un tanto específico, pero, ¿hay manera de remplazar valores en un solo bloque? Es decir:
Código: [Seleccionar]
intArray[0 (solo quiero rellenar este)][0] = 14;Pienso que estaría remplazando el otro valor con el índice 0.

13
A daenius:

¡Muchas gracias por tus comentarios!, en verdad había olvidado esas variables, y bueno, también me desvié del tema del ejercicio principal. La verdad tampoco pensé tanto en el usuario, de hecho, ahora que lo veo desde otro punto, sí es bastante incómodo hacer el proceso que realice, pero para la próxima veré mejor esos errores que cometí (que en este momento me parecen de los más obvios).

14
¡Muy buenas a todos!

Últimamente he estado buscando ejercicios para poder mejorar mi análisis y habilidades para programar, para busco páginas que me puedan ofrecer distintos ejercicios. En una de esas mismas, en la categoría de bucles, en un ejercicio dice lo siguiente:

Citar
Definir un array bidimensional para representar una agenda semanal, donde se contemplen los 7 días de la semana y las 24 horas de cada día. Utilizar bucles for anidados para inicializar la agenda a: "No tengo planes.". Añadir "planes" a la agenda y mostrar el resultado por pantalla.


Y esto fue lo que hice:

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

class Agenda{
   public static void main(String args[]){
      int AgendaDatos[][] = new int[7][24], hora = 12, OP = 0, HorasColumnas = 0, DiasFilas = 0, IndiceDia = 0;
      String DiasSemana[] = new String[7], DiasDatos[] = new String[168], Formato = "A.M";
      DiasSemana[0] = "Lunes";
      DiasSemana[1] = "Martes";
      DiasSemana[2] = "Miercoles";
      DiasSemana[3] = "Jueves";
      DiasSemana[4] = "Viernes";
      DiasSemana[5] = "Sabado";
      DiasSemana[6] = "Domingo";
      boolean prog = true;
      Scanner InputInt = new Scanner(System.in);
      Scanner InputStr = new Scanner(System.in);
     
     
      for(int i = 0; i < 168; i++){
         DiasDatos[i] = "(Vacio)";
      }
      while(prog == true){
         System.out.println("\t\t\t--- Agenda ---");
         System.out.println("Que desea hacer: 1: Ver mi agenda | 2: Agregar algo a la agenda | 3: Salir");
         OP = InputInt.nextInt();
         while(OP < 1 || OP > 3){
            System.out.println("No ha seleccionado de manera correcta. . .");
            System.out.println("Que desea hacer: 1: Ver mi agenda | 2: Agregar algo a la agenda | 3: Salir");
            OP = InputInt.nextInt();
         }
         switch(OP){
            case 1: //mostrar agenda
               System.out.println("1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
               System.out.print("Dia: ");
               IndiceDia = InputInt.nextInt();
               while(IndiceDia < 1 || IndiceDia > 7){
                  System.out.println("No ha seleccionado correctamente. . .");
                  System.out.println("1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
                  System.out.print("Dia: ");
                  IndiceDia = InputInt.nextInt();
               }
               switch(IndiceDia){
                  case 1: //lunes
                  for(int j = 0; j < 24; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 2: //martes
                  for(int j = 24; j < 48; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }                     
                  }
                  break;
                 
                  case 3: //miercoles
                  for(int j = 48; j < 72; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 4: //jueves
                  for(int j = 72; j < 96; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                                       
                  case 5: //viernes
                  for(int j = 96; j < 120; j++){
                        System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                        hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 6: //sabado
                  for(int j = 120; j < 144; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 7: //domingo
                  for(int j = 144; j < 168; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
               }
            break;
           
            case 2: //agregar algo a la agenda
               System.out.println("1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
               System.out.print("Dia: ");
               IndiceDia = InputInt.nextInt();
               while(IndiceDia < 1 || IndiceDia > 7){
                  System.out.println("No ha seleccionado de manera correcta. . .");
                  System.out.println("1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
                  System.out.print("Dia: ");
                  IndiceDia = InputInt.nextInt();
               }
               switch(IndiceDia){
                  case 1: //lunes
                  for(int j = 0; j < 24; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 2: //martes
                  for(int j = 24; j < 48; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }                     
                  }
                  break;
                 
                  case 3: //miercoles
                  for(int j = 48; j < 72; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 4: //jueves
                  for(int j = 72; j < 96; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);                       
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                                       
                  case 5: //viernes
                  for(int j = 96; j < 120; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                        hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 6: //sabado
                  for(int j = 120; j < 144; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     DiasDatos[j] = InputStr.nextLine();
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     hora++;
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
                 
                  case 7: //domingo
                  for(int j = 144; j < 168; j++){
                     System.out.println("El dia " + DiasSemana[IndiceDia-1] + " a las " + hora + " " + Formato + ": " + DiasDatos[j]);
                     DiasDatos[j] = InputStr.nextLine();
                     hora++;
                     if (DiasDatos[j].equals("")){
                        DiasDatos[j] = "(Vacio)";
                     }
                     if (hora == 13){
                        hora = 1;
                     }
                     if (Formato.equals("A.M") && hora == 12){
                        Formato = "P.M";
                     }else if (Formato.equals("P.M") && hora == 12){
                        Formato = "A.M";
                     }
                  }
                  break;
               }               
            break;
               
            case 3: //salir
               prog = false;
               System.out.println("Usted ha salido de su agenda. . .");
            break;           
         }
      }
   }
}
¿Cómo creen que está el código?, ¿necesita mejorar en algo?, ¿recomendacioens?
Además, ¿cómo lo harían ustedes?
(En caso de que quieran saber la página en donde estoy actualmente trabajando con ejercicios Java, es esta: https://www.arkaitzgarro.com/java/capitulo-20.html.)

15
¡Muchísimas gracias Kabuto! Realmente me ayudaste. No me había dado cuenta de ese tonto error, lo arreglaré.
Quizás envié más código que quisiera compartir, solo para no volver a crear otro tema, espero que no sea problema.

16
Buenas, espero que se encuentren bien. Me he estado preocupando por mantener un código más limpio y optimizado utilizando de momento la "estructura" de programar de arriba hacía abajo, sin utilizar el POO de Java.

De antemano decir que soy un "principiante", así que lamento el posible derrame de sangre en sus ojos.

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

public class Programa_empresa{
   public static void main(String args[]){
      Random CodeAlfaNumRand = new Random();
      Scanner Input = new Scanner(System.in);
      int ArticuloLitro[] = new int[3], ValorArticulo[] = new int[3], CodeAlfaNumArray = 0, Amplifiart = 0, OPc_1 = 0, ContadorBucle = 0, FacturasMayores = 0;
      ArticuloLitro[0] = 5; //5 Litros
      ArticuloLitro[1] = 15; //15 Litros
      ArticuloLitro[2] = 25; //25 Litros
      ValorArticulo[0] = 150; //valor articulos
      ValorArticulo[1] = 300;
      ValorArticulo[2] = 425;
      //caracteres para el codigo del articulo
      char CodeAlfaNumChar[] = new char[12];
      CodeAlfaNumChar[0] = 'A';
      CodeAlfaNumChar[1] = 'B';
      CodeAlfaNumChar[2] = 'C';
      CodeAlfaNumChar[3] = 'D';
      CodeAlfaNumChar[4] = 'E';
      CodeAlfaNumChar[5] = 'F';
      CodeAlfaNumChar[6] = 'G';
      CodeAlfaNumChar[7] = '0';
      CodeAlfaNumChar[8] = '1';
      CodeAlfaNumChar[9] = '2';
      CodeAlfaNumChar[10] = '3';
      CodeAlfaNumChar[11] = '4';
      char CodeAlfaNum[] = new char[6]; //cantidad de elementos del codigo alfanumerico     
     
      while(ContadorBucle <= 5){
         //declarar el codigo alfanumerico
         for(int i = 0; i < CodeAlfaNum.length; i++){
            CodeAlfaNumArray = CodeAlfaNumRand.nextInt(12);
            CodeAlfaNum[i] = CodeAlfaNumChar[CodeAlfaNumArray];
         }
         System.out.println("\t--- FARMACIA ---\nCual producto desea llevar:");
         System.out.println("1: Desinfectante " + ArticuloLitro[0] + "L | Valor: " + ValorArticulo[0]);
         System.out.println("2: Desinfectante " + ArticuloLitro[1] + "L | Valor: " + ValorArticulo[1]);
         System.out.println("3: Desinfectante " + ArticuloLitro[2] + "L | Valor: " + ValorArticulo[2]);
         OPc_1 = Input.nextInt();
         //si no selecciona correctamente
         while(OPc_1 < 1 || OPc_1 > 3){
            System.out.println("No ha seleccionado de manera correcta. . .");
            System.out.println("1: Desinfectante " + ArticuloLitro[0] + "L | Valor: " + ValorArticulo[0]);
            System.out.println("2: Desinfectante " + ArticuloLitro[1] + "L | Valor: " + ValorArticulo[1]);
            System.out.println("3: Desinfectante " + ArticuloLitro[2] + "L | Valor: " + ValorArticulo[2]);
            OPc_1 = Input.nextInt();
         }
         switch(OPc_1){
            case 1: //5 Litros
               System.out.print("Cuantos desea llevar: ");
               Amplifiart = Input.nextInt();           
               ValorArticulo[0] *= Amplifiart; //multiplicar el preico del producto
               ArticuloLitro[0] *= Amplifiart; //multiplicar cuantos litros hay en total
               System.out.println("\t--- FACTURA ---");
               System.out.print("Codigo del articulo: ");
                  for(int i = 0; i < CodeAlfaNum.length; i++){
                     System.out.print(CodeAlfaNum[i]);
                  }
               System.out.println("\nPrecio total: " + ValorArticulo[0]);
               System.out.println("Cantidad de litros comprados: " + ArticuloLitro[0]);
               if (ValorArticulo[0] > 600){
                  FacturasMayores++;               
               }
            break;
           
            case 2: //15 Litros
               System.out.print("Cuantos desea llevar: ");
               Amplifiart = Input.nextInt();           
               ValorArticulo[1] *= Amplifiart; //multiplicar el preico del producto
               ArticuloLitro[1] *= Amplifiart; //multiplicar cuantos litros hay en total
               System.out.println("\t--- FACTURA ---");
               System.out.print("Codigo del articulo: ");
                  for(int i = 0; i < CodeAlfaNum.length; i++){
                     System.out.print(CodeAlfaNum[i]);
                  }
               System.out.println("\nPrecio total: " + ValorArticulo[1]);
               System.out.println("Cantidad de litros comprados: " + ArticuloLitro[1]);
               if (ValorArticulo[1] > 600){
                  FacturasMayores++;               
               }           
            break;
           
            case 3: //25 Litros
               System.out.print("Cuantos desea llevar: ");
               Amplifiart = Input.nextInt();           
               ValorArticulo[2] *= Amplifiart; //multiplicar el preico del producto
               ArticuloLitro[2] *= Amplifiart; //multiplicar cuantos litros hay en total
               System.out.println("\t--- FACTURA ---");
               System.out.print("Codigo del articulo: ");
                  for(int i = 0; i < CodeAlfaNum.length; i++){
                     System.out.print(CodeAlfaNum[2]);
                  }
               System.out.println("\nPrecio total: " + ValorArticulo[2]);
               System.out.println("Cantidad de litros comprados: " + ArticuloLitro[2]);
               if (ValorArticulo[2] > 600){
                  FacturasMayores++;               
               }           
            break;           
         }
         ContadorBucle++;
      }
      if (FacturasMayores > 1){
         System.out.println("Hay " + FacturasMayores + " facturas que pasan de los $600");
      }else{
         System.out.println("Hay " + FacturasMayores + " factura que pasa de los $600");
      }
   }
}

17
Aprender a programar desde cero / Re:Diferencia entre fechas
« en: 03 de Mayo 2020, 05:58 »
¿Aquí querías poner meses + 30, o más bien sería meses * 30?

Citar
if (Year_2 > Year || Year > Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) + 30) - (((Year - Year_2) * 365));
Vale, resulta que soy retrasado y se me olvido probar con eso, sin embargo, aun así se me adelantan días, como 2 o 3, ¿se debe por la regla de los 30 días? Ya que estoy comparando mis resultados con una calculadora de fechas.

18
Buenas, espero que se encuentren bien.

Como lo dice en el asunto, necesito un poco de orientación en cuanto a un código que me ha costado bastante ver como funciona e igualmente a programarlo:

Código: [Seleccionar]
if (Year_2 > Year || Year > Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) + 30) - (((Year - Year_2) * 365));
    if (DateMinus < 0){
        DateMinus *= -1;
    }
}else if (Year == Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) * 30);
}

Algo raro que he notado es que aveces se pasa de la fecha por unos días (16, por ejemplo) o algunas veces faltan, por lo que he visto, suele pasar cuando son fechas grandes en  momentos donde faltan días, y no he notado un "patrón" claro en el caso de que se pasen días.

Una cosa es que este es un ejercicio de programación que estoy siguiendo, y el anunciado aclara que se debe de suponer que todos los meses tienen 30 días, soy consiente de eso, pero no creo que esa sea la razón del porqué falten 15 días o incluso se pase por casi 34 días. Lamentablemente, me vi forzado a ver la respuesta del ejercicio, ya que no comprendía que pasaba, y según la fórmula, es esta:

Código: [Seleccionar]
total_dias = dia2-dia1 + 30*(mes2-mes1)+365*(año2-año1);
Por la gran decepción al ver la respuesta, y no verme capaz de hacerlo por mi parte, quise "crear" una nueva fórmula con base en lo que vi.

19
Aprender a programar desde cero / Re:Comprensión de un código
« en: 28 de Abril 2020, 00:35 »
El operador módulo te da el resto final.
Por ejemplo, mira la división de esta imagen:




Si en el código hacemos un 243 % 5, el resultado que nos dará sera 3

Un ejemplo muy habitual en programación para practicar el operador módulo es un programa que reciba un número y diga si es par o impar.
La forma de saber si un número es par, es dividir entre 2 y comprobar si el resto es 0.
Es decir, si tenemos el número guardado en una variable llamada num, pues preguntaríamos esto:

Código: [Seleccionar]
if (num % 2 == 0)
    System.out.println("Es par");
else
    System.out.println("Es impar);

De este ejemplo, podemos deducir que también podemos usarlo para saber si un número es múltiplo de otro.
De nuevo, imagina que tenemos num1 y num2. Si al dividir num1 entre num2, el resto es cero, significa que num1 es múltiplo de num2.

Mayormente, el resto es útil en aplicaciones matemáticas como por ejemplo una técnica para dividir polinomios (Teorema del residuo/resto).


Pero hay también algún que otro uso curioso.

Por ejemplo en España, los DNI/NIF para identificar a cada ciudadano consta de una cadena con un número de 8 cifras y una letra.
Esa letra no es al azar, depende del resto de ese número al dividir entre 23.

En el curso de Java se propone resolver este ejercicio en Java.
Esta más pensado para aprender a  usar arrays, pero bueno, puedes intentarlo.
Ah vale, ¡muchas gracias otra vez Kabuto!.

20
Aprender a programar desde cero / Re:Comprensión de un código
« en: 27 de Abril 2020, 02:05 »
Este es un tema más de matemáticas que de programación.
Por cierto, el código de ejemplo no es correcto, las horas no se están calculando bien porque hace directamente módulo entre 24 sobre las horas totales. Y no es correcto.

Pero vamos a verlo poco a poco.


Supón que HorasTotales = 200

Y queremos saber a cuantas semanas, días y horas equivalen esa cantidad de horas.

Si una semana tiene 168 horas, pues es evidente que si dividimos esas HorasTotales entre 168, nos dirá a cuantas semanas equivalen

200 / 168 = 1,19

Vale, con ese resultado sabemos que 200 horas equivale a 1 semana y un poco más.
Esa parte decimal, el 0,19, no es una semana completa, pero equivale a cierta cantidad de días y de horas.
Pero, ¿como transformamos ese 0.19 en días? ¿Dividimos entre 24 porque un día tiene 24 horas?

0,19 / 24 = 0.007916

Buff... estamos obteniendo valores decimales muy pequeños que no nos dicen gran cosa.

Es evidente que el razonamiento matemático que estamos siguiendo no es el bueno.

No podemos coger la parte decimal y seguir haciendo cálculos con ella.

Lo que tenemos que coger es el "resto", que como su propio nombre indica, es lo que "resta" sin computar tras haber hecho la división, es lo que realmente ha sobrado.

Para obtener el resto se usa el operador "módulo", que en muchos lenguajes (no todos) se representa con el símbolo %.
Ojo porque puede confundirnos y pensar que estamos calculando porcentajes. Pero no es así, en Java ese operador lo que nos da es el resto.

Entonces, recapitulemos.
Si hacemos una "división entera" de HorasTotales entre 168 nos dirá las "semanas enteras" equivalentes.
En el código que has puesto no se ve, pero la variable Semanas seguramente será de tipo int. Esto fuerza a que la división sea "entera", es decir, esa variable no va a recoger la parte decimal, solo la parte entera.

Así que:
Semanas = 200 / 168 = 1

Ya tenemos calculado el valor de Semanas.
Ahora queremos calcular el valor de Dias.
Como hemos dicho, necesitamos el resto resultante de dividir entre 168, el valor que nos daba las semanas.
Para ello usamos el operador módulo:

Dias = 200 % 168 = 32

Tenemos el valor 32, pero eso es lo que ha sobrado al transformar en semanas.
Eso que sobra, ahora hay que transformarlo en días

32 / 24 = 1,33333

Similar a como ocurría antes, tenemos 1 día entero y un poco más.
Ese poco más, el 0.3333, no da para un día, pero si equivaldrá a unas horas que hay que calcular.
Así que una vez más, habrá que obtener el resto, que nos indicará las horas que han sobrado.
Es aquí donde fallaba el código que has puesto de ejemplo. Para las horas no se hace mod 24 directamente sobre las hora totales, si no sobre el resto obtenido al dividir entre 168

Recapitulación final:
Semanas = 200 / 168 = 1
Dias = 200 % 168 / 24 = 1
Horas = (200 % 168) % 24 = 8

Según esto, 200 horas equivalen a 1 semana, 1 día y 8 horas.
¿Es correcto?
Pues a ver...

1 semana = 168 horas
       1 dia =   24 horas
       resto =     8 horas
                  ----------
                   200 horas


Esto, escrito así rápido en Java podría ser:

Código: [Seleccionar]
public class CalculaSemanas {

public static void main(String[] args) {

Scanner teclado = new Scanner(System.in);

System.out.print("Horas totales: ");
int horasTotal = teclado.nextInt();

int semanas = horasTotal / 168;
int dias = horasTotal % 168 / 24;
int horas = (horasTotal % 168) % 24;

System.out.println("\n" + horasTotal + " horas equivalen a");
System.out.println("- Semanas: " + semanas);
System.out.println("- Dias: " + dias);
System.out.println("- Horas: " + horas);

teclado.close();
}

}

Y si probamos a ejecutarlo en pantalla nos da este resultado:
Citar
Horas totales: 200

200 horas equivalen a
- Semanas: 1
- Dias: 1
- Horas: 8

Y bueno, espero haberme explicado bien.

Como digo, esto es más matemáticas que programación. Hay que entender como obtener el resto de la división y qué se puede calcular con él.

Pregunta lo que necesites. Y si alguien sabe explicarlo mejor que yo, por favor, que lo haga y todos aprendemos más.

Un saludo.
Vale, creo que comprendo.
Pero creo que lo que necesito es como funciona el "%", estoy un tanto confundido, sé que este operador solo obtiene el resto de una división, ¿pero solo toma el primer resto? De hecho, mientras veía ejercicios en Java, me tope con este (un tanto similar al anterior):
Código: [Seleccionar]
import java.util.Scanner;

public class Practica_7 {
   public static void main(String[] args) {
   int num;
   int unidades, decenas;
   Scanner Entrada = new Scanner(System.in);
// esta versión muesrta 11 como diez y uno.
// es una forma de hacerlo bastante burda.

// se puede poner algunos condicionales para los números especiales: 11,12,...
// y otro condicional para mostrar "y"
   System.out.print("Introduzca un número (0 a 99): ");
   num=Entrada.nextInt();
   unidades = num % 10;
   decenas = num / 10;
   switch(decenas){
      case 0:
         System.out.print("");
      break;
      case 1:
         System.out.print("diez");
      break;
      case 2:
         System.out.print("veinte");
      break;
      case 3:
         System.out.print("treinta");
      break;
      case 4:
         System.out.print("cuarenta");
      break;
      case 5:
         System.out.print("cincuenta");
      break;
      case 6:
         System.out.print("sesenta");
      break;
      case 7:
         System.out.print("setenta");
      break;
      case 8:
         System.out.print("ochenta");
      break;
      case 9:
         System.out.print("noventa");
      break;
   }
   System.out.print (" y ");
   switch(unidades){
   case 0:
      System.out.println("");
   break;
   case 1:
      System.out.println("uno");
   break;
   case 2:
      System.out.println("dos");
   break;
   case 3:
      System.out.println("tres");
   break;
   case 4:
      System.out.println("cuatro");
   break;
   case 5:
      System.out.println("cinco");
   break;
   case 6:
      System.out.println("seis");
   break;
   case 7:
      System.out.println("siete");
   break;
   case 8:
      System.out.println("ocho");
   break;
   case 9:
      System.out.println("nueva");
   break;
      }
   }
}
El primer y segundo problema lo "entiendo" (nótese comillas), al igual que el "%", pero me cuesta imaginar como lo podría aplicar a muchas otras cosas, lamento las molestias.

Páginas: [1] 2

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

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".