Home Process Checks Network Checks Mrtg Private Storage Blog Webmail Login

Alternativas a Google Domains 2024

Published on Larebelion.com: 2024-02-08T18:21:00.035+01:00

 ¿Utilizas hoy en día Google Domains? ¿Porque necesitas buscar una alternativa?

Google lanzó su servicio de registro de dominios en 2015 para ayudar a los usuarios a encontrar, comprar y gestionar un dominio para sus negocios. Sin embargo, Google Domains cerrará y Squarespace se hará cargo de los negocios y activos. Squarespace, conocido por ser un popular constructor de sitios web y proveedor de servicios de alojamiento, migrará a todos los clientes existentes y sus dominios a su plataforma. Aunque Squarespace respetará los precios de renovación de los clientes de Google Domains durante al menos 12 meses, se espera que los costos de renovación aumenten después de este período. Otros servicios de registro de dominios en el mercado ofrecen nombres de dominio gratuitos con planes de alojamiento, y los planes de alojamiento suelen ser más económicos que Squarespace.

Considerando estas alternativas, es importante explorar las mejores opciones disponibles tras el cierre de Google Domains.

Para la comparativa, obviamente no he usado todas las opciones que puedes encontrar sino que básicamente he comparado con aquellos que me dan confianza y he dejado fuera de la lista a algunos como Azure o AWS por la complejidad que suponen en la administración e incluso en el cálculo del precio.

AlternativaURLPrecio transferencia .com + 1º AñoPrecio .com /añoRegistroWeb HostingCloud ComputingCloud

Google Domainshttps://domains.google.com/N/A12.00€Si, Google SuiteSi, cualquier webSi, servicio completo

Domain.comhttps://www.domain.com/9.28€20.43€Si, Google SuiteSi, cualquier web



GoDaddyhttps://www.godaddy.com/es-es10.22€19.99€Si, Microsoft 365Si, cualquier web

Network Solutionshttps://www.networksolutions.com/9.28€23.23€Si, Google SuiteSi, cualquier web

Gandihttps://www.gandi.net/es13.77€24.19€Si, limitado a PHP, Python, Node

Squarespacehttps://domains.squarespace.com/N/A18.58€NoNo

Alibabahttps://www.alibabacloud.com/domain9.84€10.77€Si, Alibaba MailSi, cualquier webSi, servicio completo



Obviamente, si estas leyendo esto es porque como yo, en su día confiaste en Google Domains por varias razones entre ellas por la "reputación" de la compañía, las características que te ofrecía y por el precio tan competitivo que tenía.

Tras la compativa parece evidente que:


Instalación servidor DNS en Raspberry PI

Published on Larebelion.com: 2023-12-14T14:47:00.004+01:00

 Introducción

¿Que apetece tener un servicio de resolución de nombres interno en tu red local ya sea tu casa, tu laboratorio o entorno profesional?, una alternativa razonable al super conocido servicio DNS de Microsoft y encima open source, podría ser dnsmasq.

Manos a la obra

Lo primero que te recomiendo hacer es actualizar los paquetes de tu distribución, para ello debes seguir este sencillo pasos (2x1):

sudo apt update && apt upgrade -y
Una vez actualizados los paquetes, pasemos a lo más interesante, instalación de la suite dnsmasq (dnsmasq es excelente para redes pequeñas).

sudo apt install dnsmasq
Una vez instalado:

  1. Modifica el fichero dnsmasq.conf utilizando el editor que más te guste, yo usaré vim.
sudo vim /etc/dnsmasq.conf
2. Localiza las siguientes líneas y edita:


3. Guarda los cambios en el fichero y reinicia el servicio:

sudo systemctl restart dnsmasq
4. Verifica el estatus del servicio.

sudo systemctl status dnsmasq

5. Prueba que esté funcionando desde la raspberry.


6. Pruébalo desde otra computadora en la red.







What is the tech stack for the shortern future?

Published on Larebelion.com: 2023-11-25T09:00:00.001+01:00

Predicting the exact technology stack for the future can be challenging because technology evolves rapidly, and new innovations constantly emerge. However, there are some trends and technologies that have been gaining traction and are likely to play a significant role in the tech stacks of the future. Keep in mind that the specific stack you choose will depend on your project's requirements and goals. Here are some key trends and technologies to consider:



It's essential to stay up-to-date with emerging technologies and adapt your tech stack based on your project's specific needs and the evolving industry trends. Flexibility and a willingness to learn and experiment will be valuable skills for technology professionals in the future. 

JAVA: ¿Porque nos hacen aprender JAVA en la Universidad?

Published on Larebelion.com: 2023-10-27T09:00:00.012+02:00

 Aprender Java es importante por varias razones:

  1. Amplia demanda laboral: Java es uno de los lenguajes de programación más populares y ampliamente utilizados en la industria de la tecnología. Muchas empresas buscan desarrolladores de Java, lo que significa que hay una gran demanda laboral en este campo. Aprender Java puede abrirte puertas en el mercado laboral y aumentar tus oportunidades de empleo.
  2. Versatilidad: Java se utiliza en una amplia variedad de aplicaciones, desde desarrollo web hasta aplicaciones móviles, sistemas embebidos, aplicaciones de escritorio y más. Esto significa que puedes aplicar tus conocimientos de Java en una variedad de proyectos y contextos.
  3. Plataforma independiente: Java es conocido por su capacidad de ser ejecutado en múltiples plataformas. Esto se debe a la máquina virtual Java (JVM), que permite que el código Java se ejecute en diferentes sistemas operativos sin necesidad de modificaciones importantes. Esto lo hace ideal para aplicaciones empresariales que deben ser compatibles con diversas plataformas.
  4. Comunidad y recursos: Java tiene una gran comunidad de desarrolladores y una amplia cantidad de recursos de aprendizaje disponibles en línea, como tutoriales, documentación oficial y foros de discusión. Esto facilita el proceso de aprendizaje y resolución de problemas.
  5. Seguridad y robustez: Java está diseñado con un enfoque en la seguridad y la robustez. Tiene características que ayudan a prevenir vulnerabilidades comunes de seguridad y a gestionar eficazmente la memoria, lo que reduce la posibilidad de errores graves en el código.
  6. Orientación a objetos: Java es un lenguaje orientado a objetos, lo que significa que se basa en un modelo de programación que se asemeja a cómo pensamos y organizamos conceptos en el mundo real. Esto facilita la creación de software modular y mantenible.
  7. Frameworks y bibliotecas: Java cuenta con una amplia variedad de frameworks y bibliotecas que simplifican el desarrollo de aplicaciones en diferentes dominios, como Spring para desarrollo web, Android para aplicaciones móviles y Hibernate para acceso a bases de datos, entre otros.
  8. Carrera a largo plazo: Aprender Java puede proporcionarte una base sólida para tu carrera en el desarrollo de software. A medida que adquieras experiencia, podrás especializarte en áreas específicas de desarrollo, como el desarrollo web, la inteligencia artificial o el desarrollo de aplicaciones móviles, todo mientras sigues utilizando Java como base.

Random r1 = new Random();
Random r2 = new Random(47);
Random r3 = new Random(47); // r2 y r3 darán la misma secuencia.
  
int n1 = r1.nextInt();
int n2 = r2.nextInt(10); // número aleatorio entre 0 y 9 (el 10 es exclusive)
int n3 = r3.nextInt(10); // obtendremos el mismo número aleatorio que n2, ya que ambos usan la misma semilla
  
System.out.println("n1: " + n1);
System.out.println("n2: " + n2);
System.out.println("n3: " + n3);


En resumen, aprender Java es importante debido a su amplia demanda en el mercado laboral, su versatilidad, su capacidad de ser utilizado en diversas plataformas y su sólida comunidad de desarrollo. Ya sea que estés buscando una carrera en programación o quieras expandir tus habilidades en el desarrollo de software, Java es un lenguaje que vale la pena aprender.

Domina Java: 20 Ejercicios Resueltos para Impulsar tus Habilidades de Programación. Universidad. (Parte 2)

Published on Larebelion.com: 2023-09-29T09:00:00.003+02:00

 Como continuación del artículo "Domina Java: 20 Ejercicios Resueltos para Impulsar tus Habilidades de Programación. Universidad. (Parte 1)", aqui publico la Parte 2 del artículo que no es más que una continuación con otros 20 ejercicios prácticos para que pongais en juego lo aprendido en la universidad o vuestros cursos de programación de Java.


Ejercicio 21: Programa Java de búsqueda lineal

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    int[] numbers = {4,2,7,1,8,3,6};
    int flag = 0;
    
    System.out.println("Enter the number to be found out: ");
    Scanner sc = new Scanner(System.in);
    int x = Integer.parseInt(sc.nextLine());
    
    for(int i=0;i<numbers.length;i++){
      if (x==numbers[i]){
        System.out.println("Successful search, the element is found at position "+ i);
        flag = 1;
        break;
      }
    }

    if(flag==0){
      System.out.println("Oops! Search unsuccessful");
    }
    
  }
}


Ejercicio 22: Programa Java de búsqueda binaria

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    int[] numbers = {1,4,6,7,12,17,25}; //binary search requires sorted numbers
    System.out.println("Enter the number to be found out: ");
    Scanner sc = new Scanner(System.in);
    int x = Integer.parseInt(sc.nextLine());

    int result = binarySearch(numbers, 0, numbers.length-1, x);
    if (result != -1)
      System.out.println("Search successful, element found at position "+result);
    else
      System.out.println("The given element is not present in the array");
    
  }

  public static int binarySearch(int[] numbers,int low,int high,int x){
    if (high >= low){
      int mid = low + (high - low)/2;
      if (numbers[mid] == x)
        return mid;
      else if (numbers[mid] > x)
        return binarySearch(numbers, low, mid-1, x);
      else
        return binarySearch(numbers, mid+1, high, x);
    }else{
      return -1;
    }
        
        
  }
}


Ejercicio 23: Programa Java para encontrar el número de números impares en una matriz

class Main {
  public static void main(String[] args) {

    int[] numbers = {8,3,1,6,2,4,5,9};
    int count = 0;

    for(int i=0;i<numbers.length;i++){
      if(numbers[i]%2!=0)
        count++;
    }
   System.out.println("The number of odd numbers in the list are: "+count);      
        
  }
}


Ejercicio 24: Programa Java para encontrar el mayor número de una matriz sin utilizar funciones incorporadas

class Main {
  public static void main(String[] args) {

    int[] numbers = {3,8,1,7,2,9,5,4};
    int largest = numbers[0];
    int position = 0;

    for(int i=0;i<numbers.length;i++){
      if(numbers[i]>largest){
        largest = numbers[i];
        position = i;
      }
    }

   System.out.println("The largest element is "+largest+" which is found at position "+position);      
        
  }
}


Ejercicio 25: Programa Java para insertar un número en cualquier posición de una matriz

import java.util.Scanner;
import java.util.Arrays;

class Main {
  public static void main(String[] args) {

    int[] numbers = {3,4,1,9,6,2,8};
    System.out.println(Arrays.toString(numbers));

    System.out.println("Enter the number to be inserted: ");
    Scanner sc = new Scanner(System.in);
    int x = Integer.parseInt(sc.nextLine());
    System.out.println("Enter the position: ");
    int y = Integer.parseInt(sc.nextLine());

    for(int i=numbers.length-1;i>y;i--){
        numbers[i] = numbers[i-1];
    }
    numbers[y] = x;

   System.out.println(Arrays.toString(numbers));   
        
  }
}


Ejercicio 26: Programa Java para borrar un elemento de un array por índice

import java.util.Scanner;
import java.util.Arrays;

import java.util.ArrayList; 

class Main {
  public static void main(String[] args) {

    ArrayList<Integer> numbers = new ArrayList<Integer>(5); 
    numbers.add(3);
    numbers.add(7);
    numbers.add(1);
    numbers.add(4);
    
    System.out.println(numbers);

    System.out.println("Enter the position of the element to be deleted: ");
    Scanner sc = new Scanner(System.in);
    int x = Integer.parseInt(sc.nextLine());

    numbers.remove(x);

   System.out.println(numbers);   
        
  }
}


Ejercicio 27: Programa Java para comprobar si una cadena es un palíndromo o no

import java.util.Scanner;  

class Main {
  public static void main(String[] args) {

    String a, b = "";
    Scanner s = new Scanner(System.in);
    System.out.print("Enter the string you want to check: ");
    a = s.nextLine();
    
    int n = a.length();
    for(int i = n - 1; i >= 0; i--){
        b = b + a.charAt(i);
    }
    
    if(a.equalsIgnoreCase(b)){
      System.out.println("The string is a palindrome.");
    }else{
      System.out.println("The string is not a palindrome.");
    }
    
  }
}


Ejercicio 28: Programa Java para la suma de matrices

class Main {
  public static void main(String[] args) {

    //creating two matrices    
    int a[][]={{8,5,1},{9,3,2},{4,6,3}};    
    int b[][]={{8,5,3},{9,5,7},{9,4,1}};    
    
    //matrix to store the sum of two matrices    
    int c[][]=new int[3][3];  //3 rows and 3 columns  
    
    //adding 2 matrices    
    for(int i=0;i<3;i++){    
      for(int j=0;j<3;j++){    
        c[i][j]=a[i][j]+b[i][j];
        System.out.print(c[i][j]+" ");    
      }
      System.out.print("\n"); 
    }    
    
  }
}


Ejercicio 29: Programa Java para la multiplicación de matrices

class Main {
  public static void main(String[] args) {

    //creating two matrices    
    int a[][]={{8,5,1},{9,3,2},{4,6,3}};    
    int b[][]={{8,5,3},{9,5,7},{9,4,1}};    
    
    //matrix to store the product of two matrices    
    int c[][]=new int[3][3];
    
    //multiplying 2 matrices
    for(int i=0;i<3;i++){    
      for(int j=0;j<3;j++){    
        c[i][j]=0;      
        for(int k=0;k<3;k++){      
          c[i][j]+=a[i][k]*b[k][j];      
        }
        System.out.print(c[i][j]+" ");
      }
      System.out.print("\n"); 
    }    
    
  }
}


Ejercicio 30: Programa Java para comprobar el año bisiesto

import java.util.Scanner;  

class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.print("Enter the year you want to check: ");
    int year = Integer.parseInt(sc.nextLine()); 
    boolean leap = false;
    
    // if the year is divided by 4
    if (year % 4 == 0) {
      // if the year is century
      if (year % 100 == 0) {
        // if year is divided by 400, then it is a leap year
        if (year % 400 == 0)
          leap = true;
        else
          leap = false;
      }
      // if the year is not century
      else
        leap = true;
    }
    else
      leap = false;

    if (leap)
      System.out.println(year + " is a leap year.");
    else
      System.out.println(year + " is not a leap year.");
    
  }
}


Ejercicio 31: Programa Java para hallar el enésimo término de una serie de Fibonacci mediante recursión

import java.util.Scanner;  

class Main {
  public static void main(String[] args) {
    Scanner cs=new Scanner(System.in);
    int n;
		System.out.print("Enter the position(N): ");
		n=cs.nextInt();
		System.out.print("Nth Fibonacci Number is: "+NthFibonacciNumber(n));
  }

  static int NthFibonacciNumber(int n){
	    if(n==1)
	        return 0;
	    else if(n==2)
	        return 1;
	    else
	        return NthFibonacciNumber(n-1)+NthFibonacciNumber(n-2);
	}
  
}


Ejercicio 32: Programa Java para imprimir series Fibonacci usando iteración

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    int n1=0,n2=1;
    Scanner cs=new Scanner(System.in);
		System.out.print("Enter the number of terms in the sequence: ");
		int count = cs.nextInt(); 
    int n3,i;
    
    System.out.print(n1+" "+n2);//printing 0 and 1
    //printing from 2 because 0 and 1 are already printed  
    for(i=2;i<count;++i){
      n3=n1+n2;    
      System.out.print(" "+n3);    
      n1=n2;    
      n2=n3;
      }    
	
    }
}


Ejercicio 33: Programa Java para implementar una calculadora que realice operaciones básicas

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
      int firstNumber, secondNumber, opt, add, sub, mul;
      double div;
      Scanner s = new Scanner(System.in);
      System.out.print("Enter first number: ");
      firstNumber = s.nextInt();
      System.out.print("Enter second number: ");
      secondNumber = s.nextInt();
      
      while(true){
        System.out.println("Enter 1 for addition");
        System.out.println("Enter 2 for subtraction");
        System.out.println("Enter 3 for multiplication");
        System.out.println("Enter 4 for division");
        System.out.println("Enter 5 to Exit");
        int option = s.nextInt();
        switch(option){
          case 1:
            add = firstNumber + secondNumber;
            System.out.println("Result:"+add);
            break;
 
          case 2:
            sub = firstNumber - secondNumber;
            System.out.println("Result:"+sub);
            break;
 
          case 3:
            mul = firstNumber * secondNumber;
            System.out.println("Result:"+mul);
            break;
 
          case 4:
            div = (double)firstNumber / secondNumber;
            System.out.println("Result:"+div);
            break;    
 
          case 5:
            System.exit(0);
            
            }
        }
	
    }
}


Ejercicio 34: Programa Java para encontrar tu peso en Marte

import java.util.Scanner;  

class Main {
  public static void main(String[] args) {

  Scanner input = new Scanner(System.in);
  System.out.print("How many pounds (lbs) do you weigh? ") ;
  float weight = input.nextFloat();

  // computing the weight on mars
  double weightOnMars = (weight * .38);

  // displaying results with 4 decimal places
  System.out.println("Your weight is "+String.format("%.4f",weightOnMars)+" lbs on Mars");

    System.out.println("Converting the variable into integer");
    int weightOnMarsInt = (int)weightOnMars;
    System.out.println(weightOnMarsInt);

    System.out.println("Converting the variable into char");
    char weightOnMarsChar = (char)weightOnMars;
    System.out.println(weightOnMarsChar);

    System.out.println("Converting the variable into Int and doing an operation on it");
    int newIntVariable = weightOnMarsChar * 2;
    System.out.println(newIntVariable);
    
  }
}


Ejercicio 35: Programa Java para comprobar si el número aleatorio generado es par o impar

import java.util.Random;

class Main {
  public static void main(String[] args) {

    int min = 1;
    int max = 100;

    //Generating a random number
    Random r = new Random();
    int randomNumber = min + r.nextInt(max);
    System.out.println("Generated random number is: "+randomNumber);

    //Checking whether the number is odd or even

    if(randomNumber%2==0){
      System.out.println("The generated random number is even.");
    }else{
      System.out.println("The generated random number is odd.");
    }
        
  }
}


Ejercicio 36: Programa Java para calcular el número de contenedores necesarios

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("How many Lego bricks do we have? Choose an odd number between 50 and 100: ");
    int amountOfBricks = Integer.parseInt(sc.nextLine());

    System.out.println("How many Lego blocks fit in one container? Choose an even number between 5 and 10: ");
    int containerCapacity = Integer.parseInt(sc.nextLine());

    int noOfFullContainers = amountOfBricks/containerCapacity;
    int noOfTotalContainers;

    int noOfBlocksInNotFullContainers = amountOfBricks%containerCapacity;

    if(noOfBlocksInNotFullContainers!=0){
      noOfTotalContainers = noOfFullContainers + 1;
    }else{
      noOfTotalContainers = noOfFullContainers;
    }
    
    System.out.println("No of full containers we have: "+noOfFullContainers);
    System.out.println("No of total containers we have: "+noOfTotalContainers);
    System.out.println("No of blocks in the container that is not completely full: "+noOfBlocksInNotFullContainers);
        
  }
}


Ejercicio 37: Programa Java para calcular impuestos

import java.math.BigDecimal;    

class Main {
  public static void main(String[] args) {

    double netValue = 9.99;
    double VAT = 23.0;

    //calculating grossValue
    double grossValue = netValue + (VAT*netValue/100);
    System.out.println("The gross value is: "+grossValue);

    // multiplying the value by 10000
    double grossValue10000 = grossValue * 10000;
    System.out.println("The gross value for 10000 units is: "+grossValue10000);

    // calculating price excluding VAT 23%
    double excludingVAT = grossValue10000 - (VAT*grossValue10000/100);
    System.out.println("The value for 10000 units excluding VAT is: "+excludingVAT);

    // doing the same operations using BigDecimal instead of double
     System.out.println("\n----Using BigDecimal instead of double----\n");
       
    BigDecimal netValue_big = new BigDecimal("9.99");
    BigDecimal VAT_big = new BigDecimal("23.0");
    BigDecimal HUNDRED = new BigDecimal("100");
    BigDecimal TenThousand = new BigDecimal("10000");

    //calculating grossValue
    BigDecimal grossValue_big = netValue_big.add(VAT_big.multiply(netValue_big.divide(HUNDRED)));
    System.out.println("The gross value is: "+grossValue_big);
    
    // multiplying the value by 10000
    BigDecimal grossValue10000_big = grossValue_big.multiply(TenThousand);
    System.out.println("The gross value for 10000 units is: "+grossValue10000_big);
    
    // calculating price excluding VAT 23%
    BigDecimal excludingVAT_big = grossValue10000_big.subtract(VAT_big.multiply(grossValue10000_big.divide(HUNDRED)));
    System.out.println("The value for 10000 units excluding VAT is: "+excludingVAT_big);


  System.out.println("\nThe accuracy is higher when we use BigDecimal instead of double");
    
  }
}


Ejercicio 38: Calcular el IMC con Java

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    float height, weight, bmi;
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the height (in inches): ");
    height = s.nextFloat();
    System.out.println("Enter the weight (in pounds): ");
    weight = s.nextFloat();
    bmi = (float)(weight / Math.pow(height, 2) * 703);

    System.out.println("The BMI is: "+bmi);

    if(bmi<16.00)
      System.out.println("starvation");
    else if(bmi>=16.00 && bmi <= 16.99)
      System.out.println("emaciation");
    else if(bmi>=17.00 && bmi <= 18.49)
      System.out.println("underweight");
    else if(bmi>=18.50 && bmi<=22.99)
      System.out.println("normal, low range");
    else if(bmi>=23.00 && bmi<=24.99)
      System.out.println("normal, high range");
    else if(bmi>=25.00 && bmi<=27.49)
      System.out.println("overweight, low range");
    else if(bmi>=27.50 && bmi<=29.99)
      System.out.println("overweight, high range");
    else if(bmi>=30.00 && bmi<=34.9)
      System.out.println("1st degree obesity");
    else if(bmi>=35.00 && bmi<=39.90)
      System.out.println("2nd degree obesity");
    else
      System.out.println("3rd degree obesity");
  
    }
}


Ejercicio 39: Programa Java para hallar la suma de números pares

class Main {
  public static void main(String[] args) {
      int sum=0;
    
      for(int i=1;i<=100;i++){
        if(i%2==0){
          sum = sum + i;
        }
      }

      System.out.println("The sum of even numbers from 1-100 is: "+sum);
    
    }
}


Ejercicio 40: Programa Java para encontrar los números más grandes y más pequeños a partir de números aleatorios

import java.util.Random;

class Main {
  public static void main(String[] args) {
    int min = 1, max=100;
    int largest=0;
    int smallest=100;
    int i = 1;
    
    while(i<=10){
      //Generating a random number
      Random r = new Random();
      int randomNumber = min + r.nextInt(max);
      System.out.println("Generated random number is: "+randomNumber);
      if(randomNumber>largest){
        largest = randomNumber;
      }
      if(randomNumber<smallest){
        smallest = randomNumber;
      }
      i++;
    }
    
    System.out.println("\n");
    System.out.println("The smallest number is: "+smallest);
    System.out.println("The largest number is: "+largest);
    
  }
}

Domina Java: 20 Ejercicios Resueltos para Impulsar tus Habilidades de Programación. Universidad. (Parte 1)

Published on Larebelion.com: 2023-08-31T11:08:00.005+02:00

Java es uno de los lenguajes de programación más populares y ampliamente utilizados en el mundo. Su versatilidad y robustez lo convierten en una elección sólida para desarrolladores de todos los niveles. Sin embargo, para dominar Java y aprovechar al máximo su potencial, es esencial practicar y resolver una variedad de problemas. Este artículo te brindará una colección de ejercicios resueltos de Java que te ayudarán a fortalecer tus habilidades de programación y comprender mejor este lenguaje.


Ejercicio 1: Programa Java para comprobar si un número dado es par o impar

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter a number: ");
    Scanner sc = new Scanner(System.in);
    int number =Integer.parseInt(sc.nextLine());
    int x = number%2;
    
    if(x==0){
      System.out.println("The number is Even");
    }
    else{
      System.out.println("The number is Odd");
    }
    
  }
}


Ejercicio 2: Programa Java para convertir la temperatura en Centígrados a Fahrenheit

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter temperature in Centigrade: ");
    Scanner sc = new Scanner(System.in);
    int c =Integer.parseInt(sc.nextLine());
    float f = ((9f*c)/5f)+32;
    
    System.out.println("Temperature in Fahrenheit is: "+f);
    
  }
}


Ejercicio 3: Programa Java para hallar el área de un triángulo cuyos tres lados están dados

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    Scanner sc= new Scanner(System.in);
        
         System.out.println("Enter the 1st side:");
         int a= sc.nextInt();
 
         System.out.println("Enter the 2nd side:");
          int b= sc.nextInt();
 
         System.out.println("Enter the 3rd side:");
         int c= sc.nextInt();
    
         if((a+b)>c && (a+c)>b && (b+c)>a)
          {
            double s=(a+b+c)/2.0;
            double area=Math.sqrt(s*(s-a)*(s-b)*(s-c));
            System.out.println("Area of Triangle is: " + area);    
           }
         else  
           System.out.println("Area of the triangle does not exist");
    
  }
}


Ejercicio 4: Programa Java para hallar la media de un conjunto de enteros

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the count of numbers: ");
    int count = Integer.parseInt(sc.nextLine());
    int i = 0;
    float sum = 0;
    for(i=0;i<count;i++){
      System.out.println("Enter an integer: ");
      int x = Integer.parseInt(sc.nextLine());
      sum = sum + x;
    }
  
    float avg = sum/count;
    System.out.println("The average is: "+avg);
    
  }
}


Ejercicio 5: Programa Java para hallar el producto de un conjunto de números reales

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the number of real numbers: ");
    int count = Integer.parseInt(sc.nextLine());
    int i = 0;
    float product = 1.0f;
    for(i=0;i<count;i++){
      System.out.println("Enter a real number: ");
      float x = Float.parseFloat(sc.nextLine());
      product = product * x;
    }
  
    System.out.println("The product of the numbers is: "+product);
    
  }
}


Ejercicio 6: Programa Java para hallar la circunferencia y el área de un círculo con un radio dado

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Input the radius of the circle: ");
    double radius = Float.parseFloat(sc.nextLine());

    double c = 2 * Math.PI * radius;
    double area = Math.PI * radius * radius;
    
    System.out.println("The circumference of the circle is: "+c);
    System.out.println("The area of the circle is: "+area);
    
  }
}


Ejercicio 7: Programa Java para comprobar si el número entero dado es múltiplo de 5

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter an integer: ");
    Scanner sc = new Scanner(System.in);
    int number =Integer.parseInt(sc.nextLine());
    
    if(number%5==0){
      System.out.println(number+" is a multiple of 5");
    }
    else{
      System.out.println(number+" is not a multiple of 5");
    }
    
  }
}


Ejercicio 8: Programa Java para comprobar si el número entero dado es múltiplo de 5 y de 7

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter an integer: ");
    Scanner sc = new Scanner(System.in);
    int number =Integer.parseInt(sc.nextLine());
    
    if((number%5==0)&&(number%7==0)){
      System.out.println(number+" is a multiple of both 5 and 7");
    }
    else{
      System.out.println(number+" is not a multiple of both 5 and 7");
    }
    
  }
}


Ejercicio 9: Programa Java para hallar la media de 5 números usando un bucle while

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    
    int count = 0;
    int sum = 0;
    Scanner sc = new Scanner(System.in);
    while(count<5){
      System.out.println("Enter an integer: ");
      int number =Integer.parseInt(sc.nextLine());
      sum = sum+number;
      count++;
      }
    
double avg = ((double) sum) / 5.0;
System.out.println("Average is: "+avg);
    
  }
}


Ejercicio 10: Programa Java para mostrar el número entero dado en el orden inverso

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter an integer: ");
    int number =Integer.parseInt(sc.nextLine());
    int rev = 0;
    
    while(number!=0){
      int digit = number%10;
      rev = (rev*10)+digit;
      number = number/10;
      }
    
System.out.println(rev);
    
  }
}


Ejercicio 11: Programa Java para hallar la media geométrica de n números

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    int c = 0;
    double p = 1.0;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the number of values: ");
    int count =Integer.parseInt(sc.nextLine());
    
    while((c<count)){
      System.out.println("Enter a real number: ");
      double x =Double.parseDouble(sc.nextLine());
      c = c+1;
      p = p * x;
      }
    double gm = Math.pow(p,1.0/count);
    System.out.println("The geometric mean is: "+gm);
    
  }
}


Ejercicio 12: Programa Java para hallar la suma de los dígitos de un número entero utilizando un bucle while

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    int sum = 0;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter an integer: ");
    int number =Integer.parseInt(sc.nextLine());
    
    while(number!=0){
      int digit = number%10;
      sum = sum+digit;
      number = number/10;
    }
    
    System.out.println(("Sum of digits is: "+ sum));
    
  }
}


Ejercicio 13: Programa Java para mostrar todos los múltiplos de 3 dentro del intervalo de 10 a 50

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    for(int i=10;i<50;i++){
      if(i%3==0)
        System.out.println(i);
    }
    
  }
}


Ejercicio 14: Programa Java para mostrar todos los números enteros dentro del rango 100-150 cuya suma de dígitos sea un número par

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    for(int i=100;i<150;i++){
      int num = i;
      int sum = 0;
      while(num!=0){
        int digit = num%10;
        sum = sum + digit;
        num = num/10;
      }
      if(sum%2==0){
          System.out.println(i);
        }
    }
    
  }
}


Ejercicio 15: Programa Java para comprobar si el número entero dado es un número primo o no

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter an integer greater than 1: ");
    Scanner sc = new Scanner(System.in);
    int number =Integer.parseInt(sc.nextLine());

    int isprime = 1;

    for(int i=2;i<(number/2);i++){
      if(number%i==0){
        isprime = 0;
        break;
      }
    }
    
    if(isprime==1){
      System.out.println(number+" is a prime number");
    }
    else{
      System.out.println(number+" is not a prime number");
    }
    
  }
}


Ejercicio 16: Programa Java para generar los números primos de 1 a N

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter the range: ");
    Scanner sc = new Scanner(System.in);
    int number =Integer.parseInt(sc.nextLine());

    for (int num = 2; num <= number; num++)
        {
            boolean isPrime = true;
            for (int i=2; i <= num/2; i++)
            {
                if ( num % i == 0)
                {
                    isPrime = false;
                    break;
                }
            }
 
            if ( isPrime == true )
                System.out.println(num);
        }
    
  }
}


Ejercicio 17: Programa Java para encontrar las raíces de una ecuación cuadrática

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("Enter the first coefficient: ");
    Scanner sc = new Scanner(System.in);
    double a = Integer.parseInt(sc.nextLine());
    System.out.println("Enter the second coefficient: ");
    double b = Integer.parseInt(sc.nextLine());
    System.out.println("Enter the third coefficient: ");
    double c = Integer.parseInt(sc.nextLine());

    if(a!=0.0){
      double d = (b*b)-(4*a*c);
      if (d==0.0){
        System.out.println("The roots are real and equal.");
        double r = -b/(2*a);
        System.out.println("The roots are "+ r+"and"+ r);
      }else if(d>0.0){
        System.out.println("The roots are real and distinct.");
        double r1 = (-b+(Math.sqrt(d)))/(2*a);
        double r2 = (-b-(Math.sqrt(d)))/(2*a);
        System.out.println("The root1 is: "+ r1);
        System.out.println("The root2 is: "+ r2);
      }else{
        System.out.println("The roots are imaginary.");
        double rp = -b/(2*a);
        double ip = Math.sqrt(-d)/(2*a);
        System.out.println("The root1 is: "+ rp+ "+ i"+ip);
        System.out.println("The root2 is: "+ rp+ "- i"+ip);
      }   
    }else{
      System.out.println("Not a quadratic equation.");
    }
  }
}


Ejercicio 18: Programa Java para imprimir los números desde un número dado n hasta 0 usando recursividad

class Main {
  public static void main(String[] args) {
    print_till_zero(8);
    
  }

  public static void print_till_zero(int n){
      if(n==0)
        return;
      System.out.println(n);
      n=n-1;
      print_till_zero(n);
    }
}


Ejercicio 19: Java program to find the factorial of a number using recursion

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    
    System.out.println("Enter an integer:  ");
    Scanner sc = new Scanner(System.in);
    int a = Integer.parseInt(sc.nextLine());
    int result = fact(a);
    System.out.println("The factorial of"+ a + " is: "+ result);
    
  }

  public static int fact(int n){
    int f;
    if(n==1)
      f=1;
    else
      f = n * fact(n-1);
    return f;
    }
}


Ejercicio 20: Java program to display the sum of n numbers using an array

import java.util.Scanner;

class Main {
  public static void main(String[] args) {

    System.out.println("How many numbers: ");
    Scanner sc = new Scanner(System.in);
    int num = Integer.parseInt(sc.nextLine());
    int[] numbers = new int[num];
    int sum=0;
    
    for(int n=0;n<num;n++){
      System.out.println("Enter number: ");
      int x = Integer.parseInt(sc.nextLine());
      numbers[n] = x;
    }

    for(int i = 0; i < numbers.length; i++) {  
        sum = sum + numbers[i];  
      }  
    System.out.println("Sum of all the elements of the array: " + sum);  
    
  }
}


Consulta más de mis artículos relacionados con JAVA

ChatGPT post: Exploring the Exciting Possibilities of Quantum Computing

Published on Larebelion.com: 2023-08-25T11:51:00.000+02:00

 Hello Internet!

Today I decided to ask ChatGPT for help to generate a post in the news log and give the IA the opportunity to choose the topic.



Hello Blobber community,

I hope this message finds you all well. Today, I want to dive into one of the most fascinating and rapidly evolving areas of technology - quantum computing.

Quantum Computing: A Brief Overview

For those unfamiliar with the concept, quantum computing represents a paradigm shift in the world of computation. While classical computers use bits as the fundamental unit of information (0 or 1), quantum computers leverage qubits, which can exist in multiple states simultaneously due to the principles of superposition and entanglement. This unique property enables quantum computers to solve complex problems exponentially faster than classical counterparts in certain domains.

Current State of Quantum Computing

Quantum computing is no longer a distant dream; it's becoming a reality. Tech giants like IBM, Google, and Microsoft are investing heavily in quantum research and have made significant breakthroughs. We're seeing the emergence of quantum processors with increasing qubit counts, making it possible to tackle more complex problems.

Applications and Implications

The potential applications of quantum computing are mind-boggling. From optimizing supply chains to cracking currently unbreakable encryption, quantum computers promise to revolutionize various industries. Researchers are working on quantum algorithms for drug discovery, climate modeling, and even simulating quantum chemistry, which could lead to the development of new materials with unprecedented properties.

However, with great power comes great responsibility. The advent of quantum computing also raises cybersecurity concerns. It could render today's encryption methods obsolete, prompting the need for new, quantum-resistant cryptographic techniques.

Challenges and Future Outlook

While quantum computing holds immense promise, it's not without its challenges. Qubits are incredibly delicate and prone to errors, necessitating the development of error-correcting codes. Moreover, building practical and scalable quantum computers is an ongoing struggle.

Despite these challenges, the field of quantum computing is advancing rapidly, thanks to the collaborative efforts of researchers, tech companies, and governments worldwide.

Join the Discussion

I encourage all tech enthusiasts to join in the discussion. What are your thoughts on the current state of quantum computing? Are you excited about its potential, or do you have concerns about its implications? Have you come across any recent breakthroughs or interesting applications?

Let's explore this exciting frontier of technology together. Share your insights, questions, or any relevant news articles you've come across in the comments section below. The future of quantum computing is unfolding before our eyes, and your perspective is valuable.

Stay curious and stay connected!

Best regards,

CHATGPT

Chat GPT-4 publicado. El futuro está aquí.

Published on Larebelion.com: 2023-03-19T16:16:00.005+01:00

OpenAI ha lanzado por fin el gran modelo de lenguaje GPT-4, y la gente ya se pregunta cómo utilizarlo. El nuevo LLM es una mejora considerable con respecto al modelo GPT-3.5 utilizado por ChatGPT, con ganancias significativas en la precisión de las respuestas, la generación de letras, la creatividad en el texto y la implementación de cambios de estilo. Aunque tan inmensa potencia tiene sus ventajas, puede resultar intimidante ponerla en práctica. Por eso hemos decidido preparar una guía completa de GPT-4 para ti. ¿Cómo acceder a GPT-4? ¿Cuáles son las nuevas funciones de GPT-4? ¿Qué puedo hacer con GPT-4? ¿Puedo utilizar GPT-4 de forma gratuita? Sigue leyendo y descubre todo lo que necesitas saber sobre GPT-4.

Announcing GPT-4, a large multimodal model, with our best-ever results on capabilities and alignment: https://t.co/TwLFssyALF pic.twitter.com/lYWwPjZbSg

— OpenAI (@OpenAI) March 14, 2023
¿Como podemos usar Chat-GPT4? 


 Después de acceder a él, el proceso es el mismo de siempre. Dele una indicación y ¡explore! La principal ventaja de GPT-4 es su superior comprensión e inventiva cuando se enfrenta a instrucciones difíciles. OpenAI ha realizado numerosas pruebas que demuestran la mayor capacidad de GPT-4 para manejar tareas complejas. El efecto de esto es claramente visible en los resultados de los exámenes. Nuevas GPT-4 funcionalidades ¿Cómo utilizar GPT-4 y sus nuevas funciones? Esta nueva generación del modelo lingüístico de OpenAI es superior a las versiones anteriores en tres aspectos: originalidad, entrada visual y contexto más largo. Según OpenAI, GPT-4 es mucho más capaz de realizar creaciones originales y de colaborar eficazmente con los usuarios en proyectos creativos. Varias formas de escritura creativa, como la música, los guiones de cine, los manuales técnicos e incluso "entender el estilo de escritura de un usuario", entran en esta categoría. Sin embargo, estas son brevemente las mayores novedades de GPT-4: Procesa 8 veces más palabras que ChatGPT Maneja texto e imágenes Puede crear sitios web a partir de una imagen Realiza impuestos Veámoslas más de cerca. 

Más información en: https://dataconomy.com/2023/03/how-to-use-gpt-4-features-use-cases-example/

Summer's vacations 2022

Published on Larebelion.com: 2022-08-22T16:41:00.003+02:00


 

Cómo usan la AI en los procesos de selección

Published on Larebelion.com: 2021-04-05T10:27:00.004+02:00

 ¿Qué es la contratación con AI?

La contratación con IA es la práctica de integrar la inteligencia artificial, como el aprendizaje automático o los algoritmos predictivos, en las partes de la contratación que requieren mucho tiempo o recursos. 

Hay una variedad de herramientas de contratación de IA que evalúan la idoneidad de un candidato para un puesto. Esencialmente, estas herramientas utilizan algoritmos para entender los puntos de datos de las respuestas, incluyendo: 

Pero no es esa la razón por la que los reclutadores utilizan la IA. Los reclutadores y los equipos de talento quieren utilizar la IA para automatizar el proceso de contratación y hacerlo más rápido, menos costoso y más fácil de gestionar grandes volúmenes de candidatos.


Por qué la IA para la contratación

La IA, o inteligencia artificial, puede ser una poderosa herramienta para impulsar la eficiencia en la contratación. Al reducir el tiempo dedicado a la selección, las pruebas de habilidades y las entrevistas, los equipos de RRHH y de Talento pueden centrarse en las formas de atraer, incorporar y retener a los empleados.


A medida que la tecnología de IA se hace más accesible, todas las industrias están utilizando la IA para reducir o eliminar las actividades que consumen tiempo. El mundo de la contratación no es diferente.

Diagrama que muestra el tiempo medio dedicado a cada etapa del proceso de contratación

Los equipos de adquisición de talento están desplegando herramientas de contratación de IA para superar los aspectos que más tiempo consumen en el proceso de contratación. La selección de candidatos previa a la contratación sigue siendo la mayor pérdida de recursos de los reclutadores. El número de candidatos por solicitud abierta ha aumentado, y encontrar candidatos de calidad se ha convertido en un reto.

Cómo utilizan los reclutadores la IA

Hay tres formas principales en que los reclutadores utilizan la IA en el proceso de contratación:


Búsqueda de candidatos

Las herramientas basadas en la IA para la búsqueda de candidatos ayudan a los reclutadores a encontrar y conectar con el talento más rápidamente. Algunas herramientas se centran en la búsqueda de perfiles en bolsas de trabajo o bases de datos internas para cubrir un puesto vacante. Otras ayudan a maximizar los esfuerzos de marketing y a conectar con los candidatos en tiempo real. Y hay chatbots de IA que pueden interactuar con un candidato para determinar qué papel específico será el más adecuado y mostrarles cómo aplicar a través del sitio de trabajo. 

Algunos ejemplos de herramientas de contratación de IA son:

Hiretual
Los clientes utilizan Hiretual para buscar en más de 40 plataformas y más de 700 millones de perfiles profesionales y contratar de manera eficiente con la colaboración del equipo, gestionar la reserva de talento, personalizar el compromiso del candidato y redescubrir candidatos en su ATS/CRM.
Appcast
Appcast utiliza el análisis predictivo, los datos en tiempo real y las ofertas programáticas para maximizar los resultados de contratación.
Shapr
No se limita a la búsqueda de candidatos, Shapr es una especie de Tinder para las relaciones profesionales. El algoritmo de aprendizaje automático sugiere 15 personas relevantes para conocer cada día, y se comunica cuando el interés por conectar es mutuo.

Selección de candidatos

Como se ha demostrado, la selección es el aspecto que más tiempo consume en el proceso de contratación. Las herramientas de selección de IA tienen como objetivo obtener rápidamente información de las solicitudes para acelerar este paso.

Las herramientas de selección de IA varían en su enfoque, desde el análisis de los currículos hasta las evaluaciones de comportamiento y habilidades. El rendimiento predictivo basado en pruebas de habilidades tiende a ser una mejor manera de emparejar a los candidatos con los puestos vacantes, ya que una prueba de habilidades indica el conocimiento y la capacidad actuales, frente a la naturaleza histórica de los currículos. En cualquier caso, las herramientas de IA agilizan el proceso y ayudan a seleccionar a los candidatos, no a excluirlos.

Algunos ejemplos de herramientas de selección de IA son

Recruiterbox
Tiene una funcionalidad de análisis de currículos dentro de su sistema de seguimiento de candidatos, así como formularios de solicitud flexibles para ayudar a seleccionar a los candidatos.
Ideal
El software de selección de candidatos de Ideal ofrece una selección automática de currículos para preseleccionar a los candidatos.
Vervoe
Evaluaciones de habilidades basadas en la IA que le permiten evaluar a escala y dedicar más tiempo a los candidatos de alto rendimiento. Califica y clasifica instantáneamente a los candidatos según las habilidades relacionadas con el trabajo.

Entrevistas a candidatos

Las herramientas de IA se utilizan en las entrevistas en dos escenarios clave. En el primer caso, empresas como Unilever, Google y Facebook han empezado a utilizar la IA para evaluar las entrevistas en vídeo, utilizando el análisis de la voz y la expresión facial para evaluar los rasgos de personalidad. Aunque esto puede ayudar a reducir el tiempo y la atención que requieren los reclutadores para revisar la respuesta grabada de cada candidato, hay algunas grandes banderas rojas con el uso del reconocimiento facial para seleccionar a los candidatos - más sobre esto en un minuto. 

La segunda forma de utilizar una herramienta de IA con una entrevista de vídeo pregrabada es analizar el contenido de la respuesta. Por ejemplo, en una prueba de habilidades se puede pedir a un candidato que escriba un ejemplo de entrada de blog sobre un tema relevante para el sector de la empresa. A continuación, en una entrevista de vídeo pregrabada, la herramienta pregunta por qué el candidato ha elegido el tema sobre el que ha escrito. La parte del vídeo puede utilizarse para dar más contexto a la prueba de habilidades del candidato y ayudar a que éste destaque más allá de su respuesta inicial.

Algunos ejemplos de entrevistas a candidatos con IA son

HireVue
Plataforma de entrevistas digitales. HireVue utiliza la IA en sus entrevistas para analizar el estilo de trabajo y la capacidad cognitiva. 
VCV
Utiliza el chat y un bot de llamadas telefónicas para seleccionar a los candidatos por teléfono, y luego los invita a realizar entrevistas en vídeo con reconocimiento facial.
Impress
Utiliza un chatbot para realizar entrevistas de texto a los candidatos.


Bibliografía

Movistar cambia sus fibras de 600 Mbps a 1Gbps gratis

Published on Larebelion.com: 2021-03-10T11:27:00.002+01:00

 


Opinion Black Mirror Entire History of you

Published on Larebelion.com: 2021-03-01T09:00:00.012+01:00

Do you know Black Mirror serie watched on Netflix?

The series is set in the near future, where technology pervades most of our actions. In the chosen episode, a memory chip implanted in people's heads systematically marks their lives and conditions them substantially. It is an oval or pill-shaped mini-computer, installed behind the right ear, connected to the brain and its eyes, with which it is possible to store up to three decades of memories, the device continuously records everything we see.

Users of such a device have the ability to visualise any memory either through their eyes or through a screen to share those memories with anyone. The device is installed from the time you are a baby, and your parents can access your memories until you reach the age of majority.

One of the curiosities that we can find in this chapter is that "Robert Downey Jr." bought the rights to the chapter in 2013, his idea was to adapt the story to film, however, after a few years, the idea never materialised.


The main plot of the film is very interesting to me, the human being has a limited memory, sometimes, it can even "fool us" or remember something slightly different to what we really lived or learnt and the worst, unfortunately it is very volatile, we suffer it in exam time for students, in our jobs or our personal lives when we forget the name of an old friend we haven't seen for a long time or, who didn't think that we didn't lock the car when we left, didn't roll up the windows perhaps, or simply, what did we have for dinner last night? But this technology that the series offers us is not only nourished by forgetting, what if we could remember every moment that first love? that first kiss? that first goal we scored when we were young? it would indeed be marvellous. As we will see throughout this work, if such technology existed, our lives would change radically, probably professionals such as "judge", "police" and even "examiner", would change radically, what would be the sense of a jury trial, it would only be necessary to access the memories of the person and we would know if we are facing a rapist, murderer, terrorist or simply a man innocent of any charge.

But it's not all positive, is it? What about privacy? What about the need to forget? Can you imagine being over and over again reliving moments with loved ones who are no longer alive? That probably wouldn't even let us move on in life. Can you imagine a gathering of friends? Who would dare to make a joke and have everyone remember it perfectly on their "pimples" (as the mini-computer is colloquially called in the series)?

Throughout the paper I will be analysing the chronology of what happened in the series from my point of view, of course, reviewing the current laws against privacy and recording of current images, in order, of course, to go towards the epicentre of the paper, which is to try to pass a law that includes this technology and helps us to live with it, as this compulsory paper of the subject proposes.


JAVA: Ejercicio sobre threads

Published on Larebelion.com: 2021-03-01T09:00:00.002+01:00

 El enunciado es: Implementar el modelo del productor / consumidor.

La solución aportada no comprueba el tamaño del buffer, considera que nunca se va a llenar tanto el buffer como para que falle el programa por desbordamiento (supone que los consumidores se encargarán de variar el buffer para que no se llene demasiado). Puede que esto no sea correcto en algunos entornos y sea necesario controlar la inserción de elementos en el buffer.

Buffer.java
package productorconsumidor;

import java.util.LinkedList;

class Buffer {

    private LinkedList<Integer> num = new LinkedList<>();

    synchronized void poner(int i) {
        num.add(i);
        notify();
    }

    synchronized int quitar() {
        while (num.size() < 1) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return (int) num.remove();
    }
}

Consumidor.java

package productorconsumidor;

class Consumidor extends Thread {

    private Buffer b;

    Consumidor(Buffer b) {
        this.b = b;
    }

    public void run() {
        while (true) {
            System.out.println("Se quita " + b.quitar() + " desde " + getId());
            try {
                Thread.sleep((long) (Math.random() * 4000 + 1));
            } catch (InterruptedException ex) {  }
        }
    }
}

Productor.java

package productorconsumidor;

class Productor implements Runnable {

    private Buffer b;

    Productor(Buffer b) {
        this.b = b;
    }

    public void run() {
        int i = 0;
        while (true) {
            try {
                Thread.sleep((long) (Math.random() * 1000 + 1));
            } catch (InterruptedException ex) { }        
            System.out.println("Se pone " + i++);
            b.poner(i);
        }
    }
}

ProductorConsumidor.java

package productorconsumidor;


public class ProductorConsumidor {

    public static void main(String[] args) {
        Buffer b = new Buffer();
        new Thread(new Productor(b)).start();
        new Consumidor(b).start();
        new Consumidor(b).start();
        new Consumidor(b).start();
    }
}

Puedes ver todos mis ejercicios de JAVA en este enlace.

JAVA: Ejercicio sobre serialización

Published on Larebelion.com: 2021-02-22T09:00:00.003+01:00

El enunciado es: Realizar un programa que cuente el número de vocales que hay en un fichero de texto. Pasar como argumento al programa el nombre del archivo.


CuentaVocales.java

package cuentavocales;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CuentaVocales {

    public static void main(String[] args) {
        try {
            String vocales = "aeiou";
            int nvocales = 0;
            FileInputStream is = new FileInputStream(args[0]);
            byte []b = new byte[10];
            while(is.read(b)!=-1) {
                for(byte c: b) {
                    if(vocales.contains(Character.toString((char)c)))
                        nvocales++;
                }
                b = new byte[10];
            }
            is.close();
            System.out.println("Vocales: "+nvocales);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
}

Puedes ver todos mis ejercicios de JAVA en este enlace.

JAVA: Ejercicio sobre interfaces

Published on Larebelion.com: 2021-02-15T09:00:00.005+01:00

El enunciado es: En el siguiente post se creó una jerarquía de clases de figuras geométricas. Implementar una interfaz que defina un método que devuelva el número de lados. Hacer que las figuras que tengan lados (el círculo no tiene) la implementen.


Main.java

package main;
import figuras.*;

public class Main {
    public static void main(String[] args) {
        Figuras figuras = new Figuras();
        figuras.annade(new Circulo(3.456));
        figuras.annade(new Triangulo(3.456,2.17));
        figuras.annade(new Cuadrado(2.11));
        if(!figuras.annade(new Triangulo(3.12,5.6),7)) {
            System.out.println("Error al borrar");
        }
        figuras.lista();
        figuras.borra(0);
        figuras.borra(33);
        System.out.println("---------------------");
        figuras.lista();
    }
}

Triangulo.java

package figuras;

public class Triangulo extends Figura implements Lados {
    
    private double base;
    private double altura;
    
    public Triangulo(double base, double altura) {
        this.base = base;
        this.altura = altura;
    }

    @Override
    public double calculaArea() {
        return (base*altura)/2;
    }

    @Override
    public int numLados() {
        return 3;
    }
       
}

Lados.java

package figuras;

public interface Lados {
    abstract public int numLados();
}

Figuras.java

package figuras;

import java.util.LinkedList;

public class Figuras {

    // No hay restricción si utilizamos colecciones (ver unidad 9)
    private LinkedList<Figura> lista = new LinkedList<>();
    
    public void annade(Figura f) {
        lista.add(f);
    }
    
    public void borra() {
        lista.removeLast();
    }
    
    public boolean annade(Figura f, int pos) {
        try {
            lista.add(pos, f);
        }
        catch(Exception e) {
            return false;
        }
        return true;
    }
    
    public void borra(int pos) {
        // Si se intenta borrar una que no existe que no haga nada
        try {
            lista.remove(pos);
        } catch(Exception e) {}
    }
    
    public void lista() {
        for(Figura f: lista) {
            System.out.println("Figura: "+f);
            if(f instanceof Lados) {
                Lados l = (Lados)f;
                System.out.println("\tNum lados: "+l.numLados());
            }
        }
    }
}

Figura.java

package figuras;

public abstract class Figura {
    abstract public double calculaArea();
}

Cuadrado.java

package figuras;

public class Cuadrado extends Figura implements Lados{

    private double lado;
    
    public Cuadrado(double lado) {
        this.lado = lado;
    }
    
    @Override
    public double calculaArea() {
        return lado * lado;
    }

    @Override
    public int numLados() {
        return 4;
    }
    
}

Circulo.java

package figuras;


public class Circulo extends Figura {

    private double radio;
    
    public Circulo(double radio) {
        this.radio = radio;
    }
    
    @Override
    public double calculaArea() {
        return Math.PI*radio*radio;
    }
    
}

Puedes ver todos mis ejercicios de JAVA en este enlace.

JAVA: Ejercicio sobre polimorfismo

Published on Larebelion.com: 2021-02-08T09:00:00.005+01:00

El enunciado es: Crear una clase encargada de almacenar figuras geométricas. La clase deberá disponer de métodos que permitan añadir y borrar un elemento por posición, mostrar los elementos por pantalla, etc.


package main;
import figuras.*;

public class Main {
    public static void main(String[] args) {
        Figuras figuras = new Figuras();
        figuras.annade(new Circulo(3.456));
        figuras.annade(new Cuadrado(2.11));
        if(!figuras.annade(new Triangulo(3.12,5.6),7)) {
            System.out.println("Error al borrar");
        }
        figuras.lista();
        figuras.borra(0);
        figuras.borra(33);
        System.out.println("---------------------");
        figuras.lista();
    }
}

Puedes ver todos mis ejercicios de JAVA en este enlace.

JAVA: Ejercicio sobre Herencia

Published on Larebelion.com: 2021-02-01T09:00:00.009+01:00

El enunciado es: Cree una jerarquía de clases que represente el personal de una empresa. Para ello defina una clase abstracta con los atributos y métodos generales de cualquier empleado y varias subclases para distintos tipos de empleados.


Programador.java

package empleados;

public class Programador extends Empleado {
    
    public Programador(String dni) {
        super(dni,20000);
    }
    
    public void programar() {
        System.out.println("Estoy programando");
    }
}

ListaEmpleados.java
 
package empleados;

public class ListaEmpleados {

    private Empleado[] lista;

    public ListaEmpleados() {
        lista = new Empleado[10];
    }

    public boolean add(Empleado e) {
        for (int i=0; i<lista.length; i++) {
            if (lista[i] == null) {
                lista[i] = e;
                return true;
            }
        }
        return false;
    }

    public void remove(int i) {
        if (i < lista.length && i >= 0) {
            lista[i] = null;
        }
    }

    public boolean remove(String dni) {
        for (int i=0; i<lista.length; i++) {
            if (lista[i] != null) {
                if (lista[i].getDNI().compareTo(dni) == 0) {
                    lista[i] = null;
                    return true;
                }
            }
        }
        return false;
    }

    public void listar() {
        for (Empleado elto : lista) {
            if (elto != null) {
                System.out.print(elto.getDNI() + ": ");
                if (elto instanceof Gerente) {
                    System.out.print("gerente (");
                }
                if (elto instanceof Programador) {
                    System.out.print("programador (");
                }
                System.out.println(elto.getSueldo() + ")");
            }
        }
    }
}

Gerente.java

 
package empleados;

public class Gerente extends Empleado {
    
    public Gerente(String dni) {
        super(dni,100000);
    }
    
    public void reunion() {
        System.out.println("Estoy reunido");
    }
}

Empleados.java

 
package empleados;

public class Gerente extends Empleado {
    
    public Gerente(String dni) {
        super(dni,100000);
    }
    
    public void reunion() {
        System.out.println("Estoy reunido");
    }
}

Empleado.java

 
package empleados;

abstract public class Empleado {

    private String DNI;
    private int sueldo;
    
    public Empleado(String dni, int sueldo) {
        DNI = dni;
        this.sueldo = sueldo;
    }

    public String getDNI() {
        return DNI;
    }

    public void setDNI(String DNI) {
        this.DNI = DNI;
    }    

    public int getSueldo() {
        return sueldo;
    }

    public void setSueldo(int sueldo) {
        this.sueldo = sueldo;
    }
    
}

Puedes ver todos mis ejercicios de JAVA en este enlace.

Setup HSQLDB on MAC

Published on Larebelion.com: 2020-10-28T10:36:00.007+01:00

A few days ago, I was involved in developing a practice for a University project where a Java application had to be built that communicated with an SQL instance. There is not much problem using standard SQL such as mySQL, MariaDB or PostgreSQL, but the export is a bit cumbersome. Doing some research on the Internet I found this wonderful HyperSQL solution, it is a functional Java based SQL database solution that you can easily save to your git repository like the rest of your application.

Let me detail step by step how we proceed with the installation and later I will publish some tricks.

Hsqldb Server

This is the preferred way of running a database server and the fastest one. A proprietary communications protocol is used for this mode. A command similar to those used for running tools and described above is used for running the server. The following example of the command for starting the server starts the server with one (default) database with files named "mydb.*".

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:xdb -dbname.0 xdb

The command line argument -? can be used to get a list of available arguments.

Note that both "xdb" is used for both File and database name.


   Running Tools

All tools can be run in the standard way for archived Java classes. In the following example the AWT version of the Database Manager, the hsqldb.jar is located in the directory ../lib relative to the current directory.

 java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager

If hsqldb.jar is in the current directory, the command would change to:

java -cp hsqldb.jar org.hsqldb.util.DatabaseManager

Main classes for the Hsqldb tools
Use these setting in the connection to setting to run the server.



Start the DB Manager Swing application

HSQL needs to be setup in JPA persistence.xml to perform connections.
screenshot hyperSQL




<persistence-unit name="Stocks" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>nJTA</non-jta-data-source>
        <class>com.larebelion.db.stock</class>
        <properties>
        <!-- jdbc:hsqldb:mdb -->
        <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:hsql://localhost/mdb" />
        <property name="javax.persistence.jdbc.user" value="SA"/>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add', ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>        
     <property name="openjpa.jdbc.DBDictionary" value="hsql" />
<property name="openjpa.jdbc.Schema" value="PUBLIC" />
        </properties>   
    </persistence-unit> 
</persistence>

Code Stars

Published on Larebelion.com: 2020-10-18T22:26:00.000+02:00


"Everybody in this country should learn how to program computer...

because it teaches you how to think" Steve Jobs




"I like programming more and more every day, I think it's the best job in the world. Dream, enjoy. build, program..." Jose Luis Santamaria

Installing, hardening, mod-security and fail2ban for Apache server

Published on Larebelion.com: 2020-07-14T16:30:00.001+02:00

The following post is related to computer security, one of my passions as a hobby and what has fed me for several years being my profession a few years ago. The aim of the article is none other than to install and secure a web server, I have chosen Apache.

  1. Installing

If you need something help in order to compiling and installing you apache web server, please find more information in the official documentation.

    2. Hardening


Relatively recently, I found this public project called "Apache Hardening" and was completely delighted. It's not even worth transcribing, the best thing you can do is go to the original link and marvel at it by following the instructions.

    3. Mod-Security

Another important topic related you webserver Apache, is apply the mod-security. Mod-Security is one of the most popular security module for Apache and due MS more than the 85% of the automatics vulnerabilities and exploits are stopped.


On Intenet, normally you can find a lot of valid websites where explain how you need to install the tool but in my opinion one of the best is this.

    4. Fail2ban

Ok, we are very close to conclude this mini tutorial, imagine that all the above fails, what we have left, well, many things, we should be sure that we have secured our operating system, that we do not have unnecessary services published on the Internet and a long etcetera, but ... what if we apply firewall rules dynamically before events recorded in the log? Welcome to Fail2ban.

Let’s assume that you already installed fail2ban, you can check here how to do that: – https://www.ionos.com/community/server-cloud-infrastructure/linux-server/use-fail2ban-on-a-cloud-server-with-linux/

We need to copy this to a file called jail.local for Fail2Ban to find it.

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Configure defaults in jail.local
Open up the new Fail2Ban configuration file:
You can see the default section below:
[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

# "bantime" is the number of seconds that a host is banned.
bantime  = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

Configure Fail2ban For ssh

Although you can add this parameters in the global jail.local file, it is a good practice to create seperate jail files for each of the services we want to protect with Fail2Ban.
So lets create a new jail for SSH with the vi editor.
vi /etc/fail2ban/jail.d/sshd.local
In the above file, add the following lines of code:
[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 5
bantime = 600
Restart Fail2Ban
After making any changes to the Fail2Ban config, always be sure to restart Fail2Ban.
systemctl restart fail2ban
You can see the rules that fail2ban puts in effect within the IP table:
iptables -L -n
Check Fail2Ban Status
Use fail2ban-client command to query the overall status of the Fail2Ban jails.
fail2ban-client status
You can also query a specific jail status using the following command:
fail2ban-client status sshd

Configure Fail2ban For Apache

Edit this file:
sudo nano /etc/fail2ban/jail.local
Add the following content. Note: Substitute your own static IP address for the sample address (127.0.0.1) in this example:
# detect password authentication failures
[apache]
enabled  = true
filter   = apache-auth
action   = iptables-multiport[name=auth, port="http,https"]
logpath  = /var/log/httpd/fail2ban_log
bantime  = 3600
maxretry = 3
ignoreip = 127.0.0.1

# detect spammer robots crawling email addresses
[apache-badbots]
enabled  = true
filter   = apache-badbots
action   = iptables-multiport[name=badbots, port="http,https"]
logpath  = /var/log/httpd/fail2ban_log
bantime  = 3600
maxretry = 1
ignoreip = 127.0.0.1

# detect potential search for exploits
[apache-noscript]
enabled  = true
filter   = apache-noscript
action   = iptables-multiport[name=noscript, port="http,https"]
logpath  = /var/log/httpd/fail2ban_log
bantime  = 3600
maxretry = 6
ignoreip = 127.0.0.1

# detect Apache overflow attempts
[apache-overflows]
enabled  = true
filter   = apache-overflows
action   = iptables-multiport[name=overflows, port="http,https"]
logpath  = /var/log/httpd/fail2ban_log
bantime  = 3600
maxretry = 2
ignoreip = 127.0.0.1
Save and close the file, then restart Fail2ban for the changes to take effect:
sudo systemctl restart fail2ban
Now, configure the Fail2ban service to start on boot with the command:
sudo systemctl enable fail2ban
To verify the rules that were added to iptables by Fail2ban, use the following command:
sudo iptables -L



Graphviz. Simple solution for recreating graphics

Published on Larebelion.com: 2020-04-15T12:28:00.000+02:00

This is the first article that I publish in English, the main reason to do it is because all the documentation related to context maps that I have found so far, are related in English and obviously my way to contribute to the extensive Internet community, is to do it in a universal language, at least for this article.

Well, today I want to talk about two utilities that have helped me a lot, one of them is graphviz.org. Graphviz, which has versions for Windows, Mac or Linux (in my case I have tried in Linux and Mac OS), is a powerful Open Source tool that allows to easily generate almost any graphic, cool stuff like this:



Or simpler things than recreating a binary tree that I explained in the previous section, https://www.larebelion.com/2020/04/arboles-binarios.html

Imagine that in code C, you want to represent the resulting binary tree, with few lines of code you could get something like this:


Let me a simple C function to add to the previous tree and generate this:

static void _generating_graphviz_details(const tree_t node, const void *extra)
{
 FILE *f = (FILE *) extra;

 fprintf(f, " node_%p [label=\"{%p | content: %d | { <izqda> %p | <dcha> %p}\"];\n",
  node, node, node->content, node->left, node->right
 );
 if (node->left != NULL) {
  fprintf(f, " node_%p:left -> node_%p;\n", node, node->left);
 }
 if (node->right != NULL) {
  fprintf(f, " node_%p:dcha -> node_%p;\n", node, node->dcha);
 }
 fprintf(f, "f");
}

Okay, hopefully this tiny contribution will help you in the dynamic generation of your graphics.

Backup de seguridad de tu máquina Linux

Published on Larebelion.com: 2020-04-14T12:49:00.000+02:00

En estos días de confinamiento, me he decidido a ordenar un poco mis máquinas, en mi caso, cuento con tres raspberry en casa con diferentes distribuciones de Linux que utilizo para montar labs de sistemas, de programación, bases de datos como MariaDB o PostgreSQL e incluso cosas de seguridad o hardening.

Las raspberry, por la experiencia que tengo ya con ellas de varios años pueden sufrir problemas con la tarjeta SD y dejarte tirado. Como me ha pasado ya varias veces, me he decidido por escribir un script en shell para salvaguardar la información. Hasta aquí, todo más o menos sencillo, el problema es... ¿donde lo almaceno?.

Gracias a mi hermano, he descubierto http://mega.nz, se trata de una nueva startup del reputado empresario Kim_Dotcom, el creador de Megaupload. Lo primero que recomiendo hacer es crearte una cuenta gratuita de Meganz (50GB gratis).



Una vez la crees, descargate el componente para utilizar via json la integración con el API de meganz, el componente se llama Megacmd


Una vez que ya tengas todo esto instalado en tu máquina, ya puedes personalizar este pequeño shell script y almacenar tus backups en la nube.



#!/bin/bash

NAME=`hostname`
LIMITSIZE=5485760 # 5G = 10*1024*1024k   # limit size in GB   (FLOOR QUOTA)
MAILCMD=mail
R=/home/xxxx/src
LOG=$R/log/log-$(basename ${0}).log
EMAILIDS="user@domain.net"
MAILMESSAGE=$R/log/tmp-$(basename ${0})

if [ -d /media/4TB ]
then
        ROOTPATH=/media/4TB/servers/$NAME  # in case we've mount volume
        MOUNTP=/media/4TB
else
        ROOTPATH=/opt/$NAME  # in case no
        MOUNTP=/
fi

BKDIR=$ROOTPATH/bkdir # simple text file for to list your directories for backup, normally /etc /home/user /root /var/www/html ...
BKPATH=$ROOTPATH/backup
FREE=$(df -k --output=avail "$MOUNTP" | tail -n1) # df -k not df -h because is more exact

if [ ! -d $BKPATH ]
then
        mkdir -p $BKPATH
fi

if [ ! -d $R/log ]
then
        mkdir -p $R/log
fi

email_on_failure () # functions for launch email alert
{

          sMess="$1"
          echo "" >$MAILMESSAGE
          echo "Hostname: $(hostname)" >>$MAILMESSAGE
          echo "Date & Time: $(date)" >>$MAILMESSAGE

          # Email letter formation here:
          echo -e "\n[ $(date +%Y%m%d_%H%M%S%Z) ] Current Status:\n\n" >>$MAILMESSAGE
          cat $sMess >>$MAILMESSAGE

          echo "" >>$MAILMESSAGE
          echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
          echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE

          # sending email (need to have an email client set up or sendmail)
          $MAILCMD -s "Urgent MAIL Alert For $(hostname) Server" "$EMAILIDS" < $MAILMESSAGE

          [ -f $MAILMESSAGE ] && rm -f $MAILMESSAGE
}

if [ "$FREE" -lt "$LIMITSIZE" ]
then
          echo "Writing to $LOG"
          echo "MAIL ERROR: Less than $((($FREE/1000))) MB free (QUOTA) on $MOUNTP!" | tee ${LOG}
          echo -e "\nPotential Files To Delete:" | tee -a ${LOG}
          find $MOUNTP -xdev -type f -size +500M -exec du -sh {} ';' | sort -rh | head -n20 | tee -a ${LOG}
          email_on_failure ${LOG}
else
   echo "Currently $((($FREE-$LIMITSIZE)/1000))) MB of QUOTA available of on $MOUNTP. " 
fi

if [ ! -f $BKDIR ]
then
        echo "Doesn't exist bkdir file. Aborting!" 
        exit 1
else
        filename=$NAME"_daily_backup_""$(date +'%Y_%m_%d')".tar.gz
        logfile="$R/"log/backup_log_"$(date +'%Y_%m')".log

        # Packages installed on Linux

        dpkg-query -W -f='${Installed-Size} ${Package}\n' | sort -n > $BKPATH/packages_installed.txt

        # Compressing my directories

        tar czf $BKPATH/$filename -T $BKDIR
        echo "dumping source code finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

        # Changing permission

        chown root -R "$BKPATH"
        chown root "$logfile"
        chmod 644 $BKDIR
        chmod 600 $ROOTPATH

        echo "file permission changed" >> "$logfile"

        # removing old files and temporary files

        find "$BKPATH" -name "*daily_backup*" -mtime +3 -exec rm {} \;
        echo "old files deleted" >> "$logfile"
        echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

        # pushing mega.nz

        mega-login user@domain.net password
        mega-sync $BKPATH $NAME
        echo "pushing backup to mega.nz $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
        echo "*****************" >> "$logfile"
        exit 0
fi

Árboles binarios

Published on Larebelion.com: 2020-04-12T17:58:00.002+02:00

Ejercicio sencillo para representar un Arbol Binario, funciones básicas:




#include <stdio.h>
#include <stdlib.h>

typedef struct nodo
{
    struct nodo *hizqdo;
    struct nodo *hdrcho;
    int contenido;
} nodo;

typedef struct nodo *arbol;

arbol nuevo_arbol (int contenido);
void destruir_arbol (arbol a);
void insertar_arbol (arbol nuevo, arbol *a);
void encontrar_menores (arbol a, int comparador, int *contador);
void imprimir (arbol a, int modo);

int main (void)
{
    int contenidos[] = {1, 20, 43, 12, 45, 21, 75, 26, 16, 74, 74, 36, 24, 2, 29, 97, -1};
    int *c = contenidos;
    arbol a = NULL;
    int contador = 0;
    while (*c >= 0) {
        arbol nuevo = nuevo_arbol(*c);
        insertar_arbol (nuevo, &a);
        c++;
    }

    printf ("\nPreorden:\n");
    imprimir(a, 1);
    printf ("\nPostorden:\n");
    imprimir(a, 2);
    printf ("\nInorden:\n");
    imprimir(a, 3);

    printf ("\nEncontrar menores de 50:\n");
    encontrar_menores(a, 50, &contador);
    printf ("\nContador: %d", contador);

    destruir_arbol(a);
    return EXIT_SUCCESS;
}

arbol nuevo_arbol (int contenido)
{
    arbol ret;
    if ((ret = calloc(1,sizeof(nodo))) == NULL) {
        return NULL;
    }

    ret->contenido = contenido;

    return ret;
}

void destruir_arbol (arbol a)
{
    if (a == NULL) {
        return;
    }
    destruir_arbol(a->hizqdo);
    destruir_arbol(a->hdrcho);
    free(a);
}

void insertar_arbol (arbol nuevo, arbol *a)
{
    if (*a == NULL) {
        *a = nuevo;
        return;
    }

    if (nuevo->contenido < (*a)->contenido) {
        insertar_arbol(nuevo, &((*a)->hizqdo));
    } else if (nuevo->contenido > (*a)->contenido) {
        insertar_arbol(nuevo, &((*a)->hdrcho));
    }
}

void encontrar_menores (arbol a, int comparador, int *contador)
{
    if (a == NULL) {
        return;
    }

    if (a->contenido < comparador) {
        printf ("%d | ", a->contenido);  
        ++(*contador);
    } 
    encontrar_menores (a->hizqdo, comparador, contador);
    encontrar_menores (a->hdrcho, comparador, contador);
}

void imprimir (arbol a, int modo) 
{
    if (a == NULL) {
        return;
    }

    if (modo == 1) { // Preorden
    printf ("%d | ", a->contenido);
    imprimir(a->hizqdo, 1);
    imprimir(a->hdrcho, 1);
    } else if (modo == 2){ // Postorden
        imprimir(a->hizqdo, 2);
        imprimir(a->hdrcho, 2);
        printf ("%d | ", a->contenido);
        } else if (modo == 3) {// Inorden
            imprimir(a->hizqdo, 3);
            printf ("%d | ", a->contenido);
            imprimir(a->hdrcho, 3);
            }
}

Matrices dinámicas en C

Published on Larebelion.com: 2020-04-08T10:20:00.000+02:00

A continuación un ejercicio, similar a otros que he publicado, pero ésta vez con Matrices de dimensiones dinámicas.


#include <stdio.h>
#include <stdlib.h>


int ** IntroduceMatriz (int *, int *);
void SumaFilas (int **, int, int);
void MultiplicaColumnas (int **, int, int);
void RotaMatrizDerecha (int **, int, int);
void MostrarMatriz (int **, int, int);

int main () 
{
    int **matriz, f ,c;
    int i;

    matriz = IntroduceMatriz(&f, &c);
    MostrarMatriz(matriz,f,c);
    SumaFilas(matriz,f,c);
    MultiplicaColumnas(matriz,f,c);
    RotaMatrizDerecha(matriz,f,c);
    MostrarMatriz(matriz,f,c);
    for (i=0; i<f ; i++) {
        free(matriz[i]);
    }
    free(matriz);
    return EXIT_SUCCESS;
}

int ** IntroduceMatriz (int *f, int *c)
{
    int **matriz;
    int i, j;

    printf ("Indique numero de filas: \n");
    scanf ("%d",f);
    fflush (stdin);  // Limpiar el buffer de entrada
    printf ("Indique numero de columnas: \n");
    scanf ("%d",c);
    fflush (stdin);

    matriz = (int **) calloc (*f,sizeof(int*));

    for (i=0 ; i<*f ; i++) {
            matriz[i] = (int*) calloc (*c,sizeof(int));
    }

    for (i=0 ; i<*f ; i++) {
        for (j=0 ; j<*c ; j++) {
            printf ("\nIntroduzca posición %d - %d: ",i,j);
            scanf("%d",&matriz[i][j]);
            fflush(stdin);
        }
    }
    return matriz;
}

void MostrarMatriz (int **matriz, int f, int c)
{
    int i,j;
    for (i=0 ; i<f ; i++) {
        for (j=0 ; j<c ; j++) {
            printf ("%d ",matriz[i][j]);
        } printf ("\n");
    }
}

void SumaFilas (int **matriz, int f, int c)
{
    int i,j,suma;
    for (i=0 ; i<f ; i++) {
        suma = 0;
        for (j=0 ; j<c ; j++) {
            suma += matriz[i][j];
        } printf ("La fila %d suma: %d \n",f,suma);
    }
}

void MultiplicaColumnas (int **matriz, int f, int c)
{
    int i,j, multiplica;
    for (j=0 ; j<c ; j++) {
        multiplica = 1;
        for (i=0 ; i<f ; i++) {
            multiplica *= matriz[i][j];
        } printf ("La columna %d da: %d \n",j,multiplica);
    }
}

void RotaMatrizDerecha (int **matriz, int f, int c)
{
    int i,j;
    int **matrizt;

 
    matrizt = (int**) calloc (f,sizeof(int*));
    for (i=0; i<f ; i++) {
        matrizt[i] = (int*) calloc (c,sizeof(int));
    }

    for (i=0 ; i<f ; i++) {
        for (j=0 ; j<c ; j++) {
            if (j == c-1) {
                matrizt[i][0] = matriz[i][j]; 
            } else {
                matrizt[i][j+1] = matriz[i][j];
            }     
        } 
    }

    for (i=0 ; i<f ; i++) {
        for (j=0 ; j<c ; j++) {
            matriz[i][j] = matrizt[i][j];
        } 
    }

}

Programa en C que genere 6 hilos y estos se identifiquen

Published on Larebelion.com: 2020-01-06T10:37:00.001+01:00

Generemos un programa en lenguaje C que lance o genere 6 hilos y estos se identifiquen con un identificador.



#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

#define NUMERO 6

int contador;
static void *saluda (void *);

int main (void)
{
 int i;
 pthread_t hilo[NUMERO];

 for (i = 0; i < NUMERO ; i++) {
  sleep(1);
  pthread_create (&hilo[i],NULL,saluda,NULL);
 }

 for (i = 0; i < NUMERO ; i++) {

  pthread_join (hilo[i],NULL);
 }

 return 0;
}

static void *saluda (void *args) 
{
 contador += 1;
 printf ("Soy el thread %d y tengo el id %d\n",contador,(int) pthread_self());
 return NULL;
}
Raspberry

Welcome to my home




zape@joseluis:~$ ifconfig eth0
eth0: Link encap:Ethernet HWaddr FF:FF:FF:FF:FF:FF
inet addr: zape.larebelion.com
inet from: Majadahonda, Madrid Spain (ES)
RX packets:1155305710 errors:569 dropped:469 overruns:0 frame:0
TX packets:340950749 errors:315 dropped:812 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:72975485 (35 GiB) TX bytes:473629178 (24 GiB)
Interrupt:0
zape@joseluis:~$ _

Page generated in 0.5593 seconds.
Uptime: 10 days: 0 hours:45 minutes: 2 seconds