Giter Club home page Giter Club logo

funcionaltrabalhofinal's Introduction

Trabalho Final de Funcional

GitHub last commit

🤓 Grupo 03

  • Luiz Zairo Bastos Viana
  • Carlos Eduardo Rodrigues Pita

🔨 Ferramentas úteis no desenvolvimento

📄 Descrição do Trabalho

O propósito deste trabalho é a criação de um módulo com funções para manipular um determinado tipo algébrico de dados. O tipo está definido abaixo:

--Descrição sobre o que cada tipo algébrico deve conter:
--professor(matricula, nome, unidade,cat)
--aluno(matricula, nome, curso, nascimento,cat)
--disciplina(cod, nome, curso, ch,cat)

type Nascimento = (Int,Int,Int) -- Criação do tipo de dados Nascimento

-- Contrução do tipo Sistema
data Sistema = Professor String String String String
    |Aluno String String String Nascimento String
    |Disciplina String String String Int String
        deriving (Eq,Ord,Show)

O tipo algébrico Sistema armazena itens que podem ser valores de professor, aluno e disciplina, cada um tem campos específicos, sendo que a última informação de cada, cat, indica a que tipo pertence. Abaixo há um exemplo, não exaustivo, de registro que pode ser usado como teste:

-- Base de dados 
item0,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10 :: Sistema
item0 = Disciplina "29" "Calculo Diferencial e Integral" "Ciencia da Computacao" 96 "disciplina"
item1 = Professor "1234" "Luiz Alberto" "Campus de Crateus" "professor"
item2 = Aluno "4999" "Luiz Zairo Bastos Viana" "Ciencia da Computacao" (28,01,2002) "aluno"
item3 = Professor "1235" "Wellington Franco" "Campus de Crateus" "professor"
item4 = Professor "1236" "Simone Santos" "Campus de Crateus" "professor"
item5 = Aluno "4567" "Antonio Jose" "Ciencia da Computacao" (12,12,2000) "aluno"
item6 = Disciplina "31" "Projeto Integrador III" "Ciencia da Computacao" 64 "disciplina"
item7 = Aluno "5096" "Carlos Eduardo Rodrigues Pita" "Ciencia da Computacao" (10,10,1930) "aluno"
item8 = Disciplina "28" "Programacao Funcional" "Ciencia da Computacao" 64 "disciplina"
item9 = Disciplina "30" "Inteligencia Artificial" "Ciencia da Computacao" 64 "disciplina"
item10 = Aluno "5098" "Carlos Eduardo " "Ciencia da Computacao" (10,10,2010) "aluno"


lista :: [Sistema] -- Criação de uma lista de Sistema
lista = [item0,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10] -- Adicionando todos os valores a lista de itens

❓ Questões

Para uma melhor visualização gráfica e compilação das questões, recomendamos realizar o clone do repositório e utilizar uma IDE de Haskell, como o VS Code e a instalação de algumas extensões que podem lhe ajudar no desenvolvimento e melhor visualização sintática, são elas: Haskell, Haskell Syntax Highlighting e haskell-linter. Existe também uma opção online: Replit.

1. Crie uma função que recebe uma lista de itens do Sistema e mostre os detalhes de todos os itens de forma legível.

-- QUESTÃO 1

exibeListaCompleta :: [Sistema] -> IO()
exibeListaCompleta ((Professor matricula nome unidade categoria):xs) = do
    putStrLn "------PROFESSOR------"
    putStrLn ("Matricula: " ++ show matricula)
    putStrLn ("Nome: " ++ show nome)
    putStrLn ("Unidade: " ++ show unidade)
    putStrLn ("Categoria: " ++ show categoria ++ "\n")
    exibeListaCompleta xs

exibeListaCompleta ((Aluno matricula nome curso (dia, mes, ano) categoria):xs) = do
    putStrLn "------ALUNO------"
    putStrLn ("Matricula: " ++ show matricula)
    putStrLn ("Nome: " ++ show nome)
    putStrLn ("Curso: " ++ show curso)
    putStrLn ("Nascimento: " ++ show dia ++ "/" ++ show mes ++ "/" ++ show ano)
    putStrLn ("Categoria: " ++ show categoria ++ "\n")
    exibeListaCompleta xs

exibeListaCompleta ((Disciplina cod nome curso ch categoria):xs) = do
    putStrLn "------DISCIPLINA------"
    putStrLn ("Código: " ++ show cod)
    putStrLn ("Nome: " ++ show nome)
    putStrLn ("Curso: " ++ show curso)
    putStrLn ("Carga Horária: " ++ show ch)
    putStrLn ("Categoria: " ++ show categoria ++ "\n")
    exibeListaCompleta xs

exibeListaCompleta [] = do
    putStrLn "----LEITURA DA LISTA FINALIZADA-----"

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> exibeListaCompleta lista

2. Crie uma função que recebe uma lista de itens do Sistema e mostre uma lista dos professores.

-- QUESTÃO 2

isProfessor :: Sistema -> Bool
isProfessor (Professor _ _ _ x)
    |x == "professor" = True
    |otherwise = False

isProfessor (Aluno {}) = False
isProfessor (Disciplina {}) = False

exibeListaProfessores :: [Sistema] -> IO()
exibeListaProfessores prof = print([a | a <- lista, isProfessor a])

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> exibeListaProfessores lista

3. Crie uma função que recebe uma lista de itens do Sistema e mostre uma lista dos alunos.

-- QUESTÃO 3

isAluno :: Sistema -> Bool
isAluno (Aluno _ _ _ _ x)
    |x == "aluno" = True
    |otherwise = False

isAluno (Professor {}) = False
isAluno (Disciplina {}) = False

exibeListaAlunos :: [Sistema] -> IO()
exibeListaAlunos alun = print([a | a <- alun, isAluno a])

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> exibeListaAlunos lista

4. Crie uma função que recebe uma lista de itens do Sistema e mostre uma lista das disciplinas.

-- QUESTÃO 4

isDisciplina :: Sistema -> Bool
isDisciplina (Disciplina _ _ _ _ x)
    |x == "disciplina" = True
    |otherwise = False

isDisciplina (Professor {}) = False
isDisciplina (Aluno {}) = False

exibeListaDisciplinas :: [Sistema] -> IO()
exibeListaDisciplinas disc = print([a | a <- disc, isDisciplina a])

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> exibeListaDisciplinas lista

5. Crie uma função que recebe uma lista de itens do Sistema e mostre uma lista dos alunos, de forma legível, que já atingiram a maioridade, considerando o ano atual de 2022.

-- QUESTÃO 5

exibeAlunosAdulto :: [Sistema] -> IO()
exibeAlunosAdulto ((Professor matricula nome unidade categoria):xs) = exibeAlunosAdulto xs

exibeAlunosAdulto ((Aluno matricula nome curso (dia, mes, ano) categoria):xs) = do
    if (2022 - ano) >= 18 then do
        putStrLn "------ALUNO------"
        putStrLn ("Matricula: " ++ show matricula)
        putStrLn ("Nome: " ++ show nome)
        putStrLn ("Curso: " ++ show curso)
        putStrLn ("Nascimento: " ++ show dia ++ "/" ++ show mes ++ "/" ++ show ano)
        putStrLn ("Categoria: " ++ show categoria ++ "\n")
        exibeAlunosAdulto xs
    else do
        exibeAlunosAdulto xs

exibeAlunosAdulto ((Disciplina cod nome curso ch categoria):xs) = exibeAlunosAdulto xs

exibeAlunosAdulto [] = putStrLn "------FINALIZADO------"

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> exibeAlunosAdulto lista

6. Crie uma função que recebe uma lista de itens do Sistema e mostre os detalhes das disciplinas com carga horária acima de 64.

-- QUESTÃO 6

isMoreThan64 :: Sistema -> Bool
isMoreThan64 (Disciplina _ _ _ ch _)
    |ch > 64 = True
    |otherwise = False

isMoreThan64 (Aluno {}) = False
isMoreThan64 (Professor {}) = False

listaDisciplinas64 :: [Sistema] -> IO()
listaDisciplinas64 disc64 = exibeListaDisciplinas64 (filter isMoreThan64 (filter isDisciplina disc64))

exibeListaDisciplinas64 :: [Sistema] -> IO()
exibeListaDisciplinas64 ((Disciplina cod nome curso ch categoria):xs) = do
    putStrLn "------DISCIPLINA------"
    putStrLn ("Código: " ++ show cod)
    putStrLn ("Nome: " ++ show nome)
    putStrLn ("Curso: " ++ show curso)
    putStrLn ("Carga Horária: "++ show ch)
    putStrLn ("Categoria: "++ show categoria)
    exibeListaDisciplinas64 xs

exibeListaDisciplinas64 [] = putStrLn "-----FINALIZADO-----"

Para testar o código acima, abra o terminal do VS Code e execute os seguintes comandos:

> ghci trabalho03.hs
> listaDisciplinas64 lista

⏯️ Tutorial de Execução

Tutorial

👨‍💻 Desenvolvedores

📔 Licença

MIT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.