diff --git a/.all-contributorsrc b/.all-contributorsrc index b9387d6..7d08577 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -10,7 +10,7 @@ "contributors": [ { "login": "TeenBiscuits", - "name": "Pablo Portas", + "name": "Pablo Portas López", "avatar_url": "https://avatars.githubusercontent.com/u/81629707?v=4", "profile": "https://github.com/TeenBiscuits", "contributions": [ @@ -54,6 +54,15 @@ "contributions": [ "content" ] + }, + { + "login": "Sprinter05", + "name": "Sprinter", + "avatar_url": "https://avatars.githubusercontent.com/u/69991979?v=4", + "profile": "https://sprinter05.github.io/", + "contributions": [ + "code" + ] } ] } diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index f3841e6..f0ae1b2 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + github: [TeenBiscuits] ko_fi: pablopl custom: [paypal.me/pabloportaslopez] diff --git a/.github/ISSUE_TEMPLATE/informe-de-error-bug.yml b/.github/ISSUE_TEMPLATE/informe-de-error-bug.yml index 35b2ffe..c13e65f 100644 --- a/.github/ISSUE_TEMPLATE/informe-de-error-bug.yml +++ b/.github/ISSUE_TEMPLATE/informe-de-error-bug.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + name: "🐛 Informe de error/bug" description: "Crea un informe para ayudarnos a mejorar" title: "[BUG] " diff --git a/.github/ISSUE_TEMPLATE/solicitud-de-funcion.yml b/.github/ISSUE_TEMPLATE/solicitud-de-funcion.yml index 7adf932..21b0769 100644 --- a/.github/ISSUE_TEMPLATE/solicitud-de-funcion.yml +++ b/.github/ISSUE_TEMPLATE/solicitud-de-funcion.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + name: "💡 Solicitud de función" description: "Sugiere una idea para este proyecto." title: '[SOLICITUD DE FUNCIÓN] ' diff --git a/.github/dependabot.yml b/.github/dependabot.yml index abbd2bb..af33447 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + version: 2 updates: - package-ecosystem: "github-actions" # See documentation for possible values diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 95a18f4..ad6c4cf 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,4 +8,4 @@ ## ¿Qué he añadido? -- Lista de lo que he añadido \ No newline at end of file +- Lista de lo que he añadido diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 75a4808..612c69e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,7 +1,12 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + name: Construir documentación on: push: + paths: ["docs/**"] branches: ["main"] permissions: @@ -9,11 +14,15 @@ permissions: pages: write env: - INSTANCE: docs/pro - ARTIFACT: webHelpPRO2-all.zip - # Writerside docker image version - DOCKER_VERSION: 233.14389 - ALGOLIA_ARTIFACT: algolia-indexes-PRO.zip + INSTANCE: 'docs/pro' + ARTIFACT: 'webHelpPRO2-all.zip' + DOCKER_VERSION: '233.14389' + ALGOLIA_ARTIFACT: 'algolia-indexes-PRO.zip' + ALGOLIA_APP_NAME: '0K3UBN277V' + ALGOLIA_INDEX_NAME: 'pro2324' + ALGOLIA_KEY: '${{ secrets.ALGOLIA_KEY }}' + CONFIG_JSON_PRODUCT: 'PRO' + CONFIG_JSON_VERSION: '2023-2024' jobs: construir: @@ -30,55 +39,17 @@ jobs: artifact: ${{ env.ARTIFACT }} docker-version: ${{ env.DOCKER_VERSION }} - - name: Subir artefacto + - name: Subir artefacto con los resultados de la construcción uses: actions/upload-artifact@v4 with: name: docs path: | artifacts/${{ env.ARTIFACT }} artifacts/report.json + artifacts/${{ env.ALGOLIA_ARTIFACT }} retention-days: 7 - - name: Subir algolia-indexes - uses: actions/upload-artifact@v3 - with: - name: algolia-indexes - path: artifacts/${{ env.ALGOLIA_ARTIFACT }} - retention-days: 7 - - publicar-indexes: - env: - ALGOLIA_APP_NAME: 0K3UBN277V - ALGOLIA_INDEX_NAME: pro2324 - ALGOLIA_KEY: ${{ secrets.ALGOLIA_KEY }} - ALGOLIA_ARTIFACT: algolia-indexes-PRO.zip - CONFIG_JSON_PRODUCT: PRO - CONFIG_JSON_VERSION: 2023-2024 - # Requires the build-job results - needs: construir - runs-on: ubuntu-latest - container: - image: registry.jetbrains.team/p/writerside/builder/algolia-publisher:2.0.32-2 - - steps: - - name: Descargar artefacto - uses: actions/download-artifact@v3 - with: - name: algolia-indexes - - name: Unzip artefacto - run: | - unzip -O UTF-8 -qq ${{ env.ALGOLIA_ARTIFACT }} -d algolia-indexes - env "algolia-key=${{env.ALGOLIA_KEY}}" java -jar /opt/builder/help-publication-agent.jar \ - update-index \ - --application-name ${{env.ALGOLIA_APP_NAME}} \ - --index-name ${{env.ALGOLIA_INDEX_NAME}} \ - --product ${{env.CONFIG_JSON_PRODUCT}} \ - --version ${{env.CONFIG_JSON_VERSION}} \ - --index-directory algolia-indexes/ \ - 2>&1 | tee algolia-update-index-log.txt - comprobar: - # Requires build job results needs: construir runs-on: ubuntu-latest @@ -98,8 +69,7 @@ jobs: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - # Requires the build job results - needs: comprobar + needs: [construir, comprobar] runs-on: ubuntu-latest steps: - name: Descargar artefacto @@ -113,7 +83,7 @@ jobs: - name: Configurar Pages uses: actions/configure-pages@v4 - - name: Subir artefacto + - name: Empaquetar y subir artefacto de Pages uses: actions/upload-pages-artifact@v3 with: path: dir @@ -121,3 +91,25 @@ jobs: - name: Implementar en GitHub Pages id: deployment uses: actions/deploy-pages@v4 + + publicar-indexes: + needs: [construir, comprobar, publicar] + runs-on: ubuntu-latest + container: + image: registry.jetbrains.team/p/writerside/builder/algolia-publisher:2.0.32-2 + steps: + - name: Descargar artefacto + uses: actions/download-artifact@v3 + with: + name: docs + - name: Unzip artefacto + run: | + unzip -O UTF-8 -qq '${{ env.ALGOLIA_ARTIFACT }}' -d algolia-indexes + env algolia-key='${{env.ALGOLIA_KEY}}' java -jar /opt/builder/help-publication-agent.jar \ + update-index \ + --application-name '${{env.ALGOLIA_APP_NAME}}' \ + --index-name '${{env.ALGOLIA_INDEX_NAME}}' \ + --product '${{env.CONFIG_JSON_PRODUCT}}' \ + --version '${{env.CONFIG_JSON_VERSION}}' \ + --index-directory algolia-indexes/ \ + 2>&1 | tee algolia-update-index-log.txt diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..8aa1651 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,67 @@ +# SPDX-FileCopyrightText: 2024 Pablo Portas López +# +# SPDX-License-Identifier: GPL-3.0-only + +name: Comprobar documentación + +on: + pull_request: + types: ["opened"] + paths: ["docs/**"] + +permissions: + id-token: write + pages: write + +env: + INSTANCE: 'docs/pro' + ARTIFACT: 'webHelpPRO2-all.zip' + DOCKER_VERSION: '233.14389' + ALGOLIA_ARTIFACT: 'algolia-indexes-PRO.zip' + ALGOLIA_APP_NAME: '0K3UBN277V' + ALGOLIA_INDEX_NAME: 'pro2324' + ALGOLIA_KEY: '${{ secrets.ALGOLIA_KEY }}' + CONFIG_JSON_PRODUCT: 'PRO' + CONFIG_JSON_VERSION: '2023-2024' + +jobs: + construir: + runs-on: ubuntu-latest + + steps: + - name: Checkout repositorio + uses: actions/checkout@v4 + + - name: Construir documentación de Writerside usando Docker + uses: JetBrains/writerside-github-action@v4 + with: + instance: ${{ env.INSTANCE }} + artifact: ${{ env.ARTIFACT }} + docker-version: ${{ env.DOCKER_VERSION }} + + - name: Subir artefacto con los resultados de la construcción + uses: actions/upload-artifact@v4 + with: + name: docs + path: | + artifacts/${{ env.ARTIFACT }} + artifacts/report.json + artifacts/${{ env.ALGOLIA_ARTIFACT }} + retention-days: 2 + + comprobar: + needs: construir + runs-on: ubuntu-latest + + steps: + - name: Descargar artefactos + uses: actions/download-artifact@v4 + with: + name: docs + path: artifacts + + - name: Comprobar documentación + uses: JetBrains/writerside-checker-action@v1 + with: + instance: ${{ env.INSTANCE }} + diff --git a/.gitignore b/.gitignore index 63a4a73..46e9819 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # # SPDX-License-Identifier: CC0-1.0 diff --git a/.idea/runConfigurations/Export_to_PDF.xml b/.idea/runConfigurations/Export_to_PDF.xml deleted file mode 100644 index 78b9c16..0000000 --- a/.idea/runConfigurations/Export_to_PDF.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/Exportar_a_PDF.xml b/.idea/runConfigurations/Exportar_a_PDF.xml new file mode 100644 index 0000000..7f7cd36 --- /dev/null +++ b/.idea/runConfigurations/Exportar_a_PDF.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/.reuse/dep5 b/.reuse/dep5 index 8282d8c..73c2ccf 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -1,10 +1,45 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Pro2324 -Upstream-Contact: Pablo Portas Lopez <81629707+TeenBiscuits@users.noreply.github.com> +Upstream-Contact: Pablo Portas Lopez Source: https://github.com/TeenBiscuits/Pro2324 -# Sample paragraph, commented out: -# -# Files: src/* -# Copyright: $YEAR $NAME <$CONTACT> -# License: ... +Files: logo/* + docs/images/Logo.* + docs/images/GitHubSponsors.png + docs/topics/* +Copyright: 2023 Pablo Portas Lopez +License: CC-BY-NC-4.0 + +Files: .github/* + .all-contributorsrc + CONTRIBUTING.md + README.md + SECURITY.md + .idea/* + docs/cfg/* + docs/keymap.xml + docs/pro.tree + docs/redirection-rules.xml + docs/writerside.cfg +Copyright: 2024 Pablo Portas Lopez +License: GPL-3.0-only + +Files: CODE_OF_CONDUCT.md +Copyright: 2021 Ethical Source +License: CC-BY-4.0 + +Files: docs/images/Tutoriales/Compilador/* +Copyright: Abel Cedron Santaeufemia +License: CC-BY-4.0 + +Files: docs/topics/03-Apuntes/Pro-1/* +Copyright: 2024 Daniel Feito Pin +License: CC-BY-NC-4.0 + +Files: docs/images/Apuntes/Bibliografia/C-Programming-Book.png +Copyright: K. N. King +License: CC0-1.0 + +Files: src/Ejemplos/TAD_Rational/* +Copyright: Facultade de Informatica de A Coruna +License: CC-BY-4.0 \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b4e6dfa..595f5f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # # SPDX-License-Identifier: CC0-1.0 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index b12e5c1..b78b5dc 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -59,7 +59,7 @@ no. ## Aplicación Instancias de comportamiento abusivo, acosador o inaceptable de otro modo podrán ser reportadas a los administradores de -la comunidad responsables del cumplimiento a través de 81629707+TeenBiscuits@users.noreply.github.com. Todas las quejas +la comunidad responsables del cumplimiento a través de pablo.potas@udc.es. Todas las quejas serán evaluadas e investigadas de una manera puntual y justa. Todos los administradores de la comunidad están obligados a respetar la privacidad y la seguridad de quienes reporten diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b1a62b..cf80681 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,5 @@ diff --git a/README.md b/README.md index 7410780..5493474 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ @@ -59,7 +59,7 @@ Los apuntes y el código de este repositorio están publicados en -[![github-sponsor](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge&logo=GitHub-Sponsors&logoColor=#white)](https://github.com/sponsors/TeenBiscuits)[![ko-fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/T6T0TSIKT)[![paypalme](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](http://paypal.me/pabloportaslopez) +[![github-sponsor](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge&logo=GitHub-Sponsors&logoColor=#white)](https://github.com/sponsors/TeenBiscuits)[![ko-fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/T6T0TSIKT)[![paypalme](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/pabloportaslopez) @@ -116,11 +116,14 @@ Los apuntes y el código de este repositorio están publicados en Pablo Portas
Pablo Portas

💻 🖋 📖 - Miguel Fraga Pico メ
Miguel Fraga Pico メ

💻 - Santiago Neira Sejean
Santiago Neira Sejean

💻 - Daniel Deza Prieto
Daniel Deza Prieto

💻 - Daniel Feito Pin
Daniel Feito Pin

🖋 + Pablo Portas López
Pablo Portas López

💻 🖋 📖 + Miguel Fraga Pico メ
Miguel Fraga Pico メ

💻 + Santiago Neira Sejean
Santiago Neira Sejean

💻 + Daniel Deza Prieto
Daniel Deza Prieto

💻 + Daniel Feito Pin
Daniel Feito Pin

🖋 + + + Sprinter
Sprinter

💻 @@ -151,8 +154,8 @@ Los apuntes y el código de este repositorio están publicados en blueberry - https://github.com/TeenBiscuits/Pro2324 + https://teenbiscuits.github.io/Pro2324/pro2324.html Logo.ico Logo.svg Repositorio en GitHub diff --git a/docs/code/Boletin_1/Ejercicio_01.c b/docs/code/Boletin_1/Ejercicio_01.c index b80a576..835d9a5 100644 --- a/docs/code/Boletin_1/Ejercicio_01.c +++ b/docs/code/Boletin_1/Ejercicio_01.c @@ -1,7 +1,8 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only -#include #define MAX 20 // SE DECLARA EL TAMAÑO MÁXIMO Y SE ASIGNA POSTERIORMENTE EN nombre[MAX] // NUNCA SOBREESCRIBIR EL LIMITE, YA QUE SERÍA UN MEMORY OVERFLOW Y ESO ES GRAVISIMO 0 :( int main() { diff --git a/docs/code/Boletin_1/Ejercicio_02.c b/docs/code/Boletin_1/Ejercicio_02.c index 824fd36..ab3b333 100644 --- a/docs/code/Boletin_1/Ejercicio_02.c +++ b/docs/code/Boletin_1/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define MAX 30 diff --git a/docs/code/Boletin_1/Ejercicio_03.c b/docs/code/Boletin_1/Ejercicio_03.c index 77d13e2..4ef4b25 100644 --- a/docs/code/Boletin_1/Ejercicio_03.c +++ b/docs/code/Boletin_1/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie3(x, y) ((x*y)/2) // Defino la fórmula del area del triángulo diff --git a/docs/code/Boletin_1/Ejercicio_04.c b/docs/code/Boletin_1/Ejercicio_04.c index 9c40117..e6cc2fb 100644 --- a/docs/code/Boletin_1/Ejercicio_04.c +++ b/docs/code/Boletin_1/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie2(x, y) (x*y) // DECLARO LA FÓRMULA DE LA SUPERFICIE DE UN RECTÁNGULO diff --git a/docs/code/Boletin_1/Ejercicio_05.c b/docs/code/Boletin_1/Ejercicio_05.c index d8fbed7..f8dbe55 100644 --- a/docs/code/Boletin_1/Ejercicio_05.c +++ b/docs/code/Boletin_1/Ejercicio_05.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie2(x, y) (x*y) // DECLARO LA FÓRMULA DE LA SUPERFICIE DE UN RECTÁNGULO diff --git a/docs/code/Boletin_1/Ejercicio_06.c b/docs/code/Boletin_1/Ejercicio_06.c index 1dbb100..65922b2 100644 --- a/docs/code/Boletin_1/Ejercicio_06.c +++ b/docs/code/Boletin_1/Ejercicio_06.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include # define PI 3.14159265359 # define area(x) (4 * PI * x * x) diff --git a/docs/code/Boletin_1/Ejercicio_07.c b/docs/code/Boletin_1/Ejercicio_07.c index e8733b9..b8f9bbb 100644 --- a/docs/code/Boletin_1/Ejercicio_07.c +++ b/docs/code/Boletin_1/Ejercicio_07.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include # define IVA 0.24 diff --git a/docs/code/Boletin_1/Ejercicio_08.c b/docs/code/Boletin_1/Ejercicio_08.c index 9d2e842..ce1fa38 100644 --- a/docs/code/Boletin_1/Ejercicio_08.c +++ b/docs/code/Boletin_1/Ejercicio_08.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_09.c b/docs/code/Boletin_1/Ejercicio_09.c index f563931..a677992 100644 --- a/docs/code/Boletin_1/Ejercicio_09.c +++ b/docs/code/Boletin_1/Ejercicio_09.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_10.c b/docs/code/Boletin_1/Ejercicio_10.c index 43fb45e..fa6864c 100644 --- a/docs/code/Boletin_1/Ejercicio_10.c +++ b/docs/code/Boletin_1/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define productoescalar(vx1,vy1,vz1,vx2,vy2,vz2) ((vx1*vx2)+(vy1*vy2)+(vz1*vz2)) diff --git a/docs/code/Boletin_1/Ejercicio_11.c b/docs/code/Boletin_1/Ejercicio_11.c index 68e3497..65d802c 100644 --- a/docs/code/Boletin_1/Ejercicio_11.c +++ b/docs/code/Boletin_1/Ejercicio_11.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_12.c b/docs/code/Boletin_1/Ejercicio_12.c index 8e83b26..336e693 100644 --- a/docs/code/Boletin_1/Ejercicio_12.c +++ b/docs/code/Boletin_1/Ejercicio_12.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_13.c b/docs/code/Boletin_1/Ejercicio_13.c index 4da5864..f522967 100644 --- a/docs/code/Boletin_1/Ejercicio_13.c +++ b/docs/code/Boletin_1/Ejercicio_13.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define PI 3.14159265359 // APROXIMACIÓN DE PI #define perimetro(x) (2 * PI * x) // PERIMETRO DEL CÍRCULO diff --git a/docs/code/Boletin_1/Ejercicio_14.c b/docs/code/Boletin_1/Ejercicio_14.c index 5fffb2d..1fea022 100644 --- a/docs/code/Boletin_1/Ejercicio_14.c +++ b/docs/code/Boletin_1/Ejercicio_14.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include // PARA PONER LA FECHA ACTUAL diff --git a/docs/code/Boletin_1/Ejercicio_15.c b/docs/code/Boletin_1/Ejercicio_15.c index 1649feb..9cebceb 100644 --- a/docs/code/Boletin_1/Ejercicio_15.c +++ b/docs/code/Boletin_1/Ejercicio_15.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_1/Ejercicio_16.c b/docs/code/Boletin_1/Ejercicio_16.c index 8af423a..9548220 100644 --- a/docs/code/Boletin_1/Ejercicio_16.c +++ b/docs/code/Boletin_1/Ejercicio_16.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_17.c b/docs/code/Boletin_1/Ejercicio_17.c index 3418e2d..1792fb9 100644 --- a/docs/code/Boletin_1/Ejercicio_17.c +++ b/docs/code/Boletin_1/Ejercicio_17.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_1/Ejercicio_18.c b/docs/code/Boletin_1/Ejercicio_18.c index 43465bc..422edbb 100644 --- a/docs/code/Boletin_1/Ejercicio_18.c +++ b/docs/code/Boletin_1/Ejercicio_18.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define MAX 20 // DEFINO MÁXIMO PARA LOS STRINGS DE CARACTERES diff --git a/docs/code/Boletin_1/Ejercicio_19.c b/docs/code/Boletin_1/Ejercicio_19.c index 7a7e1b1..a021101 100644 --- a/docs/code/Boletin_1/Ejercicio_19.c +++ b/docs/code/Boletin_1/Ejercicio_19.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define IVA 0.21 diff --git a/docs/code/Boletin_1/Ejercicio_20.c b/docs/code/Boletin_1/Ejercicio_20.c index 19190fb..bf8bf0d 100644 --- a/docs/code/Boletin_1/Ejercicio_20.c +++ b/docs/code/Boletin_1/Ejercicio_20.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define incremetocoste(x, y) (x * (1 + y)); diff --git a/docs/code/Boletin_2/Ejercicio_01.c b/docs/code/Boletin_2/Ejercicio_01.c index 2fbef7b..8281ac4 100644 --- a/docs/code/Boletin_2/Ejercicio_01.c +++ b/docs/code/Boletin_2/Ejercicio_01.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_02.c b/docs/code/Boletin_2/Ejercicio_02.c index 407e18b..18704c4 100644 --- a/docs/code/Boletin_2/Ejercicio_02.c +++ b/docs/code/Boletin_2/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_03.c b/docs/code/Boletin_2/Ejercicio_03.c index 16c6566..08b68a6 100644 --- a/docs/code/Boletin_2/Ejercicio_03.c +++ b/docs/code/Boletin_2/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_04.c b/docs/code/Boletin_2/Ejercicio_04.c index 704bdaf..7bbeb62 100644 --- a/docs/code/Boletin_2/Ejercicio_04.c +++ b/docs/code/Boletin_2/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_05.c b/docs/code/Boletin_2/Ejercicio_05.c index 0d34fd3..af4361f 100644 --- a/docs/code/Boletin_2/Ejercicio_05.c +++ b/docs/code/Boletin_2/Ejercicio_05.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_06.c b/docs/code/Boletin_2/Ejercicio_06.c index 5c1ae26..a1aee29 100644 --- a/docs/code/Boletin_2/Ejercicio_06.c +++ b/docs/code/Boletin_2/Ejercicio_06.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define porcentaje(x, y) ( x / (float) y * 100) diff --git a/docs/code/Boletin_2/Ejercicio_07.c b/docs/code/Boletin_2/Ejercicio_07.c index b19c02a..23b1b8c 100644 --- a/docs/code/Boletin_2/Ejercicio_07.c +++ b/docs/code/Boletin_2/Ejercicio_07.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_08.c b/docs/code/Boletin_2/Ejercicio_08.c index 6b9116a..e63647f 100644 --- a/docs/code/Boletin_2/Ejercicio_08.c +++ b/docs/code/Boletin_2/Ejercicio_08.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_09.c b/docs/code/Boletin_2/Ejercicio_09.c index c48ce6f..8690c32 100644 --- a/docs/code/Boletin_2/Ejercicio_09.c +++ b/docs/code/Boletin_2/Ejercicio_09.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include #include // PARA OBTENER EL TIEMPO ACTUAL diff --git a/docs/code/Boletin_2/Ejercicio_10.c b/docs/code/Boletin_2/Ejercicio_10.c index 61b8cec..d62a0df 100644 --- a/docs/code/Boletin_2/Ejercicio_10.c +++ b/docs/code/Boletin_2/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define IRPF 0.15 diff --git a/docs/code/Boletin_2/Ejercicio_11.c b/docs/code/Boletin_2/Ejercicio_11.c index 1800fac..5d2e3c3 100644 --- a/docs/code/Boletin_2/Ejercicio_11.c +++ b/docs/code/Boletin_2/Ejercicio_11.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_12.c b/docs/code/Boletin_2/Ejercicio_12.c index ef63467..abb8c94 100644 --- a/docs/code/Boletin_2/Ejercicio_12.c +++ b/docs/code/Boletin_2/Ejercicio_12.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_13.c b/docs/code/Boletin_2/Ejercicio_13.c index df89cee..ab37ab4 100644 --- a/docs/code/Boletin_2/Ejercicio_13.c +++ b/docs/code/Boletin_2/Ejercicio_13.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include // HACER SENOS Y COSENOS SIN ESTO ES DIFÍCIL diff --git a/docs/code/Boletin_2/Ejercicio_14.c b/docs/code/Boletin_2/Ejercicio_14.c index 8ec411b..a285b21 100644 --- a/docs/code/Boletin_2/Ejercicio_14.c +++ b/docs/code/Boletin_2/Ejercicio_14.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_15.c b/docs/code/Boletin_2/Ejercicio_15.c index cfe06b9..08c4455 100644 --- a/docs/code/Boletin_2/Ejercicio_15.c +++ b/docs/code/Boletin_2/Ejercicio_15.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_2/Ejercicio_17.c b/docs/code/Boletin_2/Ejercicio_17.c index fb5d21b..a494fc7 100644 --- a/docs/code/Boletin_2/Ejercicio_17.c +++ b/docs/code/Boletin_2/Ejercicio_17.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_28.c b/docs/code/Boletin_2/Ejercicio_28.c index 5661363..08902ef 100644 --- a/docs/code/Boletin_2/Ejercicio_28.c +++ b/docs/code/Boletin_2/Ejercicio_28.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/docs/code/Boletin_2/Ejercicio_39.c b/docs/code/Boletin_2/Ejercicio_39.c index e9b19ad..8298ab6 100644 --- a/docs/code/Boletin_2/Ejercicio_39.c +++ b/docs/code/Boletin_2/Ejercicio_39.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include #include diff --git a/docs/code/Boletin_2/Ejercicio_45.c b/docs/code/Boletin_2/Ejercicio_45.c index 9e7cf2f..da26298 100644 --- a/docs/code/Boletin_2/Ejercicio_45.c +++ b/docs/code/Boletin_2/Ejercicio_45.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_2/Ejercicio_46.c b/docs/code/Boletin_2/Ejercicio_46.c index 248025c..5173410 100644 --- a/docs/code/Boletin_2/Ejercicio_46.c +++ b/docs/code/Boletin_2/Ejercicio_46.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_2/Ejercicio_47.c b/docs/code/Boletin_2/Ejercicio_47.c index 3e59539..9b9aedd 100644 --- a/docs/code/Boletin_2/Ejercicio_47.c +++ b/docs/code/Boletin_2/Ejercicio_47.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_2/Ejercicio_48.c b/docs/code/Boletin_2/Ejercicio_48.c index ae2a9e2..abe263a 100644 --- a/docs/code/Boletin_2/Ejercicio_48.c +++ b/docs/code/Boletin_2/Ejercicio_48.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_2/Ejercicio_50.c b/docs/code/Boletin_2/Ejercicio_50.c index 66c9261..b87d5c8 100644 --- a/docs/code/Boletin_2/Ejercicio_50.c +++ b/docs/code/Boletin_2/Ejercicio_50.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_01.c b/docs/code/Boletin_3/Ejercicio_01.c index 296861d..13a8511 100644 --- a/docs/code/Boletin_3/Ejercicio_01.c +++ b/docs/code/Boletin_3/Ejercicio_01.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include void imprimeLBlanco(int nlineas); int main() { diff --git a/docs/code/Boletin_3/Ejercicio_02.c b/docs/code/Boletin_3/Ejercicio_02.c index c373a90..95312c2 100644 --- a/docs/code/Boletin_3/Ejercicio_02.c +++ b/docs/code/Boletin_3/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/docs/code/Boletin_3/Ejercicio_03.c b/docs/code/Boletin_3/Ejercicio_03.c index 5ac66b3..8235f03 100644 --- a/docs/code/Boletin_3/Ejercicio_03.c +++ b/docs/code/Boletin_3/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int mayorDiv(int n); diff --git a/docs/code/Boletin_3/Ejercicio_04.c b/docs/code/Boletin_3/Ejercicio_04.c index cde4eb1..b62d85f 100644 --- a/docs/code/Boletin_3/Ejercicio_04.c +++ b/docs/code/Boletin_3/Ejercicio_04.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_05.c b/docs/code/Boletin_3/Ejercicio_05.c index dabfb22..4e39f8f 100644 --- a/docs/code/Boletin_3/Ejercicio_05.c +++ b/docs/code/Boletin_3/Ejercicio_05.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_06.c b/docs/code/Boletin_3/Ejercicio_06.c index 64dbba4..a16aeed 100644 --- a/docs/code/Boletin_3/Ejercicio_06.c +++ b/docs/code/Boletin_3/Ejercicio_06.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_07.c b/docs/code/Boletin_3/Ejercicio_07.c index d9fab67..df28bcc 100644 --- a/docs/code/Boletin_3/Ejercicio_07.c +++ b/docs/code/Boletin_3/Ejercicio_07.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_08.c b/docs/code/Boletin_3/Ejercicio_08.c index 8addaeb..4b8aafa 100644 --- a/docs/code/Boletin_3/Ejercicio_08.c +++ b/docs/code/Boletin_3/Ejercicio_08.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_09.c b/docs/code/Boletin_3/Ejercicio_09.c index 8b2ecc9..08c30a9 100644 --- a/docs/code/Boletin_3/Ejercicio_09.c +++ b/docs/code/Boletin_3/Ejercicio_09.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_10.c b/docs/code/Boletin_3/Ejercicio_10.c index a1b1a93..72f2600 100644 --- a/docs/code/Boletin_3/Ejercicio_10.c +++ b/docs/code/Boletin_3/Ejercicio_10.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_11.c b/docs/code/Boletin_3/Ejercicio_11.c index e32681e..cf1aead 100644 --- a/docs/code/Boletin_3/Ejercicio_11.c +++ b/docs/code/Boletin_3/Ejercicio_11.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only diff --git a/docs/code/Boletin_3/Ejercicio_12.c b/docs/code/Boletin_3/Ejercicio_12.c index 3412efe..1268d4f 100644 --- a/docs/code/Boletin_3/Ejercicio_12.c +++ b/docs/code/Boletin_3/Ejercicio_12.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_13.c b/docs/code/Boletin_3/Ejercicio_13.c index 39b7541..0bd66df 100644 --- a/docs/code/Boletin_3/Ejercicio_13.c +++ b/docs/code/Boletin_3/Ejercicio_13.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_14.c b/docs/code/Boletin_3/Ejercicio_14.c index 542aa13..5e994a2 100644 --- a/docs/code/Boletin_3/Ejercicio_14.c +++ b/docs/code/Boletin_3/Ejercicio_14.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // PARA HACER ESTE EJERCICIO HACEN FALTA CONOCIMIENTOS EN ELECTRÓNICA BÁSICA!!! diff --git a/docs/code/Boletin_3/Ejercicio_23.c b/docs/code/Boletin_3/Ejercicio_23.c index d56ec71..8b2c431 100644 --- a/docs/code/Boletin_3/Ejercicio_23.c +++ b/docs/code/Boletin_3/Ejercicio_23.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_3/Ejercicio_28.c b/docs/code/Boletin_3/Ejercicio_28.c index da007b2..a9a2f73 100644 --- a/docs/code/Boletin_3/Ejercicio_28.c +++ b/docs/code/Boletin_3/Ejercicio_28.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/docs/code/Boletin_4/Ejercicio_01.c b/docs/code/Boletin_4/Ejercicio_01.c index 75128e2..9b46f3f 100644 --- a/docs/code/Boletin_4/Ejercicio_01.c +++ b/docs/code/Boletin_4/Ejercicio_01.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Miguel Fraga Pico // // SPDX-License-Identifier: GPL-3.0-only + #include void askNumbers(int *cadena) diff --git a/docs/code/Boletin_4/Ejercicio_02.c b/docs/code/Boletin_4/Ejercicio_02.c index 44c1bf0..83e8f7e 100644 --- a/docs/code/Boletin_4/Ejercicio_02.c +++ b/docs/code/Boletin_4/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/docs/code/Boletin_4/Ejercicio_03.c b/docs/code/Boletin_4/Ejercicio_03.c index 5657403..ea8de98 100644 --- a/docs/code/Boletin_4/Ejercicio_03.c +++ b/docs/code/Boletin_4/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/docs/code/Boletin_4/Ejercicio_04.c b/docs/code/Boletin_4/Ejercicio_04.c index 2ddf270..2aad2ae 100644 --- a/docs/code/Boletin_4/Ejercicio_04.c +++ b/docs/code/Boletin_4/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/docs/code/Boletin_4/Ejercicio_08.c b/docs/code/Boletin_4/Ejercicio_08.c new file mode 100644 index 0000000..56d7631 --- /dev/null +++ b/docs/code/Boletin_4/Ejercicio_08.c @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 10 + +int main(){ + // Define variables and ask for parameters + int nums[N], guess, lGuess, uGuess; + printf("\nInput an array of 10 elements by pressing Enter after each element: "); + for(int i=0; i<10; i++){ + scanf("%d", &nums[i]); + } + // Input guess + printf("\nWhat number do you want to find?: "); + scanf("%d", &guess); + // Lower bound + for(int i=0; i=0; i--){ + if(nums[i] == guess){ + uGuess = i; + break; + } + } + // Print solutions + printf("\nLower bound solution: %d", lGuess); + printf("\nUpper bound solution: %d", uGuess); + printf("\n"); +} \ No newline at end of file diff --git a/docs/code/Boletin_4/Ejercicio_10.c b/docs/code/Boletin_4/Ejercicio_10.c index b4ac5c3..e94a11c 100644 --- a/docs/code/Boletin_4/Ejercicio_10.c +++ b/docs/code/Boletin_4/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include #include diff --git a/docs/code/Boletin_4/Ejercicio_11.c b/docs/code/Boletin_4/Ejercicio_11.c new file mode 100644 index 0000000..b1c4770 --- /dev/null +++ b/docs/code/Boletin_4/Ejercicio_11.c @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include + +// Sum all the elements of the array using recursion +int arraySum(int n, int sumNums[n], int loops, int accum){ + if (loops == 0){return accum;} else{ + accum+=sumNums[n-loops]; + loops--; + arraySum(n, sumNums, loops, accum); + } +} + +int main(){ + // Define variables and ask for parameters + int n = 10; + int toSum[n], accum = 0, loops = n; + int result; + printf("Input the 10 numbers for the array separated by Enter:\n"); + for(int i=0; i<10; i++){ + scanf("%d", &toSum[i]); + } + // Recursion fun starts here + result = arraySum(n, toSum, loops, accum); + // Print result + printf("\nThe result of the sum is %d\n", result); + return 0; +} \ No newline at end of file diff --git a/docs/code/Boletin_4/Ejercicio_24.c b/docs/code/Boletin_4/Ejercicio_24.c index 9c22c8f..5f81517 100644 --- a/docs/code/Boletin_4/Ejercicio_24.c +++ b/docs/code/Boletin_4/Ejercicio_24.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Miguel Fraga Pico // // SPDX-License-Identifier: GPL-3.0-only + #include struct empleados diff --git a/docs/code/Boletin_4/Ejercicio_25.c b/docs/code/Boletin_4/Ejercicio_25.c index 0bb867b..e0e840f 100644 --- a/docs/code/Boletin_4/Ejercicio_25.c +++ b/docs/code/Boletin_4/Ejercicio_25.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Daniel Deza Prieto // // SPDX-License-Identifier: GPL-3.0-only + #include void reader(char frase[200]) { printf("Please input the phrase up to a size of 200 characters\n"); diff --git a/docs/code/Boletin_4/Ejercicio_27.c b/docs/code/Boletin_4/Ejercicio_27.c new file mode 100644 index 0000000..8b53f23 --- /dev/null +++ b/docs/code/Boletin_4/Ejercicio_27.c @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 100 + +// Count the amount of characters in the string +void countString(char toCount[N]){ + int count = 0; + for(int i=0; toCount[i]!='\0'; i++){ + count++; + } + printf("Word %s has %d characters\n", toCount, count); +} + +// Separate the string and fix multiple separators in the string by ignoring them +void separateString(char toSplit[N]){ + char splitted[N][N]; + int count=0, row=0, column=0; + while(toSplit[count] != '\n'){ + if(toSplit[count] == ' ' || toSplit[count] == ',' || toSplit[count] == '.'){ + splitted[row][column] = '\0'; + column = 0; + if (toSplit[count-1] != ' ' && toSplit[count-1] != ',' && toSplit[count-1] != '.'){row++;} + } else { + splitted[row][column] = toSplit[count]; + column++; + } + count++; + } + for(int i=0; splitted[i][0] != '\0'; i++){ + countString(splitted[i]); + } +} + +int main(){ + // Define variables and ask for parameters + char sentence[N]; + printf("Type a sentence of max 100 characters:\n"); + // fgets instead of gets for buffer overflow protection + fgets(sentence, N, stdin); + // Start the fun + separateString(sentence); + return 0; +} \ No newline at end of file diff --git a/docs/code/Boletin_4/Ejercicio_28.c b/docs/code/Boletin_4/Ejercicio_28.c new file mode 100644 index 0000000..32c3299 --- /dev/null +++ b/docs/code/Boletin_4/Ejercicio_28.c @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 256 + +int main(){ + // Define variables and ask for parameters + int i=0, j=0; + char sentence[N], fixedSentence[N]; + printf("Type a sentence\n"); + // fgets instead of gets for buffer protection + fgets(sentence, N, stdin); + // Fix the sentence's multiple spaces + while(sentence[i]!='\0'){ + if(sentence[i] == ' ' && sentence[i+1] == ' '){ + i++; + continue; + } else { + fixedSentence[j]=sentence[i]; + i++; + j++; + } + } + // Print the result after apprending the end of string to the fixed variable + fixedSentence[j+1] = '\0'; + printf("\nThe sentence with fixed spaces is:\n%s", fixedSentence); + return 0; +} \ No newline at end of file diff --git a/docs/code/Boletin_4/Ejercicio_36.c b/docs/code/Boletin_4/Ejercicio_36.c new file mode 100644 index 0000000..74c3b32 --- /dev/null +++ b/docs/code/Boletin_4/Ejercicio_36.c @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#include +#define N 100 + +void factorialDecomp(int toDecomp){ + int factors[N], primes=2, loops=0, og=toDecomp; + // Check if its 1 or 0 and just print out that the decomp is 1 + if(toDecomp == 0 | toDecomp == 1){ + printf("\nNumber %d factorial decomposition is: 1", og); + return; + } + // Repeat the factorization with each reduced number until its 0 + for(int i=0;i +#define N 11 +#define M 100 + +void checkLeaps(int n, int year){ + int closeLeap, leaps[M], counter=1; + //Check closest + for(int i=0;i<4;i++){ + if((year+i)%4 == 0){ + closeLeap = year+i; + break; + } + } + // Get all the following leap years until the max amount is satisfied + leaps[0]=closeLeap; + while(counter != 100){ + leaps[counter]=closeLeap+(4*counter); + counter++; + } + // Print results + printf("\nFollowing 100 leap years:\n"); + for(int i=0; i // Main library +#include // For managing the program +#include // Bool function +#include // Use UNIX commands +#include // For random numbers +#define N 16 // Change this number to change the matrix size +#define SPEED 2 // Higher means faster: MUST BE GREATER OR EQUAL THAN 1 +#define clear() printf("\033[H\033[J") // Clean screen + +// NOTE: RUN FROM VSCODE TERMINAL OR THE MODERN WINDOWS TERMINAL APP NOT CMD OTHERWISE UTF-8 EMOJIS WILL NOT DISPLAY +// ALSO MAKE SURE UTF-8 SUPPORT IS ENABLED IN YOUR TERMINAL OF CHOICE, APPLIES TO ALL OPERATING SYSTEMS + +int gameOfLife[N][N]; +int updatedGame[N][N]; +int ticks=0; // Generations + +// THIS IS THE MATRIX THAT WILL RUN IF THE OPTION c (choose) IS CHOSEN AT RUNTIME +// THIS EXAMPLE MATRIX IS OF SIZE 16X16 SO IF YOU CHANGE N MODIFY THE SIZE HERE TOO +// 0 = DISABLED, 1 = ENABLED +int chooseGameOfLife[N][N] = { + {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0}, + {0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0}, + {0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0}, + {0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0}, + {0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} +}; + +// Make sure the cell is not outsided of the matrix +bool outOfBound(int row, int column){ + bool oob; + if(row >= N || row < 0 || column >= N || column < 0){oob = true;} + else {oob = false;} + return oob; +} + +// Check rules 1, 2 and 3 for death status +void checkDeath(int row, int column){ + int liveNeighbours=0; + // Check neighbours + if(outOfBound(row+1,column) == false){if(gameOfLife[row+1][column] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column+1) == false){if(gameOfLife[row+1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column-1) == false){if(gameOfLife[row+1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column) == false){if(gameOfLife[row-1][column] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column+1) == false){if(gameOfLife[row-1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column-1) == false){if(gameOfLife[row-1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row,column+1) == false){if(gameOfLife[row][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row,column-1) == false){if(gameOfLife[row][column-1] == 1){liveNeighbours++;}} + // Any live cell with fewer than two live neighbours dies, as if by underpopulation. + if(liveNeighbours<2){updatedGame[row][column]=0;} + // Any live cell with two or three live neighbours lives on to the next generation. + else if(liveNeighbours>=2 && liveNeighbours<=3){updatedGame[row][column]=1;} + // Any live cell with more than three live neighbours dies, as if by overpopulation. + else if(liveNeighbours>3){updatedGame[row][column]=0;} +} + +// Check rule 4 for revive status +void checkRevive(int row, int column){ + int liveNeighbours=0; + // Check neighbours + if(outOfBound(row+1,column) == false){if(gameOfLife[row+1][column] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column+1) == false){if(gameOfLife[row+1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column-1) == false){if(gameOfLife[row+1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column) == false){if(gameOfLife[row-1][column] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column+1) == false){if(gameOfLife[row-1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column-1) == false){if(gameOfLife[row-1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row,column+1) == false){if(gameOfLife[row][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row,column-1) == false){if(gameOfLife[row][column-1] == 1){liveNeighbours++;}} + // Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction. + if(liveNeighbours==3){updatedGame[row][column]=1;} + // Remain dead + else {updatedGame[row][column]=0;} +} + +// Run a generation +void tick(){ + // Run generation + for(int i=0;i + +//#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..f15ae9d --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_pointer.c @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..090b11c --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_pointer.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..cbd6b66 --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_struct.c @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..f4597ec --- /dev/null +++ b/docs/code/Ejemplos/TAD_Rational/rational_struct.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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/code/Extras/Algoritmos/BubbleSort.c b/docs/code/Extras/Algoritmos/BubbleSort.c index 55a3c22..5169c41 100644 --- a/docs/code/Extras/Algoritmos/BubbleSort.c +++ b/docs/code/Extras/Algoritmos/BubbleSort.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 15 /* Tamaño */ diff --git a/docs/code/Extras/Algoritmos/BusquedaBinaria.c b/docs/code/Extras/Algoritmos/BusquedaBinaria.c index e8a2197..bb7d504 100644 --- a/docs/code/Extras/Algoritmos/BusquedaBinaria.c +++ b/docs/code/Extras/Algoritmos/BusquedaBinaria.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 20 diff --git a/docs/code/Extras/Algoritmos/BusquedaSecuencial.c b/docs/code/Extras/Algoritmos/BusquedaSecuencial.c index cb8ce54..541a766 100644 --- a/docs/code/Extras/Algoritmos/BusquedaSecuencial.c +++ b/docs/code/Extras/Algoritmos/BusquedaSecuencial.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 20 diff --git a/docs/code/Extras/Algoritmos/BusquedaSecuencialCentinela.c b/docs/code/Extras/Algoritmos/BusquedaSecuencialCentinela.c index d1e997c..7ecf31c 100644 --- a/docs/code/Extras/Algoritmos/BusquedaSecuencialCentinela.c +++ b/docs/code/Extras/Algoritmos/BusquedaSecuencialCentinela.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 21 /* 1 más que el tamaño del array */ diff --git a/docs/code/Extras/Algoritmos/QuickSort.c b/docs/code/Extras/Algoritmos/QuickSort.c index 86bdcbb..b768118 100644 --- a/docs/code/Extras/Algoritmos/QuickSort.c +++ b/docs/code/Extras/Algoritmos/QuickSort.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include void intercambiar(int *a, int *b) { diff --git a/docs/code/Extras/TresEnRaya.c b/docs/code/Extras/TresEnRaya.c index 5175d7e..d999ba5 100644 --- a/docs/code/Extras/TresEnRaya.c +++ b/docs/code/Extras/TresEnRaya.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only diff --git "a/docs/images/Apuntes/Bibliograf\303\255a/C-Programming-Book.png" b/docs/images/Apuntes/Bibliografia/C-Programming-Book.png similarity index 100% rename from "docs/images/Apuntes/Bibliograf\303\255a/C-Programming-Book.png" rename to docs/images/Apuntes/Bibliografia/C-Programming-Book.png diff --git a/docs/keymap.xml b/docs/keymap.xml index 50eef05..ba21ffa 100644 --- a/docs/keymap.xml +++ b/docs/keymap.xml @@ -1,6 +1,6 @@ diff --git a/docs/pro.tree b/docs/pro.tree index e1c4d48..44175ce 100644 --- a/docs/pro.tree +++ b/docs/pro.tree @@ -2,29 +2,29 @@ - + - - + + - - - - + + + + - + + - - + + @@ -33,28 +33,35 @@ SPDX-License-Identifier: GPL-3.0-only + + + - - + + + - - + + + - + + - + - - \ No newline at end of file diff --git a/docs/redirection-rules.xml b/docs/redirection-rules.xml index c96e6a5..cfff342 100644 --- a/docs/redirection-rules.xml +++ b/docs/redirection-rules.xml @@ -1,7 +1,7 @@ diff --git a/docs/topics/01-Pro2324.topic b/docs/topics/01-Pro2324.topic new file mode 100644 index 0000000..5c70723 --- /dev/null +++ b/docs/topics/01-Pro2324.topic @@ -0,0 +1,74 @@ + + + + + + + + + + Pro2324 + + Ejercicios Resueltos 📝 y Apuntes 📚 para las asignaturas de Programación I y II del Grao en Enxeñaría + Informática de la Universidade da Coruña en el curso 2023/24. 💻🎓 + + + + + + Boletines + Apuntes + + + + + + Otras cosas interesantes + Ejemplos + + Antiguos + Exámenes + Tutoriales + + Próximamente... + + + + + + Para estudiantes más avanzados + Extras + Colabora + + + + + + + Otros enlaces + Licencia Documentación + Licencia Código + Reportar un Error / + Sugerencia + Apoye el desarrollo + Agradecimientos + + + + + + \ No newline at end of file diff --git a/docs/topics/02-Boletines.topic b/docs/topics/02-Boletines.topic new file mode 100644 index 0000000..a10719e --- /dev/null +++ b/docs/topics/02-Boletines.topic @@ -0,0 +1,72 @@ + + + + + + + + Boletines + + Enunciados y soluciones a los boletines de ejercicios de Programación. + + + + + + Boletín + 3 + Boletín 4 + + + + + + Programación I + Boletín 1 + Boletín 2 + Boletín + 3 + Boletín 4 + + + + + + Programación II + + TGR 1 - Especificación de tipos abstractos + TGR 2 - Punteros + Próximamente... + + + + + + Créditos + Código + Adaptado por + Material + Original (Programación I) + Basado + en la Obra (Programación I) + Material + Original (Programación II) + + + + + + + \ No newline at end of file diff --git a/docs/topics/Pro-1-Boletin-1.md b/docs/topics/02-Boletines/Pro-1/Boletin-1.md similarity index 99% rename from docs/topics/Pro-1-Boletin-1.md rename to docs/topics/02-Boletines/Pro-1/Boletin-1.md index c5c64f0..73c7d53 100644 --- a/docs/topics/Pro-1-Boletin-1.md +++ b/docs/topics/02-Boletines/Pro-1/Boletin-1.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Pro-1-Boletin-2.md b/docs/topics/02-Boletines/Pro-1/Boletin-2.md similarity index 99% rename from docs/topics/Pro-1-Boletin-2.md rename to docs/topics/02-Boletines/Pro-1/Boletin-2.md index 5ee5620..e2c98da 100644 --- a/docs/topics/Pro-1-Boletin-2.md +++ b/docs/topics/02-Boletines/Pro-1/Boletin-2.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Pro-1-Boletin-3.md b/docs/topics/02-Boletines/Pro-1/Boletin-3.md similarity index 99% rename from docs/topics/Pro-1-Boletin-3.md rename to docs/topics/02-Boletines/Pro-1/Boletin-3.md index 58d9651..bbd2151 100644 --- a/docs/topics/Pro-1-Boletin-3.md +++ b/docs/topics/02-Boletines/Pro-1/Boletin-3.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Pro-1-Boletin-4.md b/docs/topics/02-Boletines/Pro-1/Boletin-4.md similarity index 87% rename from docs/topics/Pro-1-Boletin-4.md rename to docs/topics/02-Boletines/Pro-1/Boletin-4.md index b792d33..ebe5e09 100644 --- a/docs/topics/Pro-1-Boletin-4.md +++ b/docs/topics/02-Boletines/Pro-1/Boletin-4.md @@ -1,5 +1,5 @@ @@ -10,11 +10,12 @@ SPDX-License-Identifier: CC-BY-NC-4.0 Arrays, registros y cadenas de caracteres. - + ¡Se necesita tu ayuda! -Faltan soluciones para los ejercicios del 5 al 8, del 11 al 14, del 16 al 19, del 21 al 23, del 26 al 28 y del 30 al 40. [Colabora](https://github.com/TeenBiscuits/Pro2324) +Faltan soluciones para los ejercicios del 6 al 7, del 12 al 14, del 16 al 19, del 21 al 23, el 26, del 30 al 35 y del 38 +al 39. [Colabora](https://github.com/TeenBiscuits/Pro2324) @@ -49,11 +50,11 @@ horas estudiando) y más vago (menor número de horas estudiando). - + ¡Se necesita tu ayuda! -Faltan soluciones para los ejercicios del 5 al 8. [Colabora](https://github.com/TeenBiscuits/Pro2324) +Faltan soluciones para los ejercicios del 5 al 7. [Colabora](https://github.com/TeenBiscuits/Pro2324) + ### Ejercicio 8 - +Plantee e implemente un programa en lenguaje C que, mediante búsqueda secuencial, permita encontrar el menor y el mayor +índice de donde se encuentra un valor dado X en un array de números enteros. El programa debe permitir al usuario +introducir apropiadamente el array de números enteros y solicitarle el valor que desea encontrar. + + +Ejemplo de Ejecución +

+ Introduzca los elementos del array separados por espacios, "enter" para terminar:
+ 1 2 3 5 3 2 3 4 5 6 3 1 2 3 +

+

+ Introduzca el número que desea buscar: 3
+ El número 3 aparece por primera vez en la posición 3 y por última vez en la posición 14.
+ Introduzca el número que desea buscar: 4
+ El número 4 aparece por primera y única vez en la posición 8.
+ Introduzca el número que desea buscar: 9
+ El número 9 no aparece en el array.
+

+
---> + ### Ejercicio 9 @@ -107,7 +128,13 @@ devuelva una array ordenado con los elementos de los dos anteriores. - +### Ejercicio 11 + +Plantee e implemente una función recursiva en lenguaje C que devuelva la suma de los elementos de un array de enteros. + + + + ¡Se necesita tu ayuda! @@ -116,12 +143,6 @@ Faltan soluciones para los ejercicios del 11 al 14. [Colabora](https://github.co + ¡Se necesita tu ayuda! -Faltan soluciones para los ejercicios del 26 al 28. [Colabora](https://github.com/TeenBiscuits/Pro2324) +Faltan soluciones para el ejercicio 26. [Colabora](https://github.com/TeenBiscuits/Pro2324) + ### Ejercicio 27 +Plantee e implemente un programa en lenguaje C que lea una frase (como máximo de 100 caracteres) y que muestre a +continuación cada palabra de la misma seguida del número de letras que la componen. Para simplificar suponga que las +palabras pueden separarse únicamente por espacios, comas o puntos. + + +Ejemplo de Ejecución +

+ Introduzca una frase de como máximo 100 caracteres:
+ Buenos días, vamos a comenzar. Encended los equipos. +

+

+ Buenos 6
+ días 4
+ vamos 5
+ a 1
+ comenzar 8
+ Encended 8
+ los 3
+ equipos 7
+

+
+ ### Ejercicio 28 @@ -284,19 +329,17 @@ todas las secuencias de dos o más espacios por un único espacio y que muestre ---> - ### Ejercicio 29 Diseñe una función que devuelva al revés la cadena recibida como parámetro. - + ¡Se necesita tu ayuda! -Faltan soluciones para los ejercicios del 30 al 40. [Colabora](https://github.com/TeenBiscuits/Pro2324) +Faltan soluciones para los ejercicios del 30 al 35. [Colabora](https://github.com/TeenBiscuits/Pro2324) + ### Ejercicio 36 Implemente un programa que solicite cinco números enteros (ni > 0) al usuario y muestre por pantalla cada número y su @@ -366,6 +411,15 @@ bisiestos que desee a partir de la fecha dada. + + +¡Se necesita tu ayuda! + +Faltan soluciones para los ejercicios del 38 al 39. [Colabora](https://github.com/TeenBiscuits/Pro2324) + + + + ### Ejercicio 40 Plantee e implemente un programa en lenguaje C para simular el juego de la vida de John Conway. - ---> diff --git a/docs/topics/Teoria.topic b/docs/topics/03-Apuntes.topic similarity index 55% rename from docs/topics/Teoria.topic rename to docs/topics/03-Apuntes.topic index d2e79a3..2d37e67 100644 --- a/docs/topics/Teoria.topic +++ b/docs/topics/03-Apuntes.topic @@ -3,12 +3,13 @@ SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd"> - + Apuntes @@ -20,8 +21,8 @@ SPDX-License-Identifier: CC-BY-NC-4.0 - - Teoría Introducción + + Teoría Introducción @@ -44,9 +45,27 @@ SPDX-License-Identifier: CC-BY-NC-4.0 Programación II - Proximamente... + + + Tema 3 - Listas + Próximamente... + + + + Créditos + Material + Original + Resúmenes + Programación I + Resúmenes + Programación II + + + \ No newline at end of file diff --git a/docs/topics/Bibliografia.md b/docs/topics/03-Apuntes/Bibliografia.md similarity index 92% rename from docs/topics/Bibliografia.md rename to docs/topics/03-Apuntes/Bibliografia.md index 44d087a..5a7001d 100644 --- a/docs/topics/Bibliografia.md +++ b/docs/topics/03-Apuntes/Bibliografia.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Bloque-1.md b/docs/topics/03-Apuntes/Pro-1/Bloque-1.md similarity index 99% rename from docs/topics/Bloque-1.md rename to docs/topics/03-Apuntes/Pro-1/Bloque-1.md index 9455f13..f1a67eb 100644 --- a/docs/topics/Bloque-1.md +++ b/docs/topics/03-Apuntes/Pro-1/Bloque-1.md @@ -744,11 +744,11 @@ Las direcciones se pueden almacenar en variables de puntero especiales. ```mermaid flowchart LR subgraph Puntero - Dirección + Dirección end - + subgraph Variable - vc[Contenido] + vc[Contenido] end Dirección --> Variable @@ -807,11 +807,11 @@ int i, *p = &i; ```mermaid flowchart LR subgraph p - &i + &i end - + subgraph i - vc[?] + vc[?] end &i --> i diff --git a/docs/topics/Bloque-2.md b/docs/topics/03-Apuntes/Pro-1/Bloque-2.md similarity index 100% rename from docs/topics/Bloque-2.md rename to docs/topics/03-Apuntes/Pro-1/Bloque-2.md diff --git a/docs/topics/Bloque-3.md b/docs/topics/03-Apuntes/Pro-1/Bloque-3.md similarity index 100% rename from docs/topics/Bloque-3.md rename to docs/topics/03-Apuntes/Pro-1/Bloque-3.md diff --git a/docs/topics/Bloque-4.md b/docs/topics/03-Apuntes/Pro-1/Bloque-4.md similarity index 100% rename from docs/topics/Bloque-4.md rename to docs/topics/03-Apuntes/Pro-1/Bloque-4.md diff --git a/docs/topics/03-Apuntes/Pro-2/Tema-1.md b/docs/topics/03-Apuntes/Pro-2/Tema-1.md new file mode 100644 index 0000000..cdc627b --- /dev/null +++ b/docs/topics/03-Apuntes/Pro-2/Tema-1.md @@ -0,0 +1,203 @@ + + +Copyright © 2024 Pablo Portas López + +# Tema 1 - Tipos Abstractos de Datos (TAD) + +La abstracción funcional y de datos. Especificación, construcción y ejemplos. + + + +Los estudiantes deben convercerse de que la programación no un arte misterioso, sino una disciplina ingenieril... + +... la abstracción y la especificación deben ser piezas clave para conseguir una programación efectiva. + +- Barbara Liskov + + Profesora en el Massachusetts Institute of Technology (MIT) + + Medalla John von Neumann, 2004 + + Premio Turing, 2008 + + Computer Pioneer Award de la IEEE Computer Society, 2018 + +- John Guttag + + Profesor en el Massachusetts Institute of Technology (MIT) + + + +## ¿Qué es la abstracción? + + +Abstraer +tr. Separar por medio de una operación intelectual un rasgo o una cualidad de algo para analizarlos aisladamente o considerarlos en su pura esencia o noción. +intr. Hacer caso omiso de algo, o dejarlo a un lado. + + +Si la definición de la RAE te ha dejado igual que como estabas. No te preocupes. + +La abstracción, entendiéndola como su primera acepción **es fundamental** tanto en la programación como en cualquier +disciplina intelectual. + +_Gracias al pensamiento abstracto el avance tecnológico/científico humano no parece tener +límite._ + +Un ejemplo sencillo, un conductor **no necesita** conocer el complicado mecanismo que permite a su coche cambiar las +marchas (ni siquiera que son las marchas) del motor. **Lo único que debe entender es una implementación (abstracción)** +"sencilla" como es el embrague y la palanca de cambios y **como interactuar** con ella. + +En el ámbito de la programación la abstracción es **constante**. Cuando programamos en C, **no necesitamos** conocer +como ha sido **implementada** la función ```printf()```, solo debemos conocer **como interactuar** con ella, el formato +que acepta que puede o no leer, etc. + + + +Sí te pica la curiosidad, la función ```printf()``` tiene más de **700 líneas de código**, si quieres curiosear una de +sus +implementaciones. [Enlace a "printf.c" de coreutils](https://github.com/coreutils/coreutils/blob/master/src/printf.c) + + + +En este tema nos centraremos en los **TAD**s los **Tipos Abstractos de Datos**, un tipo de abstracción común y que en el +futuro nos resultará muy util. + +## Definición de Tipo Abstracto de Datos + + + +Un tipo abstracto de datos es aquel **definido por el programador** que puede ser manipulado de forma **similar** a los +**definidos por el sistema**. + +Al igual que estos últimos, un tipo abstracto de datos corresponde a un **conjunto de valores** lícitos y de * +*operaciones** asociadas a los mismos, operaciones que se definen mediante una **especificación** que es **independiente +de la implementación** de esos datos. + +**John Guttag (1974)** + + + +A la hora de definir un TAD, debemos seguir unas pautas formales, para obtener la abstracción que **facilita el +desarrollo** a otros/as programadores/as como nosotros/as. + +```mermaid +flowchart TB + Diseño[Diseño TAD] + + subgraph Programador[Programador del tipo] + subgraph Usuario + Especificación + Valores + Operaciones["Operaciones (Sintaxis y Semática)"] + end + Implementación + Representación[Representación del tipo] + ImpOperaciones[Implementación de las Operaciones] + end + + Diseño --> Especificación & Implementación + Especificación -..-> Implementación + Especificación --> Valores & Operaciones + Implementación --> Representación & ImpOperaciones + + +``` + +## Especificación de un TAD + +``` +Nombre_de_operación (tipo_de_argumento) -> tipo_de_resultado +``` + +| TAD | Nombre_del_tipo | +|----------------|-------------------------------------------------------------------------------------| +| VALORES | valores que pueden tomar los datos del tipo | +| OPERACIONES | nombre de las operaciones que los manipulan | +| Objetivo | Descripción de la operación | +| Entrada | Descripción los datos de entrada | +| Salida | Que se espera como retorno en invocación | +| Precondiciones | Que condiciones se esperan de los datos de entrada | +| Poscondiciones | Que efectos laterales puede tener invocar la función (Que modifica, que añade, etc) | + +Podemos clasificarlas en: + +- Constructoras: Devuelven el TAD + - Generadoras: Solo ellas pueden generar el TAD + - Modificadoras: El resto +- Observadoras / Acceso: No devuelve un TAD +- Destructoras: Devuelven el 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 + +```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/docs/topics/03-Apuntes/Pro-2/Tema-2.md b/docs/topics/03-Apuntes/Pro-2/Tema-2.md new file mode 100644 index 0000000..6a5732b --- /dev/null +++ b/docs/topics/03-Apuntes/Pro-2/Tema-2.md @@ -0,0 +1,494 @@ + + +Copyright © 2024 Pablo Portas López + +# Tema 2 - Gestión dinámica de memoria + +Punteros en profundidad, las variables dinámicas, direcciones de memoria y la gestión de la memoria (pila (stack) y montículo (heap)). + +## Organización de la memoria de un programa + +Existen dos lugares en memoria para almacenar elementos: la pila (**stack**) y el montículo (**heap**). + +| Nombre | Función | +|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Código | El código compilado. | +| Datos estáticos | Datos estáticos compilados. | +| Pila (stack) | Se utiliza para la llamada de funciones y punteros, ahí se almacenan sus direcciones, parámetros, constantes locales, etc... | +| ... | Espacio para crecer. | +| Montículo (heap) | Parte de la memoria que no está ligada a lo guardado en la pila, se utiliza para las variables dinámicas, la memoria se reserva cuando se solicita (```malloc```). | + +## Definición de variables de tipo puntero + + + + +- Un puntero es un **tipo básico** en C (como ```int```, ```bool```, ```float```, ```etc```.) y como tal **ocupa en + memoria una cantidad determinada** (generalmente 4 bytes). +- Una variable de tipo puntero **contiene una dirección de memoria** en la cual se almacena **una variable de otro tipo + **. +- Las variables de tipo puntero en C se declara para que apunte a un tipo particular de + datos (```int```, ```float```, ```etc```.) y no puede apuntar a ningún otro. + + + + +// Estructura +typedef tipoApuntado* tipoPuntero +// Otro ejemplo +typedef int* tPEntero +// tPEntero es un puntero a int +tPEntero P +// Has declarado un puntero P +// que no apunta a nada todavía + + + + +## Reserva y destrucción dinámica de memoria + +### Inicialización de punteros + +```C +typedef int* tPEntero; +tPEntero P1; +int* P2; +``` + +- ```tPEntero``` las variables declaradas con este nuevo tipo contendrán direcciones de memoria de **variables enteras + **. +- ```P1``` se **reserva memoria** en la **pila** para guardar una **dirección de memoria** (4 bytes) que apuntara a un + entero del **montículo**. +- No es necesario definir un tipo para declarar un entero (como se ve en ```int* P2```), pero se recomienda hacerlo de + esta manera para **aumentar la abstracción**. +- La memoria es reservada, pero **no se elimina los contenidos que ya hubiera en esa zona**. Inicialmente, ```P1``` + o ```P2``` contendrá un valor _basura_. + + Utilizar punteros con contenido _basura_ puede tener **efectos fatales**. Por lo tanto, es mejor inicializarlos a + nulo ```P = NULL;``` + +En el lenguaje C este valor nulo se representa con la constante NULL, esta constante es la dirección de memoria nula. + +### La variable dinámica + +#### Creación de una variable dinámica + +Para crear la variable dinámica apuntada por un puntero se utiliza el operador ```malloc``` definido en el archivo de +cabecera ```stdlib```. + +```C +#include +P = malloc(sizeof(int)); +// Memoria suficiente para un entero +``` + +```mermaid +flowchart TB + subgraph Memoria + subgraph Stack + subgraph P + Dirección[3F5000AC o NULL] + end + end + + subgraph Heap + subgraph Variable[int = *P] + Contenido[________] + end + end + end + + Dirección --> Variable +``` + + +En caso de no existir memoria suficiente disponible al puntero P se le asigna valor NULL + + +#### Destrucción de una variable dinámica + +Para liberar la memoria de la variable dinámica se utiliza ```free``` definido en el archivo de cabecera ```stdlib```. + +Se marcará la variable a la que apunta el puntero como liberada, aunque **la información no es destruida**, ya no es +accesible. + +```C +#include +free(P); +``` + +```mermaid +flowchart TB + subgraph Memoria + subgraph Stack + subgraph P + Dirección[3F5000AC o NULL] + end + end + + subgraph Heap + subgraph Variable[Memoria liberada] + Contenido[________] + end + end + end + + Dirección -- X --> Variable +``` + +#### Acceso a una variable dinámica + +```C +// Declaración +int i; +int* p; + +// Creación +/* - - - */ +p = malloc(sizeof(int)) + +// Escritura +i = 5; +*p = 5; + +// Lectura +j = i; +j = *p; +``` + +## Asignación y comparación de punteros + +#### Asignación de valores a punteros + +```C +// Tenemos dos variables dinámicas P y Q +P = NULL; // Puntero a valor nulo +P = malloc(sizeof(int)); // Se reserva la memoria (se le asigna dirección de memoria) +*P = 3; // Se le asigna un entero +// Q tenía un valor previo *Q = 4; +P = Q; // Asignamos al puntero el valor de otro puntero +*P = 11; +printf("%d",*Q); // Resultado: 11 +``` + +Es decir ahora ```P``` **no** tiene la dirección de memoria que se le asignó al liberar la memoria, **tiene la +de ```Q```**. Visualmente: + +```mermaid +flowchart LR + subgraph Stack + P + Q + end + subgraph Heap + 11 + end + + Q --> 11 +``` + +```mermaid +flowchart LR + subgraph Stack + P + Q + end + subgraph Heap + __ + 11 + end + + P --> __ + Q --> 11 +``` + +```mermaid +flowchart LR + subgraph Stack + P + Q + end + subgraph Heap + 3 + 4 + end + + P --> 3 + Q --> 4 +``` + +```mermaid +flowchart LR + subgraph Stack + P + Q + end + subgraph Heap + 3 + 4 + end + + P --> 4 + Q --> 4 +``` + +```mermaid +flowchart LR + subgraph Stack + P + Q + end + subgraph Heap + 3 + 11 + end + + P --> 11 + Q --> 11 +``` + + + +En este código hay un error, al cambiar la dirección de P, debíamos hacer ```free(P)```. Al no hacerlo el ```3``` queda +**ocupando memoria** hasta el final de la ejecución. + + + +### Comparación de punteros + +```C +// Identidad +printf(P == Q); // Solo si tienen la misma dirección de memoria +// Igualdad +printf(*P == *Q); // Solo si su contenido es el mismo +``` + +```mermaid +--- +title: Identidad +--- +flowchart LR + subgraph P + dirP[3F5000AC] + end + subgraph Q + dirQ[3F5000AC] + end + subgraph valor[*P *Q] + 11 + end + + dirP & dirQ --> valor + +``` + +```mermaid +--- +title: Igualdad +--- +flowchart LR + subgraph P + dirP[3F5000AC] + end + subgraph Q + dirQ[600A232B] + end + subgraph valorP[*P] + vP[11] + end + subgraph valorQ[*Q] + vQ[11] + end + + dirP --> valorP + dirQ --> valorQ + +``` + +## Resumen sobre el uso de punteros y variables dinámicas + + + + + typedef int* pEntero; + pEntero p; + + + + + p = NULL; + // O para las Variables dinámica + p = malloc(sizeof(int)); + +

Se recomienda inicializar siempre los punteros, para no dejar valores basura.

+
+ + + free(p); // Liberar memoria (borrar valor) + p = NULL; + +

Siempre se debe hacer para crear un programa más eficiente en memoria.

+
+ + + *p = valor; // Cambiar el valor + variable = *p; // Copiar el valor + + + + + p = NULL; // Dirección nula + p = malloc(sizeof()); // Dirección de memoria recién liberada + p = q; // Dirección de otro puntero + + + + + p == q; p != q; // Comparación entre punteros + p == NULL; p != NULL; // Comparación con valor nulo + + +
+ +## Paso de punteros como parámetros + +En C por defecto las variables se pasan **por valor**, no existe el paso por referencia, para emularlo se emplean +**direcciones de memoria** (**punteros**). He aquí algunos **ejemplos** de los diferentes pasos de parámetros. + +### Paso de punteros por valor + +```C +// Esta función devuelve 0 o 1 dependiendo de si el puntero contiene NULL +int IsNull (tPInteger p) { + if (p == NULL) + return 1; + else + return 0; +} +// Otra opción más correcta sería +int IsNull (tPInteger p) { + return (p == NULL); +} +``` + +### Paso de punteros por referencia + +```C +// Función Swap que intercambia las direcciones de memoria de dos punteros +void Swap (tPInteger* p, tPInteger* q) { + tPInteger t; + + if (!IsNull(*p) && !IsNull(*q)) { + t = *p; + *p = *q; + *q = t; + } +} +``` + +## Paso de variables dinámicas como parámetros + +### Paso de variables por valor + +```C +// Función printscr que imprime el contenido de una variable dinámica entera +int *p; + +int printscr1 (int m) { + printf("%d \n",m); +} + +int main () { + ... + printsrc1(*p); + ... +} + +// Otra opción sería + +int *p; + +int printscr2 (int* m) { + printf(” %d \n”,*m); +} +void main () { + ... + printscr2(p); + ... +} +``` + +### Paso de variables por referencia + +```C +// Función readInteger para rellenar una variable dinámica +int *p; +int a; + +void main () { + ... + CreateVariable(&p); + readInteger(p); + readInteger(&a); + ... +} + +void readInteger (int* m) { + printf(”Give me an integer value: \n”); + scanf(” %d”, m); +} +``` + +## Errores más comunes en el manejo de punteros + +### Avisos de compilación más frecuentes (Warnings) + +- Las variables puntero solo pueden apuntar a datos de **un tipo particular**. Por lo tanto, para que los punteros + puedan compararse o asignarse entre sı́ **tienen que ser del mismo tipo**. + +- Confundir el puntero (p) con la variable a la que apunta (*p). + +### Errores de ejecución más frecuentes (Errors) + +- Las variables referenciadas por puntero (variables dinámicas) solo existen cuado se inicia el apuntador mediante la + asignación a **una variable que ya existe** o mediante ```malloc()```. Un error muy frecuente es intentar acceder a la + variable cuando no existe. + ```C + // Incorrecto + typedef int* tPos; + tPos p; + ... + *p = ... + // Correcto + typedef int* tPos; + tPos p, q; + ... + p = malloc(sizeof(int)); + *p = ... + // O bien + q = malloc(sizeof(int)); + p = q; + *p = ... + ``` + + + Los punteros acceden directamente a la memoria del ordenador, por tanto, pueden intentar acceder a posiciones no + reservadas si no son inicializados correctamente. Una **solución sencilla** es siempre iniciar vectores **apuntando + a ```NULL```**. + + + +- Cuando tenemos varios punteros que apuntan a la misma variable ```*q = 3; p = q; j = q; *j = 5;``` modificar + cualquiera de ellos ```q, p o j``` **sobrescribirá el contenido de todas**. + + Si cualquiera de ellos libera su memoria ```free(p)```, todos quedarán des referenciados. + +- La memoria de un ordenador **es grande pero no ilimitada**. Un programa **eficiente** es aquel que usa el mínimo de + memoria necesaria. Por eso debemos emplear ```free()``` en aquellos punteros que vayamos a modificar. Consejos: + 1. Dejar variables a las que no apunta ningún puntero, sin haber hecho un ```free()```. + 2. Hacer ```free()``` y no preocuparnos de que apunte a ```NULL```. + 3. Hacer un ```free()``` y tratar de acceder posteriormente al puntero. diff --git a/docs/topics/Teoria-Introduccion.md b/docs/topics/03-Apuntes/Teoria-Introduccion.md similarity index 77% rename from docs/topics/Teoria-Introduccion.md rename to docs/topics/03-Apuntes/Teoria-Introduccion.md index 1c99096..be9d668 100644 --- a/docs/topics/Teoria-Introduccion.md +++ b/docs/topics/03-Apuntes/Teoria-Introduccion.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/04-Ejemplos.topic b/docs/topics/04-Ejemplos.topic new file mode 100644 index 0000000..99fbe71 --- /dev/null +++ b/docs/topics/04-Ejemplos.topic @@ -0,0 +1,43 @@ + + + + + + + + Ejemplos + + Ejemplos sencillos y no tan sencillos, algunos sacados de clases de prácticas. + + + + + Próximamente... + + + + Otros ejemplos interesantes + Próximamente... + Próximamente... + Próximamente... + Próximamente... + + + + Ejemplos más avanzados + Próximamente... + Próximamente... + Próximamente... + Próximamente... + + + + + \ No newline at end of file diff --git a/docs/topics/04-Ejemplos/Rational-TAD-El-codigo.md b/docs/topics/04-Ejemplos/Rational-TAD-El-codigo.md new file mode 100644 index 0000000..b621aba --- /dev/null +++ b/docs/topics/04-Ejemplos/Rational-TAD-El-codigo.md @@ -0,0 +1,25 @@ + + +# Rational TAD + + +Un TAD para los números racionales, es decir, un par de números enteros: Numerador y denominador. + + +Copyright © Facultade de Informática da Coruña + + + + + + + + + + + + diff --git a/docs/topics/06-Tutoriales.topic b/docs/topics/06-Tutoriales.topic new file mode 100644 index 0000000..2f0c631 --- /dev/null +++ b/docs/topics/06-Tutoriales.topic @@ -0,0 +1,45 @@ + + + + + + + + Tutoriales + + Lo difícil hecho fácil. + + + + El Compilador - CLion + Próximamente... + + + + Otros tutoriales interesantes + Próximamente... + Próximamente... + Próximamente... + Próximamente... + + + + Tutoriales más avanzados + Próximamente... + Próximamente... + Próximamente... + Próximamente... + + + + + + diff --git a/docs/topics/Compilador.md b/docs/topics/06-Tutoriales/Compilador.md similarity index 99% rename from docs/topics/Compilador.md rename to docs/topics/06-Tutoriales/Compilador.md index 19aaa79..9e16814 100644 --- a/docs/topics/Compilador.md +++ b/docs/topics/06-Tutoriales/Compilador.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Extras.topic b/docs/topics/07-Extras.topic similarity index 50% rename from docs/topics/Extras.topic rename to docs/topics/07-Extras.topic index 4b477e5..164f527 100644 --- a/docs/topics/Extras.topic +++ b/docs/topics/07-Extras.topic @@ -3,12 +3,13 @@ SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd"> - + Extras @@ -23,18 +24,18 @@ SPDX-License-Identifier: CC-BY-NC-4.0 Más extras - Próximamente... - Próximamente... - Próximamente... - Próximamente... + Próximamente... + Próximamente... + Próximamente... + Próximamente... Continuamos con más extras para bingo - Próximamente... - Próximamente... - Próximamente... - Próximamente... + Próximamente... + Próximamente... + Próximamente... + Próximamente... diff --git a/docs/topics/Algoritmos.md b/docs/topics/07-Extras/Algoritmos.md similarity index 93% rename from docs/topics/Algoritmos.md rename to docs/topics/07-Extras/Algoritmos.md index abb9d02..eb84be3 100644 --- a/docs/topics/Algoritmos.md +++ b/docs/topics/07-Extras/Algoritmos.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Tres-En-Raya.md b/docs/topics/07-Extras/Tres-En-Raya.md similarity index 84% rename from docs/topics/Tres-En-Raya.md rename to docs/topics/07-Extras/Tres-En-Raya.md index 8450254..06c6415 100644 --- a/docs/topics/Tres-En-Raya.md +++ b/docs/topics/07-Extras/Tres-En-Raya.md @@ -1,5 +1,5 @@ diff --git a/docs/topics/Agradecimientos.md b/docs/topics/11-Agradecimientos.md similarity index 67% rename from docs/topics/Agradecimientos.md rename to docs/topics/11-Agradecimientos.md index 7f5f4fc..8105497 100644 --- a/docs/topics/Agradecimientos.md +++ b/docs/topics/11-Agradecimientos.md @@ -1,5 +1,5 @@ @@ -12,9 +12,9 @@ SPDX-License-Identifier: CC-BY-NC-4.0 ### Boletines -#### Material Original +#### Bol: Programación I -##### Basado en +**Basado en** @@ -23,27 +23,57 @@ SPDX-License-Identifier: CC-BY-NC-4.0 -##### Adaptación por +**Material Original** Copyright © María Del Carmen Bóveda Álvarez +**Adaptado por** + +Copyright © 2024 Pablo Portas López + +#### TGR: Programación II + +**Material Original** + +Copyright © Facultade de Informática da Coruña + ### Teoría #### Programación I -##### Resúmenes +**Material Original** + +Copyright © Facultade de Informática da Coruña + +**Resúmenes** Copyright © 2024 Daniel Feito Pin +#### Programación II + +**Material Original** + +Copyright © Facultade de Informática da Coruña + +**Resúmenes** + +Copyright © 2024 Pablo Portas López + +### Ejemplos + +**Rational TAD** + +Copyright © Facultade de Informática da Coruña + ### Tutoriales -#### Compilador +**Compilador** Copyright © Abel Cedrón Santaeufemia diff --git a/docs/topics/Para-Colaboradores.md b/docs/topics/99-Para-Colaboradores.md similarity index 88% rename from docs/topics/Para-Colaboradores.md rename to docs/topics/99-Para-Colaboradores.md index e62fdf9..4b3d954 100644 --- a/docs/topics/Para-Colaboradores.md +++ b/docs/topics/99-Para-Colaboradores.md @@ -1,7 +1,7 @@ @@ -15,7 +15,8 @@ Gracias por colaborar en serio 🤗 -Supongo que ya lo has hecho, pero recuerda leer [la guía de contribución](https://github.com/TeenBiscuits/Pro2324/blob/main/CONTRIBUTING.md). +Supongo que ya lo has hecho, pero recuerda +leer [la guía de contribución](https://github.com/TeenBiscuits/Pro2324/blob/main/CONTRIBUTING.md). diff --git a/docs/topics/Boletines.topic b/docs/topics/Boletines.topic deleted file mode 100644 index 678e769..0000000 --- a/docs/topics/Boletines.topic +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - Boletines - - Enunciados y soluciones a los boletines de ejercicios de Programación. - - - - - - Boletín - 3 - Boletín 4 - - - - - - Programación I - Boletín 1 - Boletín 2 - Boletín - 3 - Boletín 4 - - - - - - Programación II - - Próximamente... - - - - - Créditos - Material - Original - Basado - en la Obra - - - - - - - \ No newline at end of file diff --git a/docs/topics/Ejemplos.md b/docs/topics/Ejemplos.md deleted file mode 100644 index 38c8ab1..0000000 --- a/docs/topics/Ejemplos.md +++ /dev/null @@ -1,9 +0,0 @@ - - -# Ejemplos - -Próximamente... \ No newline at end of file diff --git a/docs/topics/Examenes.md b/docs/topics/Examenes.md deleted file mode 100644 index 8bfee7c..0000000 --- a/docs/topics/Examenes.md +++ /dev/null @@ -1,9 +0,0 @@ - - -# Antiguos Exámenes - -¡En construcción! \ No newline at end of file diff --git a/docs/topics/Pro2324.topic b/docs/topics/Pro2324.topic deleted file mode 100644 index b502843..0000000 --- a/docs/topics/Pro2324.topic +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - Pro2324 - - Ejercicios Resueltos 📝 y Apuntes 📚 para las asignaturas de Programación I y II del Grao en Enxeñaría Informática de la Universidade da Coruña en el curso 2023/24. 💻🎓 - - - - - - Boletines - Apuntes - - - - - - Otras cosas interesantes - - Ejemplos - - Antiguos Exámenes - Tutoriales - - Próximamente... - - - - - - Para estudiantes más avanzados - Extras - Colabora - - - - - - - Otros enlaces - Licencia Documentación - Licencia Código - Reportar un Error / Sugerencia - Apoye el desarrollo - Agradecimientos - - - - - - \ No newline at end of file diff --git a/docs/topics/Tutoriales.topic b/docs/topics/Tutoriales.topic deleted file mode 100644 index 98acd44..0000000 --- a/docs/topics/Tutoriales.topic +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - Tutoriales - - Lo difícil hecho fácil. - - - - El Compilador - CLion - Próximamente... - - - - Otros tutoriales interesantes - Próximamente... - Próximamente... - Próximamente... - Próximamente... - - - - Tutoriales más avanzados - Próximamente... - Próximamente... - Próximamente... - Próximamente... - - - - - - diff --git a/docs/writerside.cfg b/docs/writerside.cfg index 7a207c7..837e7a5 100644 --- a/docs/writerside.cfg +++ b/docs/writerside.cfg @@ -1,7 +1,7 @@ diff --git a/logo/Logo.curve.license b/logo/Logo.curve.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Logo.curve.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/logo/Logo.ico.license b/logo/Logo.ico.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Logo.ico.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/logo/Logo.png.license b/logo/Logo.png.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Logo.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/logo/Logo.svg.license b/logo/Logo.svg.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Logo.svg.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/logo/Pro2324 GitHub Preview.curve.license b/logo/Pro2324 GitHub Preview.curve.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Pro2324 GitHub Preview.curve.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/logo/Pro2324 GitHub Preview.png.license b/logo/Pro2324 GitHub Preview.png.license deleted file mode 100644 index 8cca2bc..0000000 --- a/logo/Pro2324 GitHub Preview.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 Pablo Portas López - -SPDX-License-Identifier: CC-BY-NC-4.0 diff --git a/src/Boletin_1/CMakeLists.txt b/src/Boletin_1/CMakeLists.txt index 055de5f..47c2590 100644 --- a/src/Boletin_1/CMakeLists.txt +++ b/src/Boletin_1/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) project(Boletin_1 C) diff --git a/src/Boletin_1/Ejercicio_01.c b/src/Boletin_1/Ejercicio_01.c index b80a576..1d0e2bf 100644 --- a/src/Boletin_1/Ejercicio_01.c +++ b/src/Boletin_1/Ejercicio_01.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include // // SPDX-License-Identifier: GPL-3.0-only + #include #define MAX 30 diff --git a/src/Boletin_1/Ejercicio_03.c b/src/Boletin_1/Ejercicio_03.c index 77d13e2..4ef4b25 100644 --- a/src/Boletin_1/Ejercicio_03.c +++ b/src/Boletin_1/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie3(x, y) ((x*y)/2) // Defino la fórmula del area del triángulo diff --git a/src/Boletin_1/Ejercicio_04.c b/src/Boletin_1/Ejercicio_04.c index 9c40117..e6cc2fb 100644 --- a/src/Boletin_1/Ejercicio_04.c +++ b/src/Boletin_1/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie2(x, y) (x*y) // DECLARO LA FÓRMULA DE LA SUPERFICIE DE UN RECTÁNGULO diff --git a/src/Boletin_1/Ejercicio_05.c b/src/Boletin_1/Ejercicio_05.c index d8fbed7..f8dbe55 100644 --- a/src/Boletin_1/Ejercicio_05.c +++ b/src/Boletin_1/Ejercicio_05.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define superficie2(x, y) (x*y) // DECLARO LA FÓRMULA DE LA SUPERFICIE DE UN RECTÁNGULO diff --git a/src/Boletin_1/Ejercicio_06.c b/src/Boletin_1/Ejercicio_06.c index 1dbb100..65922b2 100644 --- a/src/Boletin_1/Ejercicio_06.c +++ b/src/Boletin_1/Ejercicio_06.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include # define PI 3.14159265359 # define area(x) (4 * PI * x * x) diff --git a/src/Boletin_1/Ejercicio_07.c b/src/Boletin_1/Ejercicio_07.c index e8733b9..b8f9bbb 100644 --- a/src/Boletin_1/Ejercicio_07.c +++ b/src/Boletin_1/Ejercicio_07.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include # define IVA 0.24 diff --git a/src/Boletin_1/Ejercicio_08.c b/src/Boletin_1/Ejercicio_08.c index 9d2e842..ce1fa38 100644 --- a/src/Boletin_1/Ejercicio_08.c +++ b/src/Boletin_1/Ejercicio_08.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_09.c b/src/Boletin_1/Ejercicio_09.c index f563931..a677992 100644 --- a/src/Boletin_1/Ejercicio_09.c +++ b/src/Boletin_1/Ejercicio_09.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_10.c b/src/Boletin_1/Ejercicio_10.c index 43fb45e..fa6864c 100644 --- a/src/Boletin_1/Ejercicio_10.c +++ b/src/Boletin_1/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define productoescalar(vx1,vy1,vz1,vx2,vy2,vz2) ((vx1*vx2)+(vy1*vy2)+(vz1*vz2)) diff --git a/src/Boletin_1/Ejercicio_11.c b/src/Boletin_1/Ejercicio_11.c index 68e3497..65d802c 100644 --- a/src/Boletin_1/Ejercicio_11.c +++ b/src/Boletin_1/Ejercicio_11.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_12.c b/src/Boletin_1/Ejercicio_12.c index 8e83b26..336e693 100644 --- a/src/Boletin_1/Ejercicio_12.c +++ b/src/Boletin_1/Ejercicio_12.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_13.c b/src/Boletin_1/Ejercicio_13.c index 4da5864..f522967 100644 --- a/src/Boletin_1/Ejercicio_13.c +++ b/src/Boletin_1/Ejercicio_13.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define PI 3.14159265359 // APROXIMACIÓN DE PI #define perimetro(x) (2 * PI * x) // PERIMETRO DEL CÍRCULO diff --git a/src/Boletin_1/Ejercicio_14.c b/src/Boletin_1/Ejercicio_14.c index 5fffb2d..1fea022 100644 --- a/src/Boletin_1/Ejercicio_14.c +++ b/src/Boletin_1/Ejercicio_14.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include // PARA PONER LA FECHA ACTUAL diff --git a/src/Boletin_1/Ejercicio_15.c b/src/Boletin_1/Ejercicio_15.c index 1649feb..9cebceb 100644 --- a/src/Boletin_1/Ejercicio_15.c +++ b/src/Boletin_1/Ejercicio_15.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_1/Ejercicio_16.c b/src/Boletin_1/Ejercicio_16.c index 8af423a..9548220 100644 --- a/src/Boletin_1/Ejercicio_16.c +++ b/src/Boletin_1/Ejercicio_16.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_17.c b/src/Boletin_1/Ejercicio_17.c index 3418e2d..1792fb9 100644 --- a/src/Boletin_1/Ejercicio_17.c +++ b/src/Boletin_1/Ejercicio_17.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_1/Ejercicio_18.c b/src/Boletin_1/Ejercicio_18.c index 43465bc..422edbb 100644 --- a/src/Boletin_1/Ejercicio_18.c +++ b/src/Boletin_1/Ejercicio_18.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define MAX 20 // DEFINO MÁXIMO PARA LOS STRINGS DE CARACTERES diff --git a/src/Boletin_1/Ejercicio_19.c b/src/Boletin_1/Ejercicio_19.c index 7a7e1b1..a021101 100644 --- a/src/Boletin_1/Ejercicio_19.c +++ b/src/Boletin_1/Ejercicio_19.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define IVA 0.21 diff --git a/src/Boletin_1/Ejercicio_20.c b/src/Boletin_1/Ejercicio_20.c index 19190fb..bf8bf0d 100644 --- a/src/Boletin_1/Ejercicio_20.c +++ b/src/Boletin_1/Ejercicio_20.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define incremetocoste(x, y) (x * (1 + y)); diff --git a/src/Boletin_2/CMakeLists.txt b/src/Boletin_2/CMakeLists.txt index 91c31fb..88176b7 100644 --- a/src/Boletin_2/CMakeLists.txt +++ b/src/Boletin_2/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) project(Boletin_2 C) diff --git a/src/Boletin_2/Ejercicio_01.c b/src/Boletin_2/Ejercicio_01.c index 2fbef7b..8281ac4 100644 --- a/src/Boletin_2/Ejercicio_01.c +++ b/src/Boletin_2/Ejercicio_01.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_02.c b/src/Boletin_2/Ejercicio_02.c index 407e18b..18704c4 100644 --- a/src/Boletin_2/Ejercicio_02.c +++ b/src/Boletin_2/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_03.c b/src/Boletin_2/Ejercicio_03.c index 16c6566..08b68a6 100644 --- a/src/Boletin_2/Ejercicio_03.c +++ b/src/Boletin_2/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_04.c b/src/Boletin_2/Ejercicio_04.c index 704bdaf..7bbeb62 100644 --- a/src/Boletin_2/Ejercicio_04.c +++ b/src/Boletin_2/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_05.c b/src/Boletin_2/Ejercicio_05.c index 0d34fd3..af4361f 100644 --- a/src/Boletin_2/Ejercicio_05.c +++ b/src/Boletin_2/Ejercicio_05.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_06.c b/src/Boletin_2/Ejercicio_06.c index 5c1ae26..a1aee29 100644 --- a/src/Boletin_2/Ejercicio_06.c +++ b/src/Boletin_2/Ejercicio_06.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define porcentaje(x, y) ( x / (float) y * 100) diff --git a/src/Boletin_2/Ejercicio_07.c b/src/Boletin_2/Ejercicio_07.c index b19c02a..23b1b8c 100644 --- a/src/Boletin_2/Ejercicio_07.c +++ b/src/Boletin_2/Ejercicio_07.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_08.c b/src/Boletin_2/Ejercicio_08.c index 6b9116a..e63647f 100644 --- a/src/Boletin_2/Ejercicio_08.c +++ b/src/Boletin_2/Ejercicio_08.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_09.c b/src/Boletin_2/Ejercicio_09.c index c48ce6f..8690c32 100644 --- a/src/Boletin_2/Ejercicio_09.c +++ b/src/Boletin_2/Ejercicio_09.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include #include // PARA OBTENER EL TIEMPO ACTUAL diff --git a/src/Boletin_2/Ejercicio_10.c b/src/Boletin_2/Ejercicio_10.c index 61b8cec..d62a0df 100644 --- a/src/Boletin_2/Ejercicio_10.c +++ b/src/Boletin_2/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define IRPF 0.15 diff --git a/src/Boletin_2/Ejercicio_11.c b/src/Boletin_2/Ejercicio_11.c index 1800fac..5d2e3c3 100644 --- a/src/Boletin_2/Ejercicio_11.c +++ b/src/Boletin_2/Ejercicio_11.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_12.c b/src/Boletin_2/Ejercicio_12.c index ef63467..abb8c94 100644 --- a/src/Boletin_2/Ejercicio_12.c +++ b/src/Boletin_2/Ejercicio_12.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_13.c b/src/Boletin_2/Ejercicio_13.c index df89cee..ab37ab4 100644 --- a/src/Boletin_2/Ejercicio_13.c +++ b/src/Boletin_2/Ejercicio_13.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include // HACER SENOS Y COSENOS SIN ESTO ES DIFÍCIL diff --git a/src/Boletin_2/Ejercicio_14.c b/src/Boletin_2/Ejercicio_14.c index 8ec411b..a285b21 100644 --- a/src/Boletin_2/Ejercicio_14.c +++ b/src/Boletin_2/Ejercicio_14.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_15.c b/src/Boletin_2/Ejercicio_15.c index cfe06b9..08c4455 100644 --- a/src/Boletin_2/Ejercicio_15.c +++ b/src/Boletin_2/Ejercicio_15.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_2/Ejercicio_17.c b/src/Boletin_2/Ejercicio_17.c index fb5d21b..a494fc7 100644 --- a/src/Boletin_2/Ejercicio_17.c +++ b/src/Boletin_2/Ejercicio_17.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_28.c b/src/Boletin_2/Ejercicio_28.c index 5661363..08902ef 100644 --- a/src/Boletin_2/Ejercicio_28.c +++ b/src/Boletin_2/Ejercicio_28.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() { diff --git a/src/Boletin_2/Ejercicio_39.c b/src/Boletin_2/Ejercicio_39.c index e9b19ad..8298ab6 100644 --- a/src/Boletin_2/Ejercicio_39.c +++ b/src/Boletin_2/Ejercicio_39.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include #include diff --git a/src/Boletin_2/Ejercicio_45.c b/src/Boletin_2/Ejercicio_45.c index 9e7cf2f..da26298 100644 --- a/src/Boletin_2/Ejercicio_45.c +++ b/src/Boletin_2/Ejercicio_45.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_2/Ejercicio_46.c b/src/Boletin_2/Ejercicio_46.c index 248025c..5173410 100644 --- a/src/Boletin_2/Ejercicio_46.c +++ b/src/Boletin_2/Ejercicio_46.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_2/Ejercicio_47.c b/src/Boletin_2/Ejercicio_47.c index 3e59539..9b9aedd 100644 --- a/src/Boletin_2/Ejercicio_47.c +++ b/src/Boletin_2/Ejercicio_47.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_2/Ejercicio_48.c b/src/Boletin_2/Ejercicio_48.c index ae2a9e2..abe263a 100644 --- a/src/Boletin_2/Ejercicio_48.c +++ b/src/Boletin_2/Ejercicio_48.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_2/Ejercicio_50.c b/src/Boletin_2/Ejercicio_50.c index 66c9261..b87d5c8 100644 --- a/src/Boletin_2/Ejercicio_50.c +++ b/src/Boletin_2/Ejercicio_50.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/CMakeLists.txt b/src/Boletin_3/CMakeLists.txt index 1a31ab0..15abe53 100644 --- a/src/Boletin_3/CMakeLists.txt +++ b/src/Boletin_3/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.25) project(Boletin_3 C) diff --git a/src/Boletin_3/Ejercicio_01.c b/src/Boletin_3/Ejercicio_01.c index 296861d..13a8511 100644 --- a/src/Boletin_3/Ejercicio_01.c +++ b/src/Boletin_3/Ejercicio_01.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include void imprimeLBlanco(int nlineas); int main() { diff --git a/src/Boletin_3/Ejercicio_02.c b/src/Boletin_3/Ejercicio_02.c index c373a90..95312c2 100644 --- a/src/Boletin_3/Ejercicio_02.c +++ b/src/Boletin_3/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #include diff --git a/src/Boletin_3/Ejercicio_03.c b/src/Boletin_3/Ejercicio_03.c index 5ac66b3..8235f03 100644 --- a/src/Boletin_3/Ejercicio_03.c +++ b/src/Boletin_3/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int mayorDiv(int n); diff --git a/src/Boletin_3/Ejercicio_04.c b/src/Boletin_3/Ejercicio_04.c index cde4eb1..b62d85f 100644 --- a/src/Boletin_3/Ejercicio_04.c +++ b/src/Boletin_3/Ejercicio_04.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_05.c b/src/Boletin_3/Ejercicio_05.c index dabfb22..4e39f8f 100644 --- a/src/Boletin_3/Ejercicio_05.c +++ b/src/Boletin_3/Ejercicio_05.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_06.c b/src/Boletin_3/Ejercicio_06.c index 64dbba4..a16aeed 100644 --- a/src/Boletin_3/Ejercicio_06.c +++ b/src/Boletin_3/Ejercicio_06.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_07.c b/src/Boletin_3/Ejercicio_07.c index d9fab67..df28bcc 100644 --- a/src/Boletin_3/Ejercicio_07.c +++ b/src/Boletin_3/Ejercicio_07.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_08.c b/src/Boletin_3/Ejercicio_08.c index 8addaeb..4b8aafa 100644 --- a/src/Boletin_3/Ejercicio_08.c +++ b/src/Boletin_3/Ejercicio_08.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_09.c b/src/Boletin_3/Ejercicio_09.c index 8b2ecc9..08c30a9 100644 --- a/src/Boletin_3/Ejercicio_09.c +++ b/src/Boletin_3/Ejercicio_09.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_10.c b/src/Boletin_3/Ejercicio_10.c index a1b1a93..72f2600 100644 --- a/src/Boletin_3/Ejercicio_10.c +++ b/src/Boletin_3/Ejercicio_10.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_11.c b/src/Boletin_3/Ejercicio_11.c index e32681e..cf1aead 100644 --- a/src/Boletin_3/Ejercicio_11.c +++ b/src/Boletin_3/Ejercicio_11.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only diff --git a/src/Boletin_3/Ejercicio_12.c b/src/Boletin_3/Ejercicio_12.c index 3412efe..1268d4f 100644 --- a/src/Boletin_3/Ejercicio_12.c +++ b/src/Boletin_3/Ejercicio_12.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_13.c b/src/Boletin_3/Ejercicio_13.c index 39b7541..0bd66df 100644 --- a/src/Boletin_3/Ejercicio_13.c +++ b/src/Boletin_3/Ejercicio_13.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_14.c b/src/Boletin_3/Ejercicio_14.c index 542aa13..5e994a2 100644 --- a/src/Boletin_3/Ejercicio_14.c +++ b/src/Boletin_3/Ejercicio_14.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // PARA HACER ESTE EJERCICIO HACEN FALTA CONOCIMIENTOS EN ELECTRÓNICA BÁSICA!!! diff --git a/src/Boletin_3/Ejercicio_23.c b/src/Boletin_3/Ejercicio_23.c index d56ec71..8b2c431 100644 --- a/src/Boletin_3/Ejercicio_23.c +++ b/src/Boletin_3/Ejercicio_23.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_3/Ejercicio_28.c b/src/Boletin_3/Ejercicio_28.c index da007b2..a9a2f73 100644 --- a/src/Boletin_3/Ejercicio_28.c +++ b/src/Boletin_3/Ejercicio_28.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only // Librerías diff --git a/src/Boletin_4/CMakeLists.txt b/src/Boletin_4/CMakeLists.txt index f55b7c9..3c768f9 100644 --- a/src/Boletin_4/CMakeLists.txt +++ b/src/Boletin_4/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) project(Boletin_4 C) @@ -14,10 +14,10 @@ add_executable(Bol4-Ej04 Ejercicio_04.c) # add_executable(Bol4-Ej05 Ejercicio_05.c) # add_executable(Bol4-Ej06 Ejercicio_06.c) # add_executable(Bol4-Ej07 Ejercicio_07.c) -# add_executable(Bol4-Ej08 Ejercicio_08.c) +add_executable(Bol4-Ej08 Ejercicio_08.c) add_executable(Bol4-Ej09 Ejercicio_09.c) add_executable(Bol4-Ej10 Ejercicio_10.c) -# add_executable(Bol4-Ej11 Ejercicio_11.c) +add_executable(Bol4-Ej11 Ejercicio_11.c) #add_executable(Bol4-Ej12 Ejercicio_12.c) #add_executable(Bol4-Ej13 Ejercicio_13.c) # add_executable(Bol4-Ej14 Ejercicio_14.c) @@ -33,8 +33,8 @@ add_executable(Bol4-Ej20 Ejercicio_20.c) add_executable(Bol4-Ej24 Ejercicio_24.c) add_executable(Bol4-Ej25 Ejercicio_25.c) # add_executable(Bol4-Ej26 Ejercicio_26.c) -# add_executable(Bol4-Ej27 Ejercicio_27.c) -# add_executable(Bol4-Ej28 Ejercicio_28.c) +add_executable(Bol4-Ej27 Ejercicio_27.c) +add_executable(Bol4-Ej28 Ejercicio_28.c) add_executable(Bol4-Ej29 Ejercicio_29.c) # add_executable(Bol4-Ej30 Ejercicio_30.c) # add_executable(Bol4-Ej31 Ejercicio_31.c) @@ -42,8 +42,8 @@ add_executable(Bol4-Ej29 Ejercicio_29.c) # add_executable(Bol4-Ej33 Ejercicio_33.c) # add_executable(Bol4-Ej34 Ejercicio_34.c) # add_executable(Bol4-Ej35 Ejercicio_35.c) -# add_executable(Bol4-Ej36 Ejercicio_36.c) -# add_executable(Bol4-Ej37 Ejercicio_37.c) +add_executable(Bol4-Ej36 Ejercicio_36.c) +add_executable(Bol4-Ej37 Ejercicio_37.c) # add_executable(Bol4-Ej38 Ejercicio_38.c) # add_executable(Bol4-Ej39 Ejercicio_39.c) -# add_executable(Bol4-Ej40 Ejercicio_40.c) +add_executable(Bol4-Ej40 Ejercicio_40.c) diff --git a/src/Boletin_4/Ejercicio_01.c b/src/Boletin_4/Ejercicio_01.c index 75128e2..9b46f3f 100644 --- a/src/Boletin_4/Ejercicio_01.c +++ b/src/Boletin_4/Ejercicio_01.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Miguel Fraga Pico // // SPDX-License-Identifier: GPL-3.0-only + #include void askNumbers(int *cadena) diff --git a/src/Boletin_4/Ejercicio_02.c b/src/Boletin_4/Ejercicio_02.c index 44c1bf0..83e8f7e 100644 --- a/src/Boletin_4/Ejercicio_02.c +++ b/src/Boletin_4/Ejercicio_02.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/src/Boletin_4/Ejercicio_03.c b/src/Boletin_4/Ejercicio_03.c index 5657403..ea8de98 100644 --- a/src/Boletin_4/Ejercicio_03.c +++ b/src/Boletin_4/Ejercicio_03.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/src/Boletin_4/Ejercicio_04.c b/src/Boletin_4/Ejercicio_04.c index 2ddf270..2aad2ae 100644 --- a/src/Boletin_4/Ejercicio_04.c +++ b/src/Boletin_4/Ejercicio_04.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include diff --git a/src/Boletin_4/Ejercicio_08.c b/src/Boletin_4/Ejercicio_08.c new file mode 100644 index 0000000..56d7631 --- /dev/null +++ b/src/Boletin_4/Ejercicio_08.c @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 10 + +int main(){ + // Define variables and ask for parameters + int nums[N], guess, lGuess, uGuess; + printf("\nInput an array of 10 elements by pressing Enter after each element: "); + for(int i=0; i<10; i++){ + scanf("%d", &nums[i]); + } + // Input guess + printf("\nWhat number do you want to find?: "); + scanf("%d", &guess); + // Lower bound + for(int i=0; i=0; i--){ + if(nums[i] == guess){ + uGuess = i; + break; + } + } + // Print solutions + printf("\nLower bound solution: %d", lGuess); + printf("\nUpper bound solution: %d", uGuess); + printf("\n"); +} \ No newline at end of file diff --git a/src/Boletin_4/Ejercicio_10.c b/src/Boletin_4/Ejercicio_10.c index b4ac5c3..e94a11c 100644 --- a/src/Boletin_4/Ejercicio_10.c +++ b/src/Boletin_4/Ejercicio_10.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + // Librerías #include #include diff --git a/src/Boletin_4/Ejercicio_11.c b/src/Boletin_4/Ejercicio_11.c new file mode 100644 index 0000000..b1c4770 --- /dev/null +++ b/src/Boletin_4/Ejercicio_11.c @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include + +// Sum all the elements of the array using recursion +int arraySum(int n, int sumNums[n], int loops, int accum){ + if (loops == 0){return accum;} else{ + accum+=sumNums[n-loops]; + loops--; + arraySum(n, sumNums, loops, accum); + } +} + +int main(){ + // Define variables and ask for parameters + int n = 10; + int toSum[n], accum = 0, loops = n; + int result; + printf("Input the 10 numbers for the array separated by Enter:\n"); + for(int i=0; i<10; i++){ + scanf("%d", &toSum[i]); + } + // Recursion fun starts here + result = arraySum(n, toSum, loops, accum); + // Print result + printf("\nThe result of the sum is %d\n", result); + return 0; +} \ No newline at end of file diff --git a/src/Boletin_4/Ejercicio_24.c b/src/Boletin_4/Ejercicio_24.c index 9c22c8f..5f81517 100644 --- a/src/Boletin_4/Ejercicio_24.c +++ b/src/Boletin_4/Ejercicio_24.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Miguel Fraga Pico // // SPDX-License-Identifier: GPL-3.0-only + #include struct empleados diff --git a/src/Boletin_4/Ejercicio_25.c b/src/Boletin_4/Ejercicio_25.c index 0bb867b..e0e840f 100644 --- a/src/Boletin_4/Ejercicio_25.c +++ b/src/Boletin_4/Ejercicio_25.c @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Daniel Deza Prieto // // SPDX-License-Identifier: GPL-3.0-only + #include void reader(char frase[200]) { printf("Please input the phrase up to a size of 200 characters\n"); diff --git a/src/Boletin_4/Ejercicio_27.c b/src/Boletin_4/Ejercicio_27.c new file mode 100644 index 0000000..8b53f23 --- /dev/null +++ b/src/Boletin_4/Ejercicio_27.c @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 100 + +// Count the amount of characters in the string +void countString(char toCount[N]){ + int count = 0; + for(int i=0; toCount[i]!='\0'; i++){ + count++; + } + printf("Word %s has %d characters\n", toCount, count); +} + +// Separate the string and fix multiple separators in the string by ignoring them +void separateString(char toSplit[N]){ + char splitted[N][N]; + int count=0, row=0, column=0; + while(toSplit[count] != '\n'){ + if(toSplit[count] == ' ' || toSplit[count] == ',' || toSplit[count] == '.'){ + splitted[row][column] = '\0'; + column = 0; + if (toSplit[count-1] != ' ' && toSplit[count-1] != ',' && toSplit[count-1] != '.'){row++;} + } else { + splitted[row][column] = toSplit[count]; + column++; + } + count++; + } + for(int i=0; splitted[i][0] != '\0'; i++){ + countString(splitted[i]); + } +} + +int main(){ + // Define variables and ask for parameters + char sentence[N]; + printf("Type a sentence of max 100 characters:\n"); + // fgets instead of gets for buffer overflow protection + fgets(sentence, N, stdin); + // Start the fun + separateString(sentence); + return 0; +} \ No newline at end of file diff --git a/src/Boletin_4/Ejercicio_28.c b/src/Boletin_4/Ejercicio_28.c new file mode 100644 index 0000000..32c3299 --- /dev/null +++ b/src/Boletin_4/Ejercicio_28.c @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#define N 256 + +int main(){ + // Define variables and ask for parameters + int i=0, j=0; + char sentence[N], fixedSentence[N]; + printf("Type a sentence\n"); + // fgets instead of gets for buffer protection + fgets(sentence, N, stdin); + // Fix the sentence's multiple spaces + while(sentence[i]!='\0'){ + if(sentence[i] == ' ' && sentence[i+1] == ' '){ + i++; + continue; + } else { + fixedSentence[j]=sentence[i]; + i++; + j++; + } + } + // Print the result after apprending the end of string to the fixed variable + fixedSentence[j+1] = '\0'; + printf("\nThe sentence with fixed spaces is:\n%s", fixedSentence); + return 0; +} \ No newline at end of file diff --git a/src/Boletin_4/Ejercicio_36.c b/src/Boletin_4/Ejercicio_36.c new file mode 100644 index 0000000..74c3b32 --- /dev/null +++ b/src/Boletin_4/Ejercicio_36.c @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2024 Sprinter05 +// +// SPDX-License-Identifier: GPL-3.0-only + +// Libraries +#include +#include +#define N 100 + +void factorialDecomp(int toDecomp){ + int factors[N], primes=2, loops=0, og=toDecomp; + // Check if its 1 or 0 and just print out that the decomp is 1 + if(toDecomp == 0 | toDecomp == 1){ + printf("\nNumber %d factorial decomposition is: 1", og); + return; + } + // Repeat the factorization with each reduced number until its 0 + for(int i=0;i +#define N 11 +#define M 100 + +void checkLeaps(int n, int year){ + int closeLeap, leaps[M], counter=1; + //Check closest + for(int i=0;i<4;i++){ + if((year+i)%4 == 0){ + closeLeap = year+i; + break; + } + } + // Get all the following leap years until the max amount is satisfied + leaps[0]=closeLeap; + while(counter != 100){ + leaps[counter]=closeLeap+(4*counter); + counter++; + } + // Print results + printf("\nFollowing 100 leap years:\n"); + for(int i=0; i // Main library +#include // For managing the program +#include // Bool function +#include // Use UNIX commands +#include // For random numbers +#define N 16 // Change this number to change the matrix size +#define SPEED 2 // Higher means faster: MUST BE GREATER OR EQUAL THAN 1 +#define clear() printf("\033[H\033[J") // Clean screen + +// NOTE: RUN FROM VSCODE TERMINAL OR THE MODERN WINDOWS TERMINAL APP NOT CMD OTHERWISE UTF-8 EMOJIS WILL NOT DISPLAY +// ALSO MAKE SURE UTF-8 SUPPORT IS ENABLED IN YOUR TERMINAL OF CHOICE, APPLIES TO ALL OPERATING SYSTEMS + +int gameOfLife[N][N]; +int updatedGame[N][N]; +int ticks=0; // Generations + +// THIS IS THE MATRIX THAT WILL RUN IF THE OPTION c (choose) IS CHOSEN AT RUNTIME +// THIS EXAMPLE MATRIX IS OF SIZE 16X16 SO IF YOU CHANGE N MODIFY THE SIZE HERE TOO +// 0 = DISABLED, 1 = ENABLED +int chooseGameOfLife[N][N] = { + {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0}, + {0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0}, + {0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, + {0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0}, + {0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0}, + {0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} +}; + +// Make sure the cell is not outsided of the matrix +bool outOfBound(int row, int column){ + bool oob; + if(row >= N || row < 0 || column >= N || column < 0){oob = true;} + else {oob = false;} + return oob; +} + +// Check rules 1, 2 and 3 for death status +void checkDeath(int row, int column){ + int liveNeighbours=0; + // Check neighbours + if(outOfBound(row+1,column) == false){if(gameOfLife[row+1][column] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column+1) == false){if(gameOfLife[row+1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column-1) == false){if(gameOfLife[row+1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column) == false){if(gameOfLife[row-1][column] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column+1) == false){if(gameOfLife[row-1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column-1) == false){if(gameOfLife[row-1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row,column+1) == false){if(gameOfLife[row][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row,column-1) == false){if(gameOfLife[row][column-1] == 1){liveNeighbours++;}} + // Any live cell with fewer than two live neighbours dies, as if by underpopulation. + if(liveNeighbours<2){updatedGame[row][column]=0;} + // Any live cell with two or three live neighbours lives on to the next generation. + else if(liveNeighbours>=2 && liveNeighbours<=3){updatedGame[row][column]=1;} + // Any live cell with more than three live neighbours dies, as if by overpopulation. + else if(liveNeighbours>3){updatedGame[row][column]=0;} +} + +// Check rule 4 for revive status +void checkRevive(int row, int column){ + int liveNeighbours=0; + // Check neighbours + if(outOfBound(row+1,column) == false){if(gameOfLife[row+1][column] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column+1) == false){if(gameOfLife[row+1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row+1,column-1) == false){if(gameOfLife[row+1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column) == false){if(gameOfLife[row-1][column] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column+1) == false){if(gameOfLife[row-1][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row-1,column-1) == false){if(gameOfLife[row-1][column-1] == 1){liveNeighbours++;}} + if(outOfBound(row,column+1) == false){if(gameOfLife[row][column+1] == 1){liveNeighbours++;}} + if(outOfBound(row,column-1) == false){if(gameOfLife[row][column-1] == 1){liveNeighbours++;}} + // Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction. + if(liveNeighbours==3){updatedGame[row][column]=1;} + // Remain dead + else {updatedGame[row][column]=0;} +} + +// Run a generation +void tick(){ + // Run generation + for(int i=0;i # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) 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..dcbfa73 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/CMakeLists.txt @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Facultade de Informática de A Coruña +# +# SPDX-License-Identifier: CC-BY-4.0 + +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..ff6194b --- /dev/null +++ b/src/Ejemplos/TAD_Rational/main.c @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..f15ae9d --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_pointer.c @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..090b11c --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_pointer.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..cbd6b66 --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_struct.c @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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..f4597ec --- /dev/null +++ b/src/Ejemplos/TAD_Rational/rational_struct.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: Facultade de Informática de A Coruña +// +// SPDX-License-Identifier: CC-BY-4.0 + +#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/src/Examenes/CMakeLists.txt b/src/Examenes/CMakeLists.txt index f1b40ff..09f0a55 100644 --- a/src/Examenes/CMakeLists.txt +++ b/src/Examenes/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) project(Boletin_4 C) diff --git a/src/Extras/Algoritmos/BubbleSort.c b/src/Extras/Algoritmos/BubbleSort.c index 55a3c22..5169c41 100644 --- a/src/Extras/Algoritmos/BubbleSort.c +++ b/src/Extras/Algoritmos/BubbleSort.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 15 /* Tamaño */ diff --git a/src/Extras/Algoritmos/BusquedaBinaria.c b/src/Extras/Algoritmos/BusquedaBinaria.c index e8a2197..bb7d504 100644 --- a/src/Extras/Algoritmos/BusquedaBinaria.c +++ b/src/Extras/Algoritmos/BusquedaBinaria.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 20 diff --git a/src/Extras/Algoritmos/BusquedaSecuencial.c b/src/Extras/Algoritmos/BusquedaSecuencial.c index cb8ce54..541a766 100644 --- a/src/Extras/Algoritmos/BusquedaSecuencial.c +++ b/src/Extras/Algoritmos/BusquedaSecuencial.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 20 diff --git a/src/Extras/Algoritmos/BusquedaSecuencialCentinela.c b/src/Extras/Algoritmos/BusquedaSecuencialCentinela.c index d1e997c..7ecf31c 100644 --- a/src/Extras/Algoritmos/BusquedaSecuencialCentinela.c +++ b/src/Extras/Algoritmos/BusquedaSecuencialCentinela.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include #define N 21 /* 1 más que el tamaño del array */ diff --git a/src/Extras/Algoritmos/QuickSort.c b/src/Extras/Algoritmos/QuickSort.c index 86bdcbb..b768118 100644 --- a/src/Extras/Algoritmos/QuickSort.c +++ b/src/Extras/Algoritmos/QuickSort.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include void intercambiar(int *a, int *b) { diff --git a/src/Extras/CMakeLists.txt b/src/Extras/CMakeLists.txt index 017396b..3e99fb3 100644 --- a/src/Extras/CMakeLists.txt +++ b/src/Extras/CMakeLists.txt @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2023 Pablo Portas López +# SPDX-FileCopyrightText: 2023 Pablo Portas López # -# SPDX-License-Identifier: CC0-1.0 +# SPDX-License-Identifier: GPL-3.0-only cmake_minimum_required(VERSION 3.26) project(Extras C) diff --git a/src/Extras/TresEnRaya.c b/src/Extras/TresEnRaya.c index 5175d7e..d999ba5 100644 --- a/src/Extras/TresEnRaya.c +++ b/src/Extras/TresEnRaya.c @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only diff --git a/src/main.c b/src/main.c index 9a084e3..2e0f03f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ -// SPDX-FileCopyrightText: 2023 Pablo Portas López +// SPDX-FileCopyrightText: 2023 Pablo Portas López // // SPDX-License-Identifier: GPL-3.0-only + #include int main() {