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; } |
Laboratorio Programación, Sin categoría
Imprime esta entrada
Compártelo
Creo que no hace falta esto:
#define LINUX 1
#define WINDOWS 0
lo podes cambiar por esto
#ifdef _MSC_VER para msvc
#ifdef __GNUC__ para gcc
No sé muy bien como funciona lo que pones, pero tal como lo entiendo no valdría, me explico:
¿si yo compilo para Windows con gcc, con por ejemplo Dev-cpp++?
Si quiero parar la ejecución de un programa con la función system() para Windows no es igual que para GNU/Linux…
Y lo mismo con borrar la pantalla mediante la función system()…
El caso es que (no habiéndolo visto nunca) lo interpreto como que uno detecta la plataforma para Windows de Visual C++ y el otro para el gcc (pero este puede funcionar sobre Windows) –> el ejemplo que te ponía al princio…
Pero como digo nunca antes había visto lo que expones, por lo tanto puedo estar confundido en la interpretación, corrígeme si es así.
Saludos!
Entonces queda asi
#ifdef WIN32
#ifdef linux
Y así te detecta automáticamente el OS?
Pues mira que bien, esto no lo sabía…
Tengo una par de preguntas:
¿Funciona con todos los compiladores?, ¿Es estándar?
Y ya por último, ¿conoces algún manual colgado por algún sitio donde se explique todas estás sentencias?
Gracias por el aporte! Saludos!
Creo que esas constantes estan definidas en el compilador o en las cabeceras. No creo que sea un estandar. Manuales ninguno, todo depende del compilador.