diff --git a/docs/code/Ejemplos/TAD_Rational/CMakeLists.txt b/docs/code/Ejemplos/TAD_Rational/CMakeLists.txt new file mode 100644 index 0000000..f3e7cbe --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/CMakeLists.txt @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +cmake_minimum_required(VERSION 3.27) +project(TAD_Rational) + +set(CMAKE_C_STANDARD 99) + +add_executable(Rational_struct main.c + rational_struct.c + rational_struct.h) +add_executable(Rational_pointer main.c + rational_pointer.c + rational_pointer.h) \ No newline at end of file diff --git a/docs/code/Ejemplos/TAD_Rational/main.c b/docs/code/Ejemplos/TAD_Rational/main.c new file mode 100644 index 0000000..c109040 --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/main.c @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include + +//#include "rational_struct.h" +//#include "rational_pointer.h" + +int main() { + Rational r1, r2, r3, r4, s; + + r1 = createRational(2, 3); + r2 = createRational(5, 7); + + r3 = createRational(7, 3); + r4 = createRational(5, 4); + + s = sum(r1, r2); + printf("The sum is %d/ %d\n", numerator(s), denominator(s)); + s = sum(r3, r4); + printf("The sum is %d/ %d\n", numerator(s), denominator(s)); +} \ No newline at end of file diff --git a/docs/code/Ejemplos/TAD_Rational/rational_pointer.c b/docs/code/Ejemplos/TAD_Rational/rational_pointer.c new file mode 100644 index 0000000..08dc007 --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_pointer.c @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include +#include "rational_pointer.h" + +// Operación para crear un racional +Rational createRational(int n, int d) { + Rational temp; + + temp = malloc(sizeof(*temp)); + temp->num = n; + temp->den = d; + return temp; +} + +// Operación que retorna el numerador de un racional +int numerator(Rational r) { + return r->num; +} + +// Operación que retorna el denominador de un racional +int denominator(Rational r) { + return r->den; +} + +// Operación que retorna la suma de dos racionales +Rational sum(Rational r1, Rational r2) { + Rational s; + + s = malloc(sizeof(*s)); + s->num = r1->num * r2->den + r2->num * r1->den; + s->den = r1->den * r2->den; + return s; +} \ No newline at end of file diff --git a/docs/code/Ejemplos/TAD_Rational/rational_pointer.h b/docs/code/Ejemplos/TAD_Rational/rational_pointer.h new file mode 100644 index 0000000..d06a596 --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_pointer.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#ifndef TAD_Rational_RATIONAL_POINTER_H +#define TAD_Rational_RATIONAL_POINTER_H + +typedef struct Data *Rational; +struct Data { + int num; + int den; +}; + +Rational createRational(int n, int d); + +int numerator(Rational r); + +int denominator(Rational r); + +Rational sum(Rational r1, Rational r2); + +#endif // TAD_Rational_RATIONAL_POINTER_H diff --git a/docs/code/Ejemplos/TAD_Rational/rational_struct.c b/docs/code/Ejemplos/TAD_Rational/rational_struct.c new file mode 100644 index 0000000..315486d --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_struct.c @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include "rational_struct.h" + +// Operación para crear un racional +Rational createRational(int n, int d) { + Rational temp; + temp.num = n; + temp.den = d; + return temp; +} + +// Operación que retorna el numerador de un racional +int numerator(Rational r) { + return r.num; +} + +// Operación que retorna el denominador de un racional +int denominator(Rational r) { + return r.den; +} + +// Operación que retorna la suma de dos racionales +Rational sum(Rational r1, Rational r2) { + Rational s; + + s.num = r1.num * r2.den + r2.num * r1.den; + s.den = r1.den * r2.den; + return s; +} \ No newline at end of file diff --git a/docs/code/Ejemplos/TAD_Rational/rational_struct.h b/docs/code/Ejemplos/TAD_Rational/rational_struct.h new file mode 100644 index 0000000..c66bee8 --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_struct.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#ifndef TAD_Rational_RATIONAL_STRUCT_H +#define TAD_Rational_RATIONAL_STRUCT_H + +typedef struct Data Rational; +struct Data { + int num; + int den; +}; + +Rational createRational(int n, int d); + +int numerator(Rational r); + +int denominator(Rational r); + +Rational sum(Rational r1, Rational r2); + +#endif // TAD_Rational_RATIONAL_STRUCT_H diff --git a/docs/topics/Tema-1.md b/docs/topics/Tema-1.md index 7a9a4af..cdc627b 100644 --- a/docs/topics/Tema-1.md +++ b/docs/topics/Tema-1.md @@ -132,11 +132,72 @@ Podemos clasificarlas en: - Observadoras / Acceso: No devuelve un TAD - Destructoras: Devuelven el TAD -## Ejemplo de especificación de un TAD +## Ejemplo de especificación de un TAD: Rational - +Vamos a crear un TAD para los números racionales, es decir, un par de números enteros: Numerador y denominador -¡En construcción! Colabora +```tex +\frac{Numerador}{Denominador} +``` + +**Constructoras Generadoras** + +- ```tex + CreateRational (Entero_{1}, Entero_{2}) \rightarrow Rational + ``` + + Objetivo: Crea un número racional. + + Entrada: Numerador del nuevo racional y denominador del nuevo racional. + + Precondición: Denominador distinto de 0. + + Salida: El número racional creado. + +**Constructoras Modificadoras** + +- ```tex + Sum (Rational_{1}, Rational_{2}) \rightarrow Rational_{3} + ``` + + Objetivo: Calcula la suma de dos números racionales. + + Entrada: Números racionales a sumar. + + Salida: Un nuevo racional suma de los números a la entrada. + +**Observadoras** + +- ```tex + Numerator (Rational) \rightarrow Entero + ``` + + Objetivo: Obtiene el numerador de un número racional. + + Entrada: Número racional del que obtener el numerador. + + Salida: Numerador del número a la entrada. + +- ```tex + Denominator (Rational) \rightarrow Entero + ``` + + Objetivo: Obtiene el denominador de un número racional. + + Entrada: Número racional del que obtener el denominador. + + Salida: Denominador del número a la entrada. + +### Rational TAD: El código + + + + + + + + + diff --git a/src/Ejemplos/CMakeLists.txt b/src/Ejemplos/CMakeLists.txt index 6b82e76..d9e88f5 100644 --- a/src/Ejemplos/CMakeLists.txt +++ b/src/Ejemplos/CMakeLists.txt @@ -7,4 +7,5 @@ project(Ejemplos C) set(CMAKE_C_STANDARD 99) -#add_executable(Ejemplo-01 Ejemplo-01.c) \ No newline at end of file +#add_executable(Ejemplo-01 Ejemplo-01.c) +add_subdirectory(./TAD_Rational) \ No newline at end of file diff --git a/src/Ejemplos/TAD_Rational/CMakeLists.txt b/src/Ejemplos/TAD_Rational/CMakeLists.txt new file mode 100644 index 0000000..f3e7cbe --- /dev/null +++ b/src/Ejemplos/TAD_Rational/CMakeLists.txt @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +cmake_minimum_required(VERSION 3.27) +project(TAD_Rational) + +set(CMAKE_C_STANDARD 99) + +add_executable(Rational_struct main.c + rational_struct.c + rational_struct.h) +add_executable(Rational_pointer main.c + rational_pointer.c + rational_pointer.h) \ No newline at end of file diff --git a/src/Ejemplos/TAD_Rational/main.c b/src/Ejemplos/TAD_Rational/main.c new file mode 100644 index 0000000..c109040 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/main.c @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include + +//#include "rational_struct.h" +//#include "rational_pointer.h" + +int main() { + Rational r1, r2, r3, r4, s; + + r1 = createRational(2, 3); + r2 = createRational(5, 7); + + r3 = createRational(7, 3); + r4 = createRational(5, 4); + + s = sum(r1, r2); + printf("The sum is %d/ %d\n", numerator(s), denominator(s)); + s = sum(r3, r4); + printf("The sum is %d/ %d\n", numerator(s), denominator(s)); +} \ No newline at end of file diff --git a/src/Ejemplos/TAD_Rational/rational_pointer.c b/src/Ejemplos/TAD_Rational/rational_pointer.c new file mode 100644 index 0000000..08dc007 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_pointer.c @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include +#include "rational_pointer.h" + +// Operación para crear un racional +Rational createRational(int n, int d) { + Rational temp; + + temp = malloc(sizeof(*temp)); + temp->num = n; + temp->den = d; + return temp; +} + +// Operación que retorna el numerador de un racional +int numerator(Rational r) { + return r->num; +} + +// Operación que retorna el denominador de un racional +int denominator(Rational r) { + return r->den; +} + +// Operación que retorna la suma de dos racionales +Rational sum(Rational r1, Rational r2) { + Rational s; + + s = malloc(sizeof(*s)); + s->num = r1->num * r2->den + r2->num * r1->den; + s->den = r1->den * r2->den; + return s; +} \ No newline at end of file diff --git a/src/Ejemplos/TAD_Rational/rational_pointer.h b/src/Ejemplos/TAD_Rational/rational_pointer.h new file mode 100644 index 0000000..d06a596 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_pointer.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#ifndef TAD_Rational_RATIONAL_POINTER_H +#define TAD_Rational_RATIONAL_POINTER_H + +typedef struct Data *Rational; +struct Data { + int num; + int den; +}; + +Rational createRational(int n, int d); + +int numerator(Rational r); + +int denominator(Rational r); + +Rational sum(Rational r1, Rational r2); + +#endif // TAD_Rational_RATIONAL_POINTER_H diff --git a/src/Ejemplos/TAD_Rational/rational_struct.c b/src/Ejemplos/TAD_Rational/rational_struct.c new file mode 100644 index 0000000..315486d --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_struct.c @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#include "rational_struct.h" + +// Operación para crear un racional +Rational createRational(int n, int d) { + Rational temp; + temp.num = n; + temp.den = d; + return temp; +} + +// Operación que retorna el numerador de un racional +int numerator(Rational r) { + return r.num; +} + +// Operación que retorna el denominador de un racional +int denominator(Rational r) { + return r.den; +} + +// Operación que retorna la suma de dos racionales +Rational sum(Rational r1, Rational r2) { + Rational s; + + s.num = r1.num * r2.den + r2.num * r1.den; + s.den = r1.den * r2.den; + return s; +} \ No newline at end of file diff --git a/src/Ejemplos/TAD_Rational/rational_struct.h b/src/Ejemplos/TAD_Rational/rational_struct.h new file mode 100644 index 0000000..c66bee8 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_struct.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña + +#ifndef TAD_Rational_RATIONAL_STRUCT_H +#define TAD_Rational_RATIONAL_STRUCT_H + +typedef struct Data Rational; +struct Data { + int num; + int den; +}; + +Rational createRational(int n, int d); + +int numerator(Rational r); + +int denominator(Rational r); + +Rational sum(Rational r1, Rational r2); + +#endif // TAD_Rational_RATIONAL_STRUCT_H