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

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

EEL170 COMPUTAÇÃO I www.del.ufrj.br/~ac/eel170.htm Antonio Cláudio Gómez de Sousa ac@del.ufrj.br 1a série de slides versão 19/03/2012.

Apresentações semelhantes


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

1 EEL170 COMPUTAÇÃO I www.del.ufrj.br/~ac/eel170.htm
Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012

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 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 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 Computação Computar  contar, calcular
Desenvolvimento de software e hardware de computadores

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 Numeração binária Posicional como a decimal Dígitos 0 e 1

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

10 Potências de dois 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64
20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 = 1 K

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 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 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 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 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 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 Algoritmo de Euclides como fluxograma de um programa
inicio Leia x, y Ordem para o computador Ordem para o computador r  resto(x,y) X  y Y  r r=0 não sim Escreva: o mdc é x fim

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 até que r = 0 escreva (x) fim
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 não sim Escreva: o mdc é x fim

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

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 x  y y  r fim escreva (y)

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

25 Estruturas de controle
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 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 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 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 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 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 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 escreva (soma) fim

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 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 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 Soma <- 0 Contador <- 0 Contadorcontador+1 Leia número Somasoma+número não Contador=45 sim Média  soma/45 Escreva média fim

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 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 divisor  1 // preparar o valor inicial do divisor
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 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 escreva (‘O número ‘,numero,’ é primo’) Senão escreva (‘O número ‘, numero,’não é primo’)

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

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 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 início 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 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’) 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)

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

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 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 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 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 se resto numero div divisor = 0 então // testar se é divisor somaDivisores = somaDivisores + divisor fim; fim se somaDivisores = numero então // testar se é perfeito escreva ('O número ', numero, 'é um número perfeito') fim‏;

53 Cálculo numérico de ex através do somatório de termos de uma série
Problema: Calcular o valor de ex com erro menor do que 0,00001 e utilizando a série: ex = x0 + x1/1! + x2/2! + x3/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.

54 Continuação do cálculo de ex
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 ex; responsável:...; data:...;*)‏

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, // testa precisão escreva ('O valor de e elevado a ', x, ' é ', somaTermos)‏ fim

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 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 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 Constantes Dado que não muda de valor Exemplos: Declaração: Inteiro: 5
Real: 3,4 Literal: 'Imutável' Declaração: Exemplo: Pi = 3,1416

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

61 Tabela verdade


Carregar ppt "EEL170 COMPUTAÇÃO I www.del.ufrj.br/~ac/eel170.htm Antonio Cláudio Gómez de Sousa ac@del.ufrj.br 1a série de slides versão 19/03/2012."

Apresentações semelhantes


Anúncios Google