Lab. Programación Guión 7 - nº 7
Realizar un programa que lea de teclado 15 claves enteras y las almacene en un vector. Una clave será un número entero.
El programa, al realizar la lectura de las claves deberá garantizar:
- que todas ellas se encuentran en el rango 1000 a 7000.
- que el usuario no teclea claves repetidas.
En caso contrario, se solicitaría de nuevo el tecleo de la clave. No es necesario volver a solicitar todas las claves introducidas hasta ese momento, sino sólo la última recibida que no supera las validaciones.
Posteriormente deberá mostrar ordenadas las claves introducidas, pero sin modificar el vector de claves. Para ello, se deberá utilizar un vector de punteros que apunten a cada una de las claves.
Ayuda.
La forma de rellenar el vector de punteros es comprobar de una en una, comenzando por la clave 1000 y hasta la 7000, si la clave se encuentra en el vector de claves, y si así fuera, obtenemos la dirección del elemento del vector de claves y la incluimos en el primer puntero libre del vector de punteros. Esto nos obliga a llevar un segundo índice sobre el vector de punteros que nos vaya determinando el siguiente puntero libre.
Finalmente, recorreremos el vector de punteros y presentaremos el elemento al que apunta cada uno de ellos. Así, las claves aparecerán en pantalla en orden.
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 70 71 72 73 74 75 76 77 78 79 80 | //Ejercicio propuesto: guión 7 nº7 //Abilio Almeida Eiroa #include <stdio.h> #define DIMAX 15 #define LINUX 1 #define WINDOWS 0 #define EQUIPO LINUX //---------------->>> Cambiar por tu plataforma!!! #if (EQUIPO == LINUX) #include <stdlib.h> #define BORRA_PANTALLA system("clear") #define PARAR printf("\nPresiona una tecla para continuar...");fflush(stdin);getchar() #elif (EQUIPO == WINDOWS) #include <stdlib.h> #define PARAR system("pause") #define BORRA_PANTALLA system("cls") #endif int main() { int i, b, vector[DIMAX]; int *punt[DIMAX]; //Lleno el vector de 0: for (i=0; i<DIMAX; i++) { vector[i] = 0; } //Pido valores para el vector: printf("LLena el Vector:\n"); for (i=0; i<DIMAX; i++) { printf("Vector[%d]: ", i+1); scanf("%d", &vector[i]); if (vector[i] < 1000 || vector[i] > 7000) { printf("Debe estar entre 1000 y 7000\n"); i--; continue; } for (b=0; b<DIMAX; b++) { if (i == b) continue; if (vector[i] == vector[b]) { printf("La clave %d ya está introducida, por favor introduce otra\n", vector[i]); i--; break; } } } //Llenar el vector de punteros: int a=0; for (i=1000; i<=7000; i++) { for (b=0; b<DIMAX; b++) { if (i == vector[b]) { punt[a] = &vector[b]; a++; break; } } } //Mostrar el vector original: printf("\n\n"); printf("Este es el vector origunal:\n"); printf("===========================\n"); for (i=0; i<DIMAX; i++) { printf("%d ", vector[i]); } //Mostrar el vector ordenado: printf("\n\n"); printf("Y este es el vector ordenado utilizando punteros:\n"); printf("=================================================\n"); for (i=0; i<DIMAX; i++) { printf("%d ", *punt[i]); } PARAR; return 0; } |





Comentarios recientes