Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Mac en 23 de Agosto 2014, 05:33
-
Alguien que me pueda echar la mano con este ejercicio en Java entorno Netbeans
Tengo que hacer métodos recursivos para leer un vector aleatoriamente, imprimirlo y buscar un elemento.
luego Con el Vector Creado
- Imprimir inversamente el vector.
-Sumar todos los datos posiciones impares.
-Búsqueda Binaria.
Muchísimas gracias por la orientación a la solución
----------------------------------------------------------------------------
-
Ejemplo para recorrer un vector recursivamente:
Clase VectorTest:
public class VectorTest {
private int[] vector;
public VectorTest(int[] v) {
vector = v;
}
public void leerVector(int pos){
if (pos == vector.length-1) { System.out.println("Elemento en posición "+pos + " es "+vector[pos]);}
else {
System.out.println("Elemento en posición "+pos + " es "+vector[pos]);
leerVector(pos+1);
}
}
}
Clase Test (con main):
public class Test {
public static void main (String[] Args) {
int[] a = {2, 3, 8, 1, 9};
VectorTest miVector = new VectorTest(a);
miVector.leerVector(0);
}
}
Saludos
-
Y como podría hacer esto ?¿
leer un vector aleatoriamente, imprimirlo y buscar un elemento.
- Imprimir inversamente el vector.
-Sumar todos los datos posiciones impares.
-Búsqueda Binaria. --- > Este si que ni lo entiendo ?¿ > :-\ :-\
-
Estás manejando conceptos para los que a lo mejor no tienes las bases, es como intentar hacer un pan sin saber amasar la harina.
Para crear un vector de aleatorios (y después leerlos), puedes generar los aleatorios como se indica aquí: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=638:generar-numeros-aleatorios-en-java-clase-random-y-metodo-nextint-ejercicio-ejemplo-resuelto-cu00672b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188
Primero genera la longitud del vector aleatoriamente. Después usa un for para rellenarlo de datos aleatorios. Después ya puedes leerlo con un bucle tradicional o con el método recursivo como el indicado antes.
El concepto de búsqueda binaria lo tienes aquí: http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda
Saludos
-
Bueno Investigando He logrado hacerlo .. Necesito saber ahora como me puedes ayudar implementando estas dos .. Todo lo he programado recursivamante no puedo utilizar para nada el for ni un bucle tradicional !! :)
Me faltarían estos dos si puedes ayudarme pues gracia por tu ayuda !! ;)
Anexare el código !
Como te digo en el menú me faltaría esto !
-----------------------------------------------------------------------------------------------
- Sumar todos los datos posiciones impares -
- Hacer Búsqueda Binaria -
-------------------------------------------------------------------------------------------------------
package vector;
import java.util.Scanner;
public class VectorPrueba {
private int[] vector;
public VectorPrueba(int[] v) {
vector = v;
}
// usuario digita el numero
public void rellenar_aleatoriamente(int j, int aleatorio, int tamaño) {
if (aleatorio == 0) {
if (j <= tamaño - 1) {
vector[j] = (int) (Math.random() * 10);
} else {
System.out.println("vector rellenado aleatoriamente exitosamente");
aleatorio = 1;
}
rellenar_aleatoriamente(j + 1, aleatorio, tamaño);
}
}
public void leerVector(int pos, int tamaño) {
if (pos == tamaño - 1) {
System.out.println(" Elemento en posición " + pos + " -- > " + vector[pos]);
}
if (pos != tamaño - 1) {
System.out.println(" Elemento en posición " + pos + " -- > " + vector[pos]);
leerVector(pos + 1, tamaño);
}
}
public void busqueda_binaria(int i, int encontrado, int usunum, int noencontrado, int tamaño) {
if (encontrado == 0 && noencontrado == 0) {
if (usunum == vector[i]) // Para cuando esta !
{
System.out.println("el numero se encuentra en la posicion " + i + " " + "en el vector y es" + " " + vector[i]);
encontrado = 1;
} else {
if (i == tamaño - 1) // Para cuando no esta !
{
System.out.println("numero no esta en el vector");
noencontrado = 1;
}
}
busqueda_binaria(i + 1, encontrado, usunum, noencontrado, tamaño);
}
}
public void imprimir_inversamente(int i, int tamaño, int parar) {
if (i > 0) {
if (i != tamaño - 1) {
if (i > 0) {
System.out.println(" Elemento en posición " + i + " -- > " + vector[tamaño - 1]);
imprimir_inversamente(i - 1, tamaño - 1, parar);
}
}
}
}
}
----------------------------------------------------------------------------------------------------------------
package vector;
import java.util.Scanner;
public class LLenarVector {
public static void main(String[] Args) {
int encontrado = 0;
int noencontrado = 0;
int nummenu;
int usunum;
int menu = 0;
int tam;
int[] vector = {2, 3, 8, 0, 9, 10, 25, 6};
VectorPrueba miVector = new VectorPrueba(vector);
Scanner leer = new Scanner(System.in);
System.out.println("digite el tamaño del vector ");
tam = leer.nextInt();
while (menu == 0) {
System.out.println(" -- Digite 1 Para leer y Imprimir aleatoriamente Vector -- ");
System.out.println(" -- Digite 2 Para Buscar un elemento -- ");
System.out.println(" -- Digite 3 Para Imprimir inversamente el vector -- ");
System.out.println(" -- Digite 4 Para Sumar todos los datos posiciones impares -- ");
System.out.println(" -- Digite 5 Búsqueda Binaria -- ");
System.out.println(" -- Digite 6 Quicksort -- ");
System.out.println(" -- Digite 7 Para Final -- ");
nummenu = leer.nextInt();
if (nummenu == 1) {
miVector.rellenar_aleatoriamente(0, 0, tam);
miVector.leerVector(0, tam);
}
if (nummenu == 2) {
Scanner leerbusca = new Scanner(System.in);
System.out.println("digite un numero que quieres buscar");
usunum = leerbusca.nextInt();
miVector.busqueda_binaria(0, encontrado, usunum, noencontrado, tam);
}
if (nummenu == 3) {
miVector.imprimir_inversamente(tam, tam, 0);
}
if (nummenu == 4) {
// LImpio
}
if (nummenu == 5) {
// LImpio
}
if (nummenu == 6) {
// LImpio
}
if (nummenu == 7) // La Verga Cesar
{
break;
}
}
}
}
Espero tu ayuda !! Gracias !
-
Al intentar imprimir inversamente el vector con tu código se me ha quedado bloqueado el programa. Lo he reescrito, aquí también te incluyo la suma de datos en posiciones impares:
Clase con el main (LlenarVector):
import java.util.Scanner;
public class LLenarVector {
public static void main(String[] Args) {
int encontrado = 0;
int noencontrado = 0;
int nummenu;
int usunum;
int menu = 0;
int tam;
int[] vector = {2, 3, 8, 0, 9, 10, 25, 6};
VectorPrueba miVector = new VectorPrueba(vector);
Scanner leer = new Scanner(System.in);
System.out.println("digite el tamaño del vector ");
tam = leer.nextInt();
while (menu == 0) {
System.out.println(" -- Digite 1 Para leer y Imprimir aleatoriamente Vector -- ");
System.out.println(" -- Digite 2 Para Buscar un elemento -- ");
System.out.println(" -- Digite 3 Para Imprimir inversamente el vector -- ");
System.out.println(" -- Digite 4 Para Sumar todos los datos posiciones impares -- ");
System.out.println(" -- Digite 5 Búsqueda Binaria -- ");
System.out.println(" -- Digite 6 Quicksort -- ");
System.out.println(" -- Digite 7 Para Final -- ");
nummenu = leer.nextInt();
if (nummenu == 1) {
miVector.rellenar_aleatoriamente(tam);
miVector.leerVector(0, tam);
}
if (nummenu == 2) {
Scanner leerbusca = new Scanner(System.in);
System.out.println("digite un numero que quieres buscar");
usunum = leerbusca.nextInt();
miVector.busqueda_binaria(0, encontrado, usunum, noencontrado, tam);
}
if (nummenu == 3) {
miVector.imprimir_inversamente(tam);
}
if (nummenu == 4) {
System.out.println("La suma de datos en posiciones impares es "+miVector.sumaDatosPosicionesImpares(tam));
}
if (nummenu == 5) {
// LImpio
}
if (nummenu == 6) {
// LImpio
}
if (nummenu == 7) // La Verga Cesar
{
break;
}
}
}
}
Clase VectorPrueba con algunos cambios y método para suma posiciones impares:
import java.util.Scanner;
public class VectorPrueba {
private int[] vector;
public VectorPrueba(int[] v) {
vector = v;
}
// usuario digita el numero
public void rellenar_aleatoriamente(int contador) {
if ((contador-1) == 0) {
vector[0] = (int) (Math.random() * 10);
} else {
vector[contador-1] = (int) (Math.random() * 10);
rellenar_aleatoriamente(contador-1);
}
}
public void leerVector(int pos, int tamaño) {
if (pos == tamaño - 1) {
System.out.println(" Elemento en posición " + pos + " -- > " + vector[pos]);
}
if (pos != tamaño - 1) {
System.out.println(" Elemento en posición " + pos + " -- > " + vector[pos]);
leerVector(pos + 1, tamaño);
}
}
public void busqueda_binaria(int i, int encontrado, int usunum, int noencontrado, int tamaño) {
if (encontrado == 0 && noencontrado == 0) {
if (usunum == vector[i]) // Para cuando esta !
{
System.out.println("el numero se encuentra en la posicion " + i + " " + "en el vector y es" + " " + vector[i]);
encontrado = 1;
} else {
if (i == tamaño - 1) // Para cuando no esta !
{
System.out.println("numero no esta en el vector");
noencontrado = 1;
}
}
busqueda_binaria(i + 1, encontrado, usunum, noencontrado, tamaño);
}
}
public void imprimir_inversamente(int contador) {
if ((contador-1) > 0) {
System.out.println(" Elemento en posición " + (contador-1) + " -- > " + vector[contador-1]);
imprimir_inversamente(contador-1); //Caso recursivo
}
else { //Caso base
System.out.println(" Elemento en posición " + (contador-1) + " -- > " + vector[contador-1]);
}
}
public int sumaDatosPosicionesImpares(int contador){
if (contador<=1) {return 0;} //Termina la recursión
if ((contador % 2) == 0){ //Elemento del vector impar
return (vector[contador-1]+sumaDatosPosicionesImpares(contador-2));
} else {return sumaDatosPosicionesImpares(contador-1);}
}
}
-
Gracias Mastermind
Sera que me puedes ayudar con esta
---------------------------------------------------------------
- Búsqueda Binaria..
---------------------------------------------------------------
-
Básicamente lo tienes explicado en la página de referencia que te puse:
Implementación no recursiva:
int busquedaBinaria(int[] vector, int n, int dato)
{
int centro; int inf=0; int sup=n-1;
while(inf<=sup){
centro=(sup+inf)/2;
if(vector[centro]==dato) return centro;
else if(dato < vector [centro] ){
sup=centro-1;
}
else {
inf=centro+1;
}
}
return -1;
}
En este ejemplo se busca el elemento dato dentro del array vector que tiene longitud n. Si se encuentra, se devuelve la posición en que se encuentra. Si no se encuentra, se devuelve -1.
Implementación recursiva:
bool busqueda_dicotomica(int[] vector, int fin, int x){
boolean res; int principio =0;
if(principio <= fin){
int m = (principio + fin)/2;
if(x < v[m]) res = busqueda_dicotomica(v, principio, m-1, x);
else if(x > v[m]) res = busqueda_dicotomica(v, m+1, fin, x);
else res = true;
}else res = false;
return res;
}
En este caso devuelve true si el elemento x se encuentra dentro del vector, o devuelve false en caso contrario.
Tienes que tener en cuenta que para que la búsqueda binaria funcione, el vector tiene que estar ordenado, es decir, los elementos puestos de menor a mayor. Si no lo ordenas, no funcionará.
-
Muchísimas Gracias !!! Solucionado !! :D :D :D :D