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í...
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
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:
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.
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:
// 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...