[ Foro de C# ]
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);
}
}
}
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.
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.
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. ;-)
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.
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
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?
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.)