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 135: Linha 135:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Exercícios - 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?
 
#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
 
#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

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

  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