PRG29002 - Programação I - Eng.Telecom 2016-2
Professor da Disciplina: Cleber Jorge Amaral
e-mail: cleber.amaral@ifsc.edu.br
Monitoria: Programa_de_monitoria_dos_cursos_superiores_de_Telecomunicações
Ementa de PRG29002
- Ementa da disciplina na wiki: Engenharia de Telecomunicações 2ª Fase
Critérios e instrumentos de avaliação
- Conceitos numéricos entre 0 e 10. 0 é reservado para alunos com frequência insuficiente
- N1 = Prova teórica sobre pseudocodigo e fluxograma (sem apoio de computador)
- N2 = Prova prática sobre C
- N3 = Apresentação de projeto de desenvolvimento em C (Avaliação do projeto = 30% e da performance do aluno na apresentação = 70%)
- Recuperação realizada após cada prova e do trabalho uma reapresentação que valerá no máximo conceito 7.
- Média = (N1+N2+N3)/3
- Ter 75% de frequência.
Datas importantes
- 19/09 - Prova 1: Lógica de algoritmos em fluxograma e pseudocódigo
- Possivel recuperação da p1 a marcar
- 21/11 - Prova 2: Prática em linguagem C
- Possivel recuperação da p2 a marcar
- 12/12 e 16/12 - Apresentação do projeto final
- 19/12 - Possivel recuperação do projeto final
Eventos da área de desenvolvimento
- Outubro de 2016 - QCon Rio de Janeiro QConRio
- Outubro de 2016 - The Developers Conference Porto Alegre TDC
- Março de 2017 (previsto) - Arduino Day São Paulo ArduinoDay
- Abril de 2017 - Qcon São Paulo QConSP
- Maio de 2017 (previsto) - The Developers Conference Florianópolis TDC
- Junho de 2017 (previsto) - JavaOne São Paulo JavaOne
- Julho de 2017 (previsto)- The Developers Conference São Paulo TDC
Material de aula
Diário de aula
Introdução aos algoritmos utilizando fluxograma
Aula inaugural e introdução aos algoritmos |
---|
|
Algoritmos - fluxogramas |
---|
- - - - - - - - - - - - - - - - - - - - - - - Estado atual das chaves: R1 = Emprestada (João) R2 = Disponível CAD2 = Emprestada (Pedro) CAD3 = Disponível - - - - - - - - - - - - - - - - - - - - - - - 1: pegar/devolver uma chave 2: cadastro de chaves 3: cadastro de pessoas 4: ver histórico de empréstimos 5: sair do programa Digite a opção ______
Digite sua identificação: ___ Digite o nome da chave a pegar ou devolver: ____
As chaves atualmente cadastradas são: R1, R2, CAD2, CAD3 Digite um nome existente para deletar ou um novo nome para criar uma nova: ____
|
Fluxogramas |
---|
|
Pseudo-código
Pseudo-código utilizando Portugol - repetições |
---|
Exercícios - série 1
|
Pseudo-código utilizando Portugol - sub-rotinas e registros |
---|
Exercícios
Parte da implementação do problema das funções trigonométricas
|
C
Introdução ao C
Introdução ao C e funções de saída e entrada de dados |
---|
|
Controle de fluxo em C
Condicionais em C |
---|
|
Estruturas de repetição em C |
---|
|
Funções
Funções |
---|
|
Vetores em C
Execícios de vetores em C |
---|
|
Gerando números pseudo-aleatórios |
---|
|
Tabela ASCII |
---|
|
Operadores e precedência
Operadores e precedência |
---|
Referências
Referências bibliográficas
- Araújo, Everton Coimbra de. Algoritmos: fundamento e prática; 3ª ed. [S.l]:Visual Books, 2007. 414p. ISBN 9788575022092.
- KERNIGHAN, Brian W.; RITCHIE, Dennis M C: a linguagem de programação padrão ANSI; 1ª ed.[S.l]:Campus, 1989. 304p. ISBN 9788570015860.
- SCHILDT, Herbert C Completo e Total; 3ª ed. [S.l]:Makron Books, 2009. 827p. ISBN 9788534605953.
- FORBELLONE, Andre L. Lógica de Programação; 3ª ed. [S.l]:Makron Books, 2005. 197p. ISBN 9788576050247.
- KING, K.N. C Programming: A Modern Approach; 2ª ed. [S.l]:W. W. Norton & Company, 2008. 832p. ISBN 9780393979503.
- MANZANO, Jose Augusto Navarro Garcia Estudo Dirigido em Linguagem C. ; 16ª ed. [S.l]:Erica, 2012. 216p. ISBN 9788571948877.
- NEVES, Júlio Cézar Programação Shell Linux; 5a ed. Rio de Janeiro:Brasport, 2005. 408p. ISBN 8574522031.
- VEIGA, Roberto G. A. Comandos do Linux: guia de consulta rápida; ed. São Paulo:Novatec, 2004. 144p. ISBN 85-7522-060-8.
Referências adicionais
Ferramentas úteis
- VisualG3: Uma IDE para desenvolvimento de programas em pseudocódigo (freeware), permite editar e compilar programas utilizando uma sintaxe própria de pseudocódigo muito parecida com a que trabalhamos em sala. Muito útil para verificar o funcionamento real dos algoritmos. Ver exemplos de códigos visualG3 em Exemplos VisualG3
- LibreOffice: O LibreOffice é um programa gratuito (freeware) e de código aberto (opensource). Além de editor de textos, planilhas e apresentações tem a ferramenta Draw que permite a criação de fluxogramas.
- VirtualBox: O Oracle VirtualBox é um programa gratuito (freeware) que permite criar e instanciar máquinas virtuais. O uso de máquinas virtuais é bastante interessante quando desejamos ter diferentes sistemas operacionais em um computador bem como quando se está realizando ensaios e deseja-se isolar estes experimentos do sistema principal.
- Debian: O Debian, é umas das distribuições Linux mais estáveis existentes, suportando atualmente 12 arquiteturas de processador. É software livre e de código aberto e mantido por uma ampla comunidade com mais de 18000 desenvolvedores. Sua versão atual é a 8.5 (codinome Jessie, do filme Toy Story).
- Ubuntu: O Ubuntu é uma distribuição linux (freeware e opensource) bastante estável e com uma comunidade bastante ativa que está sempre atualizando o sistema e presente nos foruns e redes sociais para dirimir dúvidas.
- LinuxMint: O LinuxMint é uma distribuição linux (freeware e opensource) bastante estável e confortável aos usuários windows, pois traz um gerenciador de janelas configurado de uma forma mais natural para estes usuários e vem com um conjunto de programas pré-instalados que consegue atender a maior parte das demandas inicias.
- dbDesigner4: O dbDesigner é uma ferramenta gratuita para elaboração de diagramas de bancos de dados relacionais. Não trabalhamos com bancos na disciplina PRG29002, porém trabalhamos com dados, esta ferramenta é útil para organizá-los em diagramas.
Avaliações
Conceitos | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Estatísticas | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Plano de aula
Aula | Data | Horas | Conteúdo | Recursos | |
---|---|---|---|---|---|
1 | 12/8 | 2 | Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos | ||
2 | 15/8 | 2 | Prática: Introdução ao fluxograma | ||
3 | 19/8 | 2 | Algoritmos continuação (representação por pseudo-codigo, apresentacao o portugol) | ||
4 | 22/8 | 2 | Prática: Resolução de problemas em pseudocódigo e fluxogramas (declaração de variáveis, leia e escreva, uso de condicionais e biblioteca portugol) | ||
5 | 26/8 | 2 | Pseudocódigo: Estruturas de repetição e sub-rotinas | ||
6 | 29/8 | 2 | Prática: Resolução de problemas em pseudocódigo e fluxogramas | ||
7 | 2/9 | 2 | Pseudocódigo: Uso de vetores e sub-rotinas | ||
8 | 5/9 | 2 | Prática: Resolução de problemas com vetores e sub-rotinas | ||
9 | 9/9 | 2 | Introdução ao C, primeiros conceitos de compilação, variáveis, if… else, printf e scanf | ||
10 | 12/9 | 2 | Prática: Aula de exercicios de C | ||
11 | 16/9 | 2 | Continuação C, condicionais, operadores relacionais, operadores lógicos | ||
12 | 19/9 | 2 | Prática: Estruturas de repetição em C | ||
13 | 23/9 | 2 | Revisão de algoritmos para preparação para prova e Funções no C | ||
14 | 26/9 | 2 | Prática: Exercicios de funções | ||
15 | 30/9 | 2 | Avaliação 1 - Algoritmos, resolução de problemas e C básico | ||
16 | 3/10 | 2 | Prática: Correção da Avaliação | ||
17 | 7/10 | 2 | Resolução de exercícios de vetores | ||
18 | 10/10 | 2 | Prática: Resolução de exercícios de fixação de vetores. | ||
19 | 14/10 | 2 | Estruturas | ||
20 | 17/10 | 2 | Prática: Exercícios adicionais de preparação para avaliação 1 de Laboratório | ||
21 | 21/10 | 2 | Exercícios adicionais de preparação para avaliação 1 de Laboratório | ||
22 | 24/10 | 2 | Prática: Avaliação de Laboratório | ||
23 | 28/10 | 2 | FERIADO: DIA DO SERVIDOR PUBLICO | ||
24 | 31/10 | 2 | Prática: Correção da avaliação | ||
25 | 4/11 | 2 | Ponteiros | ||
26 | 7/11 | 2 | Prática: Exercicios ponteiros | ||
27 | 11/11 | 2 | Vetor de Ponteiros e Ponteiro Para Estruturas | ||
28 | 14/11 | 2 | PROVAVEL RECESSO | ||
29 | 18/11 | 2 | Desenvolvimento do Projeto | ||
30 | 21/11 | 2 | Prática: Desenvolvimento do Projeto | ||
31 | 25/11 | 2 | Avaliação II de Laboratório | ||
32 | 28/11 | 2 | Prática: Desenvolvimento do Projeto | ||
33 | 2/12 | 2 | Desenvolvimento do Projeto | ||
34 | 5/12 | 2 | Prática: Desenvolvimento do Projeto | ||
35 | 9/12 | 2 | Desenvolvimento do Projeto | ||
36 | 12/12 | 2 | Prática: Desenvolvimento do Projeto | ||
37 | 16/12 | 2 | Desenvolvimento do Projeto | ||
38 | 19/12 | 2 | Prática: Recuperação | ||
TOTAL | 76 |
Tópicos avançados
- C++ para sistemas embarcados - mitos e verdades, comparação C e C++ (parte 1/2)
- C++ para sistemas embarcados - mitos e verdades, comparação C e C++ (parte 2/2)
- Dynamic Memory Allocation
- Debugging Memory on Linux
- memory layout in c..data segment,bss, code segment, stack, heap segment
Calculo de tempo recursividade simples |
---|
Na recursividade simples o tempo aumenta linearmente como mostra o código abaixo #include <stdio.h>
#include <stdint.h>
#include <time.h>
int64_t timespecDiff(struct timespec *timeA_p, struct timespec *timeB_p)
{
return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);
}
int fact(int n)
{
if (n <= 1)
{
printf("Finalmente n = 1, a função para se se chamar e retorna o resultado final.\n");
return 1;
}
else
{
printf("Nesta chamada n = %d, esta função se chamará recursivamente se for maior que 1.\n",n);
return n * fact(n-1);
}
}
int main()
{
uint64_t tempoFact10 = 0;
uint64_t tempoFact20 = 0;
uint64_t tempoFact30 = 0;
int i;
int in, out = 0;
struct timespec start, end;
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
// Some code I am interested in measuring
in = 10;
out = fact(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFact10 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
// Some code I am interested in measuring
in = 20;
out = fact(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFact20 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
// Some code I am interested in measuring
in = 30;
out = fact(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFact30 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
printf("\nMédia de tempo Fact(10): %li\n",tempoFact10);
printf("\nMédia de tempo Fact(20): %li\n",tempoFact20);
printf("\nMédia de tempo Fact(30): %li\n",tempoFact30);
}
|
Calculo de tempo recursividade multipla |
---|
Na recursividade simples o tempo aumenta linearmente como mostra o código abaixo #include <stdio.h>
#include <stdint.h>
#include <time.h>
int64_t timespecDiff(struct timespec *timeA_p, struct timespec *timeB_p)
{
return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);
}
int main()
{
uint64_t tempoFib10 = 0;
uint64_t tempoFib20 = 0;
uint64_t tempoFib30 = 0;
uint64_t tempoFib40 = 0;
int i;
int in, out = 0;
struct timespec start, end;
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
in = 10;
out = fib(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFib10 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
in = 20;
out = fib(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFib20 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
in = 30;
out = fib(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFib30 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
for (i=0;i<10;i++)
{
clock_gettime(CLOCK_MONOTONIC, &start);
in = 40;
out = fib(in);
clock_gettime(CLOCK_MONOTONIC, &end);
uint64_t timeElapsed = timespecDiff(&end, &start);
tempoFib40 += timeElapsed / 10;
}
printf("Resultado: %d\n",out);
printf("\nMédia de tempo Fib(10): %li\n",tempoFib10);
printf("\nMédia de tempo Fib(20): %li\n",tempoFib20);
printf("\nMédia de tempo Fib(30): %li\n",tempoFib30);
printf("\nMédia de tempo Fib(40): %li\n",tempoFib40);
}
int fib(int n)
{
if (n-1 <= 0)
return 0;
else if (n-1 == 1)
return 1;
else {
return fib(n-1) + fib(n-2);
}
}
Exemplo de resultado: Média de tempo Fib(10): 1113 Média de tempo Fib(20): 113658 Média de tempo Fib(30): 9817635 Média de tempo Fib(40): 427706133 Ou seja, há um aumento exponencial no tempo |
Verificando o código de retorno de um programa |
---|
|