[ Foro de C# ]

Problema con estructura y acciones o subprograma

27-Aug-2013 13:33
Invitado (Vanesa13)
3 Respuestas

Hola, necesito algún consejo, explicación o algo por el estilo para mi siguiente problema.

Para empezar mis conocimientos de programación son muy limitados y las únicas nociones que tengo son con C++, que apenas recuerdo, pero por cosas de la vida debo realizar un programa para consola con C# (quiero decir que por favor las respuestas sean lo más sencilla posible y dirigidas a la solución).

Estoy realizando el programa, y pretendía delegar operaciones a subprogramas como acciones y funciones. En las funciones, no tengo ningún problema, pues ya he mirado que funcionaran, pero sí que me lío en las acciones.

Intento hacer una acción donde se me construya una estructura que he declarado previamente, pero me indica el error: Error 1 An object reference is required for the non-static field, method, or property 'ConsoleApplication1.Program.CreaCosaBuena(int, int, int, ConsoleApplication1.Program.tipoInformacionCosa [], float, float, float, float)'
En CrearCosaBuena, también tendré que introducir acciones y funciones, pero supongo que si resuelvo este caso, me servirá la misma metodología para entonces.

No estoy seguro de si el problema viene, porque estoy metiendo la struct, y lo hago mal o es que no se puede, o debería crear la acción de otro modo.

El programa resumido es:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
 
 
namespace ConsoleApplication1
{
    class Program
    {
        static int ne, nr, Num;
        static int i;
        static float cv, ev, vv, cf;
 
 
        static double[,] M;
 
 
       struct tipoInformacionCosa
        {
 
            public int valuno;
            public int valdos;
 
 
        }
 
        struct CosaBuena
        {
            public List<int> p;
public float l;
 
 
        }
 
        struct Ordren
        {
            public List<int> c;
        }
 
 
        private static void Main(string[] args)
        {
 
            //Introducción de datos generales.            
 
 
 
            ne = Convert.ToInt32(Console.ReadLine());
 
            tipoInformacionCosa cosilla = new tipoInformacionCosa [ne];
 
 
            cv = Convert.ToSingle(Console.ReadLine());
 
            ev = Convert.ToSingle(Console.ReadLine());
 
            vv = Convert.ToSingle(Console.ReadLine());
                        cf = Convert.ToSingle(Console.ReadLine());
 
            //Introducció de los datos de cosilla.
 
            i = 0;
            while (i <= ne)
            {
 
 
 
                cosilla [i].valuno = Convert.ToInt32(Console.ReadLine());
 
 
                cosilla [i].valdos = Convert.ToInt32(Console.ReadLine());
 
                i = i + 1;
 
            }
 
            //Calcul de la matriz.
 
            M = new double[ne + 1, ne + 1];
 
            for (int f = 0; f < M.GetLength(0); f++)
            {
                for (int c = 0; c < M.GetLength(1); c++)
                {
 
                    M [f, c] = 
} }
 
 
 
            //Calculo nr.
            nr = Calculanr(ne);
 
 
            //Calculo CosaBuena.
 
            Cosa = 1;
 
            while (CosasPorHacer(Cosa, nr))
            {
                CreaCosaBuena(NumRuta, ne, nr, cosilla, ev, cv, vv, cf);
                Cosa = Cosa + 1;
 
            }
 
 
        }
 
 
// Colección de acciones y funciones.
 
        //Función per a calcular el nr, no me da problemas.
        public static int Calculanr(int num)
        {
            ?. 
            return v;
        }
 
        //Utilitzada en la funció anterior.
        public static int factorial(int n)
        {
            int f = n;
            for (int i = 1; i < n; i++)
                f *= i;
            return f;
        }
 
 
        //Funció boleana per al bucle de construcció de Cosas, tampoco me da problema.
        public static bool RutesPerFer(int Num,int nr)
        {
            ?.
            return sigue;
        }
 
        // Acció per a construir la Cosa Buena.
 
        void CreaCosaBuena(int NumCosa, int ne, int nr, tipoInformacionCosa [] cosilla, float ev, float cv, float vv, float cf)
        {
Aquí dento me gustaría crear un CosaBuena a partir de realizar acciones y funciones donde intervienen la struct cosilla, los demás parámetros, y los que me crearé del tipo Orden
 
        }
 
 
 
 
    }
}
 



27-Aug-2013 16:09
Nacho Cabanes (+32)

Por una parte, no entiendo a qué te refieres con "acciones". Supongo que será a funciones que no devuelvan valores (funciones "void" en los lenguajes que derivan de C, "procedimientos" en Pascal y Modula2, "subrutinas" en otros lenguajes).

Por otra parte, con con nombres de variables tan poco intuitivos, no tengo claro lo que pretendes (cv, vv, ev, cosabuena, cosilla...).

Además, al fragmento de programa que incluyes le faltan detalles que ayudan que no compile. A mí, el primer error me lo da en la línea 51:

 
tipoInformacionCosa cosilla = new tipoInformacionCosa [ne];
 


No sé si ese "cosilla" debe ser un único dato, y entonces no necesitaría "new":

 
tipoInformacionCosa cosilla;
 


O si es un array y ese "ne" es la abreviatura de algo como "numElementos" (porque tampoco hay ningún WriteLine que ayude al usuario a saber lo que se espera de dél), y en ese caso te faltan los corchetes al principio:

 
tipoInformacionCosa[] cosilla = new tipoInformacionCosa [ne];
 


El siguiente error es cerca de la línea 100, donde pone "Cosa=1", porque esa variable no está declarada, Tampoco existe "CosaPorHacer" (quizá sea RutesPerFer).

Finalmente, por lo que dices, imagino ese "CreaCosaBuena" debería ser una función, no un procedimiento, y devolver una "CosaBuena", algo como esto:

 
CosaBuena CreaCosaBuena(int NumCosa, int ne, int nr, 
    tipoInformacionCosa [] cosilla, float ev, 
    float cv, float vv, float cf) 
{ 
    CosaBuena c; 
 
 
    //Aquí dento me gustaría crear un CosaBuena a 
    // partir de realizar acciones y funciones donde intervienen la 
    // struct cosilla, los demás parámetros, y los que me crearé del 
    // tipo Orden 
 
    // Ejemplo de datos de prueba:
    c.l = 5;
    c.p = new List<int>();
    c.p.Add( 26 );
 
    return c;
} 
 

27-Aug-2013 18:45
Invitado (Vanesa13)

Gracias Nacho.
A acciones me refería ciertamente a funciones que no devuelven valores, cuando hice lo poco que se de este tema, le llamábamos así.

Obviamente el programa que he copiado no te funcionará porque me he cargado la mayoría de código, como dije antes es a trozos. Pensé que copiando el error, explicando por encima el problema, y esa parte de código era suficiente para hacerme entender.

Probaré de seguir como tu dices a ver si así consigo seguir a delante.

Muchas gracias por tu respuesta.


27-Aug-2013 19:05
Nacho Cabanes (+32)

Suerte con ello!






(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.)