Programación General > C/C++

 Problema funciones en C (arrays)

(1/2) > >>

ferthedems:
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 --- #include <stdio.h>#define N 10 void scanvector(int *vec);int ordenados(int vec[N]); void main(){    int a[N];     scanvector(&a);     if(ordenados(a)==1)    printf("El valor para este vector es %d", ordenados(a));  } void scanvector(int *vec){    int contador;    for(contador=0; contador<N; contador++)    {        printf("Introduce el valor %d/N del vector: ", contador);        scanf("%d", &vec[contador]);    }} int ordenados(int vec[N]){    int i, contador=0;     for(i=0; i<N; i++)        if(vec[i]<=vec[i])        contador++;     if(contador==N)    return 1; //Están ordenados sus elementos    else if(contador!=N)    return 0;}   
A ver si podéis hecharme una mano y decirme que pasa ahí  :(

¡Saludos y gracias!

Epa:
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++ --- int ordenados(int vec[N]){    int i, contador=0;     for(i=0; i<(N - 1); i++)        if(vec[i]<=vec[i+1])        contador++;     if(contador== (N -1))      return 1; //Están ordenados sus elementos    return 0;}  
Saludos

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 ---     for(i=0; i<(N - 1); i++)        if(vec[i]<=vec[i+1])        contador++;   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 ---     for(i=0; i<(N - 1); i++)       if (i=(N-1)){           if(vec[i]<=vec[i])                contador ++;       } else {        if(vec[i]<=vec[i+1])        contador++;        }  

nos dices que tal te fue

!saludos!

Epa:

--- 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 ---     for(i=0; i<(N - 1); i++)        if(vec[i]<=vec[i+1])        contador++;  
 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.

--- Fin de la cita ---

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++;
        }

--- Fin de la cita ---

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

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!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa