Mudanças entre as edições de "PRG29002 - Programação I - Eng.Telecom 2017-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 148: Linha 148:
  
 
==Pseudo-código utilizando Portugol - sub-rotinas e registros==
 
==Pseudo-código utilizando Portugol - sub-rotinas e registros==
Exercícios
+
Exercícios - Pseudocpodigo (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 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"
 
#Execute o código do TCC do Antonio Medeiros, "Quadro 50 - Exemplo de uso de sub-rotina que retorna valor em Portugol"

Edição das 15h06min de 23 de fevereiro de 2017

Dados importantes

Dados da Disciplina

Diário de aula

Introdução aos algoritmos utilizando fluxograma

  • Ementa sisponí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.

Ansi flowchart.jpg

  • No libreoffice utilize a ferramenta Libreoffice Draw, há uma paleta específica para fluxogramas.

Flowchart libreoffice.png

  • Exemplos de algoritmos (como seriam os fluxogramas destes algoritmos?):
    • Calcula média de dois números
      Media de dois numeros.jpg
    • 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

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 - Pseudocpodigo (série 0):

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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)
  6. 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)
  7. Implemente em pseudocódigo o algoritmo descrito no fluxograma abaixo (clique na imagem para ampliar) (id:0.08):
    Bhaskara.png
  8. 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)
  9. 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):
    1. Recebeu RENDIMENTOS TRIBUTÁVEIS superior a R$ 28.123,91
    2. Recebeu RENDIMENTOS ISENTOS superior a R$ 40.000,00
    3. OBTEVE GANHO DE CAPITAL NA ALIENAÇÃO DE BENS ou BOLSAS DE VALORES
    4. Caso relacionado a ATIVIDADE RURAL: obteve receita superior a R$ 140.619,55 ou pretenda compensar, PREJUÍZOS de anos anteriores
    5. Tem POSSE total superior a R$ 300.000,00, estando dispensado se seus bens estiverem lançados na declaração do cônjuge
    6. Passou à CONDIÇÃO DE RESIDENTE no Brasil em qualquer mês
    7. Quem optou pela ISENÇÃO DO IMPOSTO SOBRE A RENDA INCIDENTE SOBRE O GANHO DE CAPITAL auferido na VENDA DE IMÓVEIS RESIDENCIAIS
  10. 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)
  11. 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.
    Truco.jpg

Pseudo-código utilizando Portugol - repetições

Exercícios - Pseudocpodigo (série 1):

  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)
  2. 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)
  3. 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)
  4. 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)
  5. 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)
  6. 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
  7. 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 - Pseudocpodigo (série 2):

  1. 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?
  2. 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
  3. 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 variaveis distintas 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
  4. 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"
  5. 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.
  6. 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.
  7. 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 - Pseudocpodigo (série 3):

  1. Execute o código do TCC do Antonio Medeiros, "Quadro 49 - Exemplo de passagem de parâmetros por referência em Portugol"
  2. Execute o código do TCC do Antonio Medeiros, "Quadro 50 - Exemplo de uso de sub-rotina que retorna valor em Portugol"
  3. 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.
  4. 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
  5. Implemente um algoritmo anterior agora aceitando angulos em graus
  6. Execute o código do TCC do Antonio Medeiros, "Quadro 56 - Exemplo de uso de vetor de registros em Portugol"
  7. 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.
  8. 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 9/2 2 Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos Lab Redes 2
2 14/2 2 Introdução ao fluxograma com resolução de exercícios Lab Redes 1
3 16/2 2 Prática de fluxogramas Lab Redes 2
4 21/2 2 Introdução ao pseudocódigo com resolução de exercícios Lab Redes 1
5 23/2 2 Pseudocódigo: Estruturas de repetição e sub-rotinas Lab Redes 2
6 2/3 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 2
7 7/3 2 Pseudocódigo: Uso de vetores e sub-rotinas Lab Redes 1
8 9/3 2 Prática: Resolução de problemas com vetores e sub-rotinas Lab Redes 2
9 14/3 2 Pseudocódigo: Registros e revisão geral (preparação para prova) Lab Redes 1
10 16/3 2 Pseudocódigo e fluxogramas: Resolução de exercícios (preparação para prova) Lab Redes 2
11 21/3 2 Avaliação: Introdução a algoritmos (fluxograma e pseudocódigo) Lab Redes 1
12 23/3 2 Prática: Correção da Avaliação / possível realização de recuperação Lab Redes 2
13 28/3 2 Introdução ao C, primeiros conceitos de compilação, variáveis, controle de fluxo com if… else, switch, entrada e saída de dados com printf e scanf, Lab Redes 1
14 30/3 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 2
15 4/4 2 Continuação C: estruturas de repetição Lab Redes 1
16 6/4 2 Prática: estruturas de repetição Lab Redes 2
17 11/4 2 Continuação C: funções Lab Redes 1
18 13/4 2 Prática: Funções em C Lab Redes 2
19 18/4 2 Introdução a vetores e matrizes em C. Resolução de exercícios de vetores Lab Redes 1
20 20/4 2 Prática: Resolução de exercícios de fixação de vetores. Lab Redes 2
21 25/4 2 Compreendendo melhor a função main e exit, gerando números pseudo-aleatórios, defines e operadores e precedências Lab Redes 1
22 27/4 2 Prática: Exercícios de C Lab Redes 2
23 2/5 2 Avaliação: C até funções Lab Redes 1
24 4/5 2 Prática: Correção da Avaliação / possível realização de recuperação Lab Redes 2
25 9/5 2 Structs e Unions Lab Redes 1
26 11/5 2 Prática: Structs e unions Lab Redes 2
27 16/5 2 Ponteiros Lab Redes 1
28 18/5 2 Prática: Exercicios ponteiros Lab Redes 2
29 23/5 2 Vetor de Ponteiros e Ponteiro Para Estruturas, typedef, recursividade, apresentação do projeto Lab Redes 1
30 25/5 2 Prática de Ponteiros e structs Lab Redes 2
31 30/5 2 Avaliação: C até structs Lab Redes 1
32 1/6 2 Prática: Correção da Avaliação / possível realização de recuperação / Desenvolvimento do projeto Lab Redes 2
33 6/6 2 Alocação dinâmica de memória, apresentação do projeto Lab Redes 1
34 8/6 2 Prática: Desenvolvimento do Projeto Lab Redes 2
35 13/6 2 Desenvolvimento do Projeto Lab Redes 1
36 20/6 2 Desenvolvimento do Projeto Lab Redes 1
37 22/6 2 Prática: Desenvolvimento do Projeto Lab Redes 2
38 27/6 2 Desenvolvimento do Projeto Lab Redes 1
39 29/6 2 Avaliação: Apresentação do projeto Lab Redes 2
40 4/7 2 Recuperação: Projeto Lab Redes 1
TOTAL 80