Arreglos, cadenas de caracteres y Entrada / Salida Escriba una

Anuncio
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;
}
Descargar