miércoles, 18 de noviembre de 2015

Ejercicios


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
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();
    }
    
} 



Clase Lista


 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úmero


public 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


 

6 comentarios:

  1. para el primero como podria ser la clase lista usando LinkedList ?????

    ResponderBorrar
  2. me gustaria saber como seria el primer algoritmo del polinomio usando LinkedList, porque el que esta ahi tiene muchos errores.

    ResponderBorrar
  3. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  4. el error que aparece en la clase lista del primer ejercicio se soluciona asi:

    if(nuevo.getNum().getGrado()>=reco1.getNum().getGrado()){

    tambien tienen que borrar un } que sobra y ya, creo que eso es todo, a mi ya me funciona perfecto.

    ResponderBorrar