Nota: 100 Universidad de Costa Rica | Facultad de Ingeniería Escuela de Ingeniería Eléctrica | Programación Bajo Plataformas Abiertas Erick Carvajal Barboza | B01395 Módulo 3: C | Laboratorio 14 Arreglos, cadenas de caracteres y Entrada / Salida Escriba una función que tome como argumento una cadena de caracteres, verifique que los caracteres de la cadena correspondan a un número de punto flotante válido y realice la conversión, retornando el valor resultante. Si la validación de la cadena falla, debe retornarse el valor -999999 (o cualquier otro valor que permita identificar una condición de error). Escriba además un pequeño programa que permita probar el funcionamiento de la función. La función debe ser capaz de identificar números de punto flotante escritos de distintas manejas (por ejemplo, -100, 42, 0.23, -.2345 y .20 son todos números de punto flotante válidos). Para implementar este programa se usó el siguiente código: # include <stdio.h> # include <stdlib.h> # include <string.h> # include <ctype.h> //Este funcion determina si la cadena es o no un numero de punto flotante float chartofloat(char *cadena){ int i, cantidadpuntos = 0; float numero; //Se recorre todo el arreglo for (i=0; i<(strlen(cadena)); i++){ //Si hay un signo en una posicion distinta a la primera se genera un error if (i != 0 && cadena[i] == '-'){ return -999999; } //Por cada punto ingresado se genera aumenta el contador if (cadena[i] == '.'){ cantidadpuntos++; } //Si hay mas de un punto se genera un error if (cantidadpuntos > 1){ return -999999; } //Si la cadena no es digito y no es . no -, se genera un error if(!(isdigit(cadena[i]))){ if(cadena[i] != '.' && cadena[i] != '-'){ return -999999; } } } //Se convierte el char a float numero = strtof(cadena, NULL); return numero; } int main(){ float numero; char cadena[1000]; //Se solicita que se ingrese la cadena printf("Ingrese una cadena: "); scanf("%[^\n]", cadena); numero = chartofloat(cadena); printf("%f\n", numero); return 0; } Escriba un programa que reciba, a través de la línea de comandos, el nombre de un archivo que contenga números enteros (uno por línea, máximo 100) en desorden, copie los números a un arreglo, ordene el arreglo de manera ascendente e imprima la lista de números ordenados en la terminal. Este programa se implementó de la siguiente forma # include <stdio.h> # include <stdlib.h> # include <string.h> # include <ctype.h> int main(int argc, char*argv[]){ char cadena[100]; int lista[100]; int i = 0, j, k, l, temporal; //Error de no dar el nombre del archo if (argc != 2){ printf("ERROR 01: Cantidad de argumentos incorrecta"); exit(1); } //Se abre el archivo FILE *archivo; archivo = fopen(argv[1], "r"); //Error el archivo no existe if(archivo == NULL) { printf("Error al abrir el archivo, archivo no valido\n"); exit(1); } //Se recorre el archivo y se guarda en la lista, se cierra el archivo while ( fscanf(archivo, "%[^\n]", cadena) != EOF){ fgetc(archivo); lista[i] = atol(cadena); i++; } fclose(archivo); //Se ordena for(j = 0; j <= i; j++){ for (k = 0; k < i; k++){ if (lista[k] > lista[k+1]){ temporal = lista[k]; lista[k] = lista[k+1]; lista[k+1] = temporal; } } } //Se imprime printf("Los números ordenados son:\n"); for (l = 0; l < i; l++){ printf("%d\n", lista[l]); } return 0; }