A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012.

Apresentações semelhantes


Apresentação em tema: "EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012."— Transcrição da apresentação:

1 EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012

2 2 Apresentação da disciplina Disciplina obrigatória – 1a da área de computação Objetivo: estudar lógica de programação e algoritmos Aulas teóricas sobre algoritmos Aulas práticas com a implementação dos algoritmos em Pascal

3 3 Sumário: Apresentação da disciplina Solução de problemas Algoritmos estruturados LEA – linguagem para a especificação de algoritmos Algoritmos numéricos e não numéricos Estruturas de dados homogêneas e heterogêneas Modularização Refinamento etapa por etapa Arquivos Alocação dinâmica de memória Objetos

4 4 Sociedade da Informação Desmaterialização dos produtos Informação e poder Informática: exclusão ou inclusão Democratização ou concentração Software: valor de troca ou valor de uso – software livre e proprietário Inclusão digital - LIpE

5 5 Computação Computar contar, calcular Desenvolvimento de software e hardware de computadores

6 6 Computador Máquina flexível de uso geral Programável: pode-se alterar seu comportamento Armazena dados e programas Máquina complexa: sistema operacional para permitir utilizar seus recursos Digital: representa e processa números, textos e imagens em forma discreta - binária

7 Capítulo 1 Arquitetura de computadores Software Linguagens Tradutores

8 8 Numeração binária Posicional como a decimal Dígitos 0 e 1

9 9 Representação binária e decimal 514 = = = = = 19 Processo inverso: Divisão 19/2 9/2 4/2 2/2 1/2 0 Resto

10 10 Potências de dois 2 0 = = = = = = = = = = = 1024 = 1 K

11 11 Solução de problemas computacionais numéricos e não numéricos Analisar o problema Criar soluções Selecionar uma solução Descrever a solução Especificar na forma de algoritmo Codificar em uma linguagem Compilar o programa fonte Testar o programa executável Linguagem natural Pseudo-código: linguagem semi-formal Pascal: programa fonte em linguagem formal Gerar um programa executável binário Utilizar o programa executável binário

12 Analisar o problema Descrever em linguagem natural Especificar os requisitos em linguagem semi-formal Abstração: o que é importante Centro no usuário

13 Criar soluções Descrever as soluções em linguagem natural Especificar as soluções em linguagem semi- formal Definir os critérios para a escolha da melhor solução Escolher a melhor solução Abstração Modularização Refinamento etapa por etapa Especificação semi-formal da solução

14 14 Procedimento Sequência de passos para resolver um problema – Ex.: Receita para fazer um bolo – Cuidado: – Este tipo de procedimento do exemplo mostra o que o leitor deve fazer para preparar um bolo – Os procedimentos e algoritmos computacionais que veremos devem representar o comportamento que um computador deve ter para nos auxiliar a resolver um problema

15 15 Procedimento para trocar uma lâmpada Pegar uma escada Posicionar a escada Buscar uma lâmpada nova Subir na escada Retirar a lâmpada queimada Colocar a lâmpada nova Descer da escada – Novamente: aqui está o que o leitor deve fazer, não o comportamento de um computador

16 16 Algoritmo Procedimento Efetivo Para entradas finitas fornece saidas finitas repetitíveis em tempo finito Algoritmos computacionais: descrevem o comportamento que um computador deve ter para nos apoiar na solução de algum problema

17 17 Algoritmo de Euclides para o cálculo do mdc Sejam x e y dois números inteiros maiores que zero; calcule o resto da divisão inteira de x por y; se o resto for zero, então o mdc é o y; se o resto não for zero então atribua o valor de y a x, atribua o valor do resto a y e recomece do cálculo do resto da divisão de x por y até que o resto seja zero.

18 18 Algoritmo de Euclides na forma de etapas 1) Escolha x e y; 2) Calcule o resto da divisão inteira de x por y; 3) Se o resto for diferente de zero faça: 3.1) Atribua o valor de y a x; 3.2) Atribua o valor do resto a y; 3.3) Retorne para a etapa 2; 4) Se o resto for zero então o y é o mdc.

19 19 Algoritmo de Euclides como fluxograma de um programa inicio Leia x, y r resto(x,y) X y Y r r=0 Escreva: o mdc é x fim não sim Ordem para o computador

20 20 Algoritmo de Euclides em pseudo-código - LEA algoritmo euclides (* algoritmo para o cálculo do mdc de dois números inteiros maiores que zero segundo Euclides; responsável:... ; data:... *) (* bloco de repetição com teste de término após o bloco *) inicio leia (x, y) (* dois valores estão sendo digitados e atribuidos às variáveis – o computador lê os dados que o usuário digita no teclado *) repita r resto (x,y) x y y r até que r = 0 escreva (x) // o computador escreve o valor no dispositivo padrão de saída fim

21 inicio leia (x, y) repita r resto (x,y) x y y r até que r = 0 escreva (x) fim inicio Leia x, y r resto(x/y) X y Y r r=0 Escreva: o mdc é x fim não sim

22 22 Algoritmo de Euclides – teste no início inicio Leia x, y r resto(x,y) X y Y r r<>0 Escreva: o mdc é y fim não sim r resto(x,y)

23 23 Algoritmo de Euclides – teste no início algoritmo euclides (* algoritmo para o cálculo do mdc de dois números inteiros maiores que zero segundo Euclides; responsável:... ; data:... *) (* bloco de repetição com teste de término antes do bloco *) inicio leia (x, y) r resto (x,y) enquanto r <> 0 faça inicio x y y r r resto (x,y) fim escreva (y) fim

24 24 inicio leia (x, y) r resto (x,y) enquanto r <> 0 faça inicio x y y r r resto (x,y) fim escreva (y) fim inicio Leia x, y r resto(x,y) X y Y r r<>0 Escreva: o mdc é y fim não sim r resto(x,y)

25 Algoritmos Estruturas de controle

26 Soma de três números Etapas: Preparar Digitar os números Somar os números Apresentar o resultado

27 27 Estrutura de controle sequencial: exemplo // Problema: somar três números // Solução: fazer um programa que auxilie na soma de três números algoritmo soma3a (* algoritmo para a soma de 3 números; responsável:...; data:... *) inicio Ler os tres números Somar os tres números Escrever a soma fim

28 28 Exemplo detalhado // Problema: somar três números // Solução: fazer um programa que auxilie na soma de três números algoritmo soma3a (* algoritmo para a soma de 3 números; responsável:...; data:... *) inicio (* digitar os dados *) leia (nr1) leia (nr2) leia (nr3) (* calcular os resultados *) soma nr1 + nr2 + nr3 (* apresentar os resultados *) escreva (soma) fim

29 Algoritmo sequencial na forma de fluxograma inicio Leia nr1, nr2, nr3 Soma nr1+nr2+nr3 Escreva soma fim

30 30 Estrutura de controle sequencial Os comandos são executados na mesma ordem em que estão escritos: seqüencialmente de cima para baixo. O fluxo de execução estático (programação) e o fluxo de execução dinâmico (execução do algoritmo) são correspondentes.

31 31 Cálculo da média de muitas variáveis Problema: calcular a média das notas dos alunos da turma - há 45 alunos na turma Etapas Preparar Digitar as notas Somar as notas Dividir a soma por 45 Apresentar o resultado

32 Cálculo da média de muitas variáveis - detalhamento // Problema: calcular a média de 45 notas // Solução: fazer um programa que auxilie na média de 45 notas algoritmo media45a (* algoritmo para a média de 45 números; responsável:...; data:... *) inicio (* digitar os dados *) leia (nota1) leia (nota2) leia (nota3) … Leia (nota45) (* calcular os resultados *) soma nota1 + nota2 + nota3 + … +nota45 média soma/45 (* apresentar os resultados *) escreva (média) fim

33 33 Cálculo da média de muitas variáveis - problema Há 45 alunos na turma Apenas com a estrutura seqüencial teria de definir 45 variáveis e repetir 45 vezes o comando para ler Solução do problema: Vamos alterar o soma3a para outra forma em que necessite apenas de uma variável para a entrada de dados

34 34 Nova forma para a soma de três números acumulando os valores em uma variável // Problema: somar três números // Solução: fazer um programa que auxilie na soma de três números algoritmo soma3b (* algoritmo para a soma de 3 números; responsável:...; data:... *) inicio soma 0 // acumulador leia (número) soma soma + número leia (número) soma soma + número leia (número) soma soma + número escreva (soma) fim

35 35 Atribuição O comando soma soma + número é um comando chamado de atribuição, onde calcula-se a expressão à direita da flecha, e atribui- se seu valor à variável à esquerda da flecha. Assim a mesma variável pode constar dos dois lados do comando de atribuição. Com essa nova forma foi possível utilizar apenas uma variável para a entrada de três valores numéricos. Há ainda um problema: necessitamos de 3 comandos de entrada de dados e atribuição para ler 3 valores e somá-los em uma variável. Como há sempre dois comandos que se repetem, podemos então utilizar um comando de repetição (iteração) para mandar repetir esses comandos o número de vezes que quizermos.

36 Estrutura de controle de iteração Um bloco de comandos é repetido Deve haver uma condição para interromper a repetição do bloco de comandos A condição pode ser verificada antes de cada repetição, ou após cada repetição Para bloco de comandos com vários comandos independentes há como definir explicitamente os comandos que compõem o bloco de repetição

37 37 Nova forma para a soma de três números com iteração // Problema: somar três números // Solução: fazer um programa que auxilie na soma de três números algoritmo soma3c (* algoritmo para a soma de 3 números; responsável:...; data:... *) inicio (* preparar *) soma 0 // acumulador ou somatório contador 0 // variável de controle (* digitar os dados *) repita contador contador + 1 leia (número) soma soma + número até que contador = 3 (* apresentar os resultados *) escreva (soma) fim

38 38 Calcular agora a média de 45 notas utilizando a iteração // Problema: média de 45 notas // Solução: fazer um programa que auxilie no cálculo da média de 45 notas de alunos algoritmo média45b (* algoritmo para calcular a média de 45 notas; responsável:...; data:... *) inicio (* preparar *) soma 0 // soma dos números digitados contador 0 // variável de controle - contador (* digitar dos dados *) repita contador contador + 1 leia (número) soma soma + número até que contador = 45 (* calcular os resultados *) média soma/45 (* apresentar os resultados *) escreva (média) fim

39 inicio fim Soma <- 0 Contador <- 0 Contador contador+1 Leia número Soma soma+número Média soma/45 Escreva média Contador=45 não sim

40 40 Generalizar o programa para calcular a média de n notas Problema: Calcular a média de n notas Solução: fazer um programa que auxilie no cálculo da média de n notas de alunos: permitir que o usuário escolha a quantidade de notas e digite as n notas; calcular a média. Algoritmo:

41 Algoritmo média de n valores Etapas Preparar : escolher quantos são os valores – n Digitar e acumular os n valores Calcular a média Apresentar o resultado

42 42 algoritmo médian (* algoritmo para calcular a média de n notas; responsável:...; data:...*) inicio (* preparar *) soma 0 // soma das notas contador 0 // variável de controle (* Escolher quantos são os valores *) escreva (Informe a quantidade de notas) (* para orientar o usuário no que ele deve fazer *) leia (quantidade) (* Digitar e acumular os n valores *) repita contador contador + 1 escreva (Informe a nota, contador) (* para orientar o usuário no que ele deve fazer *) leia (número) soma soma + número até que contador = quantidade (* Calcular a média e apresentar os resultados *) média soma/quantidade escreva (média) fim

43 Estrutura condicional Problema: Verificar se um número inteiro positivo é primo Solução: Fazer um programa que calcule se um número informado pelo usuário é primo. Técnica: Testar se o número é divisível por algum número menor que ele. Algoritmo testePrimo (* algoritmo para testar se um número é primo; responsável:...; data:... *)

44 Inicio divisor 1 // preparar o valor inicial do divisor ePrimo verdadeiro // variável booleana iniciada em verdadeiro Escreva (Informe o número que deseja testar se é primo) Leia (numero) (* Cálculo para verificar se é primo *) Enquanto divisor <= (numero div 2) faça Inicio divisor divisor +1 Se resto numero/divisor = 0 então inicio ePrimo falso fim; // o ponto e vírgula é apenas para chamar a atenção para o fim do se fim (* apresentar o resultado *) Se ePrimo então inicio escreva (O número,numero, é primo) fim Senão inicio escreva (O número, numero,não é primo) fim

45 inicio fim Dividor 1 ePrimo verdadeiro Divisor divisor + 1 Leia número Escreva Não é primo ePrimo falso Escreva É primo Divisor <=numero/2 nãosim Resto numer/divisor = 0 ePrimo sim não

46 Estrutura condicional Há uma condição de controle Há dois blocos de comandos A condição é avaliada: – Verdadeira: é executado um bloco de comandos – Falsa: é executado o outro bloco de comandos – Nos dois casos o algoritmo continua após o fim do comando se O bloco de comandos para a avaliação falsa pode ser optativo

47 47 Estrutura condicional: outro exemplo Problema: Calcular a altura média dos homens e das mulheres de uma população Solução: fazer um programa que auxilie no cálculo da altura média de homens e mulheres de uma população – para cada pessoa digitar se é homem ou mulher e sua altura; terminar a entrada de dados perguntando após cada entrada de dados se há mais pessoas. Algoritmo: algoritmo alturas (* algoritmo para calcular a altura média de homens e mulheres; responsável:...; data:... *)

48 48 inicio (* Preparar *) somaAltHomens, somaAltMulheres, qtdHomens, qtdMulheres 0 // preparar totalizadores (* Digitar os dados *) repita escreva (Informe o gênero m ou f e a altura) // para orientar o usuário leia (gênero, altura) se gênero = m então início somaAltHomens somaAltHomens + altura qtdHomens qtdHomens + 1 fim Senão inicio se gênero = f então Início somaAltMulheres somaAltMulheres + altura qtdMulheres qtdMulheres + 1 Fim senão escreva (gênero indevido: deve ser m ou f) fim escreva (Informe se terminaram os dados s ou n:) leia (resposta) até que resposta = s (* Calcular os resultados *) alturaMédiaHomens somaAltHomens/qtdHomens alturaMédiaMulheres somaAltMulheres/qtdMulheres (* Apresentar os resultados *) escreva (A altura média dos homens é:, alturaMédiaHomens) escreva (A altura média das mulheres é:, alturaMédiaMulheres) fim

49 inicio fim Leia (altura, gênero) Escreva Continuar s ou n alturaM alturaM + altura Leia resposta qtdH qtdH + 1 Calcular e apresentar as médias Resposta = s não sim Genero=m alturaH alturaH + altura simnão qtdM qtdM + 1 Cuidado: há uma diferença do algoritmo anterior Cuidado: há uma diferença do algoritmo anterior

50 50 Iteração com variável incrementada // Problema: Encontrar os divisores de um número inteiro positivo maior que 1 // Solução: Fazer um programa que apresente os divisores de um número inteiro maior que 1 // Algoritmo: algoritmo divisores (* algoritmo para apresentar os divisores de um número maior que 1; responsável:...; data:... *) inicio (* Preparar *) escreva (Informe o número para o cálculo de seus divisores) leia (numeroTeste) (* Percorrer os números de 2 a (númeroTeste div 2) testando quais são os divisores *) para divisor variando de 2 a (numeroTeste div 2) faça Inicio // poderia não ter usado inicio e fim se resto (numeroTeste div divisor) = 0 então inicio escreva (O número, divisor, é um divisor de, numeroTeste) fim; // veja o ponto e vírgula para o fim do se – não há o senão fim

51 51 Iteração embutida Problema: Encontrar os números perfeitos até um número n inteiro e maior que 2 Solução: Fazer um programa que calcule os números perfeitos até n, sendo que n pode variar de 2 a Algoritmo: algoritmo numeroPerfeito (* algoritmo para o cálculo dos números perfeitos até o limite informado; responsável:......; data:.... *)

52 52 Inicio escreva ('Informe o limite para o cálculo dos números perfeitos') //preparação leia (limite) // inteiro maior do que 2 para numero variando de 2 a limite faça // gerar os números inicio somaDivisores 1 // iniciar a soma dos divisores com 1 para divisor variando de 2 a numero div 2 faça // gerar divisores Inicio se resto numero div divisor = 0 então // testar se é divisor inicio somaDivisores = somaDivisores + divisor fim; fim se somaDivisores = numero então // testar se é perfeito inicio escreva ('O número ', numero, 'é um número perfeito') fim; fim

53 53 Problema: Calcular o valor de e x com erro menor do que 0,00001 e utilizando a série: e x = x 0 + x 1 /1! + x 2 /2! + x 3 /3! +... Solução: Analisar a série. Para x>1 os valores dos termos aumentam até um limite, e depois decrescem monotonamente. Para x<1 os valores dos termos da série decrescem monotonamente. A partir do termo com valor menor que o erro permitido, todos os demais terão valores inferiores ao erro, e pode-se, de forma simplificada, desprezá-los. Cálculo numérico de e x através do somatório de termos de uma série

54 54 Continuação do cálculo de e x Analisar a série: se dado um termo pudermos calcular o seguinte, temos a lei de formação dos termos da série, e podemos fazer uma iteração gerando e somando os termos da série, até que um termo seja menor que o erro. Algoritmo: algoritmo serieex (* algoritmo para o cálculo de e x ; responsável:...; data:...;*)

55 55 inicio escreva ('informe o valor de x') leia (x) numerador, denominador, somaTermos 1 n <- 0 repita numerador numerador * x // gera numerador n <- n + 1 denominador denominador * n // gera denominador termo numerador/denominador // calcula termo somaTermos somaTermos + termo // acumula termo até que termo < 0,00001 // testa precisão escreva ('O valor de e elevado a ', x, ' é ', somaTermos) fim

56 56 Variáveis Variáveis permitem manipular dados – Ex.: idade, dataNascimento, total Tipo: especifica os valores a que uma variável pode estar associada – Ex.: inteiro, real, booleano, literal, caractere Tipo estático: o tipo é associado a uma variável e não pode mais ser trocado Tipo dinâmico: o tipo da variável pode variar durante a execução do programa Tipo explícito: o tipo da variável é declarado explicitamente

57 57 Tipos primitivos comuns Inteiro: conjunto dos números inteiros Real: conjunto dos números reais Lógico (booleano): falso ou verdadeiro Caractere: um caractere qualquer Literal (string): uma cadeia de caracteres

58 58 Identificador da variável Nomeia uma variável Em geral pode ser composto por letras e dígitos numéricos Deve dar uma idéia do conteúdo da variável Estética java: – todas letras minúsculas; quando o identificador é composto pela concatenação de palavras, a primeira letra de cada palavra a partir da segunda é escrita em maiúsculas. Ex.: dataNascimento; totalAlturaMulheres; totalSaldo; contador; temperaturaMaxima

59 59 Constantes Dado que não muda de valor Exemplos: – Inteiro: 5 – Real: 3,4 – Literal: 'Imutável' Declaração: – Exemplo: Pi = 3,1416

60 60 Operadores mais comuns Aritméticos: + - * / div mod Relacionais: = > = Lógicos: e ou não

61 61 Tabela verdade


Carregar ppt "EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012."

Apresentações semelhantes


Anúncios Google