• Lunes 29 de Abril de 2024, 21:56

Autor Tema:  Problema funciones en C (arrays)  (Leído 2047 veces)

ferthedems

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Problema funciones en C (arrays)
« en: Jueves 16 de Diciembre de 2010, 00:05 »
0
Buenas!

Necesito elaborar un programa con dos funciones, una que capte los parámetros de un vector y otra que devuelva 1 si están ordenados ascendentemente y cero en caso contrario.

He elaborado esta; pero no funciona...!

Código: C
  1.  
  2. #include <stdio.h>
  3. #define N 10
  4.  
  5. void scanvector(int *vec);
  6. int ordenados(int vec[N]);
  7.  
  8. void main()
  9. {
  10.     int a[N];
  11.  
  12.     scanvector(&a);
  13.  
  14.     if(ordenados(a)==1)
  15.     printf("El valor para este vector es %d", ordenados(a));
  16.  
  17.  
  18. }
  19.  
  20. void scanvector(int *vec)
  21. {
  22.     int contador;
  23.     for(contador=0; contador<N; contador++)
  24.     {
  25.         printf("Introduce el valor %d/N del vector: ", contador);
  26.         scanf("%d", &vec[contador]);
  27.     }
  28. }
  29.  
  30. int ordenados(int vec[N])
  31. {
  32.     int i, contador=0;
  33.  
  34.     for(i=0; i<N; i++)
  35.         if(vec[i]<=vec[i])
  36.         contador++;
  37.  
  38.     if(contador==N)
  39.     return 1; //Están ordenados sus elementos
  40.     else if(contador!=N)
  41.     return 0;
  42. }
  43.  
  44.  
  45.  

A ver si podéis hecharme una mano y decirme que pasa ahí  :(

¡Saludos y gracias!

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema funciones en C (arrays)
« Respuesta #1 en: Jueves 16 de Diciembre de 2010, 02:19 »
0
Buenas.

Para empezar, la funcion scanvector recibe un puntero a un entero.
al definir int a[N];
a ya es un puntero, por lo que en scanvector(&a); le estas pasando un puntero a un puntero a int, no un puntero a int.
tendrias que haer scanvector(a);

La verdad que el algoritmo que usas para comprobar es algo raro, pero tiene un par de errores.

Aca te lo dejo, comparalo con el que tenes

Código: C++
  1.  
  2. int ordenados(int vec[N])
  3. {
  4.     int i, contador=0;
  5.  
  6.     for(i=0; i<(N - 1); i++)
  7.         if(vec[i]<=vec[i+1])
  8.         contador++;
  9.  
  10.     if(contador== (N -1))
  11.       return 1; //Están ordenados sus elementos
  12.     return 0;
  13. }
  14.  
  15.  

Saludos
The sweet smell of a great sorrow lies over the land.


morfus_bedxhed

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema funciones en C (arrays)
« Respuesta #2 en: Jueves 16 de Diciembre de 2010, 21:43 »
0
checando el código veo que puede producir un pequeño error, cuando i llega a su última posición ( i=9), al hacer la compración

Código: C
  1.  
  2.     for(i=0; i<(N - 1); i++)
  3.         if(vec[i]<=vec[i+1])
  4.         contador++;
  5.  
  6.  
lo que se estaría haciendo en ese punto sería vec[9]<=vec[10] y vec[10] no fue llenado y no sabemos a donde apunta y que dato tendrá en memoria por lo cual podríamos filtrar esa última comparación.

Código: C
  1.  
  2.     for(i=0; i<(N - 1); i++)
  3.        if (i=(N-1)){
  4.            if(vec[i]<=vec[i])
  5.                contador ++;
  6.        } else {
  7.         if(vec[i]<=vec[i+1])
  8.         contador++;
  9.         }
  10.  
  11.  


nos dices que tal te fue

!saludos!

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema funciones en C (arrays)
« Respuesta #3 en: Viernes 17 de Diciembre de 2010, 04:58 »
0
Cita de: "morfus_bedxhed"
checando el código veo que puede producir un pequeño error, cuando i llega a su última posición ( i=9), al hacer la compración

Código: C
  1.  
  2.     for(i=0; i<(N - 1); i++)
  3.         if(vec[i]<=vec[i+1])
  4.         contador++;
  5.  
  6.  

 lo que se estaría haciendo en ese punto sería vec[9]<=vec[10] y vec[10] no fue llenado y no sabemos a donde apunta y que dato tendrá en memoria por lo cual podríamos filtrar esa última comparación.

N = 10
N -1 = 9
cuando i toma el valor 9 el ciclo no se ejecuta ya que la condicion es < y no <=
O sea, i nunca llega a tomar el valor 9 dentro del ciclo.

Cita de: "morfus_bedxhed"
    for(i=0; i<(N - 1); i++)
       if (i=(N-1)){
           if(vec<=vec)
               contador ++;
       } else {
        if(vec<=vec[i+1])
        contador++;
        }

Hay un error logico en ese codigo, al evaluarse el if, i toma el valor 9, en el segundo if vec es siempre igual a ves, por lo que es siempre veradero, entonces se incrementa el contador y se sale del for, ya que i vale 9.

Saludos
The sweet smell of a great sorrow lies over the land.


morfus_bedxhed

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema funciones en C (arrays)
« Respuesta #4 en: Sábado 18 de Diciembre de 2010, 06:31 »
0
Tienes mucha razón en tus observaciones Epa, lo cual pido disculpas por eso y apartir d ehoy le pondré mas atención al código de los demás compañeros

!Saludos!

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema funciones en C (arrays)
« Respuesta #5 en: Sábado 18 de Diciembre de 2010, 11:28 »
0
Cita de: "morfus_bedxhed"
Tienes mucha razón en tus observaciones Epa, lo cual pido disculpas por eso y apartir d ehoy le pondré mas atención al código de los demás compañeros

!Saludos!

No pasa nada, aca todos estamos para eprender y cometemos algunos errores  :good:

Saludos :beer:
The sweet smell of a great sorrow lies over the land.