{"id":23804341,"url":"https://github.com/kiko-serra/pfl_project1","last_synced_at":"2025-08-21T07:14:33.345Z","repository":{"id":110634446,"uuid":"550489341","full_name":"kiko-serra/PFL_PROJECT1","owner":"kiko-serra","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-02T15:36:02.000Z","size":50,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-24T01:46:20.249Z","etag":null,"topics":["feup","feup-pfl","haskell","pfl"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiko-serra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-12T21:21:08.000Z","updated_at":"2022-11-10T08:53:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"515893dc-ae69-4d74-b54c-81c3be73f095","html_url":"https://github.com/kiko-serra/PFL_PROJECT1","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kiko-serra/PFL_PROJECT1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiko-serra%2FPFL_PROJECT1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiko-serra%2FPFL_PROJECT1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiko-serra%2FPFL_PROJECT1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiko-serra%2FPFL_PROJECT1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiko-serra","download_url":"https://codeload.github.com/kiko-serra/PFL_PROJECT1/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiko-serra%2FPFL_PROJECT1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271442027,"owners_count":24760352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feup","feup-pfl","haskell","pfl"],"created_at":"2025-01-01T22:40:20.385Z","updated_at":"2025-08-21T07:14:33.324Z","avatar_url":"https://github.com/kiko-serra.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PFL - Trabalho Prático 1\n\nNota: 18.3\n\nO trabalho prático tem como objetivo implementar as seguintes funções:\n- ***normalizePolynomials*** - Função que normaliza polinómios\n    - Casos de teste *:\n        - testNormalize1\n        - testNormalize2\n        - testNormalize3\n        - testNormalize4\n- ***addPolynomials*** - Função que soma polinómios\n    - Casos de teste:\n        - testAdd1\n        - testAdd2\n        - testAdd3\n        - testAdd4\n- ***multiplyPolynomials*** - Função que multiplica polinómios\n    - Casos de teste:\n        - testMultiply1\n        - testMultiply2\n        - testMultiply3\n        - testMultiply4\n- ***derivePolynomial*** - Função que deriva polinómios\n    - Casos de teste:\n        - testDerive1\n        - testDerive2\n        - testDerive3\n        - testDerive4\n        \n * *Os casos de teste estão presentes no ficheiro `Polynomials.hs`. Em cada um é utilizado a respetiva função em causa, pelo que no fim é comparado o *output* das mesmas com o caso esperado. \n \n * Para dar load às funções, deve correr, no ghci, o comando `:l Polynomials.hs` \n\n## Justificação da apresentação interna\nA representação interna dos polinómios é feita através de uma lista de momómios. Cada monónimo (*typeclass*) é representado por 2 elementos, sendo o primeiro o coeficiente e o segundo uma lista de variáveis. Cada variável (*typeclass*) vem acompanhada com o respetivo grau. Esta divisão mostrou ser mais apropriada para elaborar as respetivas funções dos polinómios.\n\u003cbr\u003e \u003cbr\u003e\n\n## Estratégia geral das funções Aux.hs\nAs funções presentes neste ficheiro tem como objetivos:\n- Fazer ***parsing*** de uma *string* para um polinómio\n- Transformar o polinómio em uma *string* legível\n\nTambém estão presentes funções auxiliares para a normalização de um polinómio\n\n\u003cbr\u003e\n\n## Estratégia das funções Polynomials.hs\n### ***normalizePolynomial***\nA função soma os coeficientes dos monómios com as mesmas variáveis e graus, remove os monómios com coeficiente 0, ordena as variáveis de cada monómio de forma decrescente de grau, ordena os monómios de forma decrescente de variável de maior grau e imprime o polinómio como *string*. Caso a *string* esteja vazia, imprime o valor `0`.\n\n### ***addPolynomials***\nA função recebe duas *strings*, concatena-as e normaliza o polinómio, através das funções utilizadas em `normalizePolynomial`. Caso ambas as *strings* estejam vazias, retorna um erro, caso contrário, imprime a *string* do polinómio resultante da soma.\n\n### ***multiplyPolynomials***\nA função multiplica dois polinómios com a ajuda das funções auxiliares `distributiveLaw`, que aplica a propriedade distributiva entre monómios, e `multMonos`, que multiplica os coeficientes e junta as variáveis de 2 monómios. Imprime a *string* do polinómio resultante da multiplicação.\n\n### ***derivePolynomial***\nComecamos por definir uma função auxiliar `filterWithVar` que recebe o polinómio inicial e a variável para derivar e retorna um polinómio que apenas contém monómios com a variável a derivar. Depois definimos a função `calculateDerivation` que recebe o polinómio e a variável a derivar e retorna o polinómio derivado, usando uma outra função auxiliar para decrementar o grau da variável derivada. No fim, imprime a *string* do polinómio resultante da derivação.\n\n\u003cbr\u003e\u003cbr\u003e\nRealizado pelo grupo G02_09:\n- Francisco Pimentel Serra  - up202007723\n- João Paulo Moreira Araújo - up202004293\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiko-serra%2Fpfl_project1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiko-serra%2Fpfl_project1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiko-serra%2Fpfl_project1/lists"}