Busca del número mayor y menor
De Ejercicios
Contenido |
Enunciado
Escribir un programa que pida por teclado una serie de números enteros, los almacene en una tabla estática y posteriormente escriba por pantalla todos los números introducidos indicando además cual es el mayor y el menor.
Análisis
Lo primero que debe hacer el programa es preguntar al usuario cuantos números se van a introducir y comprobar que dicha cantidad es menor que la dimensión de la tabla. Para dicha dimensión debe definirse una constante (por ejemplo MAX_DIMENSION) a la cual se puede asignar un valor razonable (por ejemplo, 100).
Funciones C a utilizar:
• scanf: para leer números introducidos por el teclado.
• printf: para imprimir por pantalla.
Ejemplo de ejecución: lo que se vería por pantalla debe ser algo así como
Introduce la cantidad de números: 3 Introduce los números: 5 7 2 Los números introducidos son: 5 7 2 El mayor es el 7. El menor es el 2.
Soluciones
Programa en C por Angel
/**********************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERR -10001 #define MAX_DIM 100 int enteros[MAX_DIM]; /* Array para guardar los enteros */ int num_total; int lectura(void); int sacarpantalla(int max, int min, int num_total); int calcular(int *max, int *min, int total); int es_digito(char caracter[]); int main() { int menor; /* Numero menor */ int mayor; /* Numero mayor */ if (lectura() == ERR) { printf("Error al leer el numero de terminos.\n"); return ERR; } if (calcular(&mayor, &menor, num_total) == ERR) { printf("Error al intentar calcular el mayor y el menor"); return ERR; } if (sacarpantalla(mayor, menor, num_total) == ERR) { printf("Error al mostrar por pantalla.\n"); return ERR; } return OK; } /********************************************************* * Funcion: int lectura(int *total) * * IN: Toma una variable tipo int. * OUT: Devuelve OK si se ha leido correctamente, ERR si hay algun fallo. * MAKE: Obtiene los numeros que introduce el usuario y los guarda * en un array de enteros **********************************************************/ int lectura(void) { int continuar = OK; int n; char numeros[MAX_DIM]; for (n = 0; n < (int) strlen(numeros); n++) numeros[n] = '0'; printf("\nCuantos numeros va a introducir? --> "); do { gets(numeros); continuar = OK; if ((num_total = es_digito(numeros)) == ERR) continuar = ERR; if (num_total <= 0) { printf("Debe introducir un numero positivo.\n"); continuar = ERR; } } while (continuar != OK); printf("\nIntroduzca los numeros: \n"); for (n = 0; n < num_total; n++) { gets(numeros); if ((enteros[n] = es_digito(numeros)) == ERR) { printf("Error al leer el numero, por favor repita introduccion.\n"); n--; } } return OK; } /********************************************************* * Funcion: int calcular(int *max, int *min, int num_total) * * IN: *max y *min que acumulan el numero mayor y menor. num_total * acumula la cantidad de numeros que se van a introducir. * OUT: OK si se ha realizado correctamente o ERR si hay fallos. * MAKE: Encuentra el minimo y el maximo de los numeros introducidos * **********************************************************/ int calcular(int *max, int *min, int total) { int n; *min = *max = enteros[0]; /* Lo inicializamos */ for (n = 1; n < total; n++) { if (*min > enteros[n]) *min = enteros[n]; if (*max < enteros[n]) *max = enteros[n]; } return OK; } /********************************************************* * Funcion: int sacarpantalla(int max, int min, int num_total) * * IN: toma el valor maximo,minimo y total de elementos * OUT: devuelde ERR si no puede y OK si puede * MAKE: Nada * **********************************************************/ int sacarpantalla(int max, int min, int num_total) { int n; printf("Los numeros introducidos son: "); for (n = 0; n < num_total; n++) printf("%d, ", enteros[n]); printf("\nMinimo: %d", min); printf("\nMaximo: %d\n", max); return OK; } /********************************************************* * Funcion: int es_digito(char caracter) * * IN: Se le da una serie de caracteres para que se pasen a numero * OUT: Nos devolvera ERR si se produce un eroor * MAKE: Comprueba la integridad de los datos * **********************************************************/ int es_digito(char caracter[]) { int i; int num = 0; int rango; /* Si la cadena esta vacia */ if (caracter[0] == 0) return ERR; if (caracter[0] == '-') /* Si se ha introducido un numero negativo */ { i = 1; /* Empezamos el bucle para ver si es caracter desde el siguiente caracter */ rango = 5; } else /* Debe ser un numero positivo o hay algun error */ { i = 0; rango = 4; } /* Comprobamos que todos los elementos sean digitos */ /* El mayor numero que permitimos es 9999 */ if ((int) strlen(caracter) > rango) { printf("No puede introducir esa cantidad de numeros!!!\n"); printf("Es demasiado grande. Introduzca numeros entre -9999 y 9999\n"); return ERR; } for (i = i; i < (int) strlen(caracter); i++) if (caracter[i] < '0' || caracter[i] > '9') { printf("\nIntroduzca unicamente digitos, por favor.\n"); return ERR; } /* Si solo se ha introducido un caracter */ if (strlen(caracter) == 1) return num = caracter[0] - '0'; /* Devolvemos el digito */ /* Si hay mas de un caracter */ for (i = 0; i != (int) strlen(caracter); i++) num = (num * 10) + (caracter[i] - '0'); return num; }
Programa en Matlab
%PROGRAMA BuscaMayorMenor %DESCRIPCION: Escribir un programa que pida por teclado una serie de números enteros, % los almacene en un array y posteriormente escriba por pantalla todos los números % introducidos indicando además cual es el mayor y el menor. %ENTRADAS: números enteros %SALIDAS: El vector, el valor máximo y el valor mínimo. %VARIABLES: % dim, max, min: ENTEROS % v:ARRAY(dim) DE ENTEROS % Leer los datos de entrada dim=input('Introduce la dimensión: '); v=zeros(1,dim); for pos=1:dim v(pos)=input('Introduce un número: '); end %Buscar máximo y mínimo max=v(1); min=v(1); for pos=2:dim if v(pos)>max max=v(pos); end if v(pos)<min min=v(pos); end end % Mostrar el vector disp('El vector es:'); for pos=1:dim disp(v(pos)); end % Mostrar máximo y mínimo disp('El máximo es:'); disp(max); disp('El mínimo es:'); disp(min);