[ Foro de C# ]

Ejercicio Crear una función que devuelva cadena de texto Nacho Cabanes

12-May-2012 12:32
Jose Mª Rial
7 Respuestas

Buenos días:

Tengo una duda en este ejercicio, me pasa lo siguiente, escribo el código bien pero a la hora de llamar a la función, me da error y no se por que. Agradecería que alguien me diga donde tengo el fallo. Muchas gracias.

Si pongo el codigo de la función letra en Main me funciona perfectamente, creo que el problema esta a la hora de llamar a la función algo hago mal.

Es el apartado 5.4.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dev1let
{
    class Program
    {
        public static void letra(string word)
        {
            Console.WriteLine("Escriba una palabra: ");
            word = Console.ReadLine();
            Console.WriteLine("{0}",word[word.Length-1]);
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            letra(char);
        }
    }
}



12-May-2012 13:49
carlos caicedo

Buenos días:

Tu función letra devuelve el último carácter de la palabra que se ingrese por teclado.

Lo que estoy viendo es lo siguiente a tu función 'letra' le estás pasando un parámetro que no has declarado. Además, no veo la necesidad de tal parámetro, según la forma de la misma función.

Ahora bien creo que puedes hacer dos cosas:

1) Si deseas conservar la estructura que tienes actualmente sin modificar el paso de parámetros a la función 'letra', pues deberías  realizar la solicitud de datos en el maín y enviarle el dato al letra asi:


 static void Main(string[] args)
        {
            string word;
            Console.WriteLine("Escriba una palabra: ");
            word = Console.ReadLine();
            letra(word);
            Console.ReadKey();
        }


Como puedes ver, se declaró una variable de tipo string para poder usarla, cosa que no usaste en ninguno momento.

Ahora bien, según la estructura anterior del main la función letra podría quedar así:


 public static void letra(string word)
        {
            Console.WriteLine("{0}",word[word.Length-1]);
        }



2) Una variante podría ser declarar una variable global de tipo static string y usarala indistintamente en ambas funciones, claro sin pasarla como parámetro en la función letra, así:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dev1let
{
    class Program
    {
        static string word;

        public static void letra()
        {
            Console.WriteLine("Escriba una palabra: ");
            word = Console.ReadLine();
            Console.WriteLine("{0}",word[word.Length-1]);
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            letra();
        }
    }
}


3) En este último caso, igual debería declara la variable pero de forma local en la función 'letra' -Eso sí sin realizar paso de parametros, ya que la función no debería recibir ninguno bajo este nuevo concepto-. Así:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dev1let
{
    class Program
    {
        public static void letra()
        {
            string word;
            Console.WriteLine("Escriba una palabra: ");
            word = Console.ReadLine();
            Console.WriteLine("{0}",word[word.Length-1]);
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            letra();
        }
    }
}


Por último, recuerda que char es una palabra reservada y no puede ser pasada como parámetro. Sólo puedes pasar parámetros del tipo char siempre y cuando la función que a la cual se llame reciba este tipo de parámetro.

Espero te sirva la respuesta.


12-May-2012 13:49
Cris F

Declaras tu función como "void" y eso quiere decir que no vas a devolver ningún valor. Debería ser de tipo "string". Y si tu función sólo tiene que devolver "NachoCabanes", que es una cadena prefijada, no hace falta que leas desde consola y almacenes. Quedaría algo así:


using System;

public class DevolverCadena1{
   public static string DelvolverCadena(){
       return "NachoCabanes";
   }
  
   public static void Main(){
        //Para mostrarlo y ver que funciona
        Console.WriteLine("{0} ",DevolverCadena());
   }
}


Espero haber resuelto tu duda.


12-May-2012 17:35
Nacho Cabanes (+84)

Si hablas del apartado 5.4, de entre los ejercicios propuestos que aparecen aquí:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=394

supongo que te referirás a uno de estos dos ejercicios:

- Crear una función que devuelva la primera letra de una cadena de texto. Probar esta función para calcular la primera letra de la frase "Hola".

- Crear una función que devuelva la última letra de una cadena de texto. Probar esta función para calcular la última letra de la frase "Hola".

Ambos son muy similares: devuelven una letra ("char") y reciben como dato una cadena de texto ("string"). Así, para el primero, que es ligeramente más fácil, la función podría ser algo como:


public static char PrimeraLetra(string palabra){
      return palabra[0];
}



En general, una función que "devuelve un valor" no usará teclado ni pantalla. Se limitará a "hacer cálculos", y la interacción con el usuario ser haría desde el cuerpo del programa o desde otra función.

Cuéntanos si entiendes esa función, y crea un "Main" para probarla. El otro ejercicio te será muy fácil a partir de aquí, por lo que veo en el fuente que incluías, porque sólo es cambiar el "0" de la primera letra porque algo que indique la posición de la última letra... y que tú ya tenías hecho.  ;-)



12-May-2012 18:23
Jose Mª Rial

Muchas gracias a todos, el fallo es que no domino muy bien el lenguaje todavía como en un ejercicio anterior no me daba salido un dato tipo float, en el cual tenia que declar como float en el cuerpo de programa me he puesto a declararlo en la función, cuando era super siple, declarar la función public static void() sin mas de hecho lo había hecho como en el segundo caso que ha mandado Carlos Caicedo, salvo que había declarado mal la función.

Muchas gracias por vuestras respuestas y felicitar al creador Nacho Cabanes por el curso, me esta sirviendo mucho para un curso que estoy haciendo de programador, aunque voy un poco atrasado con respecto al resto los acabaré pillando.


12-May-2012 21:47
Jose Mª Rial

Me pregunto si existe algún sitio donde pueda ver las soluciones de los ejercicios,hay veces que me quedo en uno bastante tiempo y no dispongo de mucho, muchas gracias


19-Sep-2013 18:00
Invitado (sergius)

Y si fuera la ultima letra de una cadena de caracteres? yo he hecho esto:


public string ultimaLetra()
        {
            string uLetra = " ";
            for (int i = texto.Length; i > 0; i--)
            {
                char letra = char.Parse(texto.Substring(texto.Length-1, 1));
                
                if (char.IsLetter(letra))
                {
                    uLetra = char.ToString(letra);
                    i = 0;
                }
                else { uLetra = "No hay letras en el texto"; }
            }
            return uLetra;


pero si introduzco rd34 no me dice que la ultima letra es . Pueden ayudarme?


20-Sep-2013 00:32
Nacho Cabanes (+84)

El último símbolo (sea letra o sea lo que sea) es muy fácil de encontrar, parecido a la primera letra, con la diferencia de que no miras la posición 0 sino la última (longitud-1):


public static char UltimaLetra(string palabra){
      return palabra[palabra.Length-1];
}



Tu forma de plantearlo, buscando caracteres alfabéticos está "básicamente bien", salvo por un par de detalles:

a) Devuelves una cadena, no una letra. Deberías devolver una letra, pero entonces hay que decidir qué se devuelve si no existe ningún carácter alfabético.

b) Extraes la letra actual de forma incómoda (usas Substring y una conversión de tipos cuando podrías usar corchetes) y siempre extraes un carácter del final, en vez de fijarte en la posición actual "i".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)