Este documento presenta la solución a 5 problemas de recuperación de estructuras de datos. Para cada problema, se documenta el algoritmo, pseudocódigo, diagrama de flujo, código fuente y 3 pruebas de escritorio. Los problemas resueltos son: 1) cálculo de diferencias entre precios de carretes, 2) matriz transpuesta, 3) números no de Fibonacci, 4) carrera de larga distancia y 5) juego "Si te da".
2. Recuperación de Estructuras de Datos
Resolver los 5 ejercicios del archivo
1. Documentar la solución en un documento de electrónico con el algoritmo, pseudocódigo,
diagrama de flujo, código fuente y 3 pruebas de escritorio.
Subirlo a slideshare.net y publicar en este grupo.
DOCUMENTACION DE LA SOLUCION
(ALGORITMO, PSEUDOCODIGO DIAGRAMA DE FLUJO, CODIGO FUENTE Y LA TRES
PRUEBAS DE ESCRITORIO)
PROBLEMA 1
CARRETES
ALGORITMO:
inicio
ingreso de datos
Introduce el numero de carretes (entre 2 y 200)
Introduce el precio inicial
Introduce el precio final
operación en un ciclo for repitiéndolo por el numero de carretes
imprimiendo salidas
3. Diagrama de flujo:
PSEUDOCODIGO:
iniciando variables que tomen números ingresados y las almacenen en el
arreglo introduciendo el numero de carretes, el precio inicial y el precio
(int i=0;
i<n;i++)
pinicial[i]=ca
d.charAt(i)-
48;
Calcular
(n<2 || n>200);
pinicial= new
int[n];
pfinal= new
int[n];
("pfinal["+i+"]="+pfinal[i]
+"
pinicial["+i+"]="+pinicial[
i]+" dif1="+salida+"
dif2="+dif2+"
dif3="+dif3+"
min="+min);
FIN
Inicio
Ingresar datos
n=salida
String cad;
int[]
pinicial,pfinal;
4. final formando estructuras repetitivas para almacenar los datos, crear
instrucciones de operación y para imprimir
CODIGO FUENTE:
package recuperacioncarretes;
import java.util.Scanner;
public class RecuperacionCarretes {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
int n,salida=0;
String cad;
int[] pinicial,pfinal;
System.out.println("Introduce el numero de carretes (entre 2 y 200)");
do{
cad=lector.nextLine();
n=Integer.parseInt(cad);
}while(n<2 || n>200);
pinicial= new int[n];
pfinal= new int[n];
5. System.out.println("Introduce el precio inicial");
do{
cad=lector.nextLine();
}while(cad.length()!=n);
for(int i=0; i<n;i++) pinicial[i]=cad.charAt(i)-48;
System.out.println("Introduce el precio final");
do{
cad=lector.nextLine();
}while(cad.length()!=n);
for(int i=0; i<n;i++) pfinal[i]=cad.charAt(i)-48;
//Aqui se realiza el algoritmo para calcular la salida
for(int i=0; i<n;i++){
int dif1,dif2,dif3,min;
dif1=Math.abs(pfinal[i]+10-pinicial[i]);
dif2=Math.abs(pfinal[i]-pinicial[i]);
dif3=Math.abs(pinicial[i]+10-pfinal[i]);
min=Math.min(Math.min(dif1, dif2),dif3);
salida+=min;
6. System.out.println("pfinal["+i+"]="+pfinal[i]+"
pinicial["+i+"]="+pinicial[i]+" dif1="+salida+" dif2="+dif2+"
dif3="+dif3+" min="+min);
}
System.out.println("salida="+salida);
}
}
PRUEBAS DE ESCRITORIO:
1)
Introduce el numero de carretes (entre 2 y 200)
4
Introduce el precio inicial
5732
Introduce el precio final
1598
pfinal[0]=1 pinicial[0]=5 dif1=4 dif2=4 dif3=14 min=4
pfinal[1]=5 pinicial[1]=7 dif1=6 dif2=2 dif3=12 min=2
pfinal[2]=9 pinicial[2]=3 dif1=10 dif2=6 dif3=4 min=4
pfinal[3]=8 pinicial[3]=2 dif1=14 dif2=6 dif3=4 min=4
salida=14
2)
Introduce el numero de carretes (entre 2 y 200)
7. 4
Introduce el precio inicial
6000
Introduce el precio final
2000
pfinal[0]=2 pinicial[0]=6 dif1=4 dif2=4 dif3=14 min=4
pfinal[1]=0 pinicial[1]=0 dif1=4 dif2=0 dif3=10 min=0
pfinal[2]=0 pinicial[2]=0 dif1=4 dif2=0 dif3=10 min=0
pfinal[3]=0 pinicial[3]=0 dif1=4 dif2=0 dif3=10 min=0
salida=4
3)
Introduce el numero de carretes (entre 2 y 200)
4
Introduce el precio inicial
6000
Introduce el precio final
2200
pfinal[0]=2 pinicial[0]=6 dif1=4 dif2=4 dif3=14 min=4
pfinal[1]=2 pinicial[1]=0 dif1=6 dif2=2 dif3=8 min=2
pfinal[2]=0 pinicial[2]=0 dif1=6 dif2=0 dif3=10 min=0
pfinal[3]=0 pinicial[3]=0 dif1=6 dif2=0 dif3=10 min=0
salida=6
PSEUCODIGO
formando el código de los carretes
8. PROBLEMA 2
MATRIZ TRANSPUESTA
ALGORITMO:
Inicio
Entrada de datos de columnas
Entrada de datos de renglones
Leer datos en el arreglo
Igualar datos en dos for anidados
Para operar
Y hacer otros dos for anidados para imprimir
PSEUDOCODIGO:
Armado el código de manera que se muestren las columnas en renglones y los renglones en
columnas solo hubo de escanear los datos de la matriz e igualarlos con otra variable para poder
alterar su posicion y e imprimirlo de manera correcta dentro de fors aninados
DIAGRAMA DE FLUJO:
inicio
ingreso de datos:
CODIGO FUENTE:
package recuperacionmatriztranspuesta;
import java.util.Random;
public class RecuperacionMatrizTranspuesta {
public static void imprimir(int matriz[][], int fila, int columna)
{
int i, j;
for (i=0; i<fila; i++)
{
for (j=0; j<columna; j++)
{
System .out.print(matriz[i][j]+"t");
}
System .out.println(" ");
}
System.out.println();
}
public static void main(String[] args) {
int i,j,fil,colum;
fil = ((int)(Math.random()*(10-2+1)+2)); //(int)(Math.random()*(HASTA-DESDE+1)+DESDE);
colum = ((int)(Math.random()*(10-2+1)+2));
int [] [] matriz = new int [fil][colum];
int [] [] matriz_T = new int [colum][fil];
System.out.println("La matriz es: ");
Random num = new Random();
for ( i = 0; i < fil; i++) {
for (j = 0; j < colum; j++) {
matriz [i][j] = matriz [i][j]=((int)(Math.random()*(100-2+1)+2));
}
}
imprimir (matriz,fil,colum);
10. 3)
La matriz es:
29 59 34 78 57 44 61 69
43 44 15 47 75 32 38 15
64 55 6 70 91 31 12 28
La transpuesta de la matriz es:
29 43 64
59 44 55
34 15 6
78 47 70
57 75 91
44 32 31
61 38 12
69 15 28
PROBLEMA 3
NÚMEROS NO FIBONACCI
ALGORITMO:
inicio
numero entrante
PSEUDOCODIGO:
Del algoritmo de la serie Fibonacci solo inverti los datos reciprocando los datos de el algoritmo
11. DIAGRAMA DE FLUJO:
CODIGO FUENTE:
package recuperacionnofibonacci;
import java.util.Scanner;
public class RecuperacionNoFibonacci {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int b=3;
int c=4;
int d;
System.out.println("ingrese dato");
int a = in.nextInt();
for (int z=8; z<a; z++){
Inicio
Fibo1=n, fibo2=n
N<=1
Fibo1=4;
Fibo2=6;
Fibo1=fibo1+fibo2;
Fibo2=fibo2+fibo1;
Fin
12. if(z<=1){
z = z+3;
d=0;
}
else{
d=b+c;
}
System.out.println(c+" "+z+""+d);
}
}
}
PRUEBAS DE ESCRITORIO:
1)
ingrese dato
9
4 87
PROBLEMA 4
CARRERA DE LARGA DISTANCIA
ALGORITMO:
inicio
mensaje en pantalla
pedido de
PSEUDOCODIGO:
DIAGRAMA DE FLUJO:
CODIGO FUENTE:
PRUEBAS DE ESCRITORIO:
PROBLEMA 5
SI TE DA
Diagrama de Flujo:
Inicio
N1, n2
13. CODIGO FUENTE:
package recuperacionsiteda;
import java.util.Scanner;
public class RecuperacionSiTeDa {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean iguales = false;
int n1= in.nextInt();
int aux1= n1;
int n2= in.nextInt();
int aux2=n2;
int contador =0;
System.out.print(n1+""+n2);
while (iguales == false){
int temp =n1+n2;
if (temp>10){
temp-=10;
}
N1+n2=, Temp=10
N1=n2
Fin
Iguales==false
Imprimir= línea 1, línea
2