elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación C/C++ / Re: [ayuda] duda con una variable en C. en: 2 Marzo 2011, 15:03 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
  1. void fun1 (int a)
  2. {
  3. a++;
  4. return;
  5. }
  6. void fun2 (int *a)
  7. {
  8. (*a)++;
  9. return;
  10. }
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és
Código
  1. 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!  ;-)
2  Programación / Programación C/C++ / Re: [ayuda] duda con una variable en C. en: 2 Marzo 2011, 02:19 am
que quieres retornar un int? pues int buscar. y asi con lo que sea incluso structuras creo.

retorna un puntero a la estructura, esta bien si pongo struct productos*  en el retonrno??

me podrias decir por favor, de acuerdo al final, si estan bien los prototipos y bien declarado el arreglo a?
3  Programación / Programación C/C++ / Re: [ayuda] duda con una variable en C. en: 2 Marzo 2011, 01:12 am
gracias por contestarme, antes que nada, pero mi duda no es que es, eso lo se, lo que no entiendo es por que no es directamente int, ya que un numero nomas, y te pediria que me digas si esta bien el struct, el arreglo a, los prototipos y que va en el retorno que no puse.. (acuerdo al final).
4  Programación / Programación C/C++ / [ayuda] duda con una variable en C. en: 2 Marzo 2011, 00:26 am
hola, buenas tardes, no entiendo por que en este final ponen en la funcion void carga a int* como parametro, ya que es la cantidad de articulos, segun dice ahi, y ademas d eso si me pueden decir si estan bien declaradas las variables segun el final, porque para mi estan bien, pero tuve un problema con otro final que el error que me marcaba era que a no estaba definida... muchas gracias a los que contesten!

el final esta en este link:   http://img42.imageshack.us/i/img112d.jpg/ 

Código:
 #include <stdio.h>

struct productos {
       int cod_a; /*articulo*/
       char modelo[10];
       char descripcion[200];
       float precio;
       long cod_p; /*proveedor*/
       nom_p[30];};
       
       void carga (struct productos[], int*);
       void ordenar (struct productos[], int*, int);
       void mostrar (struct productos[], int*, char[]);
       .............. buscar (struct productos[], int*, char[]);   /*no se que va en lo que retorna*/
       char* modificar (struct productos[], int*, int);
       
       main()
       {
             struct productos a[49];
             .
             .
             .
             .
             } 
5  Programación / Programación C/C++ / Re: no entiendo los errores que me marca... en: 26 Febrero 2011, 02:06 am
y cual seria la solucion? no entiendo que me queres decir...
6  Programación / Programación C/C++ / Re: no entiendo los errores que me marca... en: 24 Febrero 2011, 19:04 pm
Muchas gracias, ahi el programita se compila sin errores, pero hace algunas cosas que no entiendo por que, y revise revise y no encuentro la solucion, no se que pongo mal..

1. cuando me pide el primer nombre del alumno necesito poner dos palabras o dos caracteres separados para que pase a pedir la edad.(en los nombres posteriores no).

2. el promedio me saca cualquier cosa..

3. cuando imprime los nombres de los alumnos con sus promedios, el segundo y tercer nombre me sale un numero, en vez del nombre..

4. hace la pregunta de si desea buscar un alumno por Nº de cedula y al lado sale el cartel de desea modificar alguna nota...

adjunto la imagen asi se dan cuenta..

Código:
#include <stdio.h>
const int N=3;
main()
{
      struct datos {
             char nombre[10];
             int edad;
             long cedula;
             };
             
      struct notas {
             float nota1;
             float nota2;
             float nota3;
             float promedio;
             };
      struct datos a[N];
      struct notas b[N];
      long l;
      int j,h,o,y,w,p;
      char m='s';
      while (m=='s')
      {
     
          for(j=0;j<N;j++)
          {
             printf("ingrese nombre del alumno: ");
             scanf("%s\n", &a[j].nombre);
             printf("ingrese edad del alumno: ");
             scanf("%s\n", &a[j].edad);
             printf("ingrese numero de cedula: ");
             scanf("%s\n", &a[j].cedula);
             printf("ingrese nota 1: ");
             scanf("%f\n", &b[j].nota1);
             printf("ingrese nota 2: ");
             scanf("%f\n", &b[j].nota2);
             printf("ingrese nota 3: ");
             scanf("%f\n", &b[j].nota3);
             b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
          }
          for (j=0;j<N;j++)
             {
                     if (b[j].promedio>=7)
                                        {
                      printf("el alumno %s aprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
                                        }
                                        else
                                        {
                      printf("el alumno %s desaprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
                                        }
             }
             printf("desea buscar alumno por numero de cedula?, si=1, no=2: ");
             scanf("%d", &h);
             if (h==1)
                {
                  printf ( "ingrese numero de cedula:");
                  scanf("%ld", &l);
                  for (j=0;j<N;j++)
                    {
                      if (l==a[j].cedula)
                      {
                         printf("alumno: %s\n", a[j].nombre);
                         printf ("notas: %.2f %.2f %.2f\n", b[j].nota1,  b[j].nota2, b[j].nota3);
                         printf ("promedio: %.2f\n", b[j].promedio);
                      }
                    }
                }
                    printf ("desea modificar alguna nota de este alumno? 1-si, 2-no");
                    scanf("%d", &o);
                    if (o==1)
                    {
                  printf("que nota desea modificar? para nota 1: presione 1, para nota 2 presione 2, para nota 3 presione 3");
                  printf ("para modificar todas, predione 4");
                  scanf("%d", &y); 
                  switch (y)
                             {
                             case 1:
                                  {
                                    printf ("ingrese la nota 1: ");
                             scanf ("%f", b[j].nota1);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                   };
                                   
                                   case 2:
                                   {
                               printf ("ingrese la nota 2: ");
                             scanf ("%f", b[j].nota2);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                    };
                             case 3:
                                    {
                             printf ("ingrese la nota 3: ");
                             scanf ("%f", b[j].nota3);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                    };
                                    case 4:
                                         {
                                         printf ("ingrese la nota 1: ");
                                         scanf ("%f\n", b[j].nota1);                   
                                         printf ("ingrese la nota 2: ");
                                         scanf ("%f\n", b[j].nota2);
                                         printf ("ingrese la nota 3: ");                   
                                         scanf ("%f\n", b[j].nota3);
                                         b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                                         break;
                                         };
                               }
                     }   
     

                                   printf("desea ver la lista de todos los alumnos y sus notas? si-1, no-2");
                                   scanf("%d", &w);
                                   if (w==1)
                                   {
                                            for (p=0;p<N;p++)
                                               {
                                                 printf ("%s\t", a[p].nombre);
                                                 printf ("notas: %f %f %f\t", b[p].nota1, b[p].nota2, b[p].nota3);
                                                 printf ("promedio: %.2f\n", b[p].promedio);
                                                }
                                   }
               
                      printf ("desea iniciar el programa del principio? s-si, n-no");
                      scanf("%c", &m);
}
}




muchas gracias...

7  Programación / Programación C/C++ / no entiendo los errores que me marca... en: 23 Febrero 2011, 23:17 pm
hola, buenos dias, no entiendo por que me marca errores en el renglon donde declaro:  datos a[N], y notas b[N];y en los ultimos FOR.. puede ser que haya algun problema con el #define N 100?? desde ya, muchas gracias a los que me ayuden!



/*crear una aplicacion en c que lea nombre cedula edad y 3 notas de n estudiantes
el programa debe decir si el usuario aprobo o no el curso sacando el promedio
de sus 3 notas luego debe permitirle al usuario buscar por numero de cedula
y mostras las notas promedio y permitir editar cualquiera de las notas ingresadas */



#include <stdio.h>
#define N 100;
main()
{
      struct datos {
             char nombre[12];
             int edad;
             long cedula;
             };
             
      struct notas {
             float nota1;
             float nota2;
             float nota3;
             float prom;
             };
      datos a[N];
      notas b[N];
      long l;
      int j,h,o,y,w,p;
      char m='s';
      while (m='s')
      {
     
          for(j=0;j<N;j++)
          {
             printf("ingrese nombre del alumno: ");
             scanf("%s\n", &a[j].nombre);
             printf("ingrese edad del alumno: ");
             scanf("%s\n", &a[j].edad);
             printf("ingrese numero de cedula: ");
             scanf("%s\n", &a[j].cedula);
             printf("ingrese nota 1: ");
             scanf("%f\n", &b[j].nota1);
             printf("ingrese nota 2: ");
             scanf("%f\n", &b[j].nota2);
             printf("ingrese nota 3: ");
             scanf("%f\n", &b[j].nota3);
             b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3) ;
          }
          for (j=0;j<N;j++)
             {
                     if (b[j].promedio>=7)
                                        {
                      printf("el alumno %s aprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
                                        }
                                        else
                                        {
                      printf("el alumno %s desaprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
                                        }
             }
             printf("desea buscar alumno por numero de cedula?, si=1, no=2: ");
             scanf("%d", &h);
             if (h==1)
                {
                  printf ( "ingrese numero de cedula:");
                  scanf("%ld", &l);
                  for (j=0;j<N;j++)
                    {
                      if (l==a[j].cedula)
                      {
                         printf("alumno: %s\n", a[j].nombre);
                         printf ("notas: %.2f %.2f %.2f\n", b[j].nota1,  b[j].nota2, b[j].nota3);
                         printf ("promedio: %.2f\n", b[j].promedio);
                      }
                    }
                    printf ("desea modificar alguna nota de este alumno? 1-si, 2-no");
                    scanf("%d", &o);
                    if (o==1)
                    {
                  printf("que nota desea modificar? para nota 1: presione 1, para nota 2 presione 2, para nota 3 presione 3");
                  printf ("para modificar todas, predione 4");
                  scanf("%d", &y); 
                  switch (y)
                             {
                             case 1:
                                  {
                                    printf ("ingrese la nota 1: ");
                             scanf ("%f", b[j].nota1);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                   };
                                   
                                   case 2:
                                   {
                               printf ("ingrese la nota 2: ");
                             scanf ("%f", b[j].nota2);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                    };
                             case 3:
                                    {
                             printf ("ingrese la nota 3: ");
                             scanf ("%f", b[j].nota3);
                             b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                             break;
                                    };
                                    case 4:
                                         {
                                         printf ("ingrese la nota 1: ");
                                         scanf ("%f\n", b[j].nota1);                   
                                         printf ("ingrese la nota 2: ");
                                         scanf ("%f\n", b[j].nota2);
                                         printf ("ingrese la nota 3: ");                   
                                         scanf ("%f\n", b[j].nota3);
                                         b[j].promedio=  (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
                                         break;
                                         };
                               }
                    }
          }   
     }

                                   printf("desea ver la lista de todos los alumnos y sus notas? si-1, no-2");
                                   scanf("%d", &w);
                                   if (w==1)
                                   {
                                            for (p=0;p<N;p++)
                                               {
                                                 printf ("%s\t", a[p].nombre);
                                                 printf ("notas: %f %f %f\t", b[p].nota1, b[p]nota2, b[p]nota3);
                                                 printf ("promedio: %.2f\n", b[p].promedio);
                                                }
                                   }
               
                      printf ("desea iniciar el programa del principio? s-si, n-no");
                      scanf("%c", &m);
}
8  Programación / Programación C/C++ / Re: ayuda: cuando abro el programa se me cierra en: 7 Febrero 2011, 17:21 pm
ya lo descubri, perdon por las molestias, era que me habia olvidado de poner los & en los scanf.. gracias!
9  Programación / Programación C/C++ / ayuda: cuando abro el programa se me cierra en: 7 Febrero 2011, 14:39 pm
hola foro! tengo una duda y es que no se si es un problema de mi pc o de que estoy haciendo algo mal, hice un programita que cuando compilo y ejecuto en dev c, sale el cartel que me pide la altura del alumno y cuando la ingreso y pongo enter me sale el cartel que dice:

 xxx.exe dejo de funcionar:

*buscar una solucion en linea mas tarde...
*cerrar el programa.

si me pueden decir por que sale eso y no me deja ejecutar el programa se los agradezco.

muchas gracias!
10  Foros Generales / Dudas Generales / Re: una duda con el while. en: 3 Febrero 2011, 20:42 pm
Gracias, el error estaba en que me estaba equivocando de comillas, es decir, en vez de comillas ponioa acentos, xq no encontraba las que van porque el teclado esta medio borroneado, de todas formas muchas gracias! saludos!
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines