• Lunes 18 de Noviembre de 2024, 09:27

Autor Tema:  Arrays  (Leído 1802 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Arrays
« en: Domingo 8 de Febrero de 2009, 17:45 »
0
Código: Text
  1. #include<stdio.h>
  2. #define LONG 100
  3. int afegirvalor(float *);
  4. void borrarvalor(float *);
  5. void modificarvalor(float *);
  6. void mostrarvalor(float *,int);
  7. void mitjaaritmetica();
  8. void valorspersobre();
  9. void maximiminin();
  10. int mostrarmenu();
  11.  
  12. int main()
  13. {
  14.     int fin=0;
  15.     int op,i;
  16.     float vector[LONG];
  17.    
  18.    
  19.     do
  20.     {
  21.                op = mostrarmenu();
  22.               switch(op)
  23.               {
  24.               case 1:
  25.                     i=afegirvalor(vector);
  26.                     break;
  27.               case 2:
  28.                     borrarvalor(vector);
  29.                     break;
  30.               case 3:
  31.                    modificarvalor(vector);
  32.                     break;
  33.               case 4:
  34.                    mostrarvalor(vector,i);
  35.                    break;
  36.               case 5:
  37.                    mitjaaritmetica();
  38.                    break;
  39.               case 6:
  40.                    valorspersobre();
  41.                    break;
  42.               case 7:
  43.                    maximiminin();
  44.                    break;
  45.               case 8:
  46.                    fin=1;
  47.                    break;
  48.               default:
  49.                       printf("Opcio incorrecte n");
  50.               }      
  51.               if (!fin)
  52.               {
  53.               printf("nn");
  54.               getchar();
  55.               getchar();
  56.               }
  57.     }while(!fin);
  58.  
  59. }
  60. int mostrarmenu ()
  61. {
  62.     int op;
  63.    
  64.     printf("Programa de estadisticas: n");
  65.     printf("n");
  66.     printf("n");
  67.     printf("1) Afegir un valor: n");
  68.     printf("2) Esborrar un valor: n");
  69.     printf("3) Modificar un valor existent: n");
  70.     printf("4) Mostrar tots el valors: n");
  71.     printf("5) Mitja aritmetica: n");
  72.     printf("6) Valors per sobre la mitja aritmetica: n");
  73.     printf("7) Maxim y minin: n");
  74.     printf("8) Salir n");
  75.    
  76.     do
  77.      {
  78.         printf("Escull una opcio: ");
  79.         scanf("%d", &op);
  80.         if ((op != 1) && (op !=2) && (op != 3) && (op != 4) && (op != 5) && (op != 6) && (op != 7) && (op != 8))
  81.         {
  82.                 printf("Opcio incorrecte n");
  83.         }              
  84.      }while (op < 1 || op > 8);
  85.      return op;
  86. }
  87. int afegirvalor(float *vector)
  88. {
  89.      int i=0;
  90.      
  91.           if (i<100)
  92.           {
  93.                    printf("Introdueix un numero: n");
  94.                    scanf("%f", &vector[i]);
  95.                    i++;
  96.           }
  97.           else
  98.           {
  99.                printf("Ya has posat el maxim de numeros posible. n");
  100.           }
  101.        return i;
  102.      
  103.      
  104. }
  105. void borrarvalor(float *vector)
  106. {
  107.      int pos;
  108.      
  109.      printf("Quina posicio vols borrar [0-99]: n");
  110.      scanf("%d", &pos);
  111.      vector[pos]=0;
  112.      printf("El numero de pos %d del vector a sigut esborrat correctament n");
  113. }
  114. void modificarvalor(float *vector)
  115. {
  116.      int pos;
  117.      float num;
  118.      
  119.      printf("Quina posicio vols modificar [0-99]: n");
  120.      scanf("%d", &pos);
  121.      printf("Indica el numero que vols posar: n");
  122.      scanf("%f", &num);
  123.      vector[pos]=num;
  124.      printf("El numero ha sigut modificat correctament. n");
  125.      
  126. }
  127. void mostrarvalor(float *vector, int i)
  128. {
  129.      int j;
  130.      
  131.      printf("El numeros son:");
  132.      for (j=0; j<i;j++)
  133.      {
  134.            printf("%0.2f,",vector[j]);
  135.      }
  136. }
  137. void mitjaaritmetica()
  138. {
  139. }
  140. void valorspersobre()
  141. {
  142. }
  143. void maximiminin()
  144. {
  145. }
  146.  
  147.  
alguien sabe pq solo me muestra el ultimo valor introducido en mostrarvalor.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arrays
« Respuesta #1 en: Domingo 8 de Febrero de 2009, 18:50 »
0
Tú problema está en

Código: C
  1. int afegirvalor(float *vector)
  2. {
  3.      int i=0;
  4.      
  5.           if (i<100)
  6.           {
  7.                    printf("Introdueix un numero: n");
  8.                    scanf("%f", &vector[i]);
  9.                    i++;
  10.           }
  11.           else
  12.           {
  13.                printf("Ya has posat el maxim de numeros posible. n");
  14.           }
  15.        return i;
  16.      
  17.      
  18. }
  19.  
Ten en cuenta que cada vez que ingresas de nuevo en la función, i vuelve a valer 0, y por tanto siempre introduces en el índice 0, da igual el número de veces que llames a la función.

A lo mejor te interesa ver la instrucción static  ;) , aunque te recomendaría usar una variable en main() que cuente el número de elementos.

Salud

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Arrays
« Respuesta #2 en: Domingo 8 de Febrero de 2009, 19:17 »
0
y si la i no la iguala a la nada, es q no te entiendo, que ponga una variable en el main ?
y que valla aumentado, perdonde la pongo en el case 1 ?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arrays
« Respuesta #3 en: Domingo 8 de Febrero de 2009, 20:11 »
0
Si ya la tienes declarada en main(). Haz lo siguiente y verás como sí funciona:

Código: C
  1. case 1:
  2.                     i=afegirvalor(vector,i);
  3.  

Código: C
  1. int afegirvalor(float *vector, int i)
  2. {
  3.      //int i=0;
  4.  

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Arrays
« Respuesta #4 en: Domingo 8 de Febrero de 2009, 20:27 »
0
muchas gracias, haber como me sale ahora lo otro xDDDD

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Arrays
« Respuesta #5 en: Domingo 8 de Febrero de 2009, 22:12 »
0
Código: Text
  1.  
  2. #include<stdio.h>
  3. #define LONG 100
  4. int afegirvalor(float *,int);
  5. void borrarvalor(float *);
  6. void modificarvalor(float *);
  7. void mostrarvalor(float *,int);
  8. int mitjaaritmetica(float *,int,float);
  9. void valorspersobre(float *,int,float);
  10. void maximiminin(float *,int);
  11. int mostrarmenu();
  12.  
  13. int main()
  14. {
  15.     int fin=0;
  16.     int op,i=0,mitjana=0;
  17.     float vector[LONG];
  18.    
  19.     do
  20.     {
  21.                op = mostrarmenu();
  22.               switch(op)
  23.               {
  24.               case 1:
  25.                     i=afegirvalor(vector,i);
  26.                     break;
  27.               case 2:
  28.                     borrarvalor(vector);
  29.                     break;
  30.               case 3:
  31.                    modificarvalor(vector);
  32.                     break;
  33.               case 4:
  34.                    mostrarvalor(vector,i);
  35.                    break;
  36.               case 5:
  37.                    mitjana=mitjaaritmetica(vector,i,mitjana);
  38.                    break;
  39.               case 6:
  40.                    valorspersobre(vector,i,mitjana);
  41.                    break;
  42.               case 7:
  43.                    maximiminin(vector,i);
  44.                    break;
  45.               case 8:
  46.                    fin=1;
  47.                    break;
  48.               default:
  49.                       printf("Opcio incorrecte n");
  50.               }      
  51.               if (!fin)
  52.               {
  53.               printf("nn");
  54.               getchar();
  55.               getchar();
  56.               }
  57.     }while(!fin);
  58.  
  59. }
  60. int mostrarmenu ()
  61. {
  62.     int op;
  63.    
  64.     printf("Programa de estadisticas: n");
  65.     printf("n");
  66.     printf("n");
  67.     printf("1) Afegir un valor: n");
  68.     printf("2) Esborrar un valor: n");
  69.     printf("3) Modificar un valor existent: n");
  70.     printf("4) Mostrar tots el valors: n");
  71.     printf("5) Mitja aritmetica: n");
  72.     printf("6) Valors per sobre la mitja aritmetica: n");
  73.     printf("7) Maxim y minin: n");
  74.     printf("8) Salir n");
  75.    
  76.     do
  77.      {
  78.         printf("Escull una opcio: ");
  79.         scanf("%d", &op);
  80.         if ((op != 1) && (op !=2) && (op != 3) && (op != 4) && (op != 5) && (op != 6) && (op != 7) && (op != 8))
  81.         {
  82.                 printf("Opcio incorrecte n");
  83.         }              
  84.      }while (op < 1 || op > 8);
  85.      return op;
  86. }
  87. int afegirvalor(float *vector,int i)
  88. {
  89.      
  90.           if (i<100)
  91.           {
  92.                    printf("Introdueix un numero: n");
  93.                    scanf("%f", &vector[i]);
  94.                    i++;
  95.           }
  96.           else
  97.           {
  98.                printf("Ya has posat el maxim de numeros posible. n");
  99.           }
  100.        return i;
  101.      
  102.      
  103. }
  104. void borrarvalor(float *vector)
  105. {
  106.      int pos=0;
  107.      
  108.      printf("Quina posicio vols borrar [0-99]: n");
  109.      scanf("%d", &pos);
  110.      vector[pos]=0;
  111.      printf("El numero en la posicio %d a sigut esborrat correctament n",pos);
  112. }
  113. void modificarvalor(float *vector)
  114. {
  115.      int pos;
  116.      float num;
  117.      
  118.      printf("Quina posicio vols modificar [0-99]: n");
  119.      scanf("%d", &pos);
  120.      printf("Indica el numero que vols posar: n");
  121.      scanf("%f", &num);
  122.      vector[pos]=num;
  123.      printf("El numero ha sigut modificat correctament. n");
  124.      
  125. }
  126. void mostrarvalor(float *vector, int i)
  127. {
  128.      int j;
  129.      
  130.      printf("Els numeros son:");
  131.      for (j=0; j<i;j++)
  132.      {
  133.            printf("%0.2f,",vector[j]);
  134.      }
  135. }
  136. int mitjaaritmetica(float *vector, int i, float mitjana)
  137. {
  138.      int j;
  139.      float sum=0;
  140.      for (j=0; j<i;j++)
  141.      {
  142.            sum=sum+vector[j];
  143.      }
  144.      mitjana=sum/j;
  145.      printf("La mitjana dels numeros es: %0.2f n",mitjana);
  146.      return mitjana;
  147. }
  148. void valorspersobre(float *vector,int i,float mitjana)
  149. {
  150.      int j;
  151.      
  152.      printf("El valors per sobre la mitja aritmetica son: ");
  153.      for (j=0;j<i;j++)
  154.      {
  155.            if (mitjana<vector[j])
  156.            {
  157.             printf("%0.2f,",vector[j]);
  158.            }
  159.      }
  160. }
  161. void maximiminin(float *vector,int i)
  162. {
  163.      int j;
  164.      float max=vector[j],min=vector[j];
  165.      
  166.       for (j=0;j<i;j++)
  167.       {
  168.           if (vector[j]>max)
  169.           {  
  170.               max=vector[j];
  171.           }  
  172.           else if (vector[j]<max)
  173.           {
  174.                min=vector[j];
  175.           }
  176.       }
  177.       printf("El numero mes petit es: %0.2f n",min);
  178.       printf("El numero mes gran es: %0.2f n",max);
  179.      
  180. }
  181.  
  182.  
pq en el max y el min solo me detecta el max, en el min siempre me pone 0 ?

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Arrays
« Respuesta #6 en: Lunes 9 de Febrero de 2009, 23:08 »
0
Cita de: "badyalberto"
Código: Text
  1.  
  2.  
  3.  
  4. void maximiminin(float *vector,int i)
  5. {
  6.      int j;
  7.      float max=vector[j],min=vector[j];
  8.      
  9.       for (j=0;j<i;j++)
  10.       {
  11.           if (vector[j]>max)
  12.           {  
  13.               max=vector[j];
  14.           }  
  15.           else if (vector[j]<max)
  16.           {
  17.                min=vector[j];
  18.           }
  19.       }
  20.       printf("El numero mes petit es: %0.2f n",min);
  21.       printf("El numero mes gran es: %0.2f n",max);
  22.      
  23. }
  24.  
  25.  
pq en el max y el min solo me detecta el max, en el min siempre me pone 0 ?

Creo que el error reside en el valor de la variable j...de entrada no tiene ningun valor asignado...y eso hace que el valor en max o en min sea cualquiera

Citar
int j;
float max=vector[j],min=vector[j];

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arrays
« Respuesta #7 en: Miércoles 11 de Febrero de 2009, 20:16 »
0
Cita de: "betopin"
Creo que el error reside en el valor de la variable j...de entrada no tiene ningun valor asignado...y eso hace que el valor en max o en min sea cualquiera
Cita de: "betopin"
for (j=0;j<i;j++)
Sí que tiene valor asignado.

badyalberto, fíjate que nunca comparas min, sino que comparas ambas veces con max:

Cita de: "badyalberto"
else if (vector[j]<max)
Esto debería ser evidentemente else if (vector[j]<min).

Además, tu cabecera de función se puede mejorar:

Cita de: "badyalberto"
void maximiminin(float *vector,int i)
Pasas un parámetro que no usas dentro de la función, es decir, que no lo necesitas  ^_^

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Arrays
« Respuesta #8 en: Miércoles 11 de Febrero de 2009, 20:48 »
0
Por supuesto que j toma un valor en el bucle, pero antes no, cuando se define max y min

Cita de: "badyalberto"
Código: Text
  1.  
  2.  
  3. void maximiminin(float *vector,int i)
  4. {
  5.      int j;
  6.      float max=vector[j],min=vector[j];     
  7.       for (j=0;j<i;j++)
  8.        
  9.  

Eso hace que max y min...tengan un valor cualquiera...por ende las comparaciones que se hacen en el bucle poco o nada importan. Para que estas si importen...j debe tener el indice del array en donde se almacenan estos valores...que para el caso....es evidente que hay un segundo error alli...ya que j es comun para max y min en esta linea

Citar
float max=vector[j],min=vector[j];


teniendo un valor comun en dos variables distintas

Mas aun...j puede tomar un valor >long (Tamaño maximo del arreglo)...o menor a 0...asi que puede estar capturando en max o min quien sabe que valor que no se encuentra dentro del array.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Arrays
« Respuesta #9 en: Jueves 12 de Febrero de 2009, 16:07 »
0
Cita de: "betopin"
Por supuesto que j toma un valor en el bucle, pero antes no, cuando se define max y min
Sí, cierto, tienes toda la razón.

Se puede solucionar fácilmente:

Código: C
  1. float max=vector[0],min=vector[0];
  2.