miércoles, 18 de agosto de 2010

Rotación de cadenas

8 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. int [] arregloUsuario = new int [10];

    int [] arregloSalida = new int [10];

    int direccion; //direciión de rotación

    int rot; //número de rotaciones

    int contadorDer = 0;

    int contadorIzq = arregloUsuario.length-1;


    if (direccion == 1){ //rotación a la derecha

    for (i = 0; i < arreglo.length ; i++){

    if ((arregloUsuario.length - i) <= rot){

    arregloSalida [i] = arregloUsuario [contadorDer];

    contadorDer++;

    }else{

    arregloSalida [i] = arregloUsuario [i + rot];

    }

    }

    }

    if (direccion == 2){ //rotación a la izquierda

    for (i = aregloUsuario.length - 1; i >= 0; i--){

    if ((i - rot) < 0){

    arregloSalida [i] = arregloUsuario [contadorIzq];

    contadorIzq--;

    }else{

    arregloSalida [i] = arregloUsuario [i - rot];

    }

    }

    }

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

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. import javax.swing.JOptionPane;

    public class InvertirArreglo {

    int arreglo[];

    public InvertirArreglo(int tamaño){
    arreglo = new int[tamaño];
    }

    public void llenarArreglo(){

    for (int i = 0; i < arreglo.length; i++) {
    arreglo[i] = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el numero de la casilla "+(i+1)));
    }
    }
    public void solucion(int sentido,int rotaciones){

    String lista = "";

    int i = 1;

    while(i <= rotaciones){
    lista="";
    for (int j : arreglo) {
    lista += j;
    }
    if (sentido == 1) {

    arreglo[arreglo.length-1] = Integer.parseInt(lista.charAt(0)+"");

    for (int j = 1,f = 0; f < arreglo.length-1; j++,f++) {

    arreglo[f] = Integer.parseInt(lista.charAt(j)+"");

    }
    }
    if (sentido == 0) {

    arreglo[0] = Integer.parseInt(lista.charAt(lista.length()-1)+"");

    for (int j = 0,f = 1; j < arreglo.length-1; j++,f++) {

    arreglo[f] = Integer.parseInt(lista.charAt(j)+"");

    }
    }
    i++;
    }
    }
    public void imprimir(){
    for (int i : arreglo) {
    System.out.print(i +" ");
    }
    }

    public static void main(String[] args){

    int tamaño = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el tamaño del arreglo"));

    InvertirArreglo a = new InvertirArreglo(tamaño);
    a.llenarArreglo();


    int sentido = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el setido en el que decea invertir el arreglo\n1. Derecha\n0. Izquierda"));
    int rotaciones = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el numero de rotaciones"));
    a.solucion(sentido, rotaciones);

    a.imprimir();

    }

    }

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. revise el código de Felipe Caycedo S y de entrada presenta problemas por que muchas de las variables no están inicializadas y pues el arregloUsuario esta inicializado pero no tiene ningún valor ...
    omitiendo esos errores ... si en el código la variable rot es mayor al tamaño del arregloUsuario al momento de llenar el arregloSalida se copian idénticos y no se realiza la rotacion ... para solucionar eso implemente un while antes de que se inicien los ciclos de derecho o izquierda de la siguiente manera ... (copio todo el código para quitar los errores de las variables no inicializadas y arreglar el problema mencionado)

    private void doRotacion(int d,int r){
    int [] arregloUsuario = new int [10];
    for(int i =0; i<10;i++ ){
    arregloUsuario[i]=(int)(Math.random()*30);
    }
    int [] arregloSalida = new int [10];
    int direccion = d; //direciión de rotación
    int rot = r; //número de rotaciones
    int contadorDer = 0;
    int contadorIzq = arregloUsuario.length-1;
    while(rot>arregloUsuario.length){
    rot = rot - arregloUsuario.length;
    }
    if (direccion == 1){ //rotación a la derecha
    for (int i = 0; i < arregloUsuario.length ; i++){
    if ((arregloUsuario.length - i) <= rot){
    arregloSalida [i] = arregloUsuario [contadorDer];
    contadorDer++;
    }else{
    arregloSalida [i] = arregloUsuario [i + rot];
    }
    }
    }
    if (direccion == 2){ //rotación a la izquierda
    for (int i = arregloUsuario.length - 1; i >= 0; i--){
    if ((i - rot) < 0){
    arregloSalida [i] = arregloUsuario [contadorIzq];
    contadorIzq--;
    }else{
    arregloSalida [i] = arregloUsuario [i - rot];
    }
    }
    }
    for(int i =0; i<10;i++ ){
    System.out.print(arregloUsuario[i]+" ");
    }
    System.out.println();
    for(int i =0; i<10;i++ ){
    System.out.print(arregloSalida[i]+" ");
    }
    }

    ResponderEliminar
  8. Se;or felipe bejarano
    al utilizar
    la funcion charat
    de los strings
    el programa no diferencia
    numeros
    mayores a 9,

    digamos uno digita el numero 10,
    pero el toma el uno y el cero como caracteres independientes.

    ResponderEliminar