martes, 7 de junio de 2011

Llamadas al sistema en C

Cuando uno ejecuta un programa puede tener la necesidad de echar a andar un programa distinto, del cual depende el código que estamos corriendo. Para situaciones como ésta tenemos en C las llamadas al sistema mediante system("comando"); éste es sólo un ejemplo. En  realidad con system tenemos acceso a la consola, o línea de comandos, y podemos hacer cualquier cosa. Esta herramienta, si bien bastante útil, debe evitarse en la medida de lo posible para fomentar la portabilidad de nuestro código, ya que los comandos varían para cada sistema operativo. Las personas que compilan y ejecutan en windows seguro conocen esta llamada por la sentencia system("PAUSE"); que se incluye cuando el programa se ejecuta tan rápido que no podemos verlo.
El siguiente ejemplo usa el comando ls de unix/linux, que lista el contenido de un directorio. Es similar a dir en windows y ubuntu.


 #include <stdio.h>

 int main()

 {         // Abre main
  printf("\nEsta es una llamada al sistema en C:\n");

  // El comando ls despliega los archivos contenidos
  // en el directorio actual

  system("ls");

  return 0;
 }         // Cierra main

jueves, 2 de junio de 2011

Deitel_Java_5.21 (Triples Pitagóricas)

5.21 (Triples de Pitágoras) Un triángulo rectángulo puede tener lados cuyas longitudes sean valores enteros. El conjunto de tres valores enteros para las longitudes de los lados de un triángulo recto se conoce como triple de Pitágoras (o triples pitagóricas). Las longitudes de los tres lados deben satisfacer la relación que establece que la suma de los cudrados de los lados es igual al cuadrado de la hipotenusa. Escriba una aplicación para encontrar todos los triples de Pitágoras para lado1, lado2 y la hipotenusa, que no sean mayores a 500. Use un ciclo for triplemente anidado para probar todas las posibilidades. Este método es un ejemplo de la computación de "fuerza bruta". En los cursos de ciencias computacionales más avanzados aprenderá que existen muchos problemas interesantes para los cuales no hay otra metodología algorítmica conocida, más que el uso de la fuerza bruta.
______________________________________________________________________________________________________________________
Solución:
La salida de este programa da casos repetidos, en los cuales los catetos intercambian su valor. A cambio de eso el programa es totalmente a base de fuerza bruta y bastante sencillo. En este ejercicio, debibo a la gran cantidad de lineas (774) que arroja el ejecutable, tal vez le convenga Redireccionar la salida
El siguiente código debe guardarse con el nombre UsaDeitel_5_21.java

public class UsaDeitel_5_21 

{           // Abre clase 
  
public static void main(String args[])
{        // Abre main
//Se crea un objeto de tipo Deitel_5_21 
Deitel_5_21 miObjeto = new Deitel_5_21();

// Se llama a metodo Pitagoras
miObjeto.Pitagoras();

}        // Cierra main 
}           // Cierra clase UsaDeitel 


El siguiente código debe guardarse con el nombre Deitel_5_21.java

public class Deitel_5_21

{       // Abre clase Deitel_5_21

public int Tamano = 500;
public void Pitagoras()
{  // Abre metodo Pitagoras
  
System.out.print("\nEste programa prueba e imprime todas las ternas");
System.out.printf(" pitagoricas para numeros no mayores que %d ", Tamano);
System.out.print(" mediante la fuerza bruta.\n");

for ( int i = 1; i <= Tamano; i++ )
for ( int j = 1; j <= Tamano; j++ )
for ( int k = 1; k <= Tamano; k++ )
{       // Abre for
if ( i*i == j*j + k*k )
System.out.printf("%3d\t%3d\t%3d\n", i, j, k);
}       // Cierra for

}  // Cierra metodo Pitagoras
}       // Cierra clase Deitel_5_21

Deitel_Java_5.20 (El valor de Pi con la Serie de Mclaurin en Java)

5.20 Calcule el valor de π, a partir de la serie infinita:

π = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + .....

Imprima una tabla que muestre el valor aproximado de pi, calculando un término de esta serie, dos términos, tres, etcétera. ¿Cuántos términos de esta serie tiene que utilizar para obtener 3.14? ¿3.141? ¿3.1415? ¿3.14159?
_______________________________________________________________________________________
Solución:
Este desarrollo en serie de π se obtiene usando la serie de Maclaurin aplicada a arctan(x). La idea original es de Leibniz.

El siguiente código debe guardarse como UsaDeitel_5_20.java

public class UsaDeitel_5_20
{        // Abre clase UsaDeitel_5_20
  
public static void main( String args[])
{         // Abre main

// Se crea un objeto de la clase UsaDeitel_5_20
Deitel_5_20 miObjeto = new Deitel_5_20();

// Se llama al metodo Imprime
miObjeto.Imprime();
}       // Cierra main
}        // Cierra clase UsaDeitel_5_20

El siguiente código debe guardarse como Deitel_5_20.java

 ////////////////////////////////////////////////////
 /* Este programa genera 10 numeros aleatorios      /
 // entre 1 y 10 mediante un ciclo for              /
 ///////////////////////////////////////////////////*/
 
 import java.util.Random;
 // Es necesario incluir este paquete 
 // de la API de java
 

 public class Aleatorios

 {         // Abre clase Aleatorios

 public static void main(String args[])
 {  // Abre main
 
 Random aleatorios = new Random();
 // Se crea un objeto de tipo Random
 
 int Tamano = 10;
 int Escala = 10;
 // Se generaran 10 numeros aleatorios
 // entre 1 y 10
 // para generar mas, es necesario cambiar
 // la variable Tamano, 
 // tambien se puede cambiar la Escala
 // para generar numeros en un rango diferente
 
 int numero;

 for ( int i = 1; i <= Tamano; i++)
 {   // Abre for
 numero =  1 + aleatorios.nextInt(Escala);
 // ya que la instruccion aleatorios.nextInt(Escala)
 // genera numeros entre 0 y 9, se agrega 1 como
 // factor de desplazamiento para generar numeros 
 // entre 1 y 10
 
 System.out.printf("%3d", numero);

 System.out.print( (0 == i % 5)? "\n":"" );
 // Esta instruccion hace que se de un salto 
 // de linea cada que se imprimen 5 numeros.
 
 }
  
 }  // Cierra main
 }         // Cierra clase Aleatorios

Una ejecución del programa es la siguiente:
Este programa calcula el valor de pi. usando la serie de Maclaurin.

Este programa calcula el valor de pi. usando la serie de Maclaurin. 
Cuantos terminos quiere de la serie?
15

2.666667
3.466667
2.895238
3.339682
2.976046
3.283738
3.017072
3.252366
3.041840
3.232316
3.058403
3.218403
3.070255
3.208186
3.079153
El valor aproximado de pi con 15 terminos  de la serie de Maclaurin es: es: 3.079153

El numero 3.14 aparece cuando se toma el término 128 de la serie, 3.141 aparece 2453, 3.1415 aparece en 144823, 3.14159 aparece por primera vez en 144836.

miércoles, 1 de junio de 2011

Deitel_Java_5.19 (Impresión de valores booleanos)

_____________________________________________________________________________________
5.19 Suponga que i = 1; j = 2; k = 3 y m = 2. ¿Qué es lo que imprime cada una de las siguientes instrucciones?

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                             +
+  Este programa imprime los valores booleanos de expresiones +
+  de relacion                                                +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

public class Deitel_5_19

{         // Abre clase Deitel_5_19
  
public static void main( String args[])
{         // Abre main

int i = 1;
int j = 2;
int k = 3;
int m = 2;

System.out.println( i == 1);
System.out.println( j == 3);
System.out.println((i >= 1) && (j < 4 ));
System.out.println(( m <= 99) & (k < m) );
System.out.println(( j >= i) || (k == m));
System.out.println( (k + m < j)| (3 - j  >= k));
System.out.println(!( k > m));
  
}         // Cierra main

}         // Cierra clase Deitel_5_19
_____________________________________________________________________________________

Solución:
Cada una de éstas sentencias println imprimen una comparación de las variables i, j, k ó m. Dichas comparaciones dan como resultado uno de dos posibles valores binarios: true o false. La salida que se obtiene es la siguiente:


true
false
true
false
true
false
false

Deitel_Java_5.17 (Calcular Ventas de Diferentes Productos en Java)

5.17 Un almacén de pedidos por correo vende cinco productos cuyos precios de venta son los siguientes: producto 1, $2.98; producto 2, $4.50, producto 3, $9.98; producto 4, $4.49 y producto 5, $6.87. Escriba una aplicación que lea una serie de pares de números, como se muestra a continuación:

a) número de producto;
b) cantidad vendida

Su programa debe utilizar una instrucción switch para determinar el precio de venta de cada producto. Debe calcular y mostrar el valor total de venta de todos los productos vendidos. Use un ciclo controlado por centinela para determinar cuánto debe el programa dejar de iterar para mostrar los resultados finales.

Este problema no es difícil. El siguiente código debe guardarse como UsaDeitel_5_17.java

  public class UsaDeitel_5_17

  {          // Abre clase UsaDeitel_5_17


  public static void main(String args[])
  {   // Abre main
  
  // Se crea objeto de la clase UsaDeitel_5_17
  Deitel_5_17 miObjeto = new Deitel_5_17();
  
  // Se llama metodo Recibe()
  miObjeto.Recibe(); 

  }   // Cierra main

  }          // Cierra clase UsaDeitel_5_17


El siguiente código debe guardarse como Deitel_5_17.java

  import java.util.Scanner;

  public class Deitel_5_17

  {        // Abre clase Deitel_5_17

  private float costo;
  private float monto_total = 0;
  private int numero_producto;
  private int cantidad_vendida;



  // Abre metodo Recibe()
  public void Recibe()
  {          // Abre metodo recibe
 
  Scanner entrada = new Scanner(System.in); 

  System.out.print("\nEste almacen vende cinco productos con los siguientes");
  System.out.println("\nprecios:");
  System.out.println("\nProducto 1: $2.98");
  System.out.println("\nProducto 2: $4.50");
  System.out.println("\nProducto 3: $9.98");
  System.out.println("\nProducto 4: $4.49");
  System.out.println("\nProducto 5: $6.87\n");

  System.out.println("\nPor favor introduzca el numero del primer producto:");
  System.out.println("( -1 para terminar).");
  numero_producto = entrada.nextInt(); 

  while ( -1 != numero_producto )
  {        // Abre while
   
  switch ( numero_producto )
  {   // Abre switch

  case 1:
  {    // Cierra case 1

  System.out.print("\nIntroduzca la cantidad vendida de este producto:");
  cantidad_vendida = entrada.nextInt();
  System.out.printf("\nPrecio de esta venta: %f", cantidad_vendida*2.98);
  monto_total += cantidad_vendida*2.98;
  break;
  }  // Cierra case 1

  case 2:
  {    // Cierra case 2

  System.out.print("\nIntroduzca la cantidad vendida de este producto:");
  cantidad_vendida = entrada.nextInt();
  System.out.printf("\nPrecio de esta venta: %f", cantidad_vendida*4.50);
  monto_total += cantidad_vendida*4.50;
  break;
  }  // Cierra case 2

  case 3:
  {    // Cierra case 3

  System.out.print("\nIntroduzca la cantidad vendida de este producto:");
  cantidad_vendida = entrada.nextInt();
  System.out.printf("\nPrecio de esta venta: %f", cantidad_vendida*9.98);
  monto_total += cantidad_vendida*9.98;
  break;
  }  // Cierra case 3

   
  case 4:
  {    // Cierra case 4

  System.out.print("\nIntroduzca la cantidad vendida de este producto:");
  cantidad_vendida = entrada.nextInt();
  System.out.printf("\nPrecio de esta venta: %f", cantidad_vendida*4.49);
  monto_total += cantidad_vendida*4.49;
  break;
  }  // Cierra case 4

  case 5:
  {    // Cierra case 5

  System.out.print("\nIntroduzca la cantidad vendida de este producto:");
  cantidad_vendida = entrada.nextInt();
  System.out.printf("\nPrecio de esta venta: %f", cantidad_vendida*6.87);
  monto_total += cantidad_vendida*6.87;
  break;
  }  // Cierra case 5


  default :
  {    // Cierra default 

  System.out.print("\nINTRODUZCA NUMERO DE PRODUCTO VALIDO!");
  break;
  }  // Cierra default 

  }   // Cierra switch 

  System.out.println("\nPor favor introduzca el numero del siguiente producto:");
  System.out.println("( -1 para terminar).");
  numero_producto = entrada.nextInt(); 


  }        // Cierra while

  System.out.printf("\nLas ventas totales fueron: %f\n\n", monto_total);
  }          // Cierra metodo recibe

  }        // Cierra clase Deitel_5_17
Related Posts Plugin for WordPress, Blogger...