1 / 46

Prof. Gerson Pastre de Oliveira

Prof. Gerson Pastre de Oliveira. Técnicas e Linguagem de Programação. Disciplina teórica : conceitos importantes são trabalhados em sala de aula;

hiroko
Download Presentation

Prof. Gerson Pastre de Oliveira

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prof. Gerson Pastre de Oliveira

  2. Técnicas e Linguagem de Programação • Disciplina teórica: conceitos importantes são trabalhados em sala de aula; • Analisar problemas e projetar, implementar e validar soluções computacionais para os mesmos, através do uso de metodologias, técnicas e ferramentas de programação que envolvam elementos básicos da construção de algoritmos; • Aulas expositivas com base em apostilas, discussões em sala de aula, reuniões de grupo e elaboração de listas de exercícios, para resolução individual e/ou em grupo;

  3. Técnicas e Linguagem de Programação • A avaliação bimestral é composta pelas notas de trabalhos individuais e/ou em grupo que correspondem a 20% da média bimestral e por uma prova individual que corresponde a 80% da nota final; • Bibliografia: • Apostilas semanais; • CORMEN, T.H.; LEISERSON, C.E. RIVEST, R.L. Introduction to Algorithms. MIT Press, 2000. • FORBELLONE, A. L. V.; Eberspächer, H. F. Lógica de Programação: a construção de algoritmos e estruturas de dados. São Paulo: Makron Books, 1993.

  4. Conteúdo Programático • Noções de Programação; • Introdução a Linguagem Algorítmica; • Noções Gerais; Atribuição de variável; Algoritmos numéricos; Cláusula condicional; Comando composto; Operadores aritméticos; Variável Booleana; Comando Repetitivo. • Noções de Linguagem computacional; • Estrutura de programa; identificadores e variáveis; • Comentários; Comandos de leitura e escrita; • Operadores aritméticos e lógicos; • Comandos condicionais simples e compostos; • Laços. • Modularização; • Estrutura de dados; • Variáveis compostas heterogêneas (Registros e conjuntos de registros); • Arquivos; • Conceito, Organização e Operações.

  5. O que é Lógica? • Coerência e racionalidade; • Só na matemática? E os demais assuntos? • “Correção de pensamento”: quais operações, de um determinado conjunto são válidas, analisando formas e leis preexistentes – e, eventualmente, padrões de um certo tipo; • Na verdade, estamos falando de uma verificação do próprio raciocínio; • Quando tratamos disto em Sistemas de Informação, estamos falando em aplicar todo o cabedal lógico humano na programação de computadores? • LÓGICA LINEAR X LÓGICA NEBULOSA; • Tudo ao seu tempo: como trata-se de nosso aprendizado inicial, partimos do elementar, passando pelo simples, rumo ao complexo.

  6. Alguns outros exemplos • Lógica proposicional – Exemplo 1; • Todo mamífero é um animal; • Todo cavalo é mamífero; • Logo, todo cavalo é um animal. • Lógica proposicional – Exemplo 2; • Toda ave voa; • Todo morcego voa; • Logo, todo morcego é ave. • O primeiro silogismo acima é válido, enquanto que o segundo é um sofisma, ou seja, um argumento não-válido; • Lógica proposicional – Exemplo 3; • Estocolmo é a capital da Suécia; • O canguru é um marsupial; • Beethoven era surdo; • Se Estocolmo é a capital da Suécia e o canguru é um marsupial, então Beethoven era surdo.

  7. Lógica? É lógico! • Não tem nada errado com o exemplo anterior? • Não, está tudo certo! É uma aplicação da chamada lógica proposicional (formal); • Vejamos um outro exemplo: • A variável x tem o valor 5; • A variável y tem o valor 3; • Se x é maior do 6 então z é igual a x mais y; senão, z é igual a x menos y. • Qual é o valor da variável z? • Resposta: 2; • Mais um exemplo: • Imagine um valor para x; • Imagine um valor para y; • Se x é menor que y então z é igual a x multiplicado por 2; senão, z é igual a y dividido por 2. • Qual é o valor da variável z, agora? • Resposta: Depende!

  8. Uso da lógica no dia-a-dia • Nas mais corriqueiras atividades cotidianas, usamos lógica: para ordenar as atividades, para classificar as tarefas, para analisar questões,... • Uso de lógica para pegar uma caneta em uma gaveta: • A gaveta está fechada; • A caneta está dentro da gaveta; • Para pegar a caneta, preciso abrir a gaveta. • O mesmo problema pode apresentar-se – ou ser declarado de maneira lógica – de forma mais complexa e/ou completa: • A gaveta está trancada? • Sim: Eu tenho a chave? • Sim: Destrancar; Abrir a gaveta; Ir p/ o passo 2; • Não: Ir para o passo 4; • Não: Abrir a gaveta; • A caneta está na gaveta? • Sim: Pegar a caneta; • Não: Não pegar coisa alguma; • Fechar a gaveta; • Terminar.

  9. Lógica de programação • Trata-se da resolução de problemas e/ou desempenho de tarefas, de maneira eficiente e eficaz, através de processos formais de racionalização; • Definição de passos e/ou etapas e suas conseqüentes interligações, de maneira racional, provendo uma solução que resolva uma tarefa específica (da melhor maneira possível); • Existe um produto que representa a solução procurada: o programa; • O raciocínio é, então, a ferramenta primordial; • Como as linguagens computacionais são diferentes, pode ocorrer alguma dificuldade na transformação da solução-raciocínio na solução-produto (programa).

  10. ? ? Algoritmo

  11. ALGORITMOS • Chama-se de algoritmo a seqüência de instruções, ordenadas de forma lógica, para a resolução de uma determinada tarefa ou problema; • Em outras palavras, “um algoritmo é processo sistemático para a resolução de um problema”; • “Um algoritmo computa uma saída, o resultado do problema, a partir de uma entrada”, ou seja, “as informações inicialmente conhecidas e que permitem encontrar a solução do problema”; • “Durante o processo de computação, o algoritmo manipula dados, gerados a partir de sua entrada”.

  12. ALGORITMO 1 • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Pegar o estepe; • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos. • Objetivo: trocar um pneu; • Seqüência; • E se o pneu não estiver furado? • Inserir um teste!

  13. ALGORITMO 2 • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Pegar o estepe; • Verificar se o pneu está furado; • Se o pneu estiver furado, então • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos. • Teste seletivo, determinando quais ações serão executadas; • Está correto! • Evidentemente, pode ser melhorado... • Mudar o lugar do teste.

  14. ALGORITMO 3 • Verificar se o pneu está furado; • Se o pneu estiver furado, então • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Pegar o estepe; • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos; • Descer o carro; • Guardar o pneu. • Há outras formas de resolver o problema; • Melhor solução: mesmo resultado com o menor esforço possível; • E se o estepe também estiver furado? (supondo que temos muitos estepes)

  15. ALGORITMO 4 • Verificar se o pneu está furado; • Se o pneu estiver furado, então • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Pegar o estepe; • Se o estepe estiver furado • Pegar outro estepe • Se o estepe estiver furado • Pegar outro estepe ... • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos; • Descer o carro; • Guardar o pneu. • Até quando pegar outro estepe?

  16. ALGORITMO 5 • Verificar se o pneu está furado; • Se o pneu estiver furado, então • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Enquanto o estepe estiver furado, faça • Pegar o estepe; • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos; • Descer o carro; • Guardar o pneu. • Existe um número virtualmente ilimitado de ações do tipo “Pegar o estepe”; • Há um teste de parada, ou seja, quando um estepe sem furo for encontrado, a ação seguinte será feita; • E para trocar os quatro pneus?

  17. ALGORITMO 6 • Verificar se o primeiro pneu está furado; • Enquanto o número de pneus verificados for menor ou igual a 4, faça • Se o pneu estiver furado, então • Pegar um macaco e uma chave de roda; • Posicionar o macaco embaixo do carro; • Enquanto o estepe estiver furado, faça • Pegar o estepe; • Subir o carro; • Soltar os parafusos e tirar o pneu; • Colocar o estepe e apertar os parafusos; • Descer o carro; • Guardar o pneu. • Próximo pneu;

  18. Pseudocódigo • Para o desenvolvimento de algoritmos, pode-se usar uma pseudolinguagem, com algumas convenções simbólicas; • Apesar dos pseudocódigos não constituírem uma linguagem de programação, é importante que os mesmos mantenham uma estrutura definida; • Sintaxe: manter a convenção simbólica adotada; • Pode usar de uma certa flexibilidade, o que não é admissível em uma linguagem de programação; • Alguns elementos importantes: operadores aritméticos, operadores lógicos, variáveis, constantes, tipos de dados, identificadores, instruções e funções

  19. Variáveis • Variáveis são estruturas destinadas a guardar temporariamente uma certa categoria de dados (isto ocorre durante a execução de um algoritmo); • Uma variável pode ser alterada em um determinado momento durante a execução de um algoritmo; • Pode-se enxergar uma variável como uma “caixa”, na qual armazenamos determinado valor, que pode ser usado, alterado e manipulado durante o algoritmo; • Para poder ser identificada, uma variável tem um “rótulo”, um nome, que chamamos de identificador; • Com alguns exemplos, poderemos entender este conceito:

  20. Variáveis G X A 5 Caracter Inteiro 16.3 Falso Fix12 R5 Real Lógico

  21. Tipos de dados • Todos os dados armazenados em alguma estrutura de um algoritmo são de determinados tipos; • Os tipos de dados básicos, aplicáveis a variáveis e constantes, são: • INTEIRO: constituído por números inteiros (sem parte decimal); • REAL: constituído por números “não-inteiros”, ou seja, números que possuem parte inteira e parte decimal (números reais); • CARACTER: constituído por um (e apenas um) dígito alfanumérico (A..Z, 0..9, *, -, etc.); • LÓGICO: constituído pelos valores lógicos VERDADEIRO e/ou FALSO.

  22. Identificadores • Identificadores são os nomes ou “rótulos” dados a variáveis e/ou constantes na estrutura algorítmica; • As regras de construção de identificadores dependem da ferramenta computacional (linguagem) utilizada, variando de uma para outra; • Pode-se, entretanto, usar algumas regras universalmente aceitas: • Começar por um caractere alfabético (A..Z ou a..z); • Caso seja maior do que um caractere, os demais deverão ser outros caracteres alfabéticos ou numéricos; • Não usar caracteres especiais.

  23. Constantes • Constantes são estruturas destinadas a armazenar definitivamente, durante a execução de um algoritmo, uma certa categoria de dados; • Ao contrário de uma variável, uma constante não pode ter seu valor alterado durante a execução do algoritmo; • As regras válidas para identificadores, tipos de dados e atribuição em variáveis são válidas, igualmente, para as constantes; • Exemplo de uma constante “clássica”: PI = 3,1416

  24. Atribuição • O comando de atribuição é utilizado para guardar um valor em uma variável ou constante; • Semelhante valor pode ser atribuído de maneira simples – um valor como 11 (inteiro), 45,325 (real), a (caracter) – ou através de uma operação qualquer (vide próximo slide); • A atribuição é representada pelo sinal de igual (=) ou, eventualmente, pelos sinal gráfico dois pontos (:) junto com o sinal de igual (:=); • Mais adiante, veremos como se faz a declaração de variáveis, mas desde já devemos saber que uma atribuição não pode ser feita para uma variável incompatível com o tipo de atribuição proposto; • Suponha que FG seja uma variável numérica do tipo inteiro: Atribuição válida: FG = 150 Atribuições inválidas: FG = 12.56 FG = “P” Obs: Variáveis do tipo caracter devem ser atribuídas com aspas. Ex: var1 = “G”

  25. Operadores Aritméticos * Multiplicação / Divisão + Adição – Subtração % Resto de divisão inteira1 Exemplos: A = 5 * 2; X = A + C; B = 10 / 4; Y = D / 2; C = 15 + 11; D = 19 – 7. 1 - não é um operador aritmético clássico Os exemplos são comandos de atribuição

  26. Estrutura genérica... ALGORITMO <identificador>; CONSTANTES <identificador> = <valor_constante>; VARIÁVEIS <identificador> : <tipo_variável>; INÍCIO <instrução1>; <instrução2>; <instrução3>; ... ... ... <instruçãoN>; FIM.

  27. DECLARAÇÃO DE VARIÁVEIS E CONSTANTES INSTRUÇÕES DE ENTRADA/SAÍDA E ATRIBUIÇÕES ALGORITMO 7 ALGORITMO números; CONSTANTES fator = 2; VARIÁVEIS num1, num2, dobro, soma :INTEIRO; metade : REAL; INÍCIO ESCREVER(“Primeiro número : ”); LER(num1); ESCREVER(“Segundo número : ”); LER(num2); soma:=num1+num2; dobro:=soma * fator; metade:=soma / fator; ESCREVER(soma, dobro, metade); FIM.

  28. Explicando... • O exemplo anterior deixou mais clara a estrutura de um algoritmo com o pseudocódigo que utilizaremos no curso; • Em princípio, todo o algoritmo deve receber um nome, que é dado por um identificador após a palavra ALGORITMO (no exemplo, o algoritmo tem o nome de números); • As constantes e variáveis que serão utilizadas devem ser declaradas em uma área própria (temos, no exemplo, a constante fator declarada na área CONSTANTES e as variáveis num1, num2, dobro, soma e metade declaradas na área VARIÁVEIS); • Desde o INÍCIO até o FIM, temos a parte operacional do algoritmo, ou seja, diretivas chamadas de INSTRUÇÕES (e, eventualmente, de FUNÇÕES) são utilizadas para a execução das finalidades do algoritmo, incluindo a utilização de variáveis e constantes e de comandos de ATRIBUIÇÃO;

  29. Explicando... • Em breve, veremos que uma instrução e/ou declaração pode exceder o espaço de uma linha; • De qualquer forma, utilizaremos o sinal gráfico ponto-e-vírgula (;) para identificar o final de uma declaração e/ou instrução; • As expressões INÍCIO e FIM também poderão aparecer diversas vezes em um mesmo algoritmo; • Para identificar a expressão que indica o final de todas as operações algorítmicas, utilizaremos o sinal gráfico ponto (.);

  30. Declarações • Variáveis e constantes devem ser declaradas na seções próprias do algoritmo antes de serem usadas; • A declaração de uma variável implica na definição do tipo de dado que a mesma poderá conter. Exemplos: a, b, resultado : INTEIRO; resposta, cont : CARACTER; média : REAL; verifica : LÓGICA; • Uma constante é sempre declarada em conjunto com o seu valor. Exemplo: pi = 3,1416; fac = “Politécnica”; num = 5; x = VERDADEIRO;

  31. Instruções • Também conhecidas como comandos, tem a finalidade de executar uma ação qualquer na estrutura algorítmica (entrada, saída, condicional, repetição, etc); • A instrução de entrada é representada pela palavra LER, e tem por função identificar a entrada de dados em um algoritmo, sempre através de uma variável. LER (<variável1>,[<variável2>],...,[<variável_n]); • Podem ser lidas várias variáveis em uma só instrução LER ou apenas uma; • A(s) variável(is) lida(s) deve(m) ficar entre parênteses; • Por uma questão de organização, não convém “misturar” variáveis de diferentes tipos em uma mesma instrução LER; • Para ser lida, uma variável deve ter sido declarada.

  32. Instruções • A instrução de entrada é representada pela palavra ESCREVER, e tem por função identificar a saída de dados de um algoritmo, o que pode acontecer através de uma variável, de uma constante ou de uma cadeia de caracteres; ESCREVER (<var1>,[<var2>],...,[<var_n]); ESCREVER (<const1>,[<const2>],...,[<const_n>]; ESCREVER (“<cadeia_caracteres”); ESCREVER (“<cadeia_caracteres”, <var/const>); • Podem ser escritas diversas variáveis e/ou constantes em uma única instrução ESCREVER (misturar constantes e variáveis é permitido); • Uma cadeia de caracteres (mensagem) também pode ser escrita com o mesmo comando, isoladamente ou em conjunto com variáveis e/ou constantes.

  33. Instruções • Para qualquer instrução que utilize uma série de variáveis, as mesmas devem ser separadas pelo sinal gráfico vírgula (,); • Um comando ESCREVER também pode ser usado para efetuar cálculos sem a necessidade de atribuição de valores; • Exemplos (trechos de algoritmos, considerando todas as variáveis do tipo INTEIRO): x:=10 + 20 * 2; y:=x / 2 – 1; ESCREVER(“Resultados”); ESCREVER(“Valores : ”,x,y); LER(x,y); LER(z); ESCREVER(“Soma das variáveis: ”,x+y+z);

  34. Alguns detalhes... • Instruções e demais palavras-chave (aí incluídas expressões como INÍCIO e FIM), bem como tipo de variáveis devem ser grafadas em letras maiúsculas; • As demais expressões da estrutura algorítmica (como nome de variáveis e constantes, por exemplo) devem ser grafadas em letras minúsculas; • Os diversos níveis do algoritmo devem ser destacados através de endentação, de modo que seja possível perceber quando determinadas linhas pertencem a um conjunto distinto; • Cadeias de caracteres (ou mesmo caracteres isolados) deverão sempre ser inseridos entre aspas (“ ”), em qualquer lugar onde sejam necessários (instruções ou atribuições, por exemplo).

  35. ALGORITMO 8 Construir um algoritmo para ler 4 notas de um aluno e calcular sua média. Imprimir a média e o nome da matéria (“Algoritmos”). ALGORITMO média_aluno; CONSTANTES matéria = “Algoritmos”; VARIÁVEIS nota1, nota2, nota3, nota4, média : REAL; INÍCIO LER(nota1, nota2, nota3, nota4); média:=(nota1+nota2+nota3+nota4) / 4; ESCREVER(matéria,média) FIM.

  36. ALGORITMO 9 Construir um algoritmo para, dado o raio, calcular a área de um círculo. Lembre-se que Área = .R2 ALGORITMO área_círculo; CONSTANTES pi = 3,141592654; VARIÁVEIS raio, área : REAL; INÍCIO LER(raio); área:=pi * raio * raio; ESCREVER(área) FIM.

  37. Exercícios • Calcular a quantidade de tijolos necessária para a construção de uma parede, tendo como dados de entrada a altura da parede, a largura da parede, o comprimento do tijolo e a largura do tijolo; • Calcular o salário mensal de um funcionário, considerando os seguintes dados de entrada: nº de dias trabalhados no mês, valor da hora de trabalho, número de horas extras. Considere que cada dia de trabalho tem 8 horas e que o valor da hora extra é 20% maior que o valor da hora normal; • Construa um algoritmo para que, dado um número inteiro maior 9, seja possível determinar o algarismo que representa as unidades deste número; • Construa um algoritmo para que, dado um número inteiro maior 9 e menor do que 100, seja possível inverter seus dois algarismos; • Construa um algoritmo para que, dadas duas variáveis quaisquer, seus valores possam ser invertidos (ex: variáveis a e b, o valor de a passa para b e vice-versa – não esqueça que ao trocar o valor de uma variável, o anterior é perdido).

  38. ALGORITMO 10 Calcular a quantidade de tijolos necessária para a construção de uma parede, tendo como dados de entrada a altura da parede, a largura da parede, o comprimento do tijolo e a largura do tijolo. ALGORITMO parede; VARIÁVEIS areap, alturap, larguarap : REAL; areat, compt, largurat, quant : REAL; INÍCIO ESCREVER(“Dados da parede: ”); LER(alturap, largurap); ESCREVER(“Dados dos tijolos: ”); LER(compt, largurat); areap:=largurap * alturap; areat:=compt * largurat; quant:=areap / areat; ESCREVER(“Quantidade necessária: ”, quant); FIM.

  39. ALGORITMO 11 Calcular o salário mensal de um funcionário, considerando os seguintes dados de entrada: nº de dias trabalhados no mês, valor da hora de trabalho, número de horas extras. Considere que cada dia de trabalho tem 8 horas e que o valor da hora extra é 20% maior que o valor da hora normal. ALGORITMO salário; CONSTANTES dia = 8; VARIÁVEIS diast, numhe : INTEIRO; valorht, valorhe, salário : REAL; INÍCIO ESCREVER(“Quantidade de trabalho: ”); LER(diast, numhe); ESCREVER(“Valor da hora de trabalho: ”); LER(valorht); valorhe:=valorht * 1,2; salário:=(diast*dia*valorht) + (numhe*valorhe); ESCREVER(“Salário: ”, salário); FIM.

  40. ALGORITMO 12 Construa um algoritmo para que, dado um número inteiro maior 9, seja possível determinar o algarismo que representa as unidades deste número. ALGORITMO unidades; VARIÁVEIS n, unid : INTEIRO; INÍCIO ESCREVER(“Número: ”); LER(n); unid:=n % 10; ESCREVER(“Unidades: ”, unid); FIM.

  41. ALGORITMO 13 Construa um algoritmo para que, dado um número inteiro maior 9 e menor do que 100, seja possível inverter seus dois algarismos. ALGORITMO inverte; VARIÁVEIS n, unid, dez, inv : INTEIRO; INÍCIO ESCREVER(“Número entre 10 e 99: ”); LER(n); unid:=n % 10; dez:=(n – unid) / 10; inv:=unid * 10 + dez; ESCREVER(“Invertido: ”, inv); FIM.

  42. ALGORITMO 14 Construa um algoritmo para que, dadas duas variáveis quaisquer, seus valores possam ser invertidos (ex: variáveis a e b, o valor de a passa para b e vice-versa – não esqueça que ao trocar o valor de uma variável, o anterior é perdido). ALGORITMO troca; VARIÁVEIS a, b, aux : CARACTER; INÍCIO ESCREVER(“Valor de a: ”); LER(a); ESCREVER(“Valor de b: ”); LER(b); aux:=b; b:=a; a:=aux; ESCREVER(“O valor de a agora: ”, a); ESCREVER(“O valor de b agora: ”, b); FIM.

More Related