Prévia do material em texto
Aula de Hoje I C C - A u l a 0 2 – P r o f . P i t e r i ¾ Arquitetura básica de um computador (Subsistemas principais); ¾ Formas de representação de algoritmos; ¾ Descrição Narrativa (exemplos); ¾ Fluxogramas; ¾ Pseudocódigos; ... ¾ Início do desenvolvimento de algoritmos; ¾ Representação por fluxogramas; ¾ Simbologia básica; ¾ Exemplos, exercícios. ¾ Introduzir/revisar os conceitos de: ¾ Variáveis e constantes; ¾ Operadores aritméticos; ¾ Expressões aritméticas; Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Organização de um Computador O objetivo aqui é descrever as principais unidades funcionais de um computador baseado na “arquitetura de von-Newmann”, objetivando entender o seu princípio de funcionamento, mesmo sem conhecer nada de eletrônica digital. O importante aqui é a força e o poder das idéias, da concepção, realçar a capacidade de abstração. Essa arquitetura foi proposta pelo um matemático húngaro John Von-Newman, na década de 40 do século passado e ainda continua a ser dominante no mercado, embora máquinas com outros modelos de arquitetura já estejam disponíveis. O modelo de Von-Newman é bem simples e se baseia na existência de quatro subsistemas, a saber: ¾ Unidade Central de Processamento (UCP/CPU); ¾ Unidade de Memória Primária (Principal); ¾ Unidades periféricas de Entrada e de Saída; Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Organização de um Computador (arquitetura de Von-Newman) Representação diagramática simplificada da “arquitetura de Von-Newman”. Dispositivos de Entrada Dispositivos de Saída UCP Memória Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Dispositivos de Entrada: Transferem/capturam dados (números, caracteres, sons, imagens, etc) do mundo exterior para a memória principal. Exemplos: teclado, mouse, joysticks, disquetes, pendrives, scanners, microfones, etc. Servem também para que possamos introduzir as instruções associadas aos nossos programas. UCP Memória Dispositivos de Entrada Dispositivos de Saída Organização de um Computador (arquitetura de Von-Newman) Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Dispositivos de Saída: Transferem dados da memória principal para o mundo exterior, ou seja, apresentam os resultados do processamento (cálculos, textos, imagens, etc). Eventualmente, armazenam (arquivam) os dados para posterior processamento. Exemplos: monitor, impressora, disquetes, pendrives, plotters, etc. UCP Memória Dispositivos de Entrada Dispositivos de Saída Organização de um Computador (arquitetura de Von-Newman) Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Como pode ser observado, o único propósito dos Dispositivos de Entrada e de Saída (E/S) é estabelecer uma “comunicação” entre a memória principal e o mundo exterior. Observem que alguns dispositivos possuem uma única função de entrada (teclado, mouse), outros, uma única função de saída (monitor, impressora), enquanto alguns, uma função dupla de entrada e saída, como por exemplo, os dispositivos externos de armazenamento: disquetes, cds, Dvds, pendrives, Hds, etc. Organização de um Computador (arquitetura de Von-Newman) Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i UCP: Responsável pelas alterações (transformações) que ocorrem sobre os dados, como resultado do processamento das instruções. É a unidade mais importante e considerada o “cérebro” do computador. UCP MemóriaDispositivos de Entrada Dispositivos de Saída Organização de um Computador (arquitetura de Von-Newman) Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i UCP: A Unidade Central de Processamento possui duas importantes componentes: Organização de um Computador (arquitetura de Von-Newman) ULA: (Unidade Lógica e Aritmética) que realiza, por exemplo : UC: (Unidade de Controle) que possui entre suas funções, por exemplo: ¾ operações lógicas (comparações) e aritméticas (cálculos) sobre os dados; ¾ computa o sinal (positivo ou negativo) dos valores numéricos (inteiros, reais); ¾ arredonda os valores numéricos (reais); ¾ controlar os dados armazenados na memória; ¾ interpretar e controlar/gerenciar as instruções internas aos programas; ¾ ativar a ULA; ¾ controlar as operações de entrada e saída; Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Memória primária (RAM): Possui dois propósitos bem definidos: UCP MemóriaDispositivos de Entrada Dispositivos de Saída Æ armazenar os dados (entrada, intermediários) que serão manipulados pelo programa/algoritmo; Æ armazenar a seqüência de instruções (programas/algoritmos) que por sua vez, são capazes de provocar alterações sobre os dados já armazenados; Organização de um Computador (arquitetura de Von-Newman) Residindo na memória, um programa pode determinar quais são as instruções necessárias que o computador realize uma tarefa, sem que haja alterações em seu hardware; ULA MemóriaDispositivos de Entrada Dispositivos de Saída UC Fluxo de dados (“caminhos” pelos quais os dados se deslocam); Fluxo de comandos: Comandos que instruem outras partes do computador; Organização de um Computador Fluxo de dados e Fluxo de comandos (da CPU ) Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Organização de um Computador (arquitetura de Von-Newman) Algumas observações que serão úteis: Æ Todos os dados manipulados pelo computador passam pela memória primária, que é um elemento intermediário entre os dispositivos físicos de E/S e a UCP; Æ Uma única operação é realizada por vez. Milhões delas por segundo, mas uma de cada vez (arquitetura seqüencial / único processador); Æ Toda UCP também possui alguns registradores para armazenamento temporário de dados; Nosso objetivo aqui é apenas ilustrar as componentes básicas. Obviamente que há muitas outras questões que não estamos preocupados nesse momento. As disciplinas de Arquitetura de Computadores e de Microprocessadores, irão estudar detalhadamente aspectos relevantes sobre arquiteturas convencionais e não convencionais. Æ Toda posição de memória possui um endereço único que a identifica; Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Organização de um Computador (arquitetura de Von-Newman) A essência do modelo conceitual da “máquina de von-Newmann” é que dados e instruções devam ser introduzidos no sistema computacional para serem processados “a posteriori”, gerando as informações associadas a resolução do problema. dados instruções Informações processamento Modelo conceitual (abstração) da “Máquina de von-Newmann” Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Observações Finais As quatro unidades referenciadas constituema essência do modelo conceitual da “máquina de von-Newmann” proposto na década de 40 do século XX e é a base da quase totalidade dos computadores digitais de hoje; O propósito em apresentar os subsistemas (estrutura básica) é facilitar o conceito de programação. A idéia é que após ter os dados e as instruções em sua memória, o computador possa executar as instruções (algoritmo) e encontrar a solução do problema. Para um outro conjunto de dados de entrada (uma nova instância do problema), basta executar as mesmas instruções. Se necessitarmos resolver um problema diferente, podemos escrever um outro conjunto de instruções em sua memória, introduzir novos dados e usar a mesma máquina para resolver o problema. Observe que o ato de programar é completamente independente do hardware (parte física do equipamento). Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Existem vários tipos de mecanismos (máquinas/artefatos) para armazenar e multiplicar dois números inteiros, como por exemplo: calculadora, ábaco (chinês, russo, japonês, ...). Podemos obter ainda vários algoritmos relativamente simples para se multiplicar dois números inteiros. Assim, uma máquina (autômato) capaz de executar esse algoritmo, em princípio, não tem nada de especial. Uma máquina (autômato) verdadeiramente especial, deveria ser capaz de executar qualquer algoritmo. Uma das principais características de um Computador é a sua capacidade de executar qualquer algoritmo. Observe que num computador, tantos os dados como as instruções que operam sobre os dados “residem” em sua memória. Daí o poder da proposta de von-Newmann. Hoje pode parecer banal, mas imagine a revolução dessa idéia por volta de 1940. Observações Finais Conceitos Básicos I C C - A u l a 0 2 – P r o f . P i t e r i Do ponto de vista formal, vimos que algoritmos nada mais são do que: Será que seria possível classificar todos os tipos de instruções existentes num algoritmo? Ou ainda: Será que existe um grupo mínimo de instruções com os quais podemos escrever/codificar qualquer algoritmo? Dados de Entrada Dados de Saída Algoritmos “uma seqüência de instruções finita, escritas numa dada ordem lógica, que resolve um problema específico”. Classes de Linguagens de Programação Linguagens de Programação ¾ Imperativas/procedurais ( Fortran, Algol, Pascal, C, C++, Cobol, Clipper, Pl1, Mumps, Ada, Modula , JAVA, ...) ¾ Funcionais (Haskel, Lisp, ...) ¾ Lógicas (Prolog, ...) OBSERVAÇÂO:Æ ¾ É claro que em função da existências de centenas de linguagens imperativas, algumas delas possuem propósitos específicos bem definidos; ¾ Além disso, em função do próprio desenvolvimento da Ciência da Computação, algumas delas incorporam determinadas características mais modernas de programação (por exemplo: POO, POA), que por sua vez suportam metodologias de desenvolvimento de projetos mais adequadas as aplicações de nosso tempo; ¾ Todas linguagens imperativas fazem uso de três classes de Estruturas de Controle (atribuição, seleção e repetição). I C C - A u l a 0 2 – P r o f . P i t e r i História das Linguagens de Programação I C C - A u l a 0 2 – P r o f . P i t e r i Linguagens de Programação Imperativas (são orientadas por comandos) ¾ Comandos de Atribuição ¾ Comandos de Seleção ¾ Comandos de Repetição IMPORTANTE:Æ Linguagens de Programação imperativas/procedurais possuem três classes de Estruturas de Controle . Linguagens de Programação ¾ Comandos de entrada e saída; I C C - A u l a 0 2 – P r o f . P i t e r i Representação de Algoritmos algoritmos ¾Comandos de Atribuição ¾Comandos de Seleção ¾Comandos de Repetição ¾Comandos de entrada e saída Estruturas de Controle : O objetivo é controlar o fluxo de execução, ou seja, a ordem em que as instruções serão executadas. Estruturas de Controle I C C - A u l a 0 2 – P r o f . P i t e r i Aqui já dá para perceber o poder de expressão e de síntese do conceito de algoritmo. Algoritmos resolvem problemas, descrevem soluções para problemas complexos e com um número extremamente reduzido de comandos básicos. Aurélio: Coerência, consistências das idéias, do raciocínio, do pensamento. Programação Lógica de Programação Lógica de Ato ou exercício de programar; escrever programas numa dada linguagem; implementar/codificar algoritmos usando uma linguagem de programação. Lógica de programação: Usar a lógica (organização das idéias) para encontrar a melhor solução possível que irá resolver o problema em estudo de forma algorítmica. As noções de Lógica de programação são completamente independentes de qualquer Linguagem de Programação. I C C - A u l a 0 2 – P r o f . P i t e r i Constantes e Variáveis Para resolver problemas de forma algorítmica, devemos ser capazes de representar as diferentes quantidades (dados) associadas ao problema. Estas quantidades serão representadas pelo algoritmo na forma de uma constante literal (3.14, 5, 3, 234, 3.123x103) ou de uma variável. Também é possível representar um dado na forma de uma constante simbólica. Constante: É isso mesmo que você está pensando, ou seja, algo que não se altera (permanece constante). No futuro, veremos que uma constante pode ser de diferentes tipos de dados: um caractere, um inteiro, um real uma string (cadeia de caracteres), etc. Mas no momento, para facilitar nossa vida, vamos pensar somente em constantes numéricas (valores inteiros ou reais). No contexto da programação, constantes são dados (valores) que não se alteram durante a execução de um programa/algoritmo. Os dados representados num algoritmo/programa estão na forma de constantes ou de variáveis. I C C - A u l a 0 2 – P r o f . P i t e r i Constantes e Variáveis Variáveis: Sabemos que o computador possui uma memória interna/principal/primária (RAM) com uma certa capacidade (número total de posições que podem ser usadas. Toda posição de memória possui um endereço único). Nesse momento, para facilitar o seu aprendizado, vamos fazer a seguinte analogia: cada posição da memória primária pode ser vista como uma pequena caixa, capaz de armazenar (guardar) um determinado tipo de dado/conteúdo em seu interior. Assim, a qualquer momento, se necessitarmos de um determinado dado associado a uma variável, basta ir até a “caixa” que o contém e recuperar o seu conteúdo. Uma outra questão importante a saber nesse momento é que cada variável tem a capacidade de armazenar um único valor de cada vez. Variável: é algo que varia (muda ao longo do tempo). Assim, durante a execução de um algoritmo, o valor (conteúdo) de uma variável por mudar tantas vezes quantas forem necessárias, mas só é possível ter acesso ao conteúdo atual, jamais aos anteriores. I C C - A u l a 0 2 – P r o f . P i t e r i Constantes e Variáveis O conceito de variável é fundamental em Linguagens de Programação. Em função disto, vamos enumerar algumas características associadas a variáveis que estaremos explorando ao longo de nossa disciplina. ¾ Toda variável possui um nome. Este nome deve ser únicoe é você quem o escolhe. Além disso, é importante que esse nome lembre o propósito do conteúdo que ela armazena (significância). Para já, vamos compor os nomes de nossas variáveis somente com letras (maiúsculas e minúsculas) e dígitos (0..9). Além disso, o primeiro caractere deve ser sempre uma letra. Há outras regras que vamos explorar quando começarmos a aprender a Linguagem C. Esta característica será explorada já nos fluxogramas que iremos desenvolver na aula de hoje. ¾Toda variável possui um tipo de dado (inteiro, real, caractere, lógico, ..) associado a ela; Linguagens de programação que exigem a especificação de tipos de dados associados as variáveis, são referenciadas como sendo fortemente tipadas. Algumas Linguagens não exigem essa condição; ¾ Uma variável pode ser simples ou estruturada, estática ou dinâmica, local ou global (escopo); ¾ Na Linguagem C, toda variável também possui uma Classe de Armazenamento associado a ela; I C C - A u l a 0 2 – P r o f . P i t e r i Constantes e Variáveis Nesse momento, vamos pensar em variáveis como sendo “caixas” que são capazes de armazenar/guardar dados em seu interior. Quando desejarmos acessar/verificar/manipular o dado associado a uma variável, basta fazer uma referência a ela, a partir de seu nome. I C C - A u l a 0 2 – P r o f . P i t e r i a1 valor res soma resto primo 10 91.23 -11 0.0065 210 123 Como já foi dito, para facilitar ainda mais nossa vida, nesses primeiros momentos, vamos manipular somente dados do tipo numérico (real, inteiro). Abaixo podemos observar a metáfora que estamos usando. Instante 1: a1 valor res soma resto primo 10 91.00 -16 0.0065 210 89 Instante 2: Quais são os dados associados a cada uma das variáveis em ambos os instantes? A partir do instante 2, é possível recuperar valores anteriores associados a variáveis que sofreram modificações? Constantes e Variáveis - Exemplo I C C - A u l a 0 2 – P r o f . P i t e r i Problema: Qual o volume e a área da superfície de uma esfera de raio 3.2345? 3 24 e 4 3 r rπ π Sabemos que essas relações são dadas respectivamente pelas fórmulas: 4 / 3 * * * *r r rπ 4 * * *r rπ Pergunta: Se tivéssemos que calcular ambas as fórmulas 1000 vezes, para diferentes valores do raio, quem se altera (modifica) e quem permanece constante em cada um dos cálculos? Uma outra maneira de escrever essas fórmulas, seria: Algumas formas de se representar um algoritmo ( descrever ) Representação de Algoritmos ¾ Descrição narrativa; ¾ Fluxogramas (Diagrama de Fluxos); ¾ Pseudocódigos ¾ Programas. ¾ Diagramas de Chapin; I C C - A u l a 0 2 – P r o f . P i t e r i Na seqüência, vamos descrever brevemente cada uma delas. Além disso, vamos fornecer exemplos de algoritmo representados por cada uma das formas acima para que vocês possam observar o conjunto de símbolos utilizados e a estrutura geral da forma de representação. Representação de Algoritmos ¾Descrição Narrativa:Æ ¾Fluxogramas:Æ Descreve a seqüência de passos (instruções) que compõem o algoritmo usando símbolos de uma linguagem natural já conhecida (ex: português). Podemos utilizar todos os símbolos (palavras) da língua. Símbolos usados estão muito distante de um programa (objetivo final). É a forma mais antiga para se representar um algoritmo (observe o exemplo com mais de dois mil anos que vamos ilustrar). Semelhante a uma “receita”. Utiliza diferentes símbolos gráficos com uma semântica (significado) específico. Em outras palavras, o algoritmo é representado através de uma “imagem geométrica”, ou seja, uma representação diagramática (visual). Bastante intuitivo, sem muitos detalhes e ainda muito distante de um programa (objetivo final). A grande vantagem dessa forma é a visualização do Fluxo de Execução (ordem em que as instruções são executadas). Ideal numa fase inicial do aprendizado para sistematizar/organizar o pensamento algorítmico. Maiores níveis de detalhamento . . I C C - A u l a 0 2 – P r o f . P i t e r i Representação de Algoritmos ¾Pseúdocódigo :Æ Também referenciado como Portugol ou Português Estruturado. Também utiliza uma linguagem natural (ex: português). Porém, com um conjunto muito reduzido de símbolos (palavras), que são mais específicos e facilmente mapeados (transcritos) para os respectivos símbolos de uma dada linguagem de programação. A estrutura de um pseudocódigo é semelhante ao de um programa escrito, por exemplo, em Pascal ou C. Nessa forma de representação já é possível explorar vários aspectos (estruturas de controle, endentação, comentários ) que serão utilizados quando da escrita de um programa. ¾Outras :Æ . . . Maiores níveis de detalhamento Diagrama de Chapin ( Também é bem geométrico - não vamos ver) I C C - A u l a 0 2 – P r o f . P i t e r i Exemplo de um Algoritmo usando Descrição Narrativa Problema: Encontrar todos os números primos no intervalo fechado [2,n]. Um número inteiro positivo p é primo se, seus únicos divisores (positivos) são 1 e ele mesmo (divisores próprios). Algoritmo: Crivo de Erastóstenes (mais de 2000 anos) Passo 1: Coloque todos os números no crivo; Passo 2: Retire o menor número p do crivo, ele é primo; Passo 3: Retire todos os múltiplos do número p do crivo; Passo 4: Se o crivo for diferente do vazio, volte ao passo 2 e repita os passos 3 e 4; senão, terminar. I C C - A u l a 0 2 – P r o f . P i t e r i Crivo: Aqui estamos usando esse termo como sinônimo de recipiente, conjunto, algo que pode conter; Exemplo de um Algoritmo usando Descrição Narrativa Ao final (término) do algoritmo, teremos obtido a solução do problema, ou seja, vamos encontrar todos os primos? Representar um algoritmo usando Descrição Narrativa, te lembra alguma coisa? I C C - A u l a 0 2 – P r o f . P i t e r i Te lembra uma receita? Se uma receita “pode ser vista” como um algoritmo. Quais seriam os dados de Entrada? Qual seria(m) o(s) dado(s) de saída? p i F V ( p%i ) = 0 V F i Å 1 q Å 0 q Å q +1 ( i <=p )i Å i +1 “Quantidade = ”, q INICIO FIM I C C - A u l a 0 2 – P r o f . P i t e r i Exemplo de um Algoritmo representado por meio de um Fluxograma Exemplo de um Algoritmo representado por Pseudocódigo I C C - A u l a 0 2 – P r o f . P i t e r i inicio inteiro n, alg; impressao (“Introduza um valor inteiro”); leitura (n); // n≥ 0 se ( n < 10) entao alg Å1; inicio fim alg Å alg + 1; n Å QUOC(n,10); fim impressao(“Número de algarismo de ”, cn , “é igual a”, alg); alg Å 0 ; cn Å n; senao enquanto (n ≠ 0) faça Exemplo de um programa em C ( algoritmo codificado ) I C C - A u l a 0 2 – P r o f . P i t e r i #include <stdio.h> #include <math.h> #include <stdlib.h> #define LIM 30000 int i, cont = 0, primo = 1, p, exp1; int main(void) { printf(" 2 \n"); for (p=3; p <= LIM; p=p+2) { primo = 1; exp1 = (int) sqrt(p)+1;for (i = 3; i <= exp1; i = i+2) if ( p%i == 0) { primo = 0; break;} if ( primo ) { cont++; if ( cont%5 == 0) printf("%5d \n", p); else printf("%5d ", p); } // if } // for printf("\n\n Existem < %d > Números Primos em [2,%d] \n\n\n", cont, LIM); system("pause"); // Mantendo a Janela de Resultados return(0); } I C C - A u l a 0 2 – P r o f . P i t e r i Dados de Entrada Dados de Saída Algoritmos Dispositivos Físicos de Entrada Dispositivos Físicos de Saída Computador (programas) Conceitos Básicos (Associações) Chegou a hora de nos concentrarmos no desenvolvimento de algoritmos. De certo modo, já vimos que: Metodologia para Resolver Problemas I C C - A u l a 0 2 – P r o f . P i t e r i Considerando que estamos interessados em resolver diferentes tipos de problemas de uma forma algorítmica, é importante planejar, sistematizar, organizar uma abordagem que seja a mais geral possível e que conduza ao sucesso de nossa iniciativa. Programar não é uma atividade muito complicada, mas exige muitos esforços para o iniciante. Assim, é importante se concentrar no projeto de uma solução, antes de sair escrevendo códigos. É preciso sistematizar as idéias, organizar o pensamento. Um grande equívoco no aprendizado de “programação” é achar que basta conhecer uma Linguagem de Programação. Conhecer uma linguagem é uma condição necessária, mas não é suficiente. É preciso mais. Além disso, vamos verificar que o aprendizado de uma linguagem em si, não é complicado. Há muitas regras, mas com o tempo, aprendemos a dominá-las. O difícil é pensar numa solução algorítmica. Vamos adotar uma abordagem sistematizada para atacar problemas em geral, independente da área do conhecimento. Metodologia para Resolver Problemas I C C - A u l a 0 2 – P r o f . P i t e r i A resolução de problemas é uma parte crucial em vários cursos, incluindo os de Engenharias e de Ciência da Computação. Livros e mais livros foram escritos sobre o assunto. Vou destacar dois. How to Solve It George Polya Pinguin Science, 1990 (última edição) (Há pelo mais um livro do autor sobre o tema e uma tradução para o português de Portugal) How to Solve It by Computer R. G. Dromey Prentice-Hall, 1982 Metodologia para Resolver Problemas I C C - A u l a 0 2 – P r o f . P i t e r i A metodologia que vamos seguir têm cinco passos. Passo 1: Analisar o problema detalhadamente; Logo, dado um problema (para o qual buscamos uma solução algorítmica), devemos: Passo 2: Projetar (“desenhar”) uma solução algorítmica para o problema; Vamos descrever em maiores detalhes cada um dos passos nas próximas aulas de modo a organizar nosso pensamento algorítmico. Passo 3: Codificar a solução encontrada numa linguagem de programação ( numa representação de algoritmo conhecida ) e documentar; Passo 4: Testar o programa (algoritmo); Passo 5: Validar o programa (algoritmo); Fluxogramas - Simbologia Usada No Brasil todos nós conhecemos a ABNT (Associação Brasileira de Normas Técnicas) que é responsável pela elaboração de diferentes normas técnicas. I C C - A u l a 0 2 – P r o f . P i t e r i Na Europa existe o ISO (International Standard Organization) e nos EUA, o ANSI (American National Standard Institute). Pois bem, existe uma norma ANSI só para determinar o padrão dos símbolos (respectivos significados) a serem usados num fluxograma (Diagrama de Blocos). Como iremos usar muito pouco a representação por fluxogramas (Diagrama de Blocos) (3 ou 4 aulas) e ver um conjunto reduzido deles, não estou muito preocupado com isso. Entretanto, muita atenção quando for ler outros livros. Poderá ocorrer pequenas divergências, nada que você não consiga entender facilmente. Se tiver dúvidas, consulte o professor. Fluxogramas Significado FIMINICIO Indicam um procedimento (ação) de terminação de um algoritmo. Todo algoritmo deve possuir um início e um fim. Símbolos I C C - A u l a 0 2 – P r o f . P i t e r i Abaixo você pode observar um outro símbolo usado para referenciar o INICIO e o FIM de um algoritmo. INICIO FIM Simbologia associada a Fluxogramas SignificadoSímbolo de leitura I C C - A u l a 0 2 – P r o f . P i t e r i Um outro símbolo muito usado para indicar a leitura de dados é dado abaixo. Muitas vezes esse símbolo também é usado para indicar a saída de dados. Portanto, quando encontrar a representação de um algoritmo numa outra simbologia, ATENÇÃO!!! Indica um procedimento (ação) externo de Leitura/Entrada dos dados. Associado a um Comando de Entrada de dados. Significado: Exemplos : Faz/realiza a leitura de um valor dado pelo usuário e atribui esse valor a variável de nome x; Observe que a relação de variáveis é separada por vírgula (elemento separador). Forma Geral : Relação de Variáveis x a, b, c, d n1, n2 Realiza a leitura de valores fornecidos pelo usuário a partir de um dispositivo físico de entrada e associa/transfere esses valores as respectivas variáveis no interior do símbolo de leitura. Obviamente que os dados serão usados pelo algoritmo para encontrar a solução de um problema específico. I C C - A u l a 0 2 – P r o f . P i t e r i Simbologia associada a Fluxogramas Significado : Faz/realiza a leitura de dois valores e associa o primeiro a variável n1, e, o segundo, a variável n2; Faz/realiza a leitura de quatro valores e os associa, respectivamente, as variáveis a, b, c, d. Simbologia associada a Fluxogramas Significado Indica um procedimento (ação) externo de Impressão/Saída dos dados. Associado a um Comando de Saída de dados. I C C - A u l a 0 2 – P r o f . P i t e r i Todo algoritmo resolve um problema específico. Logo, após encontrar a solução, devemos ser capazes de mostrar a solução obtida. O símbolo acima tem exatamente esse propósito. Se “comunicar” com o mundo exterior. Símbolo de Saída Como já vimos, muitas vezes o símbolo abaixo também é usado para indicar a saída de dados. Significado: Exemplos de uso: imprime num dispositivo de saída (a ser determinado) os valores associados as variáveis a, b, c, d, respectivamente. a, b, c, d “textos”, variávelForma Geral : Simbologia associada a Fluxogramas (Mais alguns detalhes) I C C - A u l a 0 2 – P r o f . P i t e r i Realiza a saída/impressão de uma mensagem ou de valores associados a resolução do problema. Em outras palavras, transfere os valores associados as variáveis para os dispositivos de saída. Observe que ao nos referirmos aos nomes relativos as variáveis (fazer referência a variável), objetivamos na verdade, acessar/manipular o conteúdo associado a elas. “A = ”, a Simbologia associada a Fluxogramas (Mais alguns detalhes) Observação: Todo o conteúdo entre aspas é impresso exatamente desta forma no dispositivo de saída (sem as aspas). Lembre-se que a “vírgula” é um elemento separador e não será impressa. I C C - A u l a 0 2 – P r o f .P i t e r i Exemplos de uso: imprime integralmente o texto entre aspas no dispositivo de saída (sem as aspas). “O número é PAR” imprime integralmente o texto entre aspas no dispositivo de saída (sem as aspas), em seguida o valor associado a variável a. Exercício: Qual seria o conteúdo da caixa de saída se você desejasse imprimir o valor da variável vol num dispositivo de saída, de modo que aparecesse exatamente a seguinte mensagem. O volume obtido para o cilindro é igual a : 123.34567 Simbologia associada a Fluxogramas Significado Indica um procedimento (ação) interna de alteração sobre os dados. Associa/atribui um valor ou o resultado de uma expressão a uma variável. Associado a um Comando de Atribuição: I C C - A u l a 0 2 – P r o f . P i t e r i Símbolo Forma Geral : variávelÅ expressão Significado: Atribuir/transferir o conteúdo da expressão do lado direito para a variável que está no lado esquerdo. Aqui, expressão pode ser uma constante, uma variável, uma expressão aritmética ou ainda uma expressão boleana (valor boleano). Observe que o lado direito é executado primeiro, em seguida, o resultado é transferido para a variável, que está do lado esquerdo. Observações: (a) O lado direito é sempre executado primeiro, em seguida, o resultado é transferido para a variável, que está do lado esquerdo; (b) Aqui o símbolo ‘Å’ indica transferir, atribuir. Alguns livros, adotam outros símbolos com o mesmo significado. Atenção!!! aÅ b + c + d i1Å1 somaÅ 0 atribui (transfere) a variável i o valor 3iÅ 3 Computa o resultado da expressão b + c + d (lado direito), e, em seguida, atribui (transfere) o valor obtido a variável a Simbologia associada a Fluxogramas (Mais alguns detalhes ) I C C - A u l a 0 2 – P r o f . P i t e r i Exemplos de uso: Significado da ação: Realiza duas ações de atribuição (transferência) de valores. A variável i1 recebe o valor 1, enquanto a variável soma recebe o valor 0. Observe que ao nos referirmos aos nomes relativos as variáveis (fazer referência a variável), objetivamos na verdade, acessar/manipular o conteúdo associado a elas. Logo, na expressão b + c + d, estão sendo usado os valores associados a cada uma dessas variáveis. O símbolo Å tem o propósito de separar a variável da expressão, indicando quem está sendo atribuído. Simbologia associada a Fluxogramas Significado Indica um procedimento (ação) de decisão. Está associado aos Comandos de Seleção e de Repetição. Símbolo I C C - A u l a 0 2 – P r o f . P i t e r i Vamos entrar em maiores detalhes sobre esse símbolo nas próximas aulas, quando explorarmos os comandos de Seleção e de Repetição. Simbologia associada a Fluxogramas SignificadoSímbolos (segmentos orientados) I C C - A u l a 0 2 – P r o f . P i t e r i Indicam as ligações entre os símbolos já definidos, estabelecendo os possíveis fluxos de execução do algoritmo. Indica a continuidade de um fluxograma ou conexões entre os segmentos. Exemplos de um possível uso: Simbologia associada a Fluxogramas – Convenções Usadas I C C - A u l a 0 2 – P r o f . P i t e r i ¾ Os tamanhos de cada um dos símbolos geométricos pode variar, mas procure manter a uniformidade entre a altura e a largura, de modo que outras pessoas possam “entender”; Convenções Usadas ¾ Como você viu, cada símbolo possui um propósito bem definido (significado), mas existem instruções que são escritas em seu interior. Nesses primeiros momentos, não estamos “muito” preocupados com formalismos e rigores sintáticos. Assim, essas instruções poderão estar indicadas através de expressões, ou ainda, de códigos mnemônicos do tipo: RAIZ2(a), POT(a,b), SENO(a*b). Se desejar obter a raiz quadrada de algo, também pode usar o símbolo matemático que você conhece, por exemplo: ¾ A direção do fluxo de um algoritmo representado por fluxogramas é feito de “cima para baixo” e da “direita para a esquerda”. Assim, procure orientar o diagrama nesse sentido, colocando o símbolo de início mais acima e a esquerda e, o símbolo de final, mais abaixo e a direita. * 4* *b b a c− Outros Símbolos :Æ Fluxogramas (Mais detalhes) Expressões Aritméticas Envolvem constantes, variáveis, funções (pré-definidas ou não), operadores aritméticos e sempre produzem um valor (resultado) numérico. EXEMPLO: a Å 2*SENO(3.1415) – 13+(b/c)*c + RAIZ_2(2.34) I C C - A u l a 0 2 – P r o f . P i t e r i Na construção de expressões aritméticas podemos usar todos os operadores aritméticos conhecidos. Se você precisar usar uma função como raiz quadrada, seno ou cosseno, sinta-se a vontade para usar livremente símbolos que você já conhece, como por exemplo Não há razão para nos preocuparmos (nesse momento) em como o computador será capaz de obter os valores destas funções. No momento oportuno, daremos o formalismo necessário a estas questões. 2.x + Observe a expressão aritmética acima e determine quem é quem (variáveis, constantes, operadores e funções primitivas. Outros Símbolos (operadores aritméticos) :Æ Fluxogramas (Mais detalhes) Potenciação^ Além dos mais comuns (mais dois) Resto da divisão inteira de a por ba % b Quociente da divisão inteira. Parte inteira da divisão de a por b. Quoc(a,b) DescriçãoOperadores Adição+ Subtração- Multiplicação* Divisão/ Operadores Aritméticos I C C - A u l a 0 2 – P r o f . P i t e r i Observe que estes símbolos estão sendo definidos no contexto da representação de algoritmos por fluxogramas. Problema: Calcular o volume e a área da superfície de uma esfera, dado respectivamente pelas relações: Dados de Entrada do problema: raio Outras quantidades que o algoritmo precisa representar: Volume da Esfera (VolEsf ) Área da superfície da esfera (AreaSup) Observação: Nesse primeiro momento não se preocupe em “economizar” em relação ao número de variáveis que o seu algoritmo terá que manipular. Utilize todas as variáveis que você achar necessário para resolver seu problema. Com o tempo e de acordo com sua maturidade em relação ao exercício e ao ato de programar, naturalmente você irá usar o mínimo possível delas, já que elas ocupam um recurso precioso e escasso na maioria dos computadores, que é a memória. Como foi dito, esta não é a hora de se preocupar com esta questão. Portanto, use e abuse do uso de variáveis em seus primeiros algoritmos. 3 24 e 4 3 r rπ π I C C - A u l a 0 2 – P r o f . P i t e r i A constante PI é conhecida. Uma regra simples é que qualquer quantidade manipulada pelo seu algoritmo deve estar representada por uma variável ou por uma constante (literal ou simbólica). INICIO raio FIM AreaSupÅ 4* 3.1415*raio*raio VolEsfÅ (AreaSup *raio)/3 “Área da superfície da esfera igual a”, AreaSup “Volume da esfera igual a”, VolEsfI C C - A u l a 0 2 – P r o f . P i t e r i Leitura do valor do raio. Vamos admitir que esse valor seja positivo. Encontrando o valor da área da superfície da esfera que depende do raio. Encontrando o valor do volume da esfera que depende do valorassociado a variável AreaSup. “Imprimindo” o resultado do valor associado a área da superfície. “Imprimindo” o resultado do valor associado ao volume da esfera. Problema: Calcular o valor da função . Dados de Entrada: valor x (vamos admitir positivo) Dados gerados pelo algoritmo: valor da função no ponto x (fx) x “Valor da função f(x) = ”, fx fxÅ x*x -5*RAIZ_2(x)+8 INICIO FIM 2( ) 5 8f x x x= − + I C C - A u l a 0 2 – P r o f . P i t e r i Problema: Transforme uma temperatura dada em graus Fahrenheit para graus Celsius, sabendo que: Dados de Entrada: temperatura em graus Fahrenheit (F) Dados Gerados pelo algoritmo: temperatura em graus Celsius (C) F CÅ(F-32)*5/9 “Temperatura em Graus Celsius:”, C INICIO FIM I C C - A u l a 0 2 – P r o f . P i t e r i ( 32)*5 / 9C F= − Exercícios: Æ Simule (execute cada uma das instruções) cada um dos algoritmos, pelo menos três vezes, para diferentes valores de entrada (nas condições do enunciado); I C C - A u l a 0 2 – P r o f . P i t e r i Observação: Cada conjunto de valores de entrada é o que denominamos de “instância do problema”. Um algoritmo correto, funciona para qualquer uma de suas instâncias. Æ Tente reescrever os algoritmos ( alterando a ordem das instruções) e mantendo a sua correção. Algumas instruções podem inclusive ser escritas de outra forma ou decomposta em mais de uma; Æ Tenha claro o significado de cada um dos símbolos e das instruções que eles representam (aspectos semânticos); Considerações Finais: Observem que embora simples, estes algoritmos permitem verificar alguns dos símbolos utilizados por um fluxograma e a semântica (significado) associada a eles. Uma outra questão importante é que a natureza geométrica de um fluxograma permite de forma clara a visualização do fluxo de execução (ordem em que as instruções são executadas pelo algoritmo), facilitando a sua compreensão. Nas próximas aulas, estaremos introduzindo outras estruturas de controle (seleção e repetição). Consequentemente a complexidade dos problemas que iremos resolver de forma algorítmica será bem maior. Logo, é fundamental que os conceitos aqui introduzidos sejam de domínio absoluto. Não deixem as dúvidas se acumularem!!! Não se iluda com a simplicidade dos exemplos dados na aula de hoje. Na próxima aula estarei passando a todos uma lista com aproximadamente 60 exercícios relativos a manipulação de variáveis simples. Esta lista será usada durante todo o primeiro semestre e parte do seguindo e servirá como apoio para que possamos adquirir competências mínimas na “arte de programar”. Boas leituras!!!!! I C C - A u l a 0 2 – P r o f . P i t e r i PS: Embora eu tenha corrigido inúmeros erros é provável que ainda haja muitos por aí. Por favor, reportem os erros para que eu possa corrigi-los. Comuniquem aos colegas que receberam as notas, já que alguns e.mails podem ter voltados, por diferentes razões. Aos poucos vamos corrigindo estes pequenos problemas. Próxima aula: Continuação da representação de algoritmos por meio de fluxogramas. Æ Estrutura de controle de seleção; Æ Resolução de exercícios usando esta estrutura. I C C - A u l a 0 2 – P r o f . P i t e r i