Revisão de 15h16min de 2 de agosto de 2017 por Cleber.amaral(discussão | contribs)(Criou página com '=Dados importantes= *Professor da Disciplina: Cleber Jorge Amaral <br> *Email: [mailto:cleber.amaral@ifsc.edu.br cleber.amaral@ifsc.edu.br] *Atendimento paralelo: terças e q...')
3.1 Introdução aos 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.
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):
3.2 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
4 Pseudo-código
4.1 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)
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.
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.
4.3 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