1. Programação
1.1. É usada quando queremos que um computador resolva um algoritmo computacional
1.2. Usamos linguaguem de programação
1.2.1. Traduz a nossa linguagem natural para linguagem de máquina
1.2.2. Usa comandos específicos
1.2.3. Cada comando tem a sua forma correta de escrever e seu objetivo próprio
2. Algoritmos
2.1. Definição
2.1.1. É uma sequência de passos ordenados logicamente para resolver um problema.
2.2. Características
2.2.1. Precisão
2.2.1.1. Significa dizer que cada passo do algoritmo deve ser claro e não ambíguo.
2.2.1.2. Exemplo: Em vez de dizer "Adicione um pouco de sal", um algoritmo preciso diria "Adicione 1/4 de colher de chá de sal".
2.2.2. Finitude
2.2.2.1. O algoritmo deve terminar após um número finito de passos.
2.2.2.2. Exemplo: Um algoritmo para encontrar o maior número em uma lista terminará quando todos os números forem comparados.
2.2.3. Entrada definida
2.2.3.1. O algoritmo deve especificar quais dados são necessários para sua execução.
2.2.3.2. Exemplo: Um algoritmo para calcular a área de um retângulo precisa da entrada de dois valores: comprimento e largura.
2.2.4. Saída definida
2.2.4.1. O algoritmo deve produzir um resultado específico.
2.2.4.2. Exemplo: O algoritmo de ordenação deve produzir uma lista ordenada como saída.
2.2.5. Eficácia
2.2.5.1. Cada instrução do algoritmo deve ser básica o suficiente para ser executada em um tempo finito.
2.2.5.2. Exemplo: "Divida o número por 2" é uma instrução eficaz, enquanto "Pense em um número aleatório" não é.
2.2.6. Generalidade
2.2.6.1. O algoritmo deve ser aplicável a um conjunto de entradas, não apenas a um caso específico.
2.2.6.2. Exemplo: Um algoritmo para calcular a média deve funcionar para qualquer conjunto de números, não apenas para um conjunto específico.
2.2.7. Determinismo
2.2.7.1. Para o mesmo conjunto de entradas, o algoritmo deve sempre produzir o mesmo resultado.
2.2.7.2. Exemplo: Um algoritmo de ordenação sempre produzirá a mesma sequência ordenada para uma dada lista de entrada.
2.3. Exemplos de algoritmos não computacionais
2.3.1. Algoritmo para preparar um sanduiche
2.3.1.1. Reúna os ingredientes: 2 fatias de pão, queijo, presunto, alface, tomate, maionese.
2.3.1.2. Pegue uma fatia de pão e coloque-a em um prato limpo.
2.3.1.3. Espalhe uma camada fina de maio nese na fatia de pão.
2.3.1.4. Coloque uma fatia de queijo sobre a maionese.
2.3.1.5. Adicione uma fatia de presunto sobre o queijo.
2.3.1.6. Lave o tomate e corte-o em fatias finas.
2.3.1.7. Coloque 2-3 fatias de tomate sobre o presunto.
2.3.1.8. Lave uma folha de alface e coloque-a sobre o tomate.
2.3.1.9. Pegue a segunda fatia de pão e coloque-a sobre o alface.
2.3.1.10. Pressione levemente o sanduíche para compactá-lo.
2.3.1.11. Corte o sanduíche pela diagonal, se desejar.
2.3.2. Algoritmo para trocar uma lâmpada
2.3.2.1. Verifique se a lâmpada está realmente queimada, testando o interruptor.
2.3.2.2. Desligue o interruptor da luz.
2.3.2.3. Espere a lâmpada esfriar, se estiver quente.
2.3.2.4. Pegue uma escada ou banquinho seguro.
2.3.2.5. Posicione a escada embaixo da lâmpada.
2.3.2.6. Suba na escada com cuidado.
2.3.2.7. Gire a lâmpada queimada no sentido anti-horário para removê-la.
2.3.2.8. Pegue a nova lâmpada, verificando se a potência é compatível.
2.3.2.9. Insira a nova lâmpada no soquete.
2.3.2.10. Gire a nova lâmpada no sentido horário até ficar firme.
2.3.2.11. Desça da escada com cuidado.
2.3.2.12. Ligue o interruptor para testar a nova lâmpada.
2.4. Exemplos de algoritmos computacionais
2.4.1. Algoritmo para calcular a média de um aluno da UFERSA
2.4.1.1. Declarar variáveis: nota1, nota2, nota3 e media
2.4.1.2. Pedir ao usuário que informe os valores de nota1, nota2 e nota3
2.4.1.3. Receber os valores que o usuário informou
2.4.1.4. Converter os valores para o tipo correto (float)
2.4.1.5. Armazenar os valores nas variáves nota1, nota2 e nota3 respectivamente
2.4.1.6. Somar os valores armazenados em nota1, nota2 e nota3
2.4.1.7. Dividir o valor encontrado na soma por 3
2.4.1.8. Armazenar o valor encontrado na divisão na variável media
2.4.1.9. Exibir o valor encontrado e armazenado na variável média
2.4.2. Algoritmo para calcular o troco da janta no RU
2.4.2.1. Declarar variáveis: valor_pago e troco
2.4.2.2. Pedir ao usuário o valor que ele deseja fornecer
2.4.2.3. Receber o valor que o usuário informou
2.4.2.4. Converter o valor para o tipo correto (float)
2.4.2.5. Armazenar o valor na variável valor_pago
2.4.2.6. Se o usuário trouxer a carterinha, considerar o valor da janta a R$ 2,00
2.4.2.7. Se não trouxe a carterinha, considerar o valor da janta a R$ 11,00.
2.4.2.8. Diminuir o valor da janta do valor_pago
2.4.2.9. Armazenar o valor encontrado na variável troco
2.4.2.10. Exibir o valor do troco encontrado para o usuário
2.5. Por que criamos algoritmos para resolver problemas?
2.5.1. Eficiência
2.5.1.1. Algoritmos nos permitem resolver problemas de forma sistemática e eficiente.
2.5.1.2. Reduzem o tempo e esforço necessários para completar tarefas complexas.
2.5.2. Consistência
2.5.2.1. Garantem que um problema seja resolvido da mesma maneira toda vez.
2.5.2.2. Reduzem erros humanos e variabilidade nos resultados.
2.5.3. Automação
2.5.3.1. Possibilitam que computadores executem tarefas sem intervenção humana constante.
2.5.3.2. Permitem o processamento de grandes volumes de dados rapidamente.
2.5.4. Escalabilidade
2.5.4.1. Algoritmos bem projetados podem lidar com problemas de diferentes tamanhos.
2.5.4.2. Facilitam a expansão de soluções para problemas maiores.
2.5.5. Compreensão do problema
2.5.5.1. O processo de criar um algoritmo nos força a entender profundamente o problema.
2.5.5.2. Ajuda a identificar casos especiais e exceções.
2.5.6. Comunicação
2.5.6.1. Algoritmos são uma forma de comunicar soluções de problemas entre pessoas.
2.5.6.2. Facilitam a colaboração em projetos de software.
2.5.7. Otimização
2.5.7.1. Permitem melhorar continuamente a solução de um problema.
2.5.7.2. Possibilitam comparar diferentes abordagens para resolver o mesmo problema.
2.5.8. Reusabilidade
2.5.8.1. Algoritmos bem projetados podem ser reutilizados em diferentes contextos.
2.5.8.2. Economizam tempo no desenvolvimento de novas soluções.