Prévia do material em texto
1 Algoritmos e Técnicas de Programação Fundamentos de Algoritmos e das Linguagens de Programação Profa. Dra. Jenai Oliveira Cazetta Contextualização Fonte: https://cutt.ly/3fFZ5fD TECNOLOGIA DA INFORMAÇÃO Conjunto de todas as atividades e soluções providas por recursos de computação que visam a produção, o armazenamento, a transmissão, o acesso, a segurança e o uso das informações. Programas de computadores são construídos seguindo um conjunto de regras e técnicas bastante especificas, portanto, nessa era digital, é imprescindível que profissionais de diversas áreas aprendam essas ferramentas, para que possam contribuir e evoluir em sua área de atuação. Programar é uma arte, portanto precisamos ter ideias claras sobre o que devemos fazer, planejar qual a maneira mais eficaz/criativa/elegante e sem redundâncias para que a aplicação fique bem desenvolvida, facilitando manutenções. Conceitos e introdução aos algoritmos. Linguagens de programação e sua usabilidade. Componentes de um programa de computador. Nossa teleaula Princípios de resolução de problemas Objetivo principal da lógica de programação • Técnicas para resolução de problemas e automatização de tarefas; • Base para o aprendizado de todas as linguagens de programação. Raciocínio lógico • Sequência coerente, regular e necessária de acontecimentos, de coisas ou fatos. 2 Objetivos Solucionar problemas! Atingir objetivos! Atingir eficiência e eficácia no uso de recursos computacionais! Organizar estratégicas! Fontes: https://cutt.ly/2fFFhqE e https://cutt.ly/5fFS5z5 Calma, persistência e prática Fonte: https://cutt.ly/EfFOiyK DADOS representam FATOS e não INFORMAÇÕES! Objetivo! Conhecimento! Regras, diretrizes, procedimentos! Tarefas logicamente relacionadas! MADEIRA MESA Princípios de resolução computacional de problemas Problemas podem ser abordados de várias maneiras são descritos especificando-se a entrada (possíveis dados) e as condições (ou relações) que a saída deve satisfazer para determinada entrada. Fontes: https://cutt.ly/BfFNHsI, https://cutt.ly/EfXYjud, https://cutt.ly/gfXUTAx Pode-se começar a escrever diretamente o programa que irá resolver um problema, definindo várias repetições (“loops”), várias decisões e várias variáveis para armazenar e processar valores resultado desorganizado difícil ler, entender, depurar e atualizar. Mesmo que essa primeira abordagem funcione, o programa desenvolvido pode ser mais complicado do que o necessário. Fonte: https://cutt.ly/EfFOiyK O que devemos fazer? Pensar sobre o problema; Rascunhar uma primeira solução; Preocupar com os detalhes. DOCUMENTAÇÃO Introdução aos algoritmos 3 Algoritmo (1) Processo sistemático para a resolução de um problema; (2) Conjunto lógico de operações predefinidas que resolva um determinado problema de forma intuitiva; (3) Sequência ordenada de passos que deve ser seguida para a realização de uma tarefa. Os algoritmos ajudarão a descobrir o melhor percurso para solucionar um problema computacional. Fonte: https://cutt.ly/EfFOiyK Fonte: https://cutt.ly/EfFOiyK Algoritmo não computacional FAZENDO ARROZ 1. Acenda o fogo; 2. Refogue os temperos; 3. Coloque o arroz na panela; 4. Refogue o arroz; 5. Acrescente a água; 6. Abaixe o fogo; 7. Espere o ponto; 8. Desligue o fogo; 9. Sirva o arroz. Podemos melhorar este algoritmo? https://cutt.ly/5Wn3y2B Não existe somente uma forma de realizar um algoritmo. Pode-se criar outras formas ou sequências para obter o mesmo resultado. Algoritmo do arroz • Entrada ingredientes para o preparo do arroz; • Processamento cozimento do arroz; • Saída arroz. Fonte: https://cutt.ly/lfXOfFJ Formas de representar um algoritmo • Linguagem natural; • Diagrama de blocos; • Pseudocódigo ou português estruturado. Linguagem natural • Forma falada, escrita, gesticulada... • Direciona de forma simples e eficiente as descrições dos problemas e suas soluções. Fonte: https://cutt.ly/IfFC1KG Exemplo Problema: Média entre dois valores. ENTRADA • Dois valores PROCESSAMENTO • Cálculo da média aritmética SAÍDA • Média aritmética 4 inicio entre com o primeiro valor; armazene o valor digitado; entre com o segundo valor; armazene o valor digitado; realize a soma do primeiro valor com o segundo; realize a divisao do total dos valores por dois; armazene o valor encontrado; mostre na tela o resultado da media; fim. Indentação!!! ; e . Erros de Português? Fonte: https://cutt.ly/EfFOiyK Diagrama de blocos e pseudocódigo Diagrama de blocos • Conjunto de símbolos gráficos cada um representa uma ação específica a ser executada; • Determina a linha de raciocínio utilizada pelo programador para resolver o problema; • Os símbolos são padronizados ANSI. Dicas • Estar atento aos níveis; • Começar de cima para baixo e da esquerda para direita; • Não cruzar as linhas, principalmente as linhas de fluxos de dados. TERMINAL ENTRADA MANUAL PROCESSAMENTO EXIBIÇÃO Início ou fim de um fluxo! Geralmente via teclado! Execução de cálculos! Mostra o resultado de uma ação! DECISÃO PREPARAÇÃO PROCESSO PREDEFINIDO Grupo de operações relacionadas a uma sub-rotina! Desvios condicionais nas operações de tomada de decisão e laços condicionais para repetição de trechos do programa! Execução de um laço incondicional! LINHA DE FLUXOCONECTORES Calculando a média entre dois valores início valor1 valor 1 1 valor2 valor 2 media soma/2 media 1 fim soma valor1 + valor2 “Digite o valor1: ” “Digite o valor2: ” “Média: “ Pseudocódigo ou português estruturado • Ferramenta que pode auxiliar a programação; • Pode ser escrito com palavras similares ao inglês (português) facilita a interpretação e desenvolvimento de um programa. Pode ser aplicado a qualquer linguagem de programação. Fonte: https://cutt.ly/EfFOiyK 5 Regras básicas • Escolher um nome; • Avaliar as variáveis atenção aos seus tipos e características; • Descrever de forma clara o que será armazenado; • Verificar se as instruções fazem sentido e se as mesmas tem uma sequência lógica; • Avaliar o resultado; • Finalizar o algoritmo. calculo_media; var real: valor1, valor2, soma, media; inicio escreva (“Digite o valor 1: ”); leia (valor1); escreva (“Digite o valor 2: ”); leia (valor2); soma valor1 + valor2; media soma/2; escreva (“A media do aluno: ”); escreva (media); fim. ; . Converse com o usuário de seu programa... Diga o que você quer que ele faça e o que obteve após processamento!!! Fonte: https://cutt.ly/EfFOiyK Armazenando dados Atividade • Construir um algoritmo para cadastrar os dados pessoais de um aluno (nome, endereço, cidade e estado) e mostrar na tela do computador o resultado; • Algoritmo em linguagem natural, em diagrama de blocos e em pseudocódigo. ENTRADA • DADOS PESSOAIS DO ALUNO PROCESSAMENTO • NÃO TEM! SAÍDA • DADOS PESSOAIS DO ALUNO inicio entre com o nome do aluno; entre com a rua e o numero da residencia do aluno; entre com a cidade e o estado da residencia do aluno; mostre na tela os dados coletados do aluno; fim. Linguagem natural 6 início nome nome 1 nome, rua_numero, cidade_estadorua_numero rua e numero 1 fim cidade_estado cidade e estado Diagrama de blocos Pseudocódigocadastro_aluno; var caracter: nome, rua_numero, cidade_estado; inicio escreva(“Digite o nome do aluno: ”); leia nome; escreva(“Digite o nome da rua e o numero: ”); leia rua_numero; escreva(“Digite a cidade e o estado: ”); leia cidade_estado; escreva nome; escreva rua_numero; escreva cidade_estado; fim. string conjunto de caracteres!!! Fonte: https://cutt.ly/EfFOiyK Codificação binária Para aprender a programar, preciso aprender sobre codificação binária? Fonte: https://bit.ly/3aLma1DFonte: https://cutt.ly/EfFOiyK Conceitos básicos de linguagens de programação Para cada tarefa, para cada objetivo a ser atingido há uma linguagem adequada e um conjunto de ferramentasrecomendado. Linguagens de programação são padrões de codificação binária, com sintaxe e semânticas específicas. São capazes de criar instruções para máquinas. Fonte: https://cutt.ly/EfFOiyK Graças a esses conjuntos de códigos e recursos, é possível criar programas e sistemas para resolver os mais diversos problemas do cotidiano. 7 Sintaxe determina as relações formais que interligam os constituintes da sentença, atribuindo-lhe uma estrutura. Semântica sentido das palavras e interpretação das sentenças e dos enunciados. Fonte: https://cutt.ly/EfFOiyK Alto ou baixo nível? • Alto nível a sintaxe se aproxima a uma linguagem humana; • Baixo nível possuem sintaxe e semântica próximas ao código de máquina. Paradigmas das linguagens de programação • Paradigma modelo, padrão. • No contexto da programação de computadores jeito, maneira, estilo de se programar. • Todas as linguagens possuem uma sintaxe forma como o programa é escrito. • Quatro paradigmas tiveram sua evolução reconhecida nas últimas três décadas: • Programação Imperativa ou Procedural; • Programação Orientada a Objeto; • Programa Funcional; • Programação Lógica. Programação imperativa • Paradigma mais antigo; • Pode armazenar o programa e suas variáveis juntamente, assim como a abstração procedural, as atribuições, as sequências, os laços, os comandos condicionais e a manipulação de exceções; • O nome “Imperativa” está ligado ao tempo verbal imperativo, onde o programador diz ao computador: faça isso, depois isso, depois aquilo... • COBOL, Fortran, C, Ada e Perl. Programação orientada a objeto (POO) • Um dos paradigmas mais populares atualmente; • Conceito de programação baseado no uso de componentes individuais objetos que inter-relacionam entre si e que fazem parte da composição do software; • Agiliza o processo de criação e proporciona aos programadores uma certa flexibilidade para criação e modificações dos programas. • vSmalltalk, C++, Java, Delphi, C#. 8 Componentes e elementos de linguagem de programação Programa de computador SEQUÊNCIA DE INSTRUÇÕES 1. Início do programa; 2. Definição das variáveis e de possíveis atribuições; 3. Instrução de leitura dos dados; 4. Instrução do formato de escrita; 5. Demais instruções e funções; 6. Fim do programa. Programa: Sequência de código organizada de tal forma que permita resolver um determinado problema. Pode ser desenvolvido em módulos distintos e/ou em subprogramas. Fonte: https://cutt.ly/EfFOiyK Atenção na sequência que os dados percorrem as instruções deverão ser escritas e armazenadas na memória do computador na mesma ordem em que se espera que sejam executadas. Linguagem C • É estruturada torna o processo de desenvolvimento mais simplificado; • Simples conta com um conjunto de bibliotecas de funções e sub-rotinas auxiliam no desenvolvimento de sistemas; • Grande parte dos sistemas operacionais são escritos em C usada para escrever uma versão do Unix. https://bit.ly/2P0Dz02 Estrutura de um programa em C Algoritmo Linguagem C { início de uma função. } término da função. nome_programa; var //declaração de variáveis inicio //ações fim. #include<bibliotecas> int main() { //início das funções //declaração de variáveis //instruções return 0; //término das funções } • int main () a primeira e a principal função a ser executada; • int definição do valor de retorno da função main(), que no caso é um inteiro; • () usados para definir os parâmetros a serem passados para a função main(); • return definição do valor de retorno do tipo int normalmente é configurado com o valor 0 para a finalização da função main(). #include<bibliotecas> int main() { //início das funções //variáveis //instruções return 0; //término das funções } 9 Bibliotecas ou arquivos de cabeçalho em C • Coleção de funções, constantes, estruturas de dados, etc. ficam disponíveis para uso do programador em arquivos específicos acessados via arquivos de cabeçalho. #include<nome_biblioteca> #define_USE_MATH_DEFINES Algumas bibliotecas #include<stdio.h> funções de entrada e saída (printf e scanf ) #include<stdlib.h> transforma strings em números #include<string.h> manipulação de strings #include<time.h> manipulação de horas e datas #include<math.h> operações matemáticas //para acessar as constantes M_xxx Variáveis e comandos de entrada e saída de dados Variável NOME DA VARIÁVEL • Deve identificar o dado a qual se refere; • Maioria das linguagens de programação case sensitive letras maiúsculas e minúsculas são tratadas com distinção valor Valor; • Não podem ser usados acentos nem caracteres especiais. <tipo> <nome_da_variavel>; Uma variável é uma posição na memória onde um valor pode ser armazenado para ser utilizado por um programa. É um endereço de memória de trabalho que guarda, temporariamente, um valor utilizado/obtido pelo programa. Memória de Trabalho A B Tipos primitivos – Básicos • Numérico inteiro (int) valores inteiros positivos, negativos ou zero; • Numérico de ponto flutuante (float ou double) valores pertencentes ao conjunto dos números reais; • Caractere (char e void) armazena letras; • Booleano (bool) armazenam verdadeiro (1) ou falso (0). Comandos de entrada • Digitada pelo usuário a partir de uma interface textual ou gráfica pela qual o usuário alimenta o sistema com dados; • Leitura de arquivos a partir de arquivos de texto, planilhas, arquivos pdf, entre outros; • Banco de dados programas que fazem o gerenciamento da base de dados ao qual o sistema computacional possui acesso. 10 scanf(“%d”,&valor); //o usuário entrará com um valor inteiro e o computador o armazenará na variável “valor”. leia(variável); scanf(“código de formatação”,&variável); Obrigatório! Diz para o acessar o endereço de memória onde a variável foi criada. scanner flow gets(nome); //o usuário entrará com uma palavra ou com uma frase e o computador o armazenará na variável “nome”. • No caso da variável ser do tipo caractere: Especificador de formato Cada tipo de variável um especificador de formato para fazer a impressão do valor que está guardado naquele espaço da memória. Código Função %c apenas 1 caractere %d números inteiros %e números em notação científica %f números reais (ponto flutuante) %s série de caracteres %u número decimal sem sinal escreva (variável); printf (“código de formatação”, variável); printf (“expressão”); printf(“O valor encontrado foi %d”,valor1); printf(“∖nResposta: a = %.2f e b = %.2f ∖n”, a,b); Comandos de saída (tela do computador) printer flow escreva (“ ”); Armazenando dados pessoais Atividade • Programa armazenar o nome, a idade, o e-mail, o CPF e a renda mensal de um aluno; • Deverá receber os dados digitados pelo usuário e armazenar nas respectivas variáveis e, por fim, imprimir os valores que foram armazenados. ENTRADA • DADOS PESSOAIS DO ALUNO PROCESSAMENTO • NÃO TEM! SAÍDA • DADOS PESSOAIS DO ALUNO 11 início nome Nome: 1 idade Idade: 1 email Email: Diagrama de blocos cpf CPF: renda Renda mensal: 2 nome, idade, email, cpf, renda 2 fim cadastro_aluno; //declarando variaveis var caracter: nome, email, cpf; real: renda; int: idade; inicio //entrando e armazenando variaveis escreva(“Digite o nome do aluno: ”); leia(nome); escreva(“Digite a idade do aluno: ”); leia(idade); escreva(“Digite o e-mail do aluno: ”); leia(email); escreva(“Digite o CPF do aluno: ”); leia(cpf); escreva(“Digite a renda mensal do aluno: ”); leia(renda); //imprimindo dados armazenados escreva(“Aluno: ”,nome); escreva(“Idade: ”,idade); escreva(“e-mail: ”,email); escreva(“CPF: ”,cpf); escreva(“Renda mensal: ”,renda); fim. //incluindo bibliotecas #include <stdio.h> #include <stdlib.h> #include <string.h> //iniciando o programa int main() { //definindo variáveis char nome,email,cpf; float renda; int idade; //imprimindo na tela do computador o valor a ser digitado e armazenando-o na respectiva variável printf(“\nDigite o nome do aluno: "); gets(nome); printf(“ \nDigite a idade do aluno: "); scanf("%d",&idade); printf(“ \nDigite o email do aluno: "); gets(email); printf(“ \nDigite o CPF do aluno: "); gets(cpf); printf(“ \nDigite a renda mensal do aluno: "); scanf("%f",&renda); //imprimindo os dados armazenados printf(“ \nAluno: %s",nome); printf(“ \nIdade: %d",idade); printf(" \nE-mail: %s",email); printf(" \nCPF: %s",cpf); printf(" \nRenda: R$ %.2f",renda); //encerrando o programa printf(" \nPressione a tecla enter para sair!"); return 0; } 12 Linguagem C Para programar na linguagem C eu preciso ter algum software instalado no meu computador? Fonte: https://bit.ly/3aLma1DFonte: https://cutt.ly/EfFOiyK Dev C++ Iniciando novo projeto Escrevendo o código fonte Escreva seu código-fonte aqui!!! 13 Salvando o código-fonte Compilando e executando o código-fonte Recapitulando Resolução de problemas Pensar sobre o problema; Rascunhar uma primeira solução; Preocupar com os detalhes. 14 ALGORITMOS Linguagem natural Diagrama de blocos Pseudocódigo Direciona de forma simples e eficiente as descrições dos problemas e suas soluções. Conjunto de símbolos gráficos sendo que cada um representa uma ação específica a ser executada. Pode ser escrito com palavras similares ao inglês (português). Pseudocódigo Linguagem C nome_programa; var //declaração das variáveis inicio //ações fim. #include<bibliotecas> int main() { //início das funções //declaração de variáveis //instruções return 0; //término das funções } ; “ {“ início de uma função. “ }“ término da função. Algumas bibliotecas #include<stdio.h> funções de entrada e saída (printf e scanf ) #include<stdlib.h> transforma strings em números #include<string.h> manipulação de strings #include<time.h> manipulação de horas e datas #include<math.h> operações matemáticas #define_USE_MATH_DEFINES //para acessar as constantes M_xxx Variáveis Tipos <tipo> <nome_da_variavel>; int float ou double char e void bool Comando de entrada de dados leia (variável); scanf (“código de formatação”,&variável); scanf (“%d”,&valor); gets(nome); %c apenas 1 caractere %d números inteiros %e notação científica %f números reais %s série de caracteres %u número decimal sem sinal Comando de saída de dados escreva (variável); printf (“código de formatação”, variável); escreva (“ ”); printf (“expressão”); printf(“O valor encontrado foi %d”,valor1); printf(“ ∖nResposta: a = %.2f e b = %.2f ”, a,b);