Ejercicios
Un polinomio se puede representar como una lista enlazada. El primer nodo de la lista representa el primer termino del polinomio, el segundo nodo al segundo término del polinomio y así sucesivamente. Cada nodo tiene como campo el dato el coeficiente del término y el exponente.
Clase Main
Clase Main
import java.util.Scanner; public class Ejercicio7 { public static int ingresarEntero(String mensaje, int min, int max) { Scanner ingreso = new Scanner(System.in); int dato; do { System.out.println(mensaje +" entre "+min +" y "+max); dato = ingreso.nextInt(); } while (dato < min || dato > max); return dato; } public static String ingresarString(String mensaje){ Scanner ingreso=new Scanner(System.in); String texto=""; System.out.println(mensaje); texto= ingreso.nextLine(); return texto; } public static void main(String[] args) { int resp=0, num=0 ,grado=0,op=0; Lista coleccion=new Lista(); Scanner Entrada= new Scanner(System.in); do{ System.out.println("1-->Ingresar terminos \n2-->Reemplazar terminos(varios valores)\n3-->reemplazar con un valor determinado\nSeleccione una: "); op=Entrada.nextInt(); switch(op){ case 1:{ do{ coleccion.agregarNodoAlFinal(new Numero(ingresarString("Ingrese el signo del termino \n Positivo --> +\n Negativo --> -"), ingresarEntero("Ingrese el termino: ",1,100), ingresarEntero("Ingrese el grado deltermino ",0,100))); System.out.println("¿Desea ingresar un termino adicional?"); resp=Entrada.nextInt(); }while(resp!=0); coleccion.recorreLista(); } break; case 2: coleccion.reemplazo(0.5); coleccion.reemplazo(1.0); coleccion.reemplazo(1.5); coleccion.reemplazo(2.0); coleccion.reemplazo(2.5); coleccion.reemplazo(3.0); coleccion.reemplazo(3.5); coleccion.reemplazo(4.0); coleccion.reemplazo(4.5); coleccion.reemplazo(5.0); break; case 3: coleccion.reemplazo(ingresarEntero("Ingrese un numero ",-100,100)); break; } System.out.println("\n¿Desea ingresar otro termino? 1--->Si 0--->No"); resp=Entrada.nextInt(); }while(resp!=0); System.out.println("\nEl polinomio es: "); coleccion.recorreLista(); } }
import static java.lang.Math.pow; public class Lista { Nodo inicio; Nodo fin; public void agregarNodoAlFinal(Numero obj){ Nodo nuevo=new Nodo(obj); Nodo reco1; Nodo reco2; if(inicio==null){ inicio=nuevo; nuevo.setSiguiente(null); }else{ reco1=inicio; while(reco1!=null){ reco2=reco1.getSiguiente(); if(nuevo.getNum().getGrado()>=reco1.getNum().getGrado()){ nuevo.setSiguiente(inicio); inicio=nuevo; break; }else{ if(nuevo.getNum().getGrado()nuevo.getNum().getGrado()&&reco2.getNum().getGrado()<=nuevo.getNum().getGrado()){ reco1.setSiguiente(nuevo); nuevo.setSiguiente(reco2); break; }else{ reco1=reco1.getSiguiente(); } } } } } } public void recorreLista(){ Nodo aux=inicio; while(aux!=null){ if(aux.getNum().getGrado()>=1){ System.out.printf(aux.getNum().getSigno()+aux.getNum().getNum()+"x^"+aux.getNum().getGrado()); aux=aux.getSiguiente(); }else{ System.out.printf(aux.getNum().getSigno()+aux.getNum().getNum()); aux=aux.getSiguiente(); } } System.out.println("\n"); } public void reemplazo(double n){ Nodo aux=inicio; int r=0; double exp=0, re=0, base=0, acu=0; while(aux!=null){ base=(double)aux.getNum().getNum(); exp=(double)aux.getNum().getGrado(); re= pow(n,exp); if(aux.getNum().getSigno().compareTo("+")==0){ acu=acu+(base*re); } if(aux.getNum().getSigno().compareTo("-")==0){ acu=acu-(base*re); } aux=aux.getSiguiente(); } System.out.printf("\nEl resultado del reemplazo de: "+"f("+n+")="); recorreLista(); System.out.printf("f("+n+")= "+acu); } }
Clase Nodo
public class Nodo {
Numero num;
Nodo Siguiente;
public Nodo(Numero num) {
this.num = num;
}
public Numero getNum() {
return num;
}
public void setNum(Numero num) {
this.num = num;
}
public Nodo getSiguiente() {
return Siguiente;
}
public void setSiguiente(Nodo Siguiente) {
this.Siguiente = Siguiente;
}
}
Clase Númeropublic class Numero { String signo; int num; int grado; public Numero(String signo, int num, int grado) { this.signo = signo; this.num = num; this.grado = grado; } public String getSigno() { return signo; } public void setSigno(String signo) { this.signo = signo; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getGrado() { return grado; } public void setGrado(int grado) { this.grado = grado; } }
Como corre el Programa
Crear una Clase Punto, luego crear un TAD-lista simple, implementar un método para calcular la distancia entre el Punto de origen y el cada punto de la lista. Final mente determinar el punto mas alejado del origen.
Clase Main
public class Principal { public static void main(String[] args) { Lista coleccion=new Lista(); coleccion.insertarInicio(new Punto(5,8.6)); coleccion.insertarInicio(new Punto(-8,10)); coleccion.insertarInicio(new Punto(15,108.6)); coleccion.insertarFinal(new Punto(-50,-45)); coleccion.insertarInicio(new Punto(-17,81)); System.out.println("El nodo mas distante al origen es "+coleccion.Distancia().getDato().toString()); }
Clase Lista
public class Lista { Nodo inicio; Nodo fin; public Lista() { inicio=null; fin=null; } public void insertarInicio(Punto dato){ Nodo nuevo=new Nodo(dato, inicio); inicio=nuevo; if(fin==null) fin=inicio; } public void insertarFinal(Punto dato){ Nodo nuevo=new Nodo(dato,null); if(inicio==null){ inicio=nuevo; }else{ fin.setSiguiente(nuevo); fin=nuevo; } } public Nodo Distancia(){ Punto origen=new Punto(0,0); Nodo aux=inicio; Nodo mayorDistancia=inicio; double mayor=0; double distancia=0; while(aux!=null){ distancia=calculoDistancia(origen, aux.getDato()); if(distancia>mayor){ mayor=distancia; mayorDistancia=aux; } aux=aux.getSiguiente(); } return mayorDistancia; } public double calculoDistancia(Punto a, Punto b){ double distancia=( Math.pow(b.getY()-a.getY(), 2.0)+Math.pow(b.getX()-a.getX(), 2.0)); return distancia; } }
Clase Nodo
public class Nodo { private Punto dato; private Nodo siguiente; public Nodo(Punto dato) { this.dato = dato; this.siguiente = null; } public Nodo(Punto dato, Nodo siguiente){ this.dato=dato; this.siguiente=siguiente; } public Punto getDato() { return dato; } public void setDato(Punto dato) { this.dato = dato; } public Nodo getSiguiente() { return siguiente; } public void setSiguiente(Nodo siguiente) { this.siguiente = siguiente; } }
Clase Punto
public class Punto { private double x; private double y; public Punto() { } public Punto(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } @Override public String toString() { return "Punto (" + "x= " + x + ", y= " + y+")" ; } }
Como Corre el Programa
Crear
una lista simple la cual debe ingresar números reañes, luego ordenarlos de mayor a mayor, imprimir la lista, obtener el promedio de los valores de cada lista, comprobar cuál es el valor que más se repite en la lista.
Clase Main
import java.util.Scanner; public class Principal { public static void main (String args[]){ Lista insertar=new Lista(); Scanner sc= new Scanner (System.in); int res,num; System.out.println("¿Cuantos numeros desea ingresar?"); res=sc.nextInt(); for(int i=0;i
Clase Lista
public class Lista { private Nodo raiz; public Lista(){ raiz=null; } public void insertarDato (int dato){ Nodo nuevo=new Nodo(dato); Nodo reco1; Nodo reco2; if(raiz==null){ raiz=nuevo; nuevo.siguiente=null; }else{ reco1=raiz; while(reco1!=null){ reco2=reco1.siguiente; if(nuevo.dato>=reco1.dato){ nuevo.siguiente=raiz; raiz=nuevo; break; }else{ if(nuevo.datonuevo.dato&&reco2.dato<=nuevo.dato){ reco1.siguiente=nuevo; nuevo.siguiente=reco2; break; }else{ reco1=reco1.siguiente; } } } } } } public void listarNodos(){ Nodo temporal=raiz; while(temporal!=null){ System.out.println("" +temporal.dato); temporal=temporal.siguiente; } } public void promedioNodos(){ Nodo temporal=raiz; int cont=0; double prom=0; while(temporal!=null){ cont++; prom=prom+temporal.dato; temporal=temporal.siguiente; } System.out.println("El promedio es: " +prom/cont); } public void repite(){ int cont=0; int a[]=new int[100]; int frecuenciaTemp, frecuenciaModa = 0, moda =0; Nodo temporal=raiz; while(temporal!=null){ cont++; a[cont]=temporal.dato; temporal=temporal.siguiente; } for(int i=0;i<=cont;i++){ frecuenciaTemp=0; for(int j=0;j = frecuenciaModa){ frecuenciaModa = frecuenciaTemp; moda = a[i]; } } } System.out.println("El que mas se repite es " + moda); } }
Clase Nodo
public class Nodo { int dato; Nodo siguiente; Nodo(int dato) { this.dato=dato; } public int getDato() { return dato; } public void setDato(int dato) { this.dato = dato; } public Nodo getSiguiente() { return siguiente; } public void setSiguiente(Nodo siguiente) { this.siguiente = siguiente; } public Nodo(int dato, Nodo siguiente) { this.dato = dato; this.siguiente = siguiente; } }
Como corre el programa