Dados importantes
Dados da Disciplina
Algoritmos utilizando fluxograma
Introdução aos algoritmos utilizando fluxograma
- Ementa disponível nos slides disponibilizados no moodle.
- Conceito de Algoritmo: Sequência ordenada de passos para resolução de um dado problema.
- Para que serve e como abordaremos?
- Algoritmos estão associados a automação de processos, permitem descrever os passos que uma máquina (mecânica ou eletrônica) irá realizar geralmente de maneira repetitiva (garantindo repetibilidade).
- Trabalharemos neste curso com problemas bem definidos que possuem objetivos, caminhos de solução e expectativa de solução claros.
- Formas de representação
- Descrição narrativa: Descrição informal de uma situação e passos para solução de um problema
- Fluxograma: Operações são representadas por formas geométricas
- Pseudo-código: Representação de comportamento e ações por meio de regra predefinida
- Códigos de programação: Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções.
- Descrição narrativa
- Trata-se de um texto livre mas é sugerido organizar em tópicos como os seguintes:
- Cenário;
- Problema;
- Dados de entrada e saída;
- Solução esperada;
- Etapas;
- Solução proposta.
- Exemplos comuns são receitas de culinária, mas pode-se descrever de forma narrativa qualquer tipo de algoritmo.
- Descreva o algoritmo para fazer um ovo frito
- Descreva o algoritmo para cozinhar macarrão instantâneo
- Fluxogramas
- Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos.
- Existem diferentes padrões, aqui utilizaremos o ANSI.
- Para desenvolver um algoritmo utilizaremos operações basicamente as seguintes operações:
- Sinalização de início e fim do algoritmo (ovalado): representam quando o programa é instanciado e quando é destruído
- Processamento (Instrução): são ações gerais, podem ser processamentos matemáticos, ações físicas de movimentação e muitas outras. Há outros símbolos de fluxograma que especificam mais ações como gravar em banco de dados, gerar relatório, neste caso aqui podemos usar o símbolo de processamento para representar estas ações bastando especificá-las.
- Entrada de dados: representa algo que o programa lê, alguma informação vinda, normalmente do usuário, que está sendo inserida no programa.
- Saída de dados: representa alguma informação que o programa gerou ao usuário, pode ser uma mensagem na tela, uma luz piscando, etc.
- Decisão: Este bloco representa a tomada de decisão, a resposta a uma pergunta que normalmente pode ser SIM ou NÃO. Terá portanto duas flexas de saída. Observe que o programa poderá tomar cursos diferentes a partir deste bloco.
- Processo pré-definido (subrotina): Usado na abstração de alguns processos que seriam melhor descritos isoladamente. O início e fim de uma subrotina utiliza os mesmos blocos início e fim descritos acima (utilizando o nome da subrotina para especificar).
- Terminador (início/fim) redondo: representa normalmente um concentrador de fluxo, quando vários caminhos chegam a um certo ponto. Pode também ser usado na paginação numerando términos parciais para representação em outra área do desenho.
- No libreoffice utilize a ferramenta Libreoffice Draw, há uma paleta específica para fluxogramas.
- Exemplos de algoritmos (como seriam os fluxogramas destes algoritmos?):
- Calcula média de dois números
- Observar uso de Terminador de inicio, Entrada de dados: NUM1, Entrada de dados: NUM2, Calcula, Exibe a média e Terminador de fim
- Outros exemplos de algoritmos para exercitar fluxogramas (pode-se abstrair e fazer de modo simplificado na forma de uma série de processos ou modo mais completo com condicionais):
- Fritar um ovo
- Trocar o pneu de um carro
- Enviar um e-mail
- Pegar um livro na biblioteca
- Calcular a área de um cômodo
- Cozinhar macarrão instantâneo
- Cozinhar miojo com ovo
- Outros conceitos trabalhados
- abstração
- estruturas de dados
Desenvolvendo algoritmos na forma de fluxogramas
Desenvolvendo algoritmos na forma de fluxogramas
|
Exercícios para resolver em sala de aula:
- Desenvolve um algoritmo na forma de fluxograma para cálculo da média de dois números fracionários exibindo o resultado
- Desenvolva um algoritmo na forma de fluxograma que calcula a média de consumo de um veículo. Deve obter a distância que um veículo percorreu e a quantidade de litros consumida, exibindo em tela o consumo médio em km/l.
- Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta qual é o valor maior
- Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta a diferença do maior para o menor
- Desenvolva um algoritmo na forma de fluxograma que obtém a nota do aluno e mostra em tela o conceito sabendo que A se for >= 9.0, B >= 7.5 e < 9.0, C >= 6.0 e < 7.5 e D < 6.0
- Desenvolva um algoritmo na forma de fluxograma que obtém do usuário 10 valores, calcula a média e exibe (utilize uma estrutura de repetição)
- Desenvolva um algoritmo na forma de fluxograma que implementa a técnica de pomodoro na forma de um aplicativo, mostrando ao usuário o cronômetro e mensagens de quando deve fazer pausas (Siga os passos descritos aqui
- Solicitar ao usuário digitar o nome da tarefa que ele vai se concentrar
- Iniciar o cronômetro em 25 minutos para realizar o pomodoro.
- Mostrar o cronômetro decrescente até alcançar 0:00.
- Não fez os 4 pomodoros ainda?
- Iniciar o cronômetro em 5 minutos para o "break".
- Mostrar o cronômetro decrescente até alcançar 0:00.
- Repetir o pomodoro
- Senão (caso já tenha feito 4 pomodoros)
- Colocar o cronômetro para um "long break" de 15 minutos.
- Mostrar o cronômetro decrescente até alcançar 0:00.
- Fim do programa
- Desenvolva um algoritmo na forma de fluxograma que exibe todos os números pares de 1 a 100
|
Pseudo-código
Pseudo-código utilizando Portugol - Introdução e condicionais
- Slides sobre pseudocódigo disponibilizados no moodle.
Ver exemplos de códigos Portugol dentro do software portugol (menu Arquivo->Abrir exemplo)
Exercícios - Pseudocodigo (série 0)
|
Exercícios - Pseudocodigo (série 0):
- Implemente por fluxograma e pseudocódigo um controlador de acesso que verifica se a senha digitada é igual a senha padrão “1234” abrindo a porta. O sistema deve sinalizar tanto no caso de acesso liberado ou negado. (id:0.07)
- Implemente um pseudocódigo que converte “celsius para fahrenheit” ou “fahrenheit para celsius” conforme opção que deve ser apresentada pelo algoritmo. (id:0.09)
- Desenvolva um algoritmo na forma de pseudocódigo que obtenha três números inteiros distintos e escreva na tela os valores do menor para o maior. (id:0.10)
- Desenvolva um algoritmo na forma de pseudocódigo que obtenha duas datas fornecidas pelo usuário (três números inteiros cada: dia, mês e por último ano com 4 dígitos) e mostra como resultado qual das duas datas é cronologicamente maior. (id:0.13)
- Implementar em pseudocódigo um algoritmo que através do valor ôhmico dado diz qual é a sequencia de cores de um resistor. Considere apenas resistores de 4 bandas de cores incluindo a tolerância, porém neste exercício ignore a tolerância. Desconsidere resistores de precisão, aqueles com multiplicadores ouro e prata. Considere que o multiplicador máximo é de 10MOhm (violeta). (id:0.12)
- Implementar em pseudocódigo um algoritmo que através de uma sequencia de cores de um resistor dado dá o valor ôhmico do resistor. Considere apenas resistores de 4 bandas de cores incluindo a tolerância, porém neste exercício ignore a tolerância. Desconsidere resistores de precisão, aqueles com multiplicadores ouro e prata. Considere que o multiplicador máximo é de 10MOhm (violeta). (id. 0.17)
- Implemente em pseudocódigo o algoritmo descrito no fluxograma abaixo (clique na imagem para ampliar) (id:0.08):
- Implementar em pseudocódigo algoritmo que imprime em tela o ranking de países através das medalhas obtidas nas olimpíadas. Sabendo que fica melhor colocado no ranking o país que soma mais medalhas de ouro, caso haja empate aquele que soma mais prata entre os empetados e caso haja empate na quantidade de prata também será melhor colocado no ranking o que tiver mais bronzes. O algoritmo deve ser capaz de armazenar e ranquear três países. Dica: crie as variáveis paisA_ouro, paisA_prata e paisA_bronze como numéricas para armazenar as medalhas obtidas pelo país A, da mesma forma para o país B e país C. Você pode limitar a quantidade de medalhas total e determinar pesos para obter um valor absoluto de pontuação. (id:0.18)
- Implemente um algoritmo em pseudocódigo que informa ao usuário se ele é obrigado ou não a fazer sua declaração de imposto de renda. O algoritmo deve solicitar ao usuário que responda sim ou não para as seguintes questões, sendo que o contribuinte deve declarar se se enquadrar em uma delas ou conforme descreve as condições (o texto está resumido, caso de dúvidas ver fonte):
- Recebeu RENDIMENTOS TRIBUTÁVEIS superior a R$ 28.123,91
- Recebeu RENDIMENTOS ISENTOS superior a R$ 40.000,00
- OBTEVE GANHO DE CAPITAL NA ALIENAÇÃO DE BENS ou BOLSAS DE VALORES
- Caso relacionado a ATIVIDADE RURAL: obteve receita superior a R$ 140.619,55 ou pretenda compensar, PREJUÍZOS de anos anteriores
- Tem POSSE total superior a R$ 300.000,00, estando dispensado se seus bens estiverem lançados na declaração do cônjuge
- Passou à CONDIÇÃO DE RESIDENTE no Brasil em qualquer mês
- Quem optou pela ISENÇÃO DO IMPOSTO SOBRE A RENDA INCIDENTE SOBRE O GANHO DE CAPITAL auferido na VENDA DE IMÓVEIS RESIDENCIAIS
- Implemente um algoritmo que solicita ao usuário entrar com 10 temperaturas, o algoritmo deve usar um laço de repetição para isso. No final deve mostrar a maxima, minima e média das temperaturas (id:0.16)
- Desenvolva em pseucodigo um algortimo que testa o vencedor de uma rodada de truco. A sequencia das cartas esta descrita na imagem abaixo bem como dos naipes franceses. Além da sequencia ali descrita, uma carta será sorteada e fará com que se torne a mais forte (manilha) aquela de força imediatamente superior sorteada (no caso da carta sorteada ser um 3 a manilha é o 4). A rodada é vencida numa disputa de melhor de três. As manilhas nunca empatam, neste caso prevalesce o naipe conforme sequencia. No caso de empate no último turno vence a rodada quem venceu o primeiro turno. Na ocorrência de empate nos três turnos vence a rodada quem foi o primeiro a jogar.
|
Pseudo-código utilizando Portugol - repetições
Exercícios - Pseudocodigo (série 1)
|
Exercícios - Pseudocodigo (série 1):
- Implemente um algoritmo que solicita ao usuario entrar com um numero negativo qualquer. O algoritmo deve mostrar todos os números impares e pares de 0 até este negativo indicado. Utilize a estrutura para, verifique qual o passo adequado para resolver esta questão. (id:1.07)
- Desenvolva uma algoritmo para marcar o placar de um jogo de futebol, deve solicitar ao usuário digitar A ou B, ao digitar A é somado um gol a equipe A e o mesmo para a B. Se digitado F deve encerrar e mostrar o placar final. (id:1.11)
- Implemente um algoritmo que obtém um número do usuário e utilizando laço para verifica se um número primo. Valide seu algoritmo comparando com a lista de primos Lista de números primos (id:1.14)
- Implemente um algoritmo que obtém dois números inteiros positivos do usuário e utilizando laço de repetição realização a multiplicação destes dois números através de operações de soma. (id:1.09)
- Implemente um algoritmo que obtém dois números inteiros positivos do usuário e utilizando laço de repetição realização a divisão destes dois números através de operações de subtração. (id:1.10)
- Faça um algoritmo que apresente a sequencia de Fibonacci dado um valor “n” que representa a quantidade de números em série que se deseja exibir. (id:1.15)
- Implemente um algoritmo que utiliza uma estrutura "PARA" afim de desenhar uma moldura com 10 colunas e "n" linhas. A quantidade de linhas "n" deve ser obtida do usuário. Se o usuário digitar 6 ficaria conforme mostrado a seguir:
XXXXXXXXXX
X X
X X
X X
X X
XXXXXXXXXX
</syntaxhighlight>
|
Exercícios - Pseudocodigo (série 2)
|
Exercícios - Pseudocpodigo (série 2):
- Rode e teste o exemplo do "Quadro 42 - Exemplo de uso de vetores em Portugol" do TCC de Antônio Medeiros, compare com a implementação de teste de números primos feito na lista anterior. Com o uso de vetores o que mudou?
- Implemente um algoritmo que solicita do usuário 10 números, após a leitura mostra ao usuários os números na ordem inversa em que foram digitados
- Escreva um algoritmo que solicita ao usuário digitar 6 números para uma aposta na megasena. O algoritmo deve utilizar a estrutura repita, gravar em um vetor cada número que deve estar entre 1 e 60. Deve garantir que os 6 números são diferentes entre si e no final mostrar os números digitados
- Implemente o pseudocódigo de uma calculadora que realiza operações de soma ou subtração de dois números. A calculadora deve operar em um laço infinito encerrando sua operação se o usuário digitar "q"
- Implemente o pseudocódigo de um programa que solicita o nome e idade de 5 pessoas gravando em dois vetores distintos (um literal e outro numérico). No final imprime em tela o indice de memória de cada usuário e seus dados como no exemplo a seguir "O nome do usuário '1' é 'Joao' e tem 40 ano(s)" (Neste exemplo o usuário digitou nome: Joao, Idade: 40). Utilize estrutura de repetição REPITA.
- Implemente o pseudocódigo de um programa que utiliza uma matriz para armazenar informações NUMERICAS de um estoque de produtos. Cada linha desta matriz representa um produto, usaremos o limite de 5 produtos para este exercicio. A matrriz deve ter 3 colunas, a primeira representará a quantidade em estoque, a segunda o valor de custo e a terceira o preço de venda. O programa deve apresentar uma entrada de dados para receber do usuário parâmetros destes 5 produtos. No final um relatório deve ser apresentado mostrando a quantidade em estoque e o lucro bruto em % que está sendo aplicado para cada produto. Utilize estrutura de repetição ENQUANTO.
- Implemente em pseudocódigo um programa que obtém o nome de 10 alunos e suas 4 notas para cada aluno. No final deve imprimir um relatório mostrando cada aluno por nome, a média de suas notas e sua situação final (aprovado se a média for >= 6). Utilize vetores, matrizes e estruturas de repetição PARA.
Exercícios complementares:
- Sessão 12.5 (página 294) de Araújo, Everton Coimbra de. Algoritmos: fundamento e prática; 3ª ed. [S.l]:Visual Books, 2007. 414p. ISBN 9788575022092.
|
Pseudo-código utilizando Portugol - sub-rotinas e registros
Exercícios - Pseudocodigo (série 3)
|
Exercícios - Pseudocodigo (série 3):
- Execute o código do TCC do Antonio Medeiros, "Quadro 49 - Exemplo de passagem de parâmetros por referência em Portugol"
- Execute o código do TCC do Antonio Medeiros, "Quadro 50 - Exemplo de uso de sub-rotina que retorna valor em Portugol"
- Implemente um algoritmo que realiza análises combinatórias pelo uso de uma sub-rotina de cálculo de fatorial. Neste caso o usuário deve entrar com um inteiro e o algoritmo deve retornar o número de possíveis combinações para aquele dado realizando análise de Permutações Simples. (id:3.01)
- Implemente um algoritmo que utilizando as sub-rotinas pré-definidas do portugol (seno e cosseno) criando outras sub-rotinas para cálculos da tangente, arco-seno, arco-coseno e arco-tangente. Neste caso utilizando angulos em radianos
- Implemente um algoritmo anterior agora aceitando angulos em graus
- Execute o código do TCC do Antonio Medeiros, "Quadro 56 - Exemplo de uso de vetor de registros em Portugol"
- Desenvolva uma algoritmo para marcar o placar de um jogo de futebol, deve solicitar ao usuário digitar o nome das equipes A e B, guardando esta informação em campos de registros bem como deve possuir campos para armazenar o placar de cada equipe. Depois que o usuário digitar os nomes deve aguardar o anúncio de gols. Ao digitar A é somado um gol a equipe A e o mesmo para a B. Se digitado F deve encerrar e mostrar o placar final mostrando os nomes das equipes.
- Implemente o pseudocódigo de um programa que solicita o nome e idade de 5 pessoas gravando em uma estrutura de dados tipo registro com dois campos (um literal e outro numérico). No final imprime em tela o indice de memória de cada usuário e seus dados como no exemplo a seguir "O nome do usuário '1' é 'Joao' e tem 40 ano(s)" (Neste exemplo o usuário digitou nome: Joao, Idade: 40).
Parte da implementação do problema das funções trigonométricas
algoritmo
declare angulo,s,c,t numerico
escreva "Digite um angulo: "
leia angulo
s <- arredonda(seno(angulo))
escreva "O seno do angulo ",angulo," é: ",s
c <- arredonda(cosseno(angulo))
escreva "O cosseno do angulo ",angulo," é: ",c
t <- arredonda(tangente(angulo))
escreva "O tangente do angulo ",angulo," é: ",t
fim_algoritmo
sub-rotina tangente (x numerico)
declare aux numerico
aux <- seno(x) / cosseno(x)
retorne aux
fim_sub_rotina tangente
</syntaxhighlight>
|
Plano de aula
Aula
|
Data
|
Horas
|
Conteúdo
|
Recursos
|
1 |
28/7 |
2 |
Sem atividades de PRG – reposição de férias – horário disponível para outras atividades letivas |
Lab Redes 1
|
2 |
1/8 |
2 |
Sem atividades de PRG – reposição de férias – horário disponível para outras atividades letivas |
Lab Redes 1
|
3 |
4/8 |
2 |
Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos |
Lab Redes 1 ou Redes 2
|
4 |
8/8 |
2 |
Prática de fluxogramas |
Lab Redes 1
|
5 |
11/8 |
2 |
Introdução ao pseudocódigo até condicionais com resolução de exercícios |
Lab Redes 1 ou Redes 2
|
6 |
15/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) |
Lab Redes 1
|
7 |
18/8 |
2 |
Pseudocódigo: Uso de vetores e sub-rotinas |
Lab Redes 1 ou Redes 2
|
8 |
22/8 |
2 |
Prática: Resolução de problemas com vetores e sub-rotinas |
Lab Redes 1
|
9 |
25/8 |
2 |
Pseudocódigo e fluxogramas: Registros e revisão geral |
Lab Redes 1 ou Redes 2
|
10 |
29/8 |
2 |
Pseudocódigo e fluxogramas: Exercícios de preparação para prova |
Lab Redes 1
|
11 |
1/9 |
2 |
Avaliação1: Introdução a algoritmos (fluxograma e pseudocódigo) |
Lab Redes 1 ou Redes 2
|
12 |
5/9 |
2 |
Prática: Correção da Avaliação |
Lab Redes 1
|
13 |
12/9 |
2 |
Recuperação1? / Introdução ao C, primeiros conceitos de compilação, variáveis, controle de fluxo, entrada e saída de dados |
Lab Redes 1
|
14 |
15/9 |
2 |
Continuação C, condicionais, operadores relacionais, operadores lógicos. Prática: Controle de fluxo em C, entrada e saída de dados |
Lab Redes 1 ou Redes 2
|
15 |
19/9 |
2 |
Prática C |
Lab Redes 1
|
16 |
22/9 |
2 |
Continuação C: estruturas de repetição |
Lab Redes 1 ou Redes 2
|
17 |
26/9 |
2 |
Prática: estruturas de repetição |
Lab Redes 1
|
18 |
29/9 |
2 |
Continuação C: funções |
Lab Redes 1 ou Redes 2
|
19 |
3/10 |
2 |
Prática: Funções em C |
Lab Redes 1
|
20 |
6/10 |
2 |
Introdução a vetores e matrizes em C. Resolução de exercícios de vetores |
Lab Redes 1 ou Redes 2
|
21 |
10/10 |
2 |
Prática: Resolução de exercícios de fixação de vetores. |
Lab Redes 1
|
22 |
17/10 |
2 |
Prática: Exercícios de C |
Lab Redes 1
|
23 |
20/10 |
2 |
Avaliação2: C até funções |
Lab Redes 1 ou Redes 2
|
24 |
24/10 |
2 |
Correção da prova |
Lab Redes 1
|
25 |
27/10 |
2 |
Structs e Unions |
Lab Redes 1 ou Redes 2
|
26 |
31/10 |
2 |
Recuperação2? / Prática: Structs e unions |
Lab Redes 1
|
27 |
7/11 |
2 |
Prática: Structs e unions / Compreendendo melhor a função main e exit, gerando números pseudo-aleatórios, defines e operadores e precedências |
Lab Redes 1
|
28 |
10/11 |
2 |
Ponteiros |
Lab Redes 1 ou Redes 2
|
29 |
14/11 |
2 |
Prática: Exercicios ponteiros |
Lab Redes 1
|
30 |
17/11 |
2 |
Vetor de Ponteiros e Ponteiro Para Estruturas, typedef, recursividade, apresentação do projeto |
Lab Redes 1 ou Redes 2
|
31 |
21/11 |
2 |
Prática de Ponteiros e structs |
Lab Redes 1
|
32 |
24/11 |
2 |
Avaliação: C até structs e ponteiros |
Lab Redes 1 ou Redes 2
|
33 |
28/11 |
2 |
Prática: Correção da Avaliação / Desenvolvimento do projeto |
Lab Redes 1
|
34 |
1/12 |
2 |
Apresentação do projeto. Prática: Desenvolvimento do Projeto |
Lab Redes 1 ou Redes 2
|
35 |
5/12 |
2 |
Recuperação3? / Prática: Desenvolvimento do Projeto |
Lab Redes 1
|
36 |
8/12 |
2 |
Prática: Desenvolvimento do Projeto |
Lab Redes 1 ou Redes 2
|
37 |
12/12 |
2 |
Avaliação4: Apresentação do projeto |
Lab Redes 1
|
38 |
15/12 |
2 |
Avaliação4 (continuação): Apresentação do projeto |
Lab Redes 1 ou Redes 2
|
39 |
19/12 |
2 |
Encerramento da disciplina / Recuperação4? |
Lab Redes 1
|
TOTAL |
80 |
|
|
Conceitos
Ver moodle da disciplina.