1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
/* 5x04-El_vector_esta_ordenado_o_no_con_recursividad 18/01/2012 Escribe un programa recursivo que determine si un vector de enteros está ordenado de menor a mayor o no. */ #include <stdio.h> #include <stdlib.h> int ordenadoONo( int *numeros, int tam, int pos ) { /* Precondición: Se ha de recibir el puntero de un vector de enteros de tamaño "tam" Tambien otro parámetro de tipo entero que indica el tamaño del vector. Y otro entero que indica la posición hasta la que se ha leído en el vector. Poscondición: Se devuelve true si numeros[pos] es menor que numeros[pos+1], false en caso contrario. */ int respuesta = 1; if( pos < tam ) { if( numeros[pos] <= numeros[pos+1] ) return ordenadoONo(numeros, tam, pos+1); else { printf( "\n El numero %i no es menor que %i", numeros[pos], numeros[pos+1] ); return 0; }; } else return respuesta; }; main() { int *numeros = NULL; int tam, i; printf( "Indique el numero de enteros a introducir: " ); scanf( "%i", &tam ); numeros = malloc(sizeof(int)*tam); printf( " Introduzca los números enteros:\n" ); for( i=0; i < tam; i++ ) { printf( " %i: ", i+1 ); scanf( "%i", &numeros[i] ); }; if( ordenadoONo( numeros, tam-1, 0) ) printf( "\n Los números estaban ordenados\n" ); else printf( "\n Los números no siguen un orden\n" ); }; |
Muchas gracias me sirvio mucho logre implementar a mi programa aunque me gustaria entender mejor lo del metodo ordenadoONo lo del pos y pos+1 me cuesta entender gracias de nuevo
Hola,
Te recomiendo que lo debugees para que veas paso a paso lo que hace.
Es un ejercicio de recursividad, el cometido de la función es comprobar si el componente indicado del array es meyor al componente siguiente del array, si lo es entonces se llama así mismo de nuevo pero incrementando el componente a leer, así hasta leer todos… Si se termina correctamente con todos los números ordenados se devuelve 1, por el contrario si algún número está desordenado la condición no se cumplirá y se devolverá 0 tomando la ejecución.
Saludos