SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: dlg89 en Miércoles 28 de Mayo de 2008, 13:27

Título: Problema Con Clases
Publicado por: dlg89 en Miércoles 28 de Mayo de 2008, 13:27
Hola, tengo que realizar un examen de matrices y vectores la semana que viene y tengo un par de dudas a ver si me podeis ayudar.

la duda principal que tengo es a que hace referencia cada metodo es decir, por ejemplo, en este programa se trata de dado un vector  de N elementos, cargardo con valores aleatorios del 1 al 100, crar otro que solo tengo los primos y lo que no entidnedo es porque se pone static void Alea y no por ejemplo static doublr Alea......

saludos y espero k podais ayudarme
Código: Text
  1.  
  2.  
  3. using System;
  4.  
  5. class pruebal
  6. {
  7.  
  8.     static void Alea(int[] v)
  9.     {
  10.         Random  r = new Random();
  11.         for (int i = 0; i < v.Length; i++)
  12.             v[i] = r.Next(1, 101);
  13.     }
  14.     static int CuentaDiv(int k)
  15.     {
  16.         int cd=0;
  17.         for(int d=2; d<=k/2; d++)
  18.             if(k%d==0)
  19.                 cd++;
  20.         return cd;
  21.     }
  22.     static int[] soloPrimos(int[] v)
  23.     {
  24.         int cp=0;
  25.         for(int i=0; i<v.Length;i++)
  26.         {
  27.             int cd=CuentaDiv(v[i]);
  28.             if(cd==0)
  29.                 cp++;
  30.         }
  31.         int[]r=new int[cp];
  32.         int pos=0;
  33.         for(int i=0;i<v.Length; i++)
  34.         {
  35.             if(CuentaDiv (v[i])==0)
  36.             {
  37.                 r[pos]=v[i];
  38.                 pos++;
  39.             }
  40.         }
  41.         return r;
  42.     }
  43.     static void Graba(int[] v, string Path)
  44.     {
  45.         Text Writer fichero = new StreamWriter(Path);
  46.         for(int i=0;i<v.Length;i++)
  47.             fichero.WriteLine(v[i]);
  48.         fichero.Close();
  49.     }
  50.     static void Main()
  51.     {
  52.         Console.WriteLine("Dame N: ");
  53.         int N=int.Parse(Console.ReadLine());
  54.             int[]v=new int[N];
  55.         Alea (v);
  56.         int[] r = soloPrimos(v);
  57.         Console.WriteLine(v);
  58.         Console.WriteLine(r);
  59.         Graba(v,@"C:\Documents and Settings\Administrador\Mis documentos\v.text");
  60.         Graba(r,@"C:\Documents and Settings\Administrador\Mis documentos\r.text");
  61.     }
  62. }
  63.  
  64.       
  65.             
  66.         
  67.  
  68.  
  69.  
  70.         
  71.  
Título: Re: Problema Con Clases
Publicado por: E.Baley en Miércoles 28 de Mayo de 2008, 15:34
- static indica que el método será el mismo para todos los objetos que se instancien a partir de esta clase.
Para variables es fácil de entender, pero para métodos es un poco más dificil. Te lo explico para variables y luego lo re-piensas para métodos.
Imagina una clase con una variable _a. Ahora creas 100 instancias de esa clase. Cada variable _a de cada instancia puede tener un valor diferente.
En cambio, si es "static", el valor de _a es el mismo en las 100 instancias. Si cambias el valor de _a en una instancia, se cambia en el de las 99 restantes (en realidad es el mismo, no es que se cambie).
Para el método, significa que es el mismo para todas las instancias que se creen de esa clase (en tu ejemplo, la clase "prueba1")

- void es el objeto de retorno de ese método. Void significa que ese método no retorna nada al método que lo invoca. Si fuera double, como dices, la función debería retornar un Double. Pero,
- ¿ qué sentido tiene una función que cuando la invocas elimina los números no-primos, y luego te devuelve un Double ?
- ¿ para qué quieres que te devuelva un Double ? ¿ qué significaría ?

pues eso, espero haberme explicado.
sl2
Título: Re: Problema Con Clases
Publicado por: dlg89 en Jueves 29 de Mayo de 2008, 15:54
hola, gracias pior la informacion,

pero hay algo que no entiendo, como se sabe que metodo usar, es decir, cuando sabre si he de usar el static void .... o el static int o double ..........???'
Título: Re: Problema Con Clases
Publicado por: E.Baley en Jueves 29 de Mayo de 2008, 17:32
Cuando quieras recuperar un resultado

Por ejemplo, si tienes el método:
static int SUMA(int a, int B ){ etc...

Tu sabes que lo invocas así: SUMA(2, 3) y te devolverá un int. En realidad, para recuperar el valor retornado, tendrás que hacer:
int resultado = SUMA(2, 3);

En tu caso lo mismo:
Tienes una función static void Alea(int[] v) que no devuelve ningún resultado, sólo hace cosas en el vector que le pasas. Lo invocas así:
int[] vectorEjemplo = new int[100]; // Un vector vacío de dimensión 100
Alea(vectorEjemplo); // Esta vez no guardamos el retorno en una variable, porque no hay retorno

Como ves, no esperamos recuperar nada al llamar la función, porque la función no devuelve nada. La función se encargará de rellenar ese vector que le has pasado con 100 nº aleatorios, pero no devuelve ningún resultado.

Entonces, a la pregunta "como se sabe que metodo usar ?" la respuesta es evidente: sólo se puede usar el método de una forma.
--> Si necesitas que devuelva algo, usarás para programarlo: (imagina que quieres que te devuelva un string, por ejemplo)
static string NOMBREMÉTODO(params)
y para invocarlo:
string resultado = NOMBREMÉTODO(params)

- Si no necesitas que devuelva nada, usarás para programarlo:
static void NOMBREMÉTODO(params)
y para invocarlo:
NOMBREMÉTODO(params)

Espero que hayas cogido el concepto  :rolleyes:
Título: Re: Problema Con Clases
Publicado por: dlg89 en Sábado 31 de Mayo de 2008, 12:58
ok, creo que lo e entendido bastante bien
ç
gracias


otra duda que tengo es en vectores y matrices lo siguiente;

cuando ponermos :
para vectores

for(int i=0; i<V.Length;i++)
{
s+=V;

para matrices:


for(int =0;i<m.GetLegth(0);i++)
{
for(int c=0; c<m.Length(1);c++)
{
s+=m[i,c];

mi duda es para que se emplea el Length y GetLength(matrices)???


graciasy perdonar por ser tan pesado
Título: Re: Problema Con Clases
Publicado por: daniel44 en Sábado 31 de Mayo de 2008, 17:16
Cita de: "dlg89"
ok, creo que lo e entendido bastante bien
ç
gracias


otra duda que tengo es en vectores y matrices lo siguiente;

cuando ponermos :
para vectores

for(int i=0; i<V.Length;i++)
{
s+=V;

para matrices:


for(int =0;i<m.GetLegth(0);i++)
{
for(int c=0; c<m.Length(1);c++)
{
s+=m[i,c];

mi duda es para que se emplea el Length y GetLength(matrices)???


graciasy perdonar por ser tan pesado
La propiedad .length es el tamaño del arreglo, es decir, si en un arreglo de tamaño 3 pusieras 'array.length', t referirias a el valor 3.
La propiedad GetLength es bastante similar, solo que usa un parametro. Cuando usas GetLength(0) tomas la medida de las filas del arreglo, y cuando usas GetLength(1) tomas la medida de las columnas del arreglo.
Ej
int [] array = new int [6]
Si usas array.Length sera el valor 6

int [,] arrayx = new int [3,4]
Si usas arrayx.GetLength(0) el valor sera 3
Si usas arrayx.GetLength(1) el valor sera 4
Título: Re: Problema Con Clases
Publicado por: dlg89 en Jueves 5 de Junio de 2008, 11:13
hola, tengo una pequña duda con un ejercicio de vecotre,s

trata de sumarle 7 unidades al elemento del vecvtor que presente el numero 5  dentro de una de los elementos del vector, es decir, si el vector es v=[36,125,458], pues sumarle siete a 125 y 458.
si alguno me ayuda,
no digo que me agais el ejercicio, ni micho meos, solo que me digas como se haria

saludos y gracias por toda la ayda que me estais dando
Título: Re: Problema Con Clases
Publicado por: E.Baley en Jueves 5 de Junio de 2008, 11:31
Hombre, no es dificil
1) Haces un bucle para recorrer todos los elementos del vector
2) Para cada elemento, obtienes su representación string. Basta con usar .ToString()
3) para cada string, buscas si contiene el SubString "5". El método es String.Contains(el sub-string que quieres buscar)
4) Si te devuelve true, le sumas 7 al elemento
Título: Re: Problema Con Clases
Publicado por: mx_latino en Jueves 5 de Junio de 2008, 23:13
Algo tarde creo..  :P  pero bueno alli te lo dejo y espero te sirva!!  

Saludos y suerte :comp:
Título: Re: Problema Con Clases
Publicado por: dlg89 en Lunes 16 de Junio de 2008, 11:49
gracias por la ayuda pero esque sigue sin slairme


eso de string.Contains no lo estamos dando en clase.
El ejrcicio en si habla de que si el vector que tu metes, por ejemplo, el vecotr[5,234,13,56], a este le sumes 7  a los que contengan el digito ttres por ejemplo, es decir que te devuelva el vecotr [5,241,20,56]

la cosa es hacerlo de forma simple ya que como digo eso del contains lo lo emos dado,
haber si alguein me ayuda porque en el examen es segro que un ejercicio asi salga
Título: Re: Problema Con Clases
Publicado por: dlg89 en Martes 17 de Junio de 2008, 23:46
hola de nuevo, si alguien me puede ayudar con mi dudase lo agradeceria