elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Eliminar dato de matriz y array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Eliminar dato de matriz y array  (Leído 2,003 veces)
eleaefe

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Eliminar dato de matriz y array
« en: 29 Junio 2017, 16:28 »

Hola, hice este metodo:

Código
  1. static bool eliminar(int[] lista, string[] nombre, string nom, ref int tope) //ELIMINAR EN UN ARRAY
  2.        {
  3.  
  4.            Console.WriteLine("\t\t3 - Elimine una apuesta: ");
  5.            Console.WriteLine();
  6.            Console.Write("Ingrese Nombre del Cliente: ");
  7.            nom = Console.ReadLine().ToUpper().Trim();
  8.            bool e = false;
  9.            for (int i = 0; i < tope; i++)
  10.            {
  11.                if (nom == nombre[i])
  12.                {
  13.                    for (int j = i; j < tope - 1; j++)
  14.                    {
  15.                        lista[j] = lista[tope - 1];
  16.                        nombre[j] = nombre[j - 1];
  17.                        tope--;
  18.                        e = true;
  19.                        i = tope;
  20.                    }
  21.                }
  22.            }
  23.            return e;
  24.        }




invoco en el main asi:


Código
  1. case 3:
  2.                        Console.WriteLine("\t\t3-Eliminar Apuesta");
  3.  
  4.                        eliminar(vector, nombre,  ref  tope);//ACA ME DA ERROR NO SE COMO LLAMARLO
  5.  
  6.                        break;



no se porque no puedo incovarlo me da error de argumentos y tampoco se si el codigo es el correcto


el resto del main es este


Código
  1. string[] nombre;
  2.  
  3.            int opcion, tope = 0, cantidad;
  4.            bool seguir = true;
  5.            Console.WriteLine("cantidad de apostantes: ");
  6.  
  7.            cantidad = Convert.ToInt32(Console.ReadLine());
  8.            int[] vector = new int[cantidad];
  9.            nombre = new string[cantidad];
  10.            int[,] matriz = new int[cantidad, 5];


« Última modificación: 29 Junio 2017, 16:59 por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Eliminar dato de matriz y array
« Respuesta #1 en: 29 Junio 2017, 16:58 »

Bienvenido al foro, pero debes leer las reglas de un subforo antes de publicar, y usar las etiquetas GeShi para insertar código...

Declaraste 4 parámetros para esa función, pero tan solo le estás pasando 3 argumentos, ahí tienes el error...

La próxima vez al formular una duda de programación que implique un mensaje de error, por favor muestra el mensaje.



tampoco se si el codigo es el correcto

Si tu intención es buscar un elemento (o "apuesta") y eliminarlo de una lista, entonces todo ese código sobra... puedes usar los miembros de la clase List para satisfacer la funcionalidad de buscar y/o eliminar elementos que cumplan "X" condición:

Código
  1. List<string> list = new List<string> {
  2.    "q", "w", "e", "r", "t", "y"
  3. };
  4.  
  5. string find = "e";
  6.  
  7. // list.Remove( find ); // Eliminar un elemento.
  8. // list.Remove( list.Find(condición) ); // Eliminar un elemento que cumpla "X" condición.
  9. list.RemoveAll((string item) => item.Equals(find, StringComparison.Ordinal)); // Eliminar todos las elementos que cumplan "X" condición.
  10.  
  11. Console.WriteLine(string.Join(Environment.NewLine, list));
  12. Console.ReadLine();

Saludos.


« Última modificación: 29 Junio 2017, 17:00 por Eleкtro » En línea


eleaefe

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Eliminar dato de matriz y array
« Respuesta #2 en: 29 Junio 2017, 17:09 »

tengo el siguiente metodo, pero solo me esta eliminando el nombre y no la apuesta, tengo una matriz definida como:

Código:
cantidad = Convert.ToInt32(Console.ReadLine());
            int[] vector = new int[cantidad];
            nombre = new string[cantidad];
            int[,] matriz = new int[cantidad, 5];
donde cantidad es la cantidad de apostantes (nombre) y las columnas 5 bolillas

METODO:

Código:
static bool elimino(int[] lista, string[] nombre, string nom, ref int tope)
        {
           
           
            nom = Console.ReadLine().ToUpper().Trim();
            bool e = false;
            for (int i = 0; i < tope; i++)
            {
                if (nom == nombre[i])
                {
                    for (int j = i; j < tope - 1; j++)
                    {
                        lista[j] = lista[j + 1];
                        nombre[j] = nombre[j + 1];
                        tope--;
                        e = true;
                        i = tope;
                    }
                }
            }
            return e;
        }

y asi llamo al metodo:

elimino(vector, nombre, nom,  ref  tope);
« Última modificación: 30 Junio 2017, 01:47 por eleaefe » En línea

NEBIRE


Desconectado Desconectado

Mensajes: 2.327


Ver Perfil
Re: Eliminar dato de matriz y array
« Respuesta #3 en: 30 Junio 2017, 16:25 »

Elektro, ya te ha respondido...
Imagino que estás empezando y por eso has saltado por encima de las recomendaciones que te daba Elektro, al no entender de que te hablaba... Voy a suponer que es así.

------------------------------------
Tu has colocado una función que requiere que se le pasen 4 parámetros, pero sólo le envías 3 desde la llamada. el 4º parámetro (el 3º según el orden que ocupa en la función) lo obtienes desde dentro de la función... algo que rompe la lógica de las funciones, pero que admeás te genera el error al invocarla (no porque esto dentro, si no porque reclamas un parámetro que no se recibe desde fuera...

Si la función recibe dos arrays, un texto y un entero, esa función debe servir para cualesquiera arrays se reciban, por tanto la petición del texto por consola, la inutiliza para propósitos generales y la hace específica de ese único caso. y a tal efecto, entonces ya porqué no hacerlo más 'íntimo' y 'particular' y obtener el resto de parámetros también desde ahí...  :silbar: :silbar: :silbar:


Esta línea debería estar antes de invocar la función. Para que al invocar la función, 'nom' ya tenga el valor que usará la función
Código
  1. nom = Console.ReadLine().ToUpper().Trim();

Luego tus bucles son extraños... e inenecesarios ¿por qué pones dos bucles uno dentro de otro?. Cuando usas dos bucles de pongamos 100 ciclos cada uno, al final se ejecutan 100x100 ciclos.
Buscar en un array de 100 elementos, solo requiere un máximo 100 ciclos, nunca 10.000 (100x100)

El pseudocódigo de tu función debería ser similar a esto:
Código:
NombreBuscado = Consola.LeerEntradaUser("blablabla")

buleano = Funcion Eliminar (ArrayEntero Lista, ArrayString Nombre, String NombreBuscado, Entero Tope)
     Entero n=-1

     // buscar si existe: Nombrebuscado en la lista
     Bucle para k desde 0 hasta array.items-1
          Si Nombre(k) = NombreBuscado
               n = k
               Salir de este bucle //para continuar en el siguiente
          Fin si
     Siguiente
     // Si Existe, eliminar y bajar todos los elementos encima de él
     Si n >= 0 luego
          Bucle para k desde n hasta Lista.Items-2 // ojo -2, por si se hallara en el último puesto
               Lista(k) = Lista(k+1)
               Nombre(k) = nombre(k+1)
          Siguiente
          // Borramos el último elemento (no es imprescindible).
          Lista(k) = ""
          Nombre(k)= ""
          //tope -= 1 Tope parece ser el punto final hasta el cual buscar, pero.. (comentado más abajo)
          return TRUE
     Fin si
Fin funcion

Como te decía el propósito del parámetro "Tope" parece ser el punto final hasta el cual buscar, pero si es un array, tras eliminar un item en un punto que no sea el final, exige bajar todos los que tiene encima una posición (hasta el final de la lista)...
Salvo que pretendas insertar uno en determinada posición, en cuyo caso crea una función remplazar, con la particularidad que localiza y borra un elemento y si lo encuentra, en el índice marcado como tope inserta el remplazo.

Código:
NombreBuscado = Consola.LeerEntradaUser("blablabla")
NombreRemplazo = Consola.LeerEntradaUser("blablabla")

buleano = Funcion Remplazar (ArrayEntero Lista, ArrayString Nombre, string NombreBuscado, String Nombreremplazo, entero TopeRemplazo)
     entero n=-1
     // buscar si existe: Nombrebuscado en la lista
     Bucle para k desde 0 hasta TopeRemplazo
          Si Nombre(k) = NombreBuscado
               n = k
               Salir de este bucle //para continuar en el siguiente
          Fin si
     Siguiente
     // Si Existe, eliminar y bajar todos los elementos encima de él
     Si n >= 0 luego
          Bucle para k desde n hasta TopeRemplazo-1 // si (n) se haya en el último puesto, no se ejecuta el bucle.
               Lista(k) = Lista(k+1)
               Nombre(k) = nombre(k+1)
          Siguiente
          // el remplazo se coloca en el TopeRemplazo (último elemento donde se permitió buscar).
          //Lista(k) = "" <---- no queda claro que va aquí *
          Nombre(k)= NombreRemplazo
          return TRUE  //señala que el ítem localizado en 'n' fue remplazdo en 'ToopeRemplazo'
     Fin si
Fin funcion

Nota:* Aún así, no me queda claro el propósito del array 'Lista', si tienen valores precisos asignados a cada nombre (algo normal), entonces la función debería incluir  un parámetro más para remplazar en la misma posición y asnignarlo donde he puesto el comentario:   <---- no queda claro que va aquí *

Finalmente aclararte que incluso así, esa función deberían ser dos funciones... para
generar un código más eficiente:
Código:
// Busca un elemento Si existe devuelve el índice donde se localiza, si no , devuelve -1
Entero = Funcion Buscar(ArrayString Nombre, String NombreBuscado)
    Bucle para K desde 0 hasta Nombre.Items -1
        Si Nombre(k) = NombreBuscado luego Devolver K  //y salir de la función.
    Siguiente

    Devolver -1 //No encontrado
Fin Funcion

// Elimina un ítem del array (si existe dicho índice en el array).
Buleano = Funcion Eliminar(ArrayEntero Lista, ArrayString Nombre, Entero Indice )
     Si Indice < Lista.Items entonces
         Bucle para k desde Indice hasta Nombre.Items -1
             Nombre(k) = Nombre(k + 1)
             Lista(k) = Lista(k + 1)
         Fin bucle
         Nombre(k) = ""
         Lista(k) = 0
         Devolver TRUE
     Fin si
Fin Funcion


// Remplaza un ítem del array (si existe dicho índice en el array).
Buleano = Funcion Remplazar(ArrayEntero Lista, ArrayString Nombre, Entero Indice, String Remplazo, entero Valor )
     Si Indice < Lista.Items entonces
         Nombre(Indice) = Remplazo
         Lista(Indice) = Valor
      
         Devolver TRUE
     Fin si
Fin Funcion

Igualmente puedes hacer funciones más específicas de remplazo.
En cualquier caso, siempre que puedas separa la tareas, en este caso en dos funciones: 'Buscar' y luego la acción adicional, resulta más útil... que hacer bastante código en una sola función que "busca y remplaza", o "busca y elimina".
-------------------------------------------
También te decía Elektro, que cuando escribas código si pertenece a un lenguaje 'conocido' (específico), usa las etiqeutas GESHI (aparece en el editor, arriba a la derecha), seleccióna el trozo de código y marca el lenguaje al que pertenece en ese combo desplegable, así queda bien coloreado y las líneas numeradas y mucho más nítido...
« Última modificación: 30 Junio 2017, 16:27 por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines