From baa1978fab8ef47a918d837f9bd14286aae72918 Mon Sep 17 00:00:00 2001 From: Franz Fernandez Cobarrubia Date: Fri, 19 Jan 2024 19:50:05 +0100 Subject: [PATCH] =?UTF-8?q?Reto=20#28=20-=20c=20##=20Describe=20tus=20camb?= =?UTF-8?q?ios=20***(Opcional)***=20*Sobre=20todo=20aconsejable=20si=20la?= =?UTF-8?q?=20"Pull=20Request"=20se=20corresponde=20con=20una=20correcci?= =?UTF-8?q?=C3=B3n=20adicional=20y=20no=20con=20la=20presentaci=C3=B3n=20d?= =?UTF-8?q?e=20un=20ejercicio.*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). ## Describe tus cambios ***(Opcional)*** *Sobre todo aconsejable si la "Pull Request" se corresponde con una corrección adicional y no con la presentación de un ejercicio.* ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "Reto #[número] - [lenguaje_utilizado]". *(Ej: Reto #0 - Kotlin")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.kt)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: Reto #0/kotlin/mouredev.kt)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluído los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). --- .../c/FranzxFernandez.c" | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 "Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c/FranzxFernandez.c" diff --git "a/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c/FranzxFernandez.c" "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c/FranzxFernandez.c" new file mode 100644 index 0000000000..61fa9a6140 --- /dev/null +++ "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c/FranzxFernandez.c" @@ -0,0 +1,105 @@ +/* + * Crea una función que reciba una expresión matemática (String) + * y compruebe si es correcta. Retornará true o false. + * - Para que una expresión matemática sea correcta debe poseer + * un número, una operación y otro número separados por espacios. + * Tantos números y operaciones como queramos. + * - Números positivos, negativos, enteros o decimales. + * - Operaciones soportadas: + - * / % + * + * Ejemplos: + * "5 + 6 / 7 - 4" -> true + * "5 a 6" -> false + */ + +#include +#include +#include +#include +#include + +static bool isValid(const char *expression); + +int main(int argc, char const *argv[]) +{ + // Test case 1 + const char *temp = "5 + 4 / 7 - 4"; + printf("It is the expression valid? -> %d\n", isValid(temp)); + + // Test case 2 + const char *temp_1 = "5 a 6"; + printf("It is the expression valid? -> %d\n", isValid(temp_1)); + + // Test case 3 + const char *temp_2 = "5 + 4 / 7 - 4 + 3 * 6 / 9"; + printf("It is the expression valid? -> %d\n", isValid(temp_2)); + + // Test case 4 + const char *temp_3 = "5 + 4 / 7 . 4 + 3 * 6 / 9"; + printf("It is the expression valid? -> %d\n", isValid(temp_3)); + + return 0; +} +static bool isValid(const char *expression) +{ + char op[] = "+-*/%"; + + for (int i = 0; expression[i] != '\0'; i++) // recorriendo el string + { + if (isalpha(expression[i]) != 0) // Si contiene alguna letra del alfabeto + { + return false; + } + } + int n = strlen(expression); + char *short_expression = (char *)malloc((n + 1) * sizeof(char)); // (n + 1) * 1B + + if (short_expression == NULL) + { + printf("Memory allocation failed!\n"); + exit(1); + } + int count = 0; + for (int j = 0; expression[j] != '\0'; j++) + { + if (expression[j] == ' ') + { + continue; + } + else + { + short_expression[count++] = expression[j]; // copiando la expresion sin espcios. + } + } + short_expression[count] = '\0'; + + //printf("%s\n", short_expression); + + // printf("%c\n", short_expression[0]); + bool isaNumber = false; + for (int z = 0; short_expression[z] != '\0'; z++) + { + if (z % 2 == 0) // pares + { + if (!isdigit(short_expression[z])) // Si en la posicion par no hay numeros... + { + return false; + } + } + else // Si son impares deberian ser solo los 4 operadores + { + if (short_expression[z] == op[0] || short_expression[z] == op[1] || short_expression[z] == op[2] || short_expression[z] == op[3] || short_expression[z] == op[4]) + { + isaNumber = true; + } + else + { + isaNumber = false; + return false; + } + } + } + + free(short_expression); + return true; +} \ No newline at end of file