UNIVERSIDADE FEDERAL DE UBERLÂNDIA
Faculdade de Engenharia Elétrica

Av. João Naves de Ávila, 2121, Bloco 3N - Bairro Santa Mônica, Uberlândia-MG, CEP 38400-902
Telefone: (34) 3239-4701/4702 - www.feelt.ufu.br - feelt@ufu.br
  

Timbre

Plano de Ensino

IDENTIFICAÇÃO

Componente Curricular:

Programação Procedimental

Unidade Ofertante:

Faculdade de Engenharia Elétrica

Código:

FEELT31201

Período/Série:

Segundo Período

Turma:

A1 e A2

Carga Horária:

Natureza:

Teórica:

30h

Prática:

30h

Total:

60h

Obrigatória:

(X)

Optativa:

( )

Professor(A):

Augusto Wohlgemuth Fleury Veloso da Silveira  e  Camila Davi Ramos

Ano/Semestre:

2023/2

Observações:

 

 

EMENTA

Desenvolvimento de aplicações práticas em linguagens C, com abordagem algorítmica e conceitos de: avaliação de valores e de expressões; constantes, variáveis, ponteiros, strings, arrays; controle de fluxo de execução de código (sequência, instruções condicionais, laços, funções); estruturas e encapsulamento; alocação dinâmica de memória; manipulação de arquivos; base de arquitetura e organização de computadores. Noções de estrutura de dados, compiladores, análise de algoritmos, computabilidade e complexidade. Uso de computação nas nuvens. Noções de empreendedorismo e de inovação.

JUSTIFICATIVA

Escrever algoritmos em uma linguagem de programação profissional para solucionar problemas de Engenharia faz parte das competências que devem ser desenvolvidas pelo núcleo básico dos cursos de engenharia. A linguagem C foi criada em 1972 pelos cientistas Dennis Ritchie e Ken Thompson, é amplamente utilizada por profissionais no desenvolvimento de softwares e firmwares para as mais variadas aplicações. Trata-se de uma linguagem compilada, imperativa, procedimental, que permite uma aproximação maior do hardware, por permitir manipulações de bits, bytes e endereços, portanto é uma linguagem que deve ser aprendida por estudantes de Engenharia.

OBJETIVO

Objetivo Geral:

Desenvolver as habilidades dos discentes em programação na linguagem C explorando as estruturas básicas que compõe a arquitetura de um computador.

Objetivos Específicos:

1 - Demonstrar a importância da linguagem C no desenvolvimento de aplicações em hardware heterogêneo;

2 - Desenvolver habilidades dos discentes em produzir códigos de qualidade através da adoção de boas práticas de programação e de Test-Driven Development (TDD);

3 - Desenvolver as habilidades dos discentes em trabalhar em grupo, gerenciar e documentar projetos;

4 - Desenvolver a consciência, a autonomia e a responsabilidade dos discentes.

PROGRAMA

1. Introdução

1.1. Arquitetura de Von Neumann: CPU, memória, dispositivos E/S

1.2. Compilador, makefile, debug

1.3. Repositórios (Github)

1.4. Plataformas de desenvolvimento (sistemas embarcados, computadores pessoais, IoT – internet of things, servidores e computação nas nuvens)

1.5. Soluções em hardware e em software

2. Linguagem C

2.1. Primitivas e tipos de dados

2.1.1. Bases numéricas, conversão entre bases binária, decimal, octal, hexadecimal

2.1.2. Primitivas ou tipos básicos: ASCII, Unicode, complemento de 2, IEEE 754-1985/2008

2.1.3. Operações binárias (BITWISE)

2.2. Armazenamento em memória

2.3. Controles de fluxo de execução: sequência de instruções, condicionais, laços

2.4. Ponteiros, vetores e strings

2.4.1. Aritmética de ponteiros

2.4.2. Acesso aleatório de dados

2.5. Funções e recursão

2.5.1. Passagem de parâmetros por valor e por referência

2.6. Estruturas de dados e encapsulamento

2.7. Alocação dinâmica de memória

2.8. Matrizes e operações

2.9. Implementação e análise de algoritmos, estudo de complexidade

2.10. Manipulação de arquivos

2.11. Compilador SWIG e ligação de código C com outras linguagens

3. Aplicação em sistemas embarcados

3.1. Comunicação serial para sistemas embarcados (ex. Arduino)

3.2. Desenvolvimento de aplicações em sistemas embarcados (ex. Arduino)

3.3. Desenvolvimento de aplicações em nuvem

4. Cursos online abertos e massivos

4.1. https://www.youtube.com/watch?v=FH7YrE0RjWE&list=PLesCEcYj003SwVdufCQM5FIbrOd0GG1M4 (canal brasileiro eXcript)

4.2. https://www.coursera.org/learn/arduino-platform

http://mooc.fi/courses/2016/aalto-c/en/

METODOLOGIA

· Parte teórica: Aulas expositivas dialogadas com demonstrações práticas, diagramas e codificação-exemplo, acompanhadas de indicação para materiais de apoio.

· Parte prática: Aulas práticas em laboratório com apoio de sítios informativos de internet com discussão sobre dúvidas, exposição de exemplos e orientação em projetos.

· Observação: Os materiais de referência e de apoio, assim como links relevantes, avaliações e repositório de materiais complementares, serão disponibilizados com o suporte na plataforma Teams.

 

Cronograma previsto para desenvolvimento do conteúdo:

 

Aula

Prática 1 / 2

Teoria

01 (11/01)

Não haverá aula.

Introdução; Linguagem de programação C

02 (18/01)

Git, Github, Apresentação IDE / Primeiros programas.

Tipos de Dados Primitivos, Qualificadores, Aritmética, Controle de Fluxo Simples (if-else, while)

03 (25/01)

Interações com o usuário: Printf/Scanf, Aritmética.

Mais sobre Controle de Fluxo: decisão (switch/case, ternário, aninhados), iteração (do-while, for, aninhados); Bases numéricas.

04 (01/02)

Controle de Fluxo: Comandos de Decisão.

Básico de funções: tipo, parâmetros/argumentos. Noção de escopo, retorno, protótipo.

05 (08/02)

Laços: while, for, do-while.

Vetores e Matrizes

06 (15/02)

Vetores.

Codificação de caracteres; Strings: strlen, strcat, strcpy, strcmp

07 (22/02)

Matrizes.

Funções e escopo; Recursão em C.

08 (29/02)

Strings.

**Prova 01

09 (07/03)

Funções, Escopo e Recursão.

Registros e Struct; Union; Enum.

10 (14/03)

Struct, Union, Enum.

Ponteiros em C: variáveis, struct, funções, passagem pot referência, ponteiros para ponteiros.

11 (21/03)

Ponteiros e Alocação Dinâmica de Memória.

Alocação dinâmica em C: vetores, matrizes;

12 (28/03)

Listas Ligadas.

Listas ligadas: impressão; inserção e remoção (cabeça, cauda, interior); Listas ordenadas e circulares.

Tipos Abstratos de Dados; Filas e Pilhas;

13 (04/04)

Filas e Pilhas.

Algoritmos de Busca: Sequencial, Binária; Custo computacional; Análise assintótica; Ordem de crescimento; Eficiência de Algoritmos.

Algoritmos de Ordenação.

14 (11/04)

Algoritmos de Busca e de Ordenação.

**Prova 02

15 (18/04)

**Apresentação Projeto Final.

Arquivos em C; Escrita e Leitura em Texto; Escrita e Leitura em Binário.

Dicas de aperfeiçoamento; SWIG; Encerramento da Disciplina.

16 (25/04)

**Apresentação Projeto Final.

**Prova de recuperação.

· A carga horária total da disciplina é de 60 horas, ou seja, 72 horas-aula. Entretanto, de acordo com o cronograma apresentado estão previstas apenas 64 horas-aula. As 08 horas-aula restantes serão realizadas por meio de Atividades Acadêmicas Extras que serão marcadas em comum acordo com os estudantes.

 

Horário e atendimento:

Prof. Augusto W. Fleury - Segunda-feira, às 14h na sala 3N221.

 

AVALIAÇÃO

· Parte teórica

Duas provas serão aplicadas na sala de aula teórica: 50% da nota final.

**Data da Prova 01: 29/02/2024 (25 pontos).

**Data da Prova 02: 11/04/2024 (25 pontos).

· Parte prática

Trabalhos em sala e/ou listas de exercícios semanais (20 pontos) e apresentação do trabalho final da disciplina (30 pontos).

O trabalho final será feito em grupo de no máximo 05 estudantes e deverá abordar a aplicação da Linguagem C na programação de microcontroladores no ambiente Arduino. Os estudantes deverão construir um protótipo utilizando um microcontrolador (Arduino ou ESP8266 ou ESP32), que deverá cumprir os seguintes requisitos mínimos: Comunicar via porta serial com um PC, armazenar dados na nuvem, acionar algum dispositivo (Leds, pequeno motor, relé, etc...). O hardware deverá poder ser comandado remotamente utilizando Bluetooth ou Wi-Fi. Trata-se de um trabalho que envolverá pesquisa e montagem de componentes eletrônicos básicos, portanto os grupos deverão iniciar as atividades relacionadas ao mesmo à partir da formação dos grupos.

**A apresentação do trabalho final acontecerá no laboratório nos dias 18/04/2023 e 25/04/2023.

A ordem de apresentação dos grupos será sorteada.

· ATIVIDADE DE RECUPERAÇÃO (REC)

**Avaliação única que será aplicada no dia 25/04/2024 abordando todo o conteúdo ministrado no semestre letivo. Somente estudantes que não obtiveram nota final igual ou superior a 60 pontos e tiverem 75% ou mais de frequência nas aulas estarão aptos a realizar esta prova. Será feita a média aritmética entre a nota obtida na prova de recuperação (50 pontos) e a nota obtida nas provas teóricas (50 pontos) e, havendo aprovação, a nota final será de 60 pontos.

BIBLIOGRAFIA

Básica

1. Backes, André. Linguagem C: completa e descomplicada. Rio de Janeiro: Elsevier, 2013.

2. Feofiloff, Paulo. Algoritmos em linguagem C. Rio de Janeiro: Campus, 2009.

3. McRoberts, Michael. Arduino básico. São Paulo: Novatec, 2011.

Complementar

1. Etter, Delores M. Engineering problem solving with C. 4th. ed. Boston: Pearson, 2013.

2. Hartel, Pieter; Muller, Henk. Functional C. Harlow, UK: Addison-Wesley, 1997.

3. Kernighan, Brian W.; Ritchie, Dennis. C, a linguagem de programação. 4. ed. Porto Alegre; Rio de Janeiro: EDISA; Campus, 1988.

4. SCHILDT, Herbert. C completo e total. 3. ed. São Paulo: Makron Books, 1997.

5. Sedgewick, Robert. Algorithms in C. 3rd. ed. Boston: Addison-Wesley, 1998-2002.

APROVAÇÃO

Aprovado em reunião do Colegiado realizada em: ____/____/______

Coordenação do Curso de Graduação: _________________________

 


logotipo

Documento assinado eletronicamente por Augusto Wohlgemuth Fleury Veloso da Silveira, Professor(a) do Magistério Superior, em 17/01/2024, às 21:34, conforme horário oficial de Brasília, com fundamento no art. 6º, § 1º, do Decreto nº 8.539, de 8 de outubro de 2015.


logotipo

Documento assinado eletronicamente por Camila Davi Ramos, Professor(a) Substituto(a) do Magistério Superior, em 22/01/2024, às 15:50, conforme horário oficial de Brasília, com fundamento no art. 6º, § 1º, do Decreto nº 8.539, de 8 de outubro de 2015.


QRCode Assinatura

A autenticidade deste documento pode ser conferida no site https://www.sei.ufu.br/sei/controlador_externo.php?acao=documento_conferir&id_orgao_acesso_externo=0, informando o código verificador 5106368 e o código CRC F5C43841.




Referência: Processo nº 23117.002005/2024-41 SEI nº 5106368