Cita de: N0body en 2 Marzo 2011, 12:52 PM
La verdad que en el enunciado, por más que el profesor trata de ser lo más detallista posible, se presta a ciertas ambigüedades. Además debo aclarar que detesto cuando tratan de "programar a los programadores" (diciendole como tienen q hacer el código, en vez de dandole la descripcion de la entrada y la relación la la salida) xD
-Al parecer según veo, los argumentos para tus funciones están en el orden en que los nombra en el enunciado.
Además no es sólo en la función carge que pasas la cantidad de articulos como puntero a int, sino en el resto de las funciones que requieren ese dato.
En primer lugar, pensé que quizás la función carga podría modificar la cantidad, en este caso es importante que pases el puntero a la variable, para tener acceso a la variable que pasas como argumento desde el main y no tener una simple "copia" de ella... Espero que lo entiendas, sino, repasa un poco esto:Código (C) [Seleccionar]void fun1 (int a)
{
a++;
return;
}
void fun2 (int *a)
{
(*a)++;
return;
}
En el primer caso paso el valor de un entero, y la modificacion no influye sobre la variable que le paso dede el main (o en donde se llame a fun1). En el segundo paso la direccion y modifico el valor del entero a donde esa direccion apunta, osea que la modificacion es efectiva en la variable con la que trabajo en el main.
Entonces convenimos en esto: si quieres modificar la variable, pasa el puntero a dicha variable... xD Pero creo que no necesitas modificar el valor de la cantidad, así que no sé para que... Si, como dices tu sería mejor pasar el valor (un int directamente). Igualmente no sé de donde sacaste esos prototipos, en el enunciado no están...
-Las variables las declaras bien, no usas variables globales como la consigna bien aclara que no hay que usar. Pero declaras 49 variables del tipo "struct productos", cuando necesitas 50, en las cadenas de caracteres dentro de la definicion de la estructura no tienes problemas con esto... Creo que la confusion viene por este lado:
Cuando hacésCódigo (C) [Seleccionar]int a[20]
declaras 20 variables int, que serán nombradas desde a[0] hasta a[19]. Yo antes, cuando empecé a programar, pensaba que haciendo int a[19] declarabas 20 variables...
-En la definición de la esctructura no pones el tipo de "nom_p[30]", que como leí en el enunciado debería ser una cadena de caracteres...
-La función buscar, según el enunciado devuelve todos los datos del producto... Justamente aclara (y aca el error de muchos estudiantes) que no muestra dichos datos... Por que? porque a veces vamos a tener que buscar un producto no para mostrar sus datos, sino para trabajar con ellos...Como son muchos datos (todos los de la estructura), puedes hacer varias cosa:
a)devolver un entero, que sea la posicion de la estructura buscada en el array.
b)devolver un puntero a la estructura encontrada (ahí estaría bien hacer "struct producto *").
c)devolver una estructura "struct producto" que sea la estructura encontrada.
La mejor opcion a mi criterio es la "a", ya que con ese dato podés determinar todos los otros. Si tienes un puntero a la estructura en verdad también porque hacés la diferencia entre éste y el puntero q apunta al principio de la estructura y te da la posición en la lista, pero es complicarse sin mucho sentido. Por ultimo, la opción "b" no te brinda información alguna sobre en que posición se encuentra, simplemente te pasa los datos del producto, pero como la consigna dice simplemente esto, no creo que esté mal...
Lo leí muy a la ligera, probablemente me olvide de más cosas, así que revisalo vos...
Muchisimas gracias Nobody por todo lo que escribiste, lo del a[49] tenes razon, me confundi, con respecto a lo de los prototipos los hice yo, no estan en el final y queria saber si estan bien. Lo del tipo de nom_p me olvide de ponerlo jaja seria char*..
otra vez muchas gracias! te re jugaste che!