I - ALGORITMIA - Conceitos Básicos
|
|
|
- Ana do Carmo Sanches Salgado
- 9 Há anos
- Visualizações:
Transcrição
1 I - ALGORITMIA - Conceitos Básicos Linguagens de Programação Para comunicar com um computador é necessário que ele entenda o utilizador e que o utilizador o entenda. Isto é um problema de comunicação que se resolve utilizando uma linguagem (ou linguagens) que ambos sejam capazes de descodificar com precisão. Já se conhece uma linguagem que estabelece um primeiro nível de comunicação: o Sistema Operativo. Mas este não permite realizar uma infinidade de tarefas específicas como, a contabilidade de uma empresa ou a sua facturação, o desenho da planta de uma casa, a gestão dos sócios de um clube, a resolução de uma equação matemática, etc.. Para isso é necessário usar uma linguagem de programação que permita criar uma aplicação (programa) que realize aquelas tarefas. Então, pode dizerse, que uma aplicação assenta numa linguagem, ou seja, num modo específico de comunicação com a máquina. Linguagens de programação são sistemas de escrita para enunciar as operações a executar por um computador. ou Conjunto de indicações em código que se transmitem a um computador para dar resposta a um dado problema. Como sistema de escrita, uma linguagem de programação (como qualquer outra linguagem, como o Português, por exemplo) é composta por: Uma terminologia ou semântica - ou seja, um conjunto de termos, palavras, caracteres ou sinais que assumem determinados significados para o computador; Um conjunto de regras ou sintaxe - que estipulam o modo correcto de utilizar os termos da linguagem para formular instruções válidas para a máquina. Linguagem Máquina Já se sabe que tudo o que o computador faz é sob as ordens de um programa e que, a única linguagem que o computador entende é a dos bits. Esta linguagem consiste na representação dos dados por sequências de zeros e uns, que desencadeiam determinadas acções no processador; por isso, esta linguagem é conhecida por linguagem máquina ou código máquina. As linguagens baseadas em código máquina designam-se por linguagens de baixo António M. P. Sousa da Silva Algoritmia - 1
2 nível, pois encontram-se ao nível do hardware e são executadas directamente pela CPU obedecendo a instruções que contêm um código de operação e um ou mais endereços de memória. Estas linguagens são pouco práticas e, a sua utilização, implica o conhecimento profundo da arquitectura da máquina, o que nem sempre é viável. A programação em linguagem máquina é bastante difícil, em particular porque: O programador deve memorizar todos os códigos de operação ou consultar constantemente um manual com tais códigos; O programador deve lembrar-se de todos os endereços de memória que contêm informação; Como o programa e os dados são armazenados sequencialmente na memória central, a introdução ou remoção de instruções no programa, pode acarretar a alteração de todos os endereços e consequentemente a alteração de todo o programa; A programação está sujeita a muitos erros, pois a troca de zero por um ou viceversa muda o significado de uma instrução. Assim, para facilitar a tarefa dos programadores foram criadas diversas linguagens de programação. Linguagem Simbólica ou de Montagem Inicialmente, na década de 1950, criou-se uma nova linguagem semelhante à linguagem máquina mas com os códigos de operação substituídos por mnemónicas e com os endereços de memória correspondentes aos dados, substituídos por nomes simbólicos. A esta linguagem simbólica de montagem chamou-se Linguagem Assembly. Um programa em linguagem Assembly é convertido para linguagem máquina por um tradutor (ou programa de montagem) denominado Assembler. Este tradutor recebe o programa em linguagem Assembly, substitui cada uma das suas instruções pela instrução equivalente em linguagem máquina e finalmente executa o programa em linguagem máquina. A versão em linguagem simbólica do programa é normalmente conhecida por programa (ou código) fonte, e a versão já traduzida em linguagem máquina é conhecida por programa (ou código) objecto. Esquematicamente: PROGRAMA-FONTE PROGRAMA-OBJECTO TRADUTOR Sob o ponto de vista da programação, esta linguagem apresenta as seguinte desvantagens: António M. P. Sousa da Silva Algoritmia - 2
3 Cada instrução executa uma operação muito simples (soma, subtracção, etc.) dando origem a programas muito longos; A linguagem é orientada para a máquina em vez de ser orientada para as aplicações, isto é, o programador tem que pensar em termos de organização da máquina (registos internos, posições de memória, número de endereços, operações básicas) em vez de pensar em termos da aplicação que está a programar; Um programa escrito para uma máquina não pode ser executado numa máquina diferente. Linguagens de Alto Nível Apareceram então, na década de 1960, linguagens mais poderosas, de mais fácil utilização e compreensão: as linguagens de alto nível, para que qualquer utilizador possa programar sem dificuldade de maior. As linguagens de alto nível baseiam-se em linguagens correntes (sendo o Inglês a mais utilizada), têm regras e sintaxe próprias e os conceitos e notações deste tipo de linguagens são mais apropriados para o tipo de problemas a resolver, que aqueles ditados pela estrutura interna do computador. Isto torna a linguagem orientada para a pessoa e não para a máquina. Além disso os programas são portáteis; um programa desenvolvido numa máquina pode correr perfeitamente noutra com uma arquitectura diferente, se a linguagem utilizada for igual nos dois casos. Entre as linguagens de alto nível mais divulgadas encontram-se as seguintes: FORTRAN (Formula Translation) - IBM 1956 Foi criada para aplicações científicas que envolvem muitos cálculos, complexos, precisos, e rapidamente executados, como por exemplo em problemas de astronomia. Os dialectos mais conhecidas são o FORTRAN II e o FORTRAN IV. COBOL (Common Bussiness Oriented Language) - EUA 1960 Linguagem introduzida por um grupo de grandes utilizadores de computadores, fabricantes e órgãos do governo norte-americano. Baseia-se mais que qualquer outra na linguagem inglesa corrente. É muito utilizada em aplicações de índole comercial com cálculos leves mas que utilizem grandes quantidades de informação, em virtude das suas capacidades para manipular ficheiros. É das linguagens mais utilizadas hoje em dia. ALGOL (Algoritmic Language) Linguagem introduzida em 1960 por um comité internacional. Orientada para o cálculo científico e para a descrição formal de algoritmos. António M. P. Sousa da Silva Algoritmia - 3
4 PL1 (Programming Language 1) - IBM 1965 Propunha-se reunir as três linguagens anteriores. Tinha por finalidade servir como linguagem universal, aplicável tanto a problemas científicos como comerciais. BASIC (Beginner s All-Purpose Symbolic Instruction Code) - EUA 1965 Surgida para servir com facilidade interesses de não especialistas, mais interessados na resolução de problemas do que no estudo dos aspectos mais delicados da programação. Utiliza o Inglês corrente e simbologia matemática. É orientada para os microcomputadores, educação e pequenos problemas de gestão. Há diversos dialectos: M-BASIC, MS-BASIC, GW-BASIC, BASIC-1, BASIC-2, QUICK BASIC e TURBO BASIC. PASCAL (em honra do matemático Blaise Pascal) - Suiça 1971 Linguagem orientada para aplicações científicas, tornando fácil o desenvolvimento e manutenção de grandes programas. Influenciou a maioria das linguagens de programação e por apresentar uma estruturação lógica e modular é também muito utilizada para aprender a programar. Utiliza o Inglês e, dos muitos dialectos existentes, o mais conhecido é o TURBO PASCAL. PROLOG (Programming Logic) - França 1972 Linguagem baseada na lógica dos predicados e utilizada em Inteligência Artificial. Foi a linguagem escolhida para o projecto japonês da quinta geração. C - Bell Telephone 1972 Criada em ambiente UNIX para o desenvolvimento de software de sistemas, rapidamente se divulgou devido às suas potencialidades. A linguagem C é considerada de nível médio por ser composta por um conjunto mínimo de declarações de controlo e manipulação de dados (que não são normalmente acessíveis em linguagens de alto nível) que os programadores podem utilizar para construir comandos de alto nível. As aplicações mais complexas foram elaboradas nesta linguagem. O dialecto C++, actualmente considerada a linguagem mais poderosa, tem sido utilizada pela Microsoft para produzir aplicativos do mais conhecido ambiente integrador gráfico para PC s, o WINDOWS. Foi utilizada para criar gráficos e efeitos especiais em filmes como A Guerra das Estrelas. Program CalArea; MOV AL, DH Var raio, area : Real; DIV BL Begin ADD Al, DL HARDWARE Write('Qual o raio?'); Programa numa linguagem de Programa em Assembly Programa em Linguagemalto nível Máquina António M. P. Sousa da Silva Algoritmia - 4
5 Além destas, muitas outras linguagens foram desenvolvidas: RPG, APL, CLIPPER, LIST, MODULA 2, LOGO, JAVA, etc., com interfaces e ambientes de trabalho cada vez mais amigáveis (como o caso das linguagens visuais: Visual Basic, Visual C++ e Delphi) permitindo a um programador escolher a linguagem de programação mais indicada para a elaboração de uma aplicação particular. No entanto, como já se sabe, não basta o programador conhecer a linguagem: é necessário torná-la legível para o computador, o que se consegue recorrendo a um programa tradutor. Há dois tipos de tradutores: Compilador e Interpretador Compilador O programa-fonte escrito em linguagem de alto nível é traduzido integralmente em linguagem-máquina (compilação). É uma operação que se faz de uma só vez e que, normalmente, indica os erros ou incorrecções de sintaxe (caso existam), mas, que não permite ir observando passo a passo, o que cada instrução do programa faz. Quando isento de erros e depois de incorporadas ao programa-objecto as bibliotecas do utilizador e do sistema, é criado um programa (ficheiro com extensão EXE) que pode ser executado independentemente do compilador. Há vários tipos de compiladores e cada um é classificado de acordo com o código de saída que gera. PROGRAMA-FONTE (EM LINGUAGEM DE ALTO NÍVEL) TRADUTOR (COMPILADOR) PROGRAMA-OBJECTO (PROGRAMA EM LINGUAGEM- -MÁQUINA) Os compiladores tem a vantagem de compilar de maneira imediata, com execução rápida e com tamanho reduzido de código. No entanto os programas devem ser totalmente recompilados quando ocorrem alterações. Interpretadores Traduzem o programa directamente no computador específico, interpretando a linguagem de alto nível, instrução a instrução e chamando as bibliotecas apropriadas quando requeridas. PROGRAMA-FONTE (EM LINGUAGEM DE ALTO NÍVEL OU ASSEMBLY) TRADUTOR (INTERPRETADOR) ENTRADA SAÍDA (EXECUÇÃO) Os interpretadores são fáceis de se usar, permitem a correcção imediata dos erros e o desenvolvimento rápido de programas não muito complexos. No entanto, um interpretador é muito mais lento que um compilador. António M. P. Sousa da Silva Algoritmia - 5
6 Linguagens da quarta geração É usual atribuir gerações às linguagens-máquina, assembly e de alto nível. O avanço das linguagens-máquina (primeira geração) para as linguagens Assembly (segunda geração) trouxe aproximadamente um progresso de sete para um à actividade do programador. Um progresso semelhante ocorreu quanto as linguagens de alto nível (terceira geração) foram introduzidas. Actualmente, um grande número de programadores está a desenvolver e a introduzir uma variedade enorme de instrumentos de aplicação que podem oferecer ainda maiores progressos na produtividade. Tais rotinas (pequenos programas) são frequentemente referidos, no seu conjunto, como linguagens de quarta geração - 4GL. Um programa 4GL actua interactivamente com o software de Sistema de Gestão de Base de Dados (SGBD) para armazenar, tratar e recuperar os dados necessários, para satisfazer as necessidades do utilizador. Uma linguagem de alto nível é procedimental, isto é, requer do programador a especificação dos passos do processamento necessários para atingir o resultado desejado. Uma 4GL é nãoprocedimental, isto é, permite ao utilizador especificar simplesmente qual deve ser o tipo sem ter que descrever todos os detalhes de como os dados devem ser manipulados para produzir tal resultado. Não é possível dar uma definição clara de 4GL uma vez que cada rotina ou Linguagem é o produto de um programador específico, e os vendedores não estão de acordo relativamente a uma padronização. Uma linguagem com rotinas deste tipo é o CLIPPER (linguagem para sistemas de gestão de base de dados). Linguagens de Quinta Geração ou Naturais Encontram-se ainda numa fase de desenvolvimento e destinam-se a facilitar, como sempre, a comunicação entre o Homem (utilizador) e o computador. Trata-se da utilização, e compreensão por parte do computador, das linguagens naturais (como o inglês, o português ou o japonês). Espera-se que a introdução destas linguagens venha permitir, entre outras coisas, a aprendizagem por parte do computador. Devido às necessidades de grandes quantidades de memória e de velocidades de processamento muito elevadas, o desenvolvimento deste tipo de linguagens tinha-se limitado, até há pouco, aos sistemas mainframes e aos supercomputadores. O rápido aumento de tais capacidades nos microcomputadores, sobretudo após o desenvolvimento dos microprocessadores 486 e Pentium, fez com que algumas casas de software começassem a desenvolver versões de linguagens naturais para os computadores pessoais. Uma das vias de aplicação mais importante para estas linguagens serão os interfaces de entrada de voz nos sistemas de computador. António M. P. Sousa da Silva Algoritmia - 6
7 Etapas do desenvolvimento de uma aplicação Depois de se saber o que é uma linguagem de programação, é altura de começar a concretizar o objectivo principal deste módulo: como criar um programa para o computador e quais as ferramentas e métodos para isso. Um problema ou uma determinada tarefa, a resolver ou desenvolver por meios informáticos, requer a realização dos seguintes passos : 1. Análise; Fase de resolução do problema 2. Concepção; 3. Implementação; Fase de implementação 4. Teste. A concentração e o investimento de tempo nos dois primeiros passos: fase de resolução do problema é fundamental para a resolução rápida e eficaz de um programa, uma vez que, é preciso entender de um modo aprofundado aquilo que é pedido (análise), para depois conceber a sua resolução (concepção). É nesta fase que é elaborado um algoritmo que visa a resolução do problema proposto. Só depois da formulação de um algoritmo adequado, se passará à sua implementação numa linguagem de programação para posterior execução e teste: fase de implementação. Note-se que só nesta última fase se faz uso do computador. Análise O projecto de um sistema informático ou de um simples programa requer uma investigação preliminar: estudo teórico do problema, elaboração de inquéritos para se obterem informações sobre o sistema a informatizar, observação no local do modo de funcionamento do sistema, registo e recolha de documentos que representem a informação que anda em jogo, etc. Depois de compreendido todo o funcionamento (eventualmente retendo os aspectos positivos e propondo melhoramentos) passa-se á esquematização, elaborando diagramas, onde de uma forma simples e bem documentada se representam todas as entidades, processos, fluxos de informação e armazenamentos de dados envolvidos. Tudo isto resulta num esquema genérico, que contém em si a resolução do problema. O aprofundamento da análise depende da complexidade do sistema ou problema, existindo métodos e ferramentas próprios, cujo estudo sai do âmbito deste módulo. António M. P. Sousa da Silva Algoritmia - 7
8 Concepção Depois de compreendido e esquematizado o sistema ou problema, deve pensarse na melhor maneira de o resolver, passo a passo, de uma forma estruturada, clara, eficiente e genérica tendo sempre presente que o problema é para ser resolvido por meios informáticos e por isso os passos da resolução não podem ser ambíguos e terão de ser em número finito. Durante a concepção deve ser elaborado um dicionário dos dados identificados na análise, onde serão descritos em termos de nome, tipo (se é um número, um caracter, etc.) e significado. Depois será elaborado um algoritmo (código de escrita em que se utilizam representações simbólicas para indicar as instruções do programa) que não é mais que a resolução do problema, passo a passo. Este algoritmo poderá evoluir para pseudocódigo onde se usam representações simbólicas que são um misto de palavras da nossa linguagem natural com termos e notações típicas de uma linguagem de programação. O uso do pseudocódigo presta-se a uma aproximação sucessiva à versão do programa na linguagem de programação utilizada, ou seja, pode-se ir progressivamente por fases, revendo o pseudocódigo e substituindo-o progressivamente por terminologia própria da linguagem de programação. Implementação Consiste em transcrever para o computador, usando a linguagem de programação escolhida e um editor, a definição dos dados e o algoritmo, que é transformado em instruções dessa linguagem, gerando-se assim o código-fonte. De seguida este código é traduzido para código-objecto com o auxílio de um tradutor (compilador ou interpretador). O processo estará completo quando o código-fonte estiver correctamente escrito de acordo com as normas impostas pela linguagem. Se houver erros de sintaxe, o tradutor não os deixará passar e o código-fonte terá de ser revisto para poder gerar o código objecto. Esta fase de correcção dos erros, quanto às normas impostas pela linguagem costuma chamar-se de depuração (debugging). Teste Depois de obtido o código-objecto, e de ter sido ligado (lincagem) a outros códigos-objecto (rotinas em bibliotecas da linguagem e do Sistema Operativo) fica-se com um programa executável em código-máquina que deverá ser testado para se verificar a sua integridade e eficiência. Um programa pode estar escrito sem qualquer erro do ponto de vista das normas da linguagem (isto é sem erros de tradução) mas ter falhas do ponto de vista dos objectivos que se pretendiam alcançar, por imprecisões, deficiente formulação algorítmica, vícios de raciocínio, etc. António M. P. Sousa da Silva Algoritmia - 8
9 Estes testes deverão ser realizados por vários utilizadores e com dados diversificados. Qualquer erro detectado implica regressar de novo à concepção ou à análise para ser corrigido. Este processo repete-se até que não existam erros. A implementação e teste de um programa será objecto de estudo no módulo seguinte. Algoritmos Tal como muitas das tarefas diárias são feitas com base em decisões mais ou menos elaboradas, também a electrónica sofisticada de um computador, de uma máquina multibanco, de uma máquina de lavar, etc. executa sequências de instruções de um programa. Aquelas tarefas podem escrever-se num papel em linguagem corrente, sendo muitas vezes a sua descrição baseada num processo sequencial partindo-se depois para uma tradução desses processos utilizando uma linguagem estruturada. Considerando vários níveis para a apreensão de uma linguagem, pode-se tomar como base de referência a linguagem natural, estando mais abaixo o processo cognitivo (interiorização de imagens, sons, etc., que rodeiam o ser humano), e acima representações simbólicas utilizadas na matemática e na programação. Grande parte do trabalho para a referida tradução pertence à Algoritmia, pois é necessário partir de uma linguagem em que o Homem se exprime e comunica quase sem regras, para um mundo de regras e estruturas que regem o computador. Cabe à Algoritmia como técnica de desenvolvimento de algoritmos, uma primeira descrição das acções necessárias e suficientes para resolver um problema e obter resultados, podendo-se considerar um algoritmo como o esquisso de um programa. Um algoritmo pode ser definido como uma sequência ordenada, e sem ambiguidades, de passos (em número finito) que levam à resolução de um problema. Apesar do termo em si ser novo, o conceito é bastante familiar: de uma forma muitas vezes explícita recorre-se ao uso de algoritmos (por exemplo, a procura de um número de telefone, a determinação de um caminho para um determinado lugar, a elaboração de uma receita culinária, a pesquisa da avaria de uma viatura, etc.); e outras vezes de uma forma implícita (por exemplo, por um CD a tocar, fazer um telefonema, etc.) Embora o número e a sequência de passos, associados a uma determinada tarefa, possa parecer de fácil compreensão enquanto agente executor dessa mesma tarefa, já a linguagem e descrição terá de ser diferente para outro executor. Por exemplo, o projecto e cálculos envolvidos na elaboração da planta de uma casa resulta num algoritmo António M. P. Sousa da Silva Algoritmia - 9
10 com um conjunto de desenhos e indicações para o executor-construtor executar; se a tarefa de cálculo e desenho for executada por um programa num executor-computador, então as descrições das acções de cálculo e desenho têm de ser refinadas num algoritmo para conversão em instruções de uma linguagem de programação. De tudo o que foi dito, conclui-se que o uso de algoritmos tem como objectivo final fazer uma descrição ao nível do executor, isto é, detalhar as acções em instruções ou ordens de acordo com as possibilidades do agente executor (no caso o computador). O seguinte exemplo trata, com um algoritmo, a obtenção de uma chamada telefónica interurbana (numa rede automática): 1 Levantar o auscultador 2 Marcar o indicativo e o número de telefone local 3 Aguardar até obter resposta humana 4 Se for obtida resposta humana então 4.1 Falar Caso contrário 4.2 Pousar o auscultador A sequência de instruções é finita e foram utilizadas representações numéricas e de indentação das instruções (alinhamento do texto) para facilitar a distinção de qual a instrução seguinte a executar. Para um executor que não soubesse o significado de marcar ou de sinal de chamada, ou reconhecer todas as indicações feitas, era necessário avançar no grau de detalhe. Finalmente, salienta-se que, a utilização deste algoritmo não poderia ter êxito, se não se dispuser dos dados (de entrada) relativos ao indicativo da zona de destino e número de telefone. Foi usada a linguagem descritiva corrente, para apresentação do algoritmo passo-a-passo, no entanto, eles podem ser expressos de outras formas. Tipos de Algoritmos 1. Descrição narrativa; 2. Descrição detalhada em linguagem corrente dos passos para a resolução; 3. Descrição detalhada em pseudocódigo dos passos para a resolução; 4. Fluxogramas; Veja-se, com o exemplo simples da soma de dois números A e B, como construir um algoritmo para cada um das quatro representações anteriores. António M. P. Sousa da Silva Algoritmia - 10
11 Descrição narrativa É narrada, em linguagem corrente, a resolução do problema. Ler ou pedir dois números chamados A e B. Em seguida calcular a sua soma e guardá-la no número chamado C. Por último escrever ou fornecer o valor de C. Descrição, passo a passo, em linguagem corrente É feita uma descrição detalhada recorrendo à linguagem corrente, tentando manter um certo rigor e clareza. Os passos são numerados e a escrita é indentada para facilitar a distinção de qual o passo ou instrução a executar a seguir (como no algoritmo da página anterior e no exercício resolvido nº 1). Passo 1 : Pedir o número A Passo 2 : Pedir o número B Passo 3 : Fazer C tomar o valor de A + B Passo 4 : Fornecer o número C Pseudocódigo É utilizada uma sequência de frases (em português) e uma simbologia muito próxima da usada por uma linguagem de programação, para descrever as acções do algoritmo, que se convencionam de uma forma abreviada em relação à descrição em linguagem corrente (tipo de algoritmo anterior). O pseudocódigo não pode ser implementado directamente no computador, mas o formalismo implícito é muito semelhante a muitas linguagens de programação (como por exemplo o PASCAL). Nada impede, no entanto, que fosse construído um compilador que aceitasse o mesmo (daí o nome pseudocódigo). Ler A Ler B C A + B Escrever C Fluxogramas Consiste em representar de uma forma gráfica a descrição de um algoritmo. Para o efeito são utilizados símbolos geométricos (diagramas) e setas (fluxos) indicando um sentido de execução da sequência: António M. P. Sousa da Silva Algoritmia - 11
12 Início INÍCIO OU FIM DO PROGRAMA Início A LER A E B PELO TECLADO Ler A B OU Ler B ENTRADA/SAÍDA C <- A + B PROCESSAMENTO INTERNO C <- A + B C ESCREVER C NO MONITOR Escrever C Fim Fim O problema do exemplo apresentado é tão simples, que poderia surgir a tentação de o escrever directamente numa linguagem de programação. O tempo e a prática vão encarregar-se de demonstrar que mesmo em problemas pouco complexos uma visão global, planeamento e respectivo algoritmo são indispensáveis. A elaboração de um algoritmo permite também a abstracção de certos conceitos e a não viciação num certo estilo de programação prejudiciais à boa análise e resolução do problema. Tal como em outras actividades, a programação exige um certo grau de experiência e prática, para facilmente se encontrar o caminho mais indicado. Como os algoritmos construídos destinam-se a serem codificados numa linguagem de programação serão usados daqui em diante somente os fluxogramas e o pseudocódigo. Características de um Algoritmo Qualquer algoritmo correctamente elaborado e algumas boas técnicas de programação, devem transmitir ao programa as seguintes características desejáveis: Integridade Os cálculos terão de ser correctamente efectuados. Clareza Um programa deve ser facilmente lido e entendido tanto pelo programador como por outro utilizador. Simplicidade O programa deverá ter uma estrutura simples e linear. Eficiência Tem a ver com a velocidade de execução e com a utilização efectiva de memória. Em programas complexos terá de existir um compromisso entre estas duas características. Modularidade Os grandes programas devem ser divididos numa série de subtarefas identificáveis. É de boa prática implementar cada uma destas subtarefas em módulos de programa separados. Generalidade Quer-se um programa que seja tão genérico quanto possível, de forma a abranger um grande número de tipo diferentes de dados. António M. P. Sousa da Silva Algoritmia - 12
13 O rigor imposto na descrição dos algoritmos bem como a insistência em determinados pormenores que possam parecer excessivos para o Homem como agente executor, é indispensável em linguagens de programação onde o agente executor é o computador. Interessa agora estudar cada elemento constituinte dos algoritmos e a simbologia usada para os descrever. Dados Em qualquer linguagem de programação trabalha-se com dados que são identificados e descritos na fase de resolução do problema. Viu-se também, que as três funções básicas de um programa são: ler (pedir ou introduzir) os dados de entrada (input); processar os dados de entrada e eventualmente outros que são constantes escrever (sair ou fornecer) os dados de saída (output) É por isso fundamental saber que tipos de dados existem e como os manipular. Tipos de dados Os dados podem ser simples e devem ser entendidos como representando um único valor de um determinado tipo (um número, um valor lógico, um caracter ou uma cadeia de caracteres); ou estruturados e representam um conjunto de valores. Podem resumir-se e classificar-se no seguinte quadro: Simples inteiros (integer) numéricos reais (real) lógicos ou booleanos (boolean) um caracter (char) Estruturados cadeia de caracteres (string) tabelas, quadros ou matrizes (array) registos (record) ficheiros (file) Dados Numéricos Podem ser números inteiros (sem casas decimais) ou reais (com casas decimais). Devem ser entendidos como o são na matemática, exceptuando o intervalo de valores. Enquanto que na matemática o intervalo é infinito, num programa de computador devido às limitações de memória, o intervalo é finito. Assim, tipicamente, um dado inteiro é António M. P. Sousa da Silva Algoritmia - 13
14 representado por 2 bytes, pelo que só pode ser usado, sem erro, se estiver no intervalo de a (2 bytes dão uma combinação de 2 16 números = 65536; metade para os números negativos e a outra metade para os positivos). No caso dos números reais o intervalo é muito maior pois utilizam 8 bytes de memória, suficientes para a maioria das aplicações numéricas correntes. Dados Lógicos ou Booleanos Representam os dois valores lógicos: Verdadeiro (true) ou Falso (false). São usados em situações em que só existam dois estados possíveis (Sim/Não, 0/1, Activado/ Desactivado, Ligado/Desligado, etc.). São a base da maior parte das estruturas algorítmicas de controlo. Dados Caracter ou Cadeia de Caracteres Uma cadeia de caracteres é uma sequência de caracteres (isto é, letras dígitos e caracteres especiais) entre plicas ( e ). São utilizados para representar texto, mensagens, nomes, moradas, etc. O número máximo de caracteres que pode ser incluído numa cadeia é tipicamente de 255, suficientes para a maioria das necessidades. Tabelas Representa uma estrutura de dados sob a forma de linhas e colunas (como numa folha de cálculo ou no jogo Batalha Naval ). Quando uma tabela só tem uma linha (ou uma só coluna) é chamada de vector. Cada elemento da tabela é referenciado por intermédio de um índice (número da linha e número da coluna). Por exemplo o elemento [2,1] corresponde ao dado que está na intersecção da linha 2 com a coluna 1. Tipicamente, uma tabela é constituída por elementos todos do mesmo tipo, e é usada em situações em que a informação tem de ser guardada em memória para que se possa tratá-la como um bloco ou individualmente. Registos Representa uma estrutura de dados composta por elementos de diferentes tipos conhecidos por campos (como numa base de dados). É usada para representar uma entidade (um livro, um cliente, um produto, etc.) caracterizada por diferentes atributos (nome, morada, telefone, etc.). Ficheiros Pode ser de qualquer um dos tipos anteriormente descritos e serve para guardar os dados em memória secundária, uma vez que todos os outros tipos de dados residem na memória central que como se sabe é volátil. António M. P. Sousa da Silva Algoritmia - 14
15 Identificadores Qualquer dado (de entrada, de saída ou auxiliar) e outros elementos de programação devem ser identificados no programa por um nome: identificador. Um identificador é um nome normalmente atribuído, pelo programador ou utilizador, a um elemento com que se pretende trabalhar dentro de um programa. Este nome deve ser sugestivo, isto é, deve estar de acordo com o seu significado ou função dentro do programa. Há também algumas regras a seguir para construir um identificador correctamente quando for usada uma linguagem de programação em vez do pseudocódigo; para já é conveniente que os nomes compostos não levem espaços (por exemplo o identificador número 1 deverá ser número1 ou número_1). A atribuição correcta de um nome é fundamental para transmitir clareza ao algoritmo e por conseguinte ao programa. É o dicionário de dados elaborado na fase de resolução do problema que os deverá descrever em termos de nome, tipo e significado. Variáveis e constantes Como se sabe, uma das características de um programa é a sua generalidade, pelo que, ele não poderá funcionar só para um valor específico de dados. Por exemplo, um programa que permita calcular a área de um círculo não o poderá fazer só para um caso particular de um círculo com 2 metros de raio: terá de calcular a área de qualquer círculo (qualquer valor do raio). Assim, é necessário que o dado de entrada (o raio) seja variável (o mesmo acontece para o dado de saída, a área, que depende do raio). Um identificador cujo valor pode variar durante a execução do programa é designado por variável. Do mesmo modo, há dados que são necessários para o processamento mas cujo valor não é lido nem calculado: define-se e mantém-se constante durante a execução do programa. Por exemplo, para o cálculo da área de um círculo é necessário conhecer o valor de π (3, ) que é sempre o mesmo qualquer que seja o círculo. O identificador é designado por constante se o elemento de informação que representa se mantém inalterável ao longo do programa. António M. P. Sousa da Silva Algoritmia - 15
16 Identificadores e Endereços de Memória Quando se trata de uma variável, um identificador terá de ser entendido de formas diferentes: No algoritmo e no código-fonte do programa deve ser entendido como já foi referido: representa simbolicamente um dado, isto é, designa simbolicamente por meio de uma letra ou palavra um endereço de memória. Na compilação vai traduzir-se num endereço relativo de memória, ao qual irá corresponder um determinado espaço nessa mesma memória (2 bytes no caso da variável ser inteira) para armazenar o dado (o valor que a dita variável assume a qualquer momento) quando o programa for executado. Na execução, o identificador (que começou por ser um endereço simbólico e depois passou a relativo) passa a representar um endereço absoluto, isto é, torna-se efectivamente um endereço de memória principal do computador mas ainda sem qualquer valor. Quando o dado representado pelo identificador é utilizado ao ser executado o programa, o seu valor ficará armazenado na zona de memória correspondente. Esquematicamente: No algoritmo ou no código-fonte tem-se a instrução: Ler A Depois da compilação desta instrução: 1 A É REPRESENTAÇÃO SIMBÓLICA DE UM DADO CÓDIGO-MÁQUINA DO COMANDO LER ENDEREÇO RELATIVO DE A No início da execução do programa tem-se na memória, além do programa, uma zona de dados com: ENDEREÇOS ABSOLUTOS CONTEÚDO Quando a execução chega a esta instrução é pedido um valor ao utilizador (por exemplo 2,5) e a memória fica: ENDEREÇOS ABSOLUTOS 2.5 CONTEÚDO Pode, tipicamente, atribui-se um valor a uma variável (colocar um valor na zona de memória reservada a essa variável) de duas formas (como se verá adiante): lendo o seu valor com uma instrução de leitura (por exemplo, Ler A) por intermédio de uma instrução de atribuição (por exemplo, C (A + B) António M. P. Sousa da Silva Algoritmia - 16
17 Quando o identificador é uma constante deve ser entendido no algoritmo e no código-fonte do mesmo modo que uma variável não sendo, no entanto, candidato a endereço de memória uma vez que o valor da constante fica incorporado no código do programa durante a compilação. Há no entanto linguagens de programação que não fazem distinção entre variáveis e constantes nos termos antes descritos: é ao programador que cabe a tarefa de ter cuidado em não alterar, inadvertidamente, o valor que considerou constante. Operações com os Dados A maior parte das vezes, os dados (variáveis e constantes) e outros elementos de programação terão de ser operacionados. Segue-se um resumo das operações usuais, e sua simbologia, aplicáveis aos diferentes tipos de dados simples. TIPO DE DADOS OPERADOR DESCRIÇÃO TIPO DE RESULTADO + ADIÇÃO INTEIRO - SUBTRACÇÃO INTEIRO * MULTIPLICAÇÃO INTEIRO INTEIROS / DIVISÃO REAL REAL **, ^ POTENCIAÇÃO INTEIRO DIV DIVISÃO INTEIRA INTEIRO MOD, % RESTO DA DIVISÃO INTEIRA INTEIRO + ADIÇÃO REAL - SUBTRACÇÃO REAL REAIS * MULTIPLICAÇÃO REAL / DIVISÃO REAL **, ^ POTENCIAÇÃO REAL AND, E CONJUNÇÃO VALOR LÓGICO LÓGICOS OR, OU DISJUNÇÃO VALOR LÓGICO NOT, NÃO NEGAÇÃO VALOR LÓGICO CARACTERES + CONCATENAÇÃO CARACTER Uma operação, na sua forma simples, é constituída por dois (binária) ou um (unária) operandos e um operador, e fornece um resultado de um determinado tipo. Existe ainda uma classe importante de operadores, que podem ter como operandos qualquer tipo de dados simples. São os operadores relacionais que permitem estabelecer uma relação de ordem (comparação) entre dados do mesmo tipo e, por isso, o resultado é sempre um valor lógico. A tabela seguinte resume este tipo de operadores: António M. P. Sousa da Silva Algoritmia - 17
18 OPERADOR DESCRIÇÃO = COMPARAÇÃO (IGUALDADE) <>, # COMPARAÇÃO (DESIGUALDADE) > COMPARAÇÃO (MAIOR QUE) < COMPARAÇÃO (MENOR QUE) >= COMPARAÇÃO (MAIOR OU IGUAL QUE) <= COMPARAÇÃO (MENOR OU IGUAL QUE) Expressões Os diferentes tipos de dados juntamente com as suas operações podem ser ligados para formar expressões. Uma expressão é um conjunto de operandos (números, constantes, variáveis, etc.) agrupados por certos operadores ( *, +, etc.) constituindo formas algébricas que representam um valor, isto é, um elemento de informação simples. Conforme o tipo de valor que gera, uma expressão pode ser classificada como, inteira, real, lógica (booleana ou condição) ou de caracter. Exemplos: * 3-4, é uma expressão numérica (inteira) com o valor 13; (X = 2) AND (5 > 7), é uma expressão booleana com valor FALSO; A < B, é uma expressão booleana com valor VERDADEIRO (ver tabela ASCII). Existem algumas regras que devem ser seguidas para construir correctamente uma expressão em pseudocódigo (e numa linguagem de programação): 1. Não são permitidos dois operadores sucessivos. Podem contudo ser usados parêntesis para separar operadores sucessivos ou para clarificar uma expressão, mesmo que eles não sejam necessários; 2. Uma expressão pode consistir num único identificador que é usado como constante ou variável ou num literal (um número, valor lógico ou caracter explicitamente indicado); 3. O nome de uma função pode ser usado no lugar de um identificador de constante ou de variável dentro de uma expressão (as funções serão estudadas mais à frente). 4. Os identificadores não definidos e/ou sem um valor em memória, não podem aparecer numa expressão (isto é, antes de o usar deve-se atribuir-lhe um valor); 5. Um identificador precedido dum sinal menos é equivalente à multiplicação por -1. Assim -a*b é equivalente a -1*a*b; António M. P. Sousa da Silva Algoritmia - 18
19 6. Não podem aparecer dois operadores aritméticos consecutivos. A expressão a*-b é incorrecta, mas a*(-b) já é correcta; 7. As operações aritméticas não podem estar implícitas (como na notação matemática). A expressão 2(x+y) está incorrecta, mas 2*(x+y) é correcta; 8. O número de parêntesis abertos (à esquerda) tem de ser igual ao número de parêntesis fechados (à direita); Uma expressão pode por vezes tornar-se bastante complexa devido à presença de múltiplos operadores. Nestes casos é necessário especificar a ordem pela qual essas operações são efectuadas (ordem de precedência). Assim: PRECEDÊNCIA OPERADOR(ES) 1 (MAIS ELEVADO) A PRIMEIRA A REALIZAR NOT 2 * / DIV MOD AND OR 4 (MAIS BAIXO) AS ÚLTIMAS A REALIZAR = <> < <= > >= As operações dentro de parêntesis devem ser as primeiras a ser realizadas e dentro de cada grupo de precedência são efectuadas à medida que aparecem, isto é, da esquerda para a direita (esta ordem pode ser diferente conforme as linguagens). Instruções Uma instrução é uma frase que indica uma ordem, ou um conjunto de ordens, que irá obrigar o computador a efectuar certas acções ou operações. Existem dois tipos básicos de instruções: as simples, que são instruções únicas ou incondicionais que executam uma ou mais tarefas; e as estruturadas, que são formadas por várias instruções que podem ou não ser executas repetidamente ou no caso de se verificar uma condição. Umas e outras são formadas por comandos, que são, normalmente, palavras em português (no pseudocódigo) ou em Inglês (no código-fonte), abreviaturas ou conjunto de caracteres que sugerem a acção que é desempenhada. Por exemplo: Ler (read), Escrever (write), Imprimir (print), etc. De aqui em diante, os comandos serão escritos em negrito para se distinguirem. António M. P. Sousa da Silva Algoritmia - 19
20 Simples de leitura/escrita de atribuição de chamada de um módulo de programação (assunto a tratar) salto para outra parte do programa (goto) Estruturadas compostas repetitivas condicionais Instrução de Leitura As entradas de dados têm de ser indicadas ao agente executor com instruções no algoritmo. A entrada obriga o executor (computador) a recolher do exterior (pelo teclado, discos, rato, etc.) o valor necessário para atribuir um valor a uma variável, com uma frase do tipo: Ler lista de variáveis separadas por vírgulas Instrução de Escrita As saídas de dados têm também de ser indicadas ao agente executor com instruções no algoritmo. Vão obrigar o agente executor a mostrar os resultados (conteúdos das variáveis) e/ou mensagens ao utilizador. Será utilizada uma frase do tipo: Escrever lista de identificadores separados por vírgulas e/ou mensagens (entre plicas) separadas por vírgulas Instrução de Atribuição ou de Afectação Fornece outra forma de alterar/atribuir um valor a uma variável, sem ser por leitura (por exemplo um cálculo). Será utilizada uma frase do género: variável expressão Ao executar esta instrução, o agente executor terá primeiro de obter o valor correspondente à expressão (lado esquerdo do sinal de afectação) e colocá-la na variável (lado direito do sinal de afectação). Se a variável possuir um valor antes desta instrução, ele será perdido, ficando no seu lugar o valor da expressão. É necessário que a variável e a expressão sejam do mesmo tipo. Por exemplo, a instrução: António M. P. Sousa da Silva Algoritmia - 20
21 Area * raio * * 2 INFORMÁTICA vai obrigar o valor da expressão * raio ** 2 a ser atribuído à variável Area. Exemplo Com tudo o que já foi dito pode-se, por exemplo, resolver completamente e por meios informáticos (construindo um programa) o problema do cálculo da área de círculos. Análise Sendo o problema bastante simples bastará atender ao seguinte: 1. Matematicamente, a fórmula para o cálculo da área de um círculo é dada por: A = π r 2 sendo r o raio do círculo, A a sua área e π um valor constante igual a (com mais ou menos casas decimais conforme a precisão pretendida para a área e de acordo com a precisão do raio) 2. Serão necessários 3 passos para resolver o problema: Entra o raio Calcula a área Sai a área Concepção Dicionário (declaração) dos dados: E/S/A ou Const Nome Tipo Descrição Entrada raio real raio do círculo Saída area real área do círculo a calcular Constante pi real = Pseudocódigo Escrever Introduza o valor do Raio: Ler raio area pi * raio ** 2 Escrever A área é :, area Fluxograma Início Introduza o valor do raio raio area <- pi * raio ** 2 A área é: area Testes O algoritmo só se deve dar como finalizado depois de ser testado com dados de entrada para os quais se tenha a certeza de qual é o resultado correcto. Este processo é conhecido por traçagem (trace). Por exemplo, é fácil de reconhecer que se o valor do raio for de uma unidade o resultado será o valor de Pi. Confirmando: António M. P. Sousa da Silva Algoritmia - 21 Fim
22 Ler raio raio = 1 area pi *raio*raio area = *1*1 area = Escrever area resultado): Sendo assim, o programa teria o seguinte output (a menos da apresentação do Introduza o valor do raio: 1 A área é: Finalmente, como revisão dos conceitos estudados é mostrado o quadro seguinte que identifica todos os elementos de programação conhecidos e que fazem parte da estrutura do pseudocódigo do exemplo anterior. Note-se que as cadeias de caracteres (entre plicas) e o número (2), são parte intrínseca da linguagem e por isso são automaticamente reconhecidos por ela. Estes elementos são muitas vezes designados por literais como já antes se referiu. Dados Variáveis raio e area Constantes pi Operações Reais * e ** Expressão Real Pi * raio ** 2 Comandos Escrever e Ler Instruções Leitura Ler raio Escrita Escrever Introduza o valor do raio.' Escrever A área é:, area Atribuição area <- pi * raio **2 António M. P. Sousa da Silva Algoritmia - 22
23 Melhoramento de um algoritmo Para uma melhor apresentação e compreensão do algoritmo e também para o aproximar ainda mais a uma linguagem de programação estruturada (no caso o PASCAL) é costume acrescentar-lhe o seguinte: Limites Convenciona-se que os algoritmos são delimitados por duas palavras para o efeito: Início e Fim, para se saber onde começa e onde acaba (como já se fez no caso dos fluxogramas) Comentários Em muitas situações, quando surgem instruções de difícil compreensão, é costume comentá-las com um texto delimitado por duas chavetas ( { e } ). Isto permite também entender melhor o algotitmo quando mais tarde se pretender melhorá-lo (criar nova versão). Declaração dos dados Os dados do programa, em vez de serem descritos unicamente no dicionário de dados, podem ser declarados no início do algoritmo. Isto torna-o mais parecido com o futuro código-fonte. Com tudo que foi dito, o pseudocódigo do exemplo ficaria como: {Algoritmo para calcular a área de um círculo} Início { Declaração dos dados} area, raio Reais pi = {Instruções} Escrever Introduza o valor do Raio : Ler raio {cálculo da área} area pi * raio ** 2 Escrever A área é :, area Fim António M. P. Sousa da Silva Algoritmia - 23
24 II - ALGORITMIA - Estruturas de Controlo Em todos os algoritmos estudados até agora, cada instrução era executada de uma única vez, pela mesma ordem em que aparecia no programa formando uma sequência de instruções simples. No entanto, este tipo de algoritmos é na prática pouco frequente, uma vez que não inclui nenhuma estrutura de controlo, como:. Testes para determinar se certas condições são verdadeiras ou falsas para decidir se se deve executar uma ou outra instrução;. Execução repetida de grupos de instruções um certo número de vezes ou enquanto se verificar uma condição;. Conjunto de instruções que se repete em diversos pontos do programa, tornandose então útil passar a tratá-lo como um módulo de programação (rotina ou subprograma). Isto é, é necessário alterar a sequência normal da execução das instruções do programa utilizando uma sequência de instruções estruturadas. (Convém, para melhor compreender o que se segue, relembrar a noção de instrução, tipos de instruções, expressões booleanas e os operadores relacionais e lógicos.) Instrução Composta É um conjunto de instruções, geralmente englobadas entre dois delimitadores e/ ou escritas de uma forma indentada, considerado como um bloco. Esta forma de estruturar instruções não existe de uma forma explícita em todas as linguagens de programação. No entanto, como o PASCAL (e o C) as utilizam são aqui abordadas. Segue-se um exemplo esquemático de uma instrução composta: Instrução 1 Instrução 2 instrução 2.1 instrução 2.2 instrução 2.3 Instrução 3 Instrução 4 INSTRUÇÃO COMPOSTA Deve indentar-se a estrutura para definir o seu âmbito de actuação, isto é, deslocála em relação à margem esquerda. No exemplo entende-se perfeitamente que as instruções 2.1, 2.2 e 2.3 estão subordinadas á instrução 2. Além de tornar mais claros os algoritmos, o uso da indentação torna desnecessário utilizar palavras, parêntesis ou caracteres especiais para indicar o início o e fim da estrutura. No entanto (como se verá no caso do António M. P. Sousa da Silva Algoritmia - 24
25 PASCAL), a maior parte das linguagens de programação estruturadas usa delimitadores para indicar o início e o fim das instruções compostas. Nas linguagens de programação em que é possível criar módulos de programa (rotinas ou subprogramas), pode optar-se por transformar uma instrução composta (principalmente se ela se repete várias vezes ao longo do programa) num módulo, que é descrito algures fora da sequência normal, sendo depois chamado onde antes estaria a referida instrução composta. Instrução SE (IF) É uma estrutura condicional de controlo, que permite ao agente executor realizar uma acção, unicamente se uma expressão booleana tiver um determinado valor (verdadeiro ou falso). Esta estrutura é das mais difundidas e existe em todas as linguagens de programação, folhas de cálculo e em outras aplicações. Pode apresentar as formas: Instrução selectiva simples SE-ENTÃO (IF-THEN) É a forma mais simples da estrutura SE, cuja forma geral é: SE expressão booleana ENTÃO instrução A parte relativa à instrução será executada se e só se a expressão booleana for verdadeira. Se a expressão booleana for falsa, a parte relativa à instrução será ignorada. Não esquecer que a instrução pode ser simples ou estruturada, sendo normalmente uma instrução composta. Segue-se o diagrama de fluxo desta estrutura. SE expressão booleana falsa ESTA INSTRUÇÃO PODE SER LIDA ASSIM: SE A EXPRESSÃO BOOLEANA TIVER O VALOR verdadeira ENTÃO instrução VERDADEIRO É EXECUTADA A INSTRUÇÃO. SE TIVER O VALOR FALSO NÃO É EXECUTADA A INSTRUÇÃO. Exemplos 1. SE raio <= 0 ENTÃO Escrever Valor incorrecto para o raio 2. SE raio > 0 ENTÃO area pi * r ** 2 Escrever area António M. P. Sousa da Silva Algoritmia - 25
26 3. SE fim ENTÃO Escrever FIM DO PROGRAMA No primeiro exemplo, a instrução de leitura só será executada se a variável raio for menor ou igual a 0. No segundo exemplo é executada uma instrução composta se a variável raio for maior que 0. No último exemplo a expressão booleana ou condição (fim) é ela própria uma variável do tipo booleano (tem o valor verdadeiro ou falso) e por isso só será executada a instrução de escrita se ela tiver o valor VERDADEIRO. Note-se que o exemplo 1 poderia ser escrito com o formato usado no exemplo 3 uma vez que só é executada uma instrução simples. Já no caso do exemplo 2, o uso da indentação ilustra a natureza subordinada da instrução composta dentro da estrutura SE. Finalmente, será convencionado que as palavras chave da estrutura serão escritas em negrito e em maiúsculas porque são palavras reservadas, isto é, mais nenhum elemento de programação poderá ser identificado com palavras deste tipo. Instrução selectiva com alternativa SE-ENTÃO-SENÃO (IF-THEN-ELSE) É outra forma da estrutura SE (que engloba a anterior), utilizada quando é necessário seleccionar, uma de entre duas alternativas em curso de acção. Tem a seguinte forma geral e respectivo fluxograma: SE SE expressão booleana ENTÃO instrução1 SENÃO instruçao2 ENTÃO verdadeira expressão booleana falsa SENÃO instrução 1 instrução 2 Neste caso, a instrução1 será executada se a expressão booleana for verdadeira, senão será executada a instrução 2. Ou seja, é executada uma ou outra instrução, mas nunca as duas ao mesmo tempo. Exemplos 1. SE db >= 1000 ENTÃO taxa 0.2 SENÃO taxa 0.1 * salario ou com a apresentação mais conveniente para fácil leitura: SE db >= 1000 ENTÃO taxa 0.2 SENÃO taxa 0.1 * salario António M. P. Sousa da Silva Algoritmia - 26
27 2. SE a >= b ENTÃO Escrever a, é maior ou igual a, b SENÃO Escrever a, é menor que, b 3. A estrutura SE-ENTÃO-SENÃO é só uma maneira de fornecer um meio mais rápido e claro de programar, uma vez que, ela pode perfeitamente ser construída com duas instruções SE simples: SE expressão booleana ENTÃO instrução 1 SE NÃO expressão booleana ENTÃO instrução 2 4. Ver exercício resolvido nº 2 Instruções SE encaixadas As estruturas SE podem ser encaixadas (nexted) umas nas outras. Seguem-se algumas formas de encaixe, onde eb1,eb2,... são expressões booleanas e i1, i2,... são instruções. 1. SE eb1 ENTÃO SE eb2 ENTÃO i1 executa i3 (outra instrução SE) SENÃO = i3 se eb1 verdadeira, senão não faz nada i2 Note-se que este caso não é mais que a substituição de uma instrução por uma estrutura SE-ENTÃO-SENÃO. Seguindo com este processo podem-se substituir as instruções representadas por i1 e i2 por outras estruturas SE. Seria assim obtida um encaixe multinível. 2. SE eb1 ENTÃO SE eb2 ENTÃO i1 executa i4 se eb1 verdadeira, SENÃO = i4 senão executa i3 i2 SENÃO i3 António M. P. Sousa da Silva Algoritmia - 27
28 3. SE eb1 ENTÃO SE eb2 ENTÃO i1 SENÃO i2 Em cada uma das formas anteriores, a natureza subordinada da estrutura interior SE é indicada pela sua indentação. Neste caso, não é claro qual a expressão booleana que está associada com SENÃO. É contudo, a expressão eb2 que lhe está associada pelo que esta forma é equivalente ao primeiro caso apresentado. Se se quisesse associar a parte SENÃO com eb1 e não eb2, isto é, se i2 só deve ser executada quando eb1 for falsa, ficaria: SE eb1 ENTÃO SE eb2 ENTÃO i1 SENÃO i2 Exemplo Calcular o maior de três números inteiros dados. Análise Se os números forem identificados por a, b e c, para que um deles seja maior que os outros dois tem de ser comparado dessa forma, isto é: Para que a seja maior que b e c terá de ser a > b e a > c. Se não se verificarem estas condições é porque o maior número ou é b ou c e por isso devem eles também ser comparados. Obviamente que a comparação poderia ser iniciada com b ou c em vez de a, tendo o problema a mesma resolução. Se nenhuma destas condições se verificar é porque os número são iguais dois a dois ou são os três iguais, isto é, se a é igual a b e são os dois maiores que c o maior número escrito pelo algoritmo é b; se b é igual a c e são os dois maiores que a, o maior número escrito é c; se são os três iguais o maior número escrito pelo algoritmo é c. Concepção Dicionário de dados E/S Nome Tipo Descrição E a inteiro 1º número dado E b inteiro 2º número dado E c inteiro 3º número dado S a ou b ou c inteiro o valor de saída é o maior dos três António M. P. Sousa da Silva Algoritmia - 28
29 Pseudocódigo Inicio {declaração de variáveis} a, b, c inteiros {instruções} Escrever Introduza os três número a comparar: Ler a,b,c SE a > b e a > c ENTÃO Escrever O maior número é, a SENÃO SE b > c ENTÃO Escrever O maior número é, b SENÃO Escrever O maior número é, c Fim Fluxograma Início Ler a, b, c Sim a>b e a>c Não Escrever 'o maior número é ', a Sim b>c Não Escrever 'o maior número é ', b Escrever 'o maior número é ', c Fim Output Introduza os três números a comparar: O maior número é 10 António M. P. Sousa da Silva Algoritmia - 29
30 Este problema poderia ser resolvido de outra forma (que é a usada, como se verá, quando existem muitos números e não é possível definir variáveis para todos eles). Assim, pode-se definir uma variável, que à partida terá um valor muito pequeno, (ou pelo menos que se saiba que é menor que os números a comparar), e depois cada número é comparado com ela. Quando for encontrado um número maior que o valor dessa variável, esse número será atribuído à variável, que no fim do processamento conterá o maior dos números: Inicio {declaração de variáveis} a, b, c inteiros maior inteiro {instruções} maior {menor número inteiro} Escrever Introduza os três número a comparar Ler a,b,c SE a > maior ENTÃO maior a SE b > maior ENTÃO maior b SE c > maior ENTÃO maior c Escrever O maior número é, maior Fim Instrução de Selecção Múltipla CASO (CASE) É uma instrução estruturada de controlo condicional que permite ao agente executor fazer uma selecção múltipla, isto é, permite que uma instrução sejam escolhida de entre várias disponíveis. A selecção é baseada no valor corrente de uma expressão referida como selector. O selector pode ser de qualquer tipo simples não real e toma muitas vezes a forma de uma única variável simples. Esta estrutura existe em muitas linguagens de programação para tornar mais claros os programas/algoritmos e para facilitar o trabalho do programador, uma vez que, com instruções SE-ENTÃO-SENÃO pode construir-se a estrutura CASO. António M. P. Sousa da Silva Algoritmia - 30
31 A forma geral desta estrutura é: INFORMÁTICA CASO expressão SEJA lista de etiquetas de caso 1 : instrução1 lista de etiquetas de caso 2 : instrução lista de etiquetas de caso n : instrução n [SENÃO instrução alternativa ] FCASO A PARTE DA ESTRUTURA DELIMITADA PELOS PARÊNTESIS RECTOS É OPCIONAL, ISTO É, PODE SER USADA OU NÃO CONFORME AS NECESSIDADES. Cada etiqueta de caso representa um dos valores permitidos pela expressão. Assim, se a expressão é de um certo tipo simples, as etiquetas de caso representam valores do mesmo tipo que caiam dentro de uma gama permitida. Se tal não acontecer a estrutura CASO ou é ignorada ou é executada a instrução alternativa, se existir a cláusula SENÃO. Seguem-se algumas regras de uso das etiquetas de caso. 1. Podem aparecer por qualquer ordem; 2. As etiquetas podem aparecer numa só lista, executando-se a instrução correspondente logo que o selector tome um dos valores da lista. 3. As instruções podem ser simples ou estruturadas. É vulgar o uso de instruções compostas. As instruções não necessitam de ser únicas, isto é, a mesma instrução pode ser usada com duas ou mais listas de etiquetas de caso. Exemplo (ver também exercício resolvido nº 3)... Ler NotaQuantitativa CASO NotaQuantitativa SEJA 1,2,3,4 : NotaQualitativa Mau 5,6,7,8,9 : NotaQualitativa Medíocre 10,11,12,13 : NotaQualitativa Suficiente 14,15,16,17 : NotaQualitativa Bom 18,19,20 : NotaQualitativa Muito Bom SENÃO Escrever Nota inválida FCASO... Início Ler notaquantitativa NotaQuantitativa >= 1 e NotaQuantitativa <= 4 Não NotaQuantitativa >= 5 e NotaQuantitativa <= 9 Não NotaQuantitativa >= 10 e NotaQuantitativa <= 13 Não NotaQuantitativa >= 14 e NotaQuantitativa <= 17 Não NotaQuantitativa >= 18 e NotaQuantitativa <= 20 Sim NotaQualitativa <- 'Mau' Sim NotaQualitativa <- 'Medíocre' Sim NotaQualitativa <- 'Suficiente' Sim NotaQualitativa <- 'Bom' Sim NotaQualitativa <- 'Muito Bom' Não Escrever 'Nota inválida Fim António M. P. Sousa da Silva Algoritmia - 31
32 Neste exemplo é lida uma nota quantitativa (de 0 a 20) e conforme o seu valor é definida uma nota qualitativa (cadeia de caracteres que fica guardada na variável NotaQualitativa). Se a nota não estiver na gama permitida não há correspondência com nenhuma etiqueta de caso e é executada a parte SENÃO da estrutura CASO. Como já se disse, a estrutura CASO é uma simplificação de estruturas SE, encadeadas e que testam igualdades ou intervalos de valores. Mostra-se a seguir o mesmo troço do algoritmo, construído desta forma, para se verificar que é mais pesado e mais difícil de ser entendido.... Ler NotaQuantitativa SE NotaQuantitativa >= 1 e NotaQuantitativa <= 4 ENTÃO NotaQualitativa Mau SENÃO SE NotaQuantitativa >= 5 e NotaQuantitativa <= 9 ENTÃO NotaQualitativa Medíocre SENÃO SE NotaQuantitativa >= 10 e NotaQuantitativa <= 13 ENTÃO NotaQualitativa Suficiente SENÃO SE NotaQuantitativa >= 14 e NotaQuantitativa <= 17 ENTÃO NotaQualitativa Bom SENÃO SE NotaQuantitativa >= 18 e NotaQuantitativa <= 20 ENTÃO NotaQualitativa Muito Bom SENÃO Escrever Nota inválida... Instruções Repetitivas ou Ciclos (loops) Frequentemente é necessário que o agente executor repita uma certa instrução ou conjunto de instruções um determinado número de vezes ou enquanto se verificar uma certa condição. Essa repetição, na maior parte das vezes, não tem que ser uma repetição exacta das mesmas operações, pois pode haver pelo meio certos dados (variáveis) que se vão alterando à medida que o ciclo vai decorrendo. António M. P. Sousa da Silva Algoritmia - 32
33 Em algumas linguagens existe apenas uma instrução ou estrutura de controlo, enquanto que noutras podem existir duas ou até três como no caso do PASCAL. A escolha da estrutura a usar vai depender das características do ciclo. Instrução ENQUANTO-EXECUTAR (WHILE-DO) É uma estrutura de controlo, repetitiva, usada para efectuar ciclos condicionais. A sua forma geral é: ENQUANTO ENQUANTO expressão booleana EXECUTAR instrução FENQUANTO EXECUTAR Expresão Booleana Instrução Falsa Verdadeira FENQUANTO A parte da estrutura correspondente à instrução, será executada repetidamente, enquanto a expressão booleana se mantiver verdadeira. Esta instrução pode ser simples ou estruturada, apesar de geralmente ser uma instrução composta que inclui uma característica que pode alterar o valor da expressão booleana. Como o teste da expressão booleana é realizado antes da possível execução da instrução, a estrutura ENQUANTO será executada nenhuma ou mais vezes, dependendo do valor lógico da referida expressão booleana. É preciso ter cuidado em não criar uma repetição infinita, isto é, a expressão booleana nunca tomar o valor falso para parar o ciclo. Exemplos contador 1 2 soma 0 3 ENQUANTO contador <= 20 EXECUTAR 3.1 Ler classificação 3.2 soma soma + classificação 3.3 contador contador + 1 FENQUANTO... Este troço de um algoritmo tem a finalidade de calcular a soma de 20 classificações lidas. A variável contador permite controlar este ciclo de modo a ter um número de repetições igual ao número de classificações a processar, isto é, vai contando as classificações até 20. São fundamentais as instruções 1 e 3.3; a primeira para iniciar o contador (correspondente á primeira classificação) de modo que a expressão booleana (con- António M. P. Sousa da Silva Algoritmia - 33
34 tador <= 20) seja correctamente avaliada na primeira repetição do ciclo; a segunda para ir somando ao contador uma unidade (correspondente à 2ª, 3ª,..., 20ª classificações) de modo que o ciclo termine quando estiverem as 20 classificações processadas. O mesmo acontece para o cálculo da soma: são fundamentais as instruções 2 e 3.2; a primeira para inicializar a variável soma com zero (elemento neutro da adição) de modo que a expressão soma + classificação seja correctamente avaliada na primeira repetição do ciclo (notar que é proibido usar variáveis que não tenham um valor definido); a segunda para ir acumulando a soma das classificações contador 1 2 maior ENQUANTO contador <= 3 EXECUTAR 3.1 Ler numero 3.2 SE numero > maior ENTÃO maior numero 3.3 contador contador + 1 FENQUANTO Ver exercício resolvido nº 4 Este troço de um algoritmo tem a finalidade de determinar o maior de três números lidos (é a outra forma de resolver o problema descrito na página 174). Quanto o ciclo controlado pela variável contador terminar (depois de três repetições correspondentes aos três números lidos) a variável maior conterá o valor do maior dos três números lidos. Instrução REPETIR-ATÉ (REPEAT-UNTIL) É outra instrução estruturada, repetitiva de controlo, usada para efectuar ciclos condicionais. É semelhante à estrutura ENQUANTO-EXECUTAR e, em alguns aspectos, estas duas estruturas completam-se uma à outra. A sua forma geral é: REPETIR REPETIR sequência de instruções ATÉ expressão booleana Sequência de Instruções ATÉ Expresão Booleana Falsa Verdadeira António M. P. Sousa da Silva Algoritmia - 34
35 A sequência de instruções será executada até que a expressão booleana se torne verdadeira (ou dito de outra forma, enquanto a expressão booleana for falsa). A sequência de instruções será sempre executada pelo menos uma vez, dado que a expressão booleana é testada só no fim da estrutura de controlo. Com o que ficou dito anteriormente, podem-se tirar as diferenças entre as estruturas ENQUANTO e REPETIR: 1. Com ENQUANTO tem-se uma instrução a executar (embora possa ser composta), enquanto que com REPETIR tem-se uma sequência de instruções. 2. A instrução em ENQUANTO não será executada se a expressão booleana for falsa, uma vez que o teste é feito no início, enquanto que a sequência de instruções em REPETIR é executada pelo menos uma vez, pois o teste é feito no fim. Exemplos contador 1 soma 0 REPETIR Ler classificação soma soma + classificação contador contador + 1 ATÉ contador > contador 1 maior REPETIR Ler numero SE numero > maior ENTÃO maior numero contador contador + 1 ATÉ contador > Ver exercício resolvido nº 5 Comparando com o mesmos exemplos construídos com a estrutura ENQUANTO pode ver-se que a única diferença é a expressão booleana ser a negação da usada com aquela estrutura. Pode então concluir-se que a escolha de uma destas duas estruturas repetitivas é geralmente uma questão de preferência pessoal. Contudo, a escolha é influenciada pela vantagem de testar a expressão booleana no princípio ou no fim da estrutura de controlo. António M. P. Sousa da Silva Algoritmia - 35
36 Instrução PARA-ATÉ-EXECUTAR (FOR-TO-DO) É uma instrução estruturada, repetitiva de controlo, usada para efectuar ciclos incondicionais, isto é, esta estrutura permite que uma acção seja repetida um número especificado de vezes. Pode apresentar várias formas. A mais usada é: PARA variável de controlo valor inicial ATÉ valor final EXECUTAR FPARA instrução Esta estrutura de repetição é controlada por uma variável (variável de controlo) que parte de um determinado valor inicial e é incrementada (soma de uma unidade se for do tipo inteiro) até um determinado valor final, isto é, inicialmente, à variável de controlo é atribuído o valor especificado por valor inicial, depois esta variável toma o valor seguinte, automaticamente, cada vez que a instrução é repetida, até atingir e tomar o valor especificado por valor final. Veja-se o fluxograma desta estrutura para melhor se compreender o seu funcionamento. PARA Variável de controlo<- valor inicial Variável de controlo <= valor final EXECUTAR Instrução Sim Não AS ATRIBUIÇÕES INDICADAS NO FLUXOGRAMA SÃO AUTOMATICAMENTE IMPLEMENTADAS PELA ESTRUTURA, PELO QUE, NÃO DEVEM SER ESPECIFICADAS NO ALGORITMO/PROGRAMA. variável de controlo <- variável de controlo + 1 FPARA Seguem-se algumas considerações a ter em conta no uso desta estrutura: 1. A parte da instrução da estrutura pode ser simples ou estruturada, embora seja tipicamente uma instrução composta que pode incluir outras estruturas de controlo. Esta instrução será executada para cada um dos vários valores consecutivos atribuídos (repare-se no sinal de atribuição ) à variável de controlo; 2. O número de valores atribuídos à variável de controlo, determina o número de vezes que a instrução é executada (este número é : valor final - valor inicial + 1 no caso da variável ser inteira); 3. A variável de controlo deve ser uma variável simples de qualquer tipo diferente de real (geralmente é inteira); 4. Valor inicial e valor final poderão ser constantes, variáveis ou expressões; António M. P. Sousa da Silva Algoritmia - 36
37 5. Valor inicial e valor final deverão ser do mesmo tipo que a variável de controlo; 6. O valor inicial deve ser menor do que valor final, se se pretender que a instrução seja executada mais do que uma vez. Se valor inicial e valor final forem iguais, a instrução será executada somente uma vez; se valor inicial for maior que valor final, a instrução não chegará a ser executada. Exemplos soma 0 PARA contador 1 ATÉ 20 EXECUTAR Ler classificação soma soma + classificação FPARA maior PARA contador 1 ATÉ 3 EXECUTAR Ler numero SE numero > maior ENTÃO maior numero FPARA Ver exercício resolvido nº 6 Comparando com os mesmos exemplos construídos com as outras duas estruturas repetitivas pode concluir-se que a estrutura PARA é a mais indicada uma vez que se sabe à partida quantas repetições vão ser necessárias e, é a que envolve um menor número de instruções (em virtude da inicialização e incrementação do contador serem feitas automaticamente). Mas se não se soubesse logo de início quantas classificações iriam ser somadas ou quantos números iriam ser comparados, isto é, se não se soubesse quantas repetições iria ter o ciclo, teria de ser usada uma estrutura repetitiva condicional (ENQUANTO ou REPETIR). É frequente a estrutura FOR aparecer de outras duas formas diferentes: 1. Em vez de a variável de controlo partir de um valor inicial menor que um valor final, para ser incrementada, pode partir de um valor inicial maior que um valor final para ser decrementada, isto é, subtrair uma unidade (no caso de ser inteira). 2. Em vez da incrementação/decrementação ser de uma unidade, pode ser de outro valor qualquer. Para indicar isso é costume acrescentar-se à estrutura a cláusula COM PASSO (steep) com o valor dessa incrementação/decrementação. António M. P. Sousa da Silva Algoritmia - 37
38 Exemplo (para escrever os números pares de 20 a 0)... PARA contador 20 ATÉ 0 COM PASSO 2 EXECUTAR Escrever contador FPARA... Validação de dados Nos vários exemplos já mencionados, alguns algoritmos não funcionam correctamente se não forem feitas certas restrições à entrada de dados, isto é, os valores de entrada devem ser testados antes de serem utilizados. Esta operação, de verificar se os dados são aceitáveis ou não para o algoritmo, designa-se por validação dos dados. Perante uma detecção de dados inválidos há que indicar ao agente executor qual a decisão a tomar. Por exemplo: 1. Emitir uma mensagem de erro (ver exemplo estudado para a estrutura CASO) e interromper a execução ; 2. Emitir uma mensagem de erro e voltar a pedir os dados; 3. Efectuar uma correcção automática dos dados, se possível. As estruturas repetitivas podem ser usadas para validar os dados de entrada. Por exemplo, o cálculo da área de um círculo não tem sentido se o utilizador introduzir um valor para o raio menor ou igual a zero. Nestas condições o algoritmo com a validação do dados de entrada ficaria (ver também o exercício resolvido nº 7): {Algoritmo para calcular a área de um círculo} Início { Declaração dos dados} area, raio Inteiros pi = {Instruções} REPETIR Escrever Introduza o valor do raio : Ler raio SE raio <= 0 ENTÃO Escrever Valor incorrecto para o raio. Tente novamente SENÃO area pi * raio ** 2 Escrever A área é :, area ATÉ raio > 0 Fim António M. P. Sousa da Silva Algoritmia - 38
39 Exercícios Resolvidos Para complementar os exemplos até agora estudados seguem-se alguns exercícios resolvidos abordando várias técnicas de programação. Exercício nº 1 - Procurar uma palavra no dicionário para obter o seu significado. Uma primeira descrição algorítmica desta tarefa pode ser feita com a seguinte sequência de instruções: 1 Anotar a palavra a procurar 2 Abrir o dicionário na primeira página e procurar 3 Repetir a seguinte acção até encontrar a palavra ou até encontrar palavras de ordem alfabética superior ou até chegar ao fim do dicionário 3.1 Procurar na página seguinte 4 Se a palavra for encontrada então 4.1 Recolher o seu significado Senão 4.1 Avisar que a palavra não consta no dicionário Pode, à partida, questionar-se a eficiência deste algoritmo, pois se para pequenas tarefas (pequeno dicionário) a sua utilização pode ser aceitável o mesmo já não se pode dizer para um grande volume de informação (grande dicionário). Na prática não é utilizado o processo de pesquisa sequencial, como foi descrito na primeira versão do algoritmo, mas sim uma técnica (que muitas vezes se usa neste casos) conhecida por pesquisa dicotómica. Desta forma pode construir-se uma segunda versão do algoritmo: 1 Anotar a palavra a procurar 2 Segurar no molho de folhas que formam o dicionário 3 Repetir a seguinte acção até reduzir o molho a uma folha 3.1 Abrir o molho em duas partes quaisquer 3.2 Se a palavra a procurar for anterior à palavra do 2º semi-molho então Segurar apenas no segundo semi-molho Senão Segurar apenas no 1º semi-molho 4 Procurar a palavra na folha seleccionada António M. P. Sousa da Silva Algoritmia - 39
40 5 Se a palavra for encontrada então 5.1 Recolher o seu significado Senão 5.1 Avisar que a palavra não consta no dicionário Assume-se neste algoritmo que o agente executor sabe executar o procedimento de procurar uma palavra, caso contrário teria de ser detalhado. Exercício nº 2 - Resolução de um sistema de equações lineares a duas incógnitas. Análise Estão envolvidos neste problema acções de cálculo numérico e conceitos de matemática. A resolução terá como objectivo final a solução de um sistema do tipo: ax + by = c dx + ey = f, apresentado na forma canónica, com as incógnitas x e y e os coeficientes a, b, c, d, e, f. Para se determinar o valor de x e y (se for possível a resolução) basta conhecer os valores numéricos dos coeficientes e aplicar as seguintes regras algébricas: x = (ce - bf) / (ae - bd) y = (af - cd) / (ae - bd) Terá de ter-se em conta um aspecto importante que resulta também da análise matemática do sistema: a) se o denominador, nas expressões que dão as soluções, for zero e o numerador for diferente de zero, a equação é impossível; b) se o denominador, nas expressões que dão as soluções, for zero e o numerador for também zero, a equação é indeterminada. Assim, basicamente, o problema resume-se a entrar com os coeficientes, calcular as soluções fazendo os testes antes indicados e fornecer as soluções. Esquematicamente: Concepção Dicionário de dados Entram os coeficientes Cálculo das Soluções E/S Nome Tipo Descrição Saem as soluções E a,b,c,d,e,f reais coeficientes do sistema S x,y reais soluções do sistema Algoritmos -Para este exercício vão ser apresentados três tipos diferentes de algoritmos estudados, no entanto, daqui em diante, somente o pseudocódigo e às vezes o fluxograma serão elaborados, pelo facto de estarem mais vocacionados para a implementação do problema numa linguagem de programação. António M. P. Sousa da Silva Algoritmia - 40
41 Descritivo INFORMÁTICA 1 Início 2 Pedir os valores dos coeficientes: a, b, c, d, e, f 3 Se o resultado de (ae - bd) for nulo então 3.1 Se o resultado de (ce - bf) for nulo então Dizer que o sistema é indeterminado Senão Dizer que o sistema é impossível Senão 3.1 Calcular o valor de x utilizando a expressão 3.2 Calcular o valor de y utilizando a expressão 3.3 Fornecer a solução (valores de x e y) 4 Fim Pseudocódigo Início Ler a, b, c, d, e, f SE (a*e - b*d) = 0 ENTÃO SE (c*e - b*f) = 0 ENTÃO Escrever 'O sistema é indeterminado' SENÃO Escrever 'O sistema é impossível' SENÃO x (c*e - b*f) / (a*e - b*d) y (a*f - c*d) / (a*e - b*d) Escrever ' A solução do sistema é: x = ', x, ' e y = ', y Fim Fluxograma Inicio Ler a,b,c,d,e,f 1 (ESTE SÍMBOLO SIGNIFICA QUE O FLUXOGRAMA CONTINUA NA PÁGINA SEGUINTE.) António M. P. Sousa da Silva Algoritmia - 41
42 1 Não (a*e-b*d)=0 Sim x <- (c*e - b*f) / (a*e - b*d) y <- (a*f - c*d) / (a*e - b*d) Não (c*e-b*f)=0 Sim Escrever x, y Escrever ' Sistema Impossível' Escrever ' Sistema Indeterminado' Fim Nota: Como o cálculo da expressão a*e - b*d é efectuado várias vezes, o algoritmo ficaria mais eficiente se só o fosse uma única vez. Para isso, deve definir-se uma variável auxiliar, por exemplo com o nome Denominador, para ficar logo de início com o valor da expressão, isto é, deve incluir-se a instrução Denominador a*e - b*d e no resto do algoritmo, substitui-se a*e - b*d pela variável denominador. Com esta optimização e a declaração de dados tem-se o seguinte pseudocódigo: Início {declaração dos dados} a,b,c,d,e,f reais denominador real x,y reais {instruções} Escrever ' Introduza os coeficientes do sistema: ' Ler a, b, c, d, e, f denominador a*e - b*d SE denominador = 0 ENTÃO SE (c*e - b*f) = 0 ENTÃO Escrever 'O sistema é indeterminado' SENÃO Escrever 'O sistema é impossível' SENÃO x (c*e - b*f) / denominador y (a*f - c*d) / denominador Escrever ' A solução do sistema é: x = ', x, ' e y = ', y Fim António M. P. Sousa da Silva Algoritmia - 42
43 Output Introduza os coeficientes do sistema: A solução do sistema é: x = 3.5 e y = -3 (RESOLVA O SISTEMA USADO NO TESTE DO ALGOTITMO PARA CONFIRMAR O RESULTADO DO OUTPUT.) Exercício nº 3 - Efectuar, a partir de dois números inteiros fornecidos, uma das quatro operações aritméticas básicas (adição, subtracção, multiplicação e divisão) conforme a escolha do utilizador. Análise Este é o caso típico de problema que necessita de um menu para se proceder à escolha de uma acção de entre várias disponíveis (selecção múltipla). Assim, o utilizador terá de escolher uma opção num menu para efectuar uma das quatro operações com os dois números. Esquematicamente: Entram dois números Escolher opção Menu conforme a opção que entra Efectuar operação Sai resultado Concepção Dicionário de dados E/S Nome Tipo Descrição E opção inteiro opção do menu E n1, n2 inteiros números a operacionar S resultado inteiro resultado da operação Pseudocódigo Início {declaração dos dados} opção inteiro n1,n2 inteiros resultado inteiro {instruções} Escrever ' Introduza os números :' Ler n1,n2 Escrever ' MENU' Escrever ' 1- Adicionar ' António M. P. Sousa da Silva Algoritmia - 43
44 Escrever ' 2- Subtrair' Escrever ' 3- Multiplicar' Escrever ' 4- Dividir' Escrever ' Qual a opção? ' Ler opção CASO opção SEJA 1 : resultado n1 + n2 Escrever ' A soma é ', resultado 2 : resultado n1 - n2 Escrever ' A diferença é ', resultado 3 : resultado n1 * n2 Escrever ' O produto é ', resultado 4 : resultado n1 DIV n2 Escrever ' O quociente é ', resultado SENÃO Escrever ' Opção inválida ' FCASO Fim Fluxograma Início Ler n1,n2 Escrever menu Ler opção opção = 1 Não Sim Resultado <- n1 + n2 Escrever resultado opção = 2 Sim Resultado <- n1 - n2 Não Escrever resultado opção = 3 Sim Resultado <- n1 * n2 Não Escrever resultado opção = 4 Não Sim Resultado <- n1 / n2 Escrever resultado Escrever 'Opção inválida' Fim António M. P. Sousa da Silva Algoritmia - 44
45 Output Introduza os números : 12 6 MENU' 1- Adicionar ' 2- Subtrair' 3- Multiplicar' 4- Dividir' Qual a opção? 1 A soma é 18 Exercício nº 4 - Decomposição de um número inteiro positivo em factores primos. Análise Se se designar por n o número a decompor, então pretende-se encontrar o conjunto de factores primos cujo produto é igual a n. Para encontrar os factores primos de um número deve determinar-se o menor número inteiro, superior à unidade, por forma que a sua divisão pelo número dado dê quociente inteiro (isto é, resto nulo). Repete-se o processo para o quociente obtido até que seja atingido o valor 1 como quociente. Por exemplo, o número 140 tem a seguinte decomposição em factores primos: A sequência de factores primos obtida (2, 2, 5 e 7), convertida no produto 2x2x5x7 vai dar o número Concepção Dicionário de dados E/S/Aux Nome Tipo Descrição E/Aux n inteiro número a decompor em factores primos e depois os sucessivos quocientes S divisor inteiro sucessivos divisores de n Pseudocódigo Início {declaração dos dados} n, divisor inteiros António M. P. Sousa da Silva Algoritmia - 45
46 {instruções} Escrever 'Introduza o número a decompor: ' Ler n Escrever 'factores primos de ', n divisor 2 ENQUANTO n <> 1 EXECUTAR ENQUANTO n MOD divisor <> 0 EXECUTAR divisor divisor + 1 FENQUANTO Escrever divisor, ' ' n n DIV divisor FENQUANTO Fim O ciclo interior permite detectar qual o primeiro número (a começar em 2) divide exactamente (n MOD divisor) o número dado, isto é, enquanto o resto da divisão inteira do número dado pelo divisor não for zero, soma uma unidade a divisor. Este ciclo termina quando for encontrado um divisor, que pode ser o próprio número se ele for primo. Depois o divisor encontrado é escrito e em seguida é actualizado o número n para que todo o processo se repita (ciclo exterior) mas agora com o novo quociente (n DIV divisor). A factorização termina quando não for possível dividir mais, isto é, quanto n for 1. Fluxograma Início Ler n divisor <- 2 n <> 1 Não Sim n mod divisor <> 0 Não Sim divisor <- divisor + 1 Escrever divisor n <- n div divisor Fim António M. P. Sousa da Silva Algoritmia - 46
47 Output Introduza o número a decompor: 140 factores primos de 140: Exercício nº 5 - Controlo de paragem de um algoritmo/programa Todos os algoritmos até agora estudados, resolviam os diferentes problemas exactamente uma vez, quer isto dizer que, quando ele fosse implementado numa linguagem de programação, um novo cálculo com outros dados implicaria executar o programa todo desde o início. Na prática tal não sucede, isto é, o programa continua até que o utilizador decida terminá-lo. É preciso então construir um controlo de paragem. A melhor forma de o fazer é com uma estrutura REPETIR-ATÉ, uma vez que, se supõe que pelo menos uma vez o programa calcula o pretendido. Por exemplo, o exercício anterior com um controlo de paragem teria o seguinte pseudocódigo: Início {declaração dos dados} n, divisor inteiros terminar caracter {instruções} REPETIR Escrever 'Introduza o número a decompor: ' Ler n Escrever 'factores primos de ', n divisor 2 ENQUANTO n <> 1 EXECUTAR ENQUANTO n MOD divisor <> 0 EXECUTAR divisor divisor + 1 FENQUANTO Escrever divisor, ' ' n n DIV divisor FENQUANTO Escrever ' Quer terminar? (S/N) ' Ler terminar ATÉ terminar = 'S' Fim António M. P. Sousa da Silva Algoritmia - 47
48 Foi necessário definir uma nova variável do tipo caracter chamada terminar para controlar a estrutura repetitiva do controlo de paragem. Quando o utilizador introduzir a letra S a expressão booleana da cláusula ATÉ fica verdadeira terminando o ciclo, e portanto o programa; outra letra qualquer torna a expressão booleana falsa e o programa continua. Note-se que a variável terminar poderia ser de outro tipo qualquer, por exemplo inteiro, podendo neste caso a mensagem ser: ' 0 para continuar; 1 para sair' e a expressão booleana: terminar = 1. Nos casos em que exista um menu, a mensagem deve ser mais uma opção do mesmo. Por exemplo, no exercício nº3, o menu poderia ter uma 5ª opção com: 5 - Sair e seria a variável opção que controlaria a estrutura REPETIR-ATÉ do controlo de paragem. Exercício nº 6 - Dado um certo número de notas calcular: a sua média, a maior e a menor das notas. Análise Se for n o número total de notas, a média é obtida somando as notas todas e dividindo essa soma por n. O método usado para efectuar uma adição sucessiva (sendo o agente executor o computador) e para determinar o maior (e o menor) de uma lista de números, já foi estudado. Concepção Dicionário de dados E/S/Aux Nome Tipo Descrição E n inteiro número total de notas E nota real cada uma das notas Aux soma real soma das notas Aux contador inteiro contador para o ciclo que representa a ordem de cada uma das notas (1ª, 2ª,...) S média real média das notas S maior real a maior das notas S menor real a menor das notas Note-se que terá de se usar um ciclo cujo número de repetições é conhecido (n) para processar cada uma das notas. Por isso, a variável notas vai representar na 1ª repetição a 1ª nota, na 2ª repetição a 2ª nota,... e na enésima repetição a enésima nota. O problema terá de ser resolvido assim, uma vez que não teria sentido definir uma variável para cada nota pois o algoritmo, para ser geral, não sabe à partida quantas são (é o utilizador que introduzirá o valor de n). António M. P. Sousa da Silva Algoritmia - 48
49 Pseudocódigo Início {declaração dos dados} n, contador inteiros nota, soma reais média, maior, menor reais {instruções} maior 0 menor 20 soma 0 Escrever 'Introduza o total de notas: ' Ler n PARA contador 1 ATÉ n EXECUTAR Escrever 'Introduza a ', contador, 'ª nota: ' Ler nota {calcula a soma das notas} soma soma + nota {determina a maior nota} SE nota > maior ENTÃO maior nota {determina a menor nota} SE nota < menor ENTÃO menor nota FPARA {calcula a média} média soma / n Escrever ' A média das notas é: ', média Escrever ' A maior nota é: ', maior Escrever ' A menor nota é: ', menor Fim INFORMÁTICA Para cada nota que é lida dentro do ciclo é feita uma acumulação da soma, isto é, na 1ª repetição do ciclo a 1ª nota é somada a zero (valor inicial da soma), na 2ª repetição a 2ª nota é somada à 1ª, na 3ª repetição a 3ª nota é somada à soma da 1ª com a 2ª, etc. No final do ciclo tem-se a soma de todas as notas guardada na variável soma. O mesmo acontece para o cálculo da maior (e da menor) notas, só que em vez de uma acumulação é realizada uma troca de valores. Para este algoritmo executar correctamente os cálculos é necessário que as notas lidas estejam todas no intervalo [0, 20]. Como acontece com frequência o utilizador enganar-se a introduzir os dados era necessário modificar o algoritmo para os validar (este assunto será estudado no exercício seguinte). António M. P. Sousa da Silva Algoritmia - 49
50 Fluxograma Início maior <- 0 menor <- 20 soma <- 0 ler n Traçagem Valores iniciais: n = 3 maior = 0 menor = 20 soma = 0 contador <- 1 contador <= n Sim Não 1ª repetição (contador = 1) nota = 8 soma = = 8 maior = 8 menor = 8 2ª repetição (contador = 2) nota = 14 soma = = 22 maior = 14 menor = 8 3ª repetição (contador = 3) nota = 17 soma = = 39 maior = 17 menor = 8 Escrita: média = 39 / 3 = 13 maior = 17 menor = 8 Ler nota soma <- soma + nota Não nota > maior Sim maior <- nota Não nota > menor Sim menor <- nota contador <- contador +1 Escrever média Escrever maior Escrever menor Fim Faça o teste ao algoritmo para 3 notas: 8, 14 e 17 para verificar que realmente é escrita a média 13, a maior nota 17 e a menor nota 8, conforme se demonstra ao lado do fluxograma. António M. P. Sousa da Silva Algoritmia - 50
51 Output Introduza o total de notas: 3 Introduza a 1ª nota: 8 Introduza a 2ª nota: 14 Introduza a 3ª nota: 17 A média das notas é: 13 A maior das notas é: 17 A menor das notas é: 8 Exercício nº 7 - Validação dos dados do exercício anterior. Como já se referiu, o exercício anterior não seria correctamente resolvido, nem traduziria a realidade, se por acaso o utilizador introduzisse notas menores que 0 e maiores que 20 valores. Assim o troço do algoritmo onde as notas são lidas deve ser alterado como a seguir se exemplifica:... PARA contador 1 ATÉ n EXECUTAR REPETIR Escrever 'Introduza a ', contador, 'ª nota: ' Ler nota SE nota < 0 ou nota > 20 ENTÃO Escrever ' Nota inválida. Tente de novo' ATÉ nota > 0 e nota < 20 {calcula a soma das notas} soma soma + nota {determina a maior nota} SE nota > maior ENTÃO maior nota {determina a menor nota} SE nota < menor ENTÃO menor nota FPARA... VALIDAÇÃO DOS DADOS António M. P. Sousa da Silva Algoritmia - 51
Linguagens de Programação:
Capítulo I : Noções Gerais 11 Linguagens de Programação: Como comunicar com o computador? Linguagem Máquina: Conjunto básico de instruções, em código binário, características de cada computador, correspondentes
Montadores e Compiladores
Montadores e Compiladores Prof. Idevar Gonçalves de Souza Júnior Conteúdo Programático Resumido Revisão da Arquitetura de Computadores Introdução a Teoria das Linguagens Compilação e Interpretação Análise
Nº horas ESTRATÉGIAS RECURSOS AVALIAÇÃO
ANO: 10.º Curso Profissional Técnico de Informática de Gestão Disciplina: Linguagens de Programação ANO LECTIVO: 2008/2009 p.1/13 Módulo 1 Algoritmia 1 - Introdução à Lógica de Programação Lógica Sequência
Metodologias de Programação
Metodologias de Programação Bloco 1 José Paulo 1 Formador José António Paulo E-mail: [email protected] Telemóvel: 96 347 80 25 Objectivos Iniciar o desenvolvimento de raciocínios algorítmicos Linguagem
Microcontroladores e Microprocessadores. Conversão de Bases Prof. Samuel Cavalcante
Microcontroladores e Microprocessadores Conversão de Bases Prof. Samuel Cavalcante Conteúdo Conversão de Qualquer base para Decimal Decimal para Binário Hexadecimal para binário Componentes básicos de
Módulo IV Programação Visual Basic. Programação
Módulo IV Visual Basic 1 Vamos considerar os seguintes elementos e estruturas fundamentais que são habitualmente usados em programação: Tipos de Dados Operadores Atribuições Entrada e Saída de Dados Estruturas
1. Noção de algoritmo
1. Noção de algoritmo Em português, a palavra algoritmo quer dizer operação ou processo de cálculo, entre outras definições possíveis (Dicionário Brasileiro de Língua Portuguesa, Mirador Internacional,
Algoritmos e Programação : Conceitos e estruturas básicas. Hudson Victoria Diniz
Algoritmos e Programação : Conceitos e estruturas básicas Hudson Victoria Diniz Relembrando... Um algoritmo é formalmente uma seqüência finita de passos que levam a execução de uma tarefa. Podemos pensar
Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução
Métodos de Programação I 2. 27 Ciclo com Contador : instrução for identificador downto for de variável := expressão to expressão do instrução UMA INSTRUÇÃO (SIMPLES OU COMPOSTA) Neste caso o ciclo é repetido
Estruturas de Repetição
Estruturas de Repetição Lista de Exercícios - 04 Algoritmos e Linguagens de Programação Professor: Edwar Saliba Júnior Estruturas de Repetição O que são e para que servem? São comandos que são utilizados
Versão 2 COTAÇÕES. 13... 5 pontos. 6... 4 pontos 7... 7 pontos. 5... 6 pontos. 8... 9 pontos. 9... 8 pontos
Teste Intermédio de Matemática Versão 2 Teste Intermédio Matemática Versão 2 Duração do Teste: 90 minutos 07.02.2011 9.º Ano de Escolaridade Decreto-Lei n.º 6/2001, de 18 de Janeiro 1. 2. COTAÇÕES 1.1....
MATRIZ DA PROVA DE EXAME DE EQUIVALÊNCIA À FREQUÊNCIA A NÍVEL DE ESCOLA DE INTRODUÇÃO ÀS TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO (PROVA 24)
MATRIZ DA PROVA DE EXAME DE EQUIVALÊNCIA À FREQUÊNCIA A NÍVEL DE ESCOLA DE INTRODUÇÃO ÀS TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO (PROVA 24) 2011 9º Ano de Escolaridade 1. INTRODUÇÃO O exame desta disciplina
Introdução a Programação Aula 01
Introdução a Programação Aula 01 Prof. Bruno Crestani Calegaro Curso de Sistemas de Informação ELC1064 Lógica e Algoritmo 1 O que é um computador? Máquina programável genérica Constituído por: Processador
Informação-Prova de Equivalência à disciplina de: Aplicações Informáticas B. 1. Introdução. Ensino Secundário. Ano letivo de 2011/12
Informação-Prova de Equivalência à disciplina de: Aplicações Informáticas B Ensino Secundário Ano letivo de 2011/12 1. Introdução O presente documento visa divulgar as características da prova de exame
Organização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Evolução e Desempenho dos Computadores Slide 1 Conceitos Arquitetura do Computador Refere-se aos atributos que são visíveis para o programador. Ex: conjunto
Sistemas Numéricos. Tiago Alves de Oliveira
Sistemas Numéricos Tiago Alves de Oliveira Sumário Sistemas Numéricos Binário Octal Hexadecimal Operações aritméticas binária e hexadecimal Operações lógicas binárias e decimais Representação Interna de
Exame de Equivalência à Frequência do Ensino Secundário
Exame de Equivalência à Frequência do Ensino Secundário INFORMAÇÃO EXAME DE APLICAÇÕES INFORMÁTICAS B 2016 12º ANO DE ESCOLARIDADE (DECRETO-LEI N.º 139/ 2012, DE 5 DE JULHO) Prova 163 Escrita e Prática
Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de
Escola Secundária c/3º CE José Macedo Fragateiro Curso Profissional de Nível Secundário Componente Técnica Disciplina de Sistemas Digitais e Arquitectura de Computadores 2009/2010 Módulo 2: Álgebra e Lógica
Conceitos básicos de programação
Tipos de dados estruturados Tipos estruturados vectores matrizes Estruturas (registos) Vectores e matrizes são estruturas homogéneas. Uma estrutura homogénea é uma sequência linear de elementos de mesmo
Proporcionar a modelagem de sistemas utilizando todos os conceitos da orientação a objeto;
Módulo 7 UML Na disciplina de Estrutura de Sistemas de Informação, fizemos uma rápida passagem sobre a UML onde falamos da sua importância na modelagem dos sistemas de informação. Neste capítulo, nos aprofundaremos
Programação de Computadores I. Linguagem C Função
Linguagem C Função Prof. Edwar Saliba Júnior Fevereiro de 2011 Unidade 07 Função 1 Conceitos As técnicas de programação dizem que, sempre que possível, evite códigos extensos, separando o mesmo em funções,
Introdução a Banco de Dados. INTRODUÇÃO
INTRODUÇÃO O termo banco de dados é bastante popular em diversas áreas de atuação. Com o aumento da utilização de computadores na manipulação de dados que envolvem diversas aplicações, os bancos de dados
Algoritmo e Lógica de Programação. Conceitos de Linguagens de Programação
Algoritmo e Lógica de Programação Conceitos de Linguagens de Programação SUMÁRIO 1. LINGUAGENS DE PROGRAMAÇÃO...3 1.1 CLASSIFICAÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO...3 1.1.1 Linguagens de Alto Nível Comparadas
INTRODUÇÃO À PROGRAMAÇÃO EM FORTRAN
3 INTRODUÇÃO À PROGRAMAÇÃO EM FORTRAN 3.1 Estrutura de um programa Fortran Como se viu anteriormente, a definição da sequência de instruções (isto é, o algoritmo) é uma etapa importante na elaboração de
Informática Aplicada
Informática Aplicada Aula 1 Introdução Diogo Pinheiro Fernandes Pedrosa Departamento de Ciências Exatas e Naturais Universidade Federal Rural do Semi-Árido Introdução Informática informação aplicada; Pressupõe
Conceitos c++ Prof. Demétrios Coutinho INFORMÁTICA BÁSICA
INFORMÁTICA BÁSICA Conceitos c++ Prof. Demétrios Coutinho C a m p u s P a u d o s F e r r o s D i s c i p l i n a d e O r g a n i z a ç ã o d e A l g o r i t m o s D e m e t r i o s. c o u t i n h o @
3. COMPILAÇÃO E ESTRUTURA BÁSICA DE UM PROGRAMA EM C
3. COMPILAÇÃO E ESTRUTURA BÁSICA DE UM PROGRAMA EM C 3.1. Compilação de um Programa C O compilador C realiza a compilação do código-fonte de um programa em cinco etapas: edição, pré-processamento, compilação,
RACIOCÍNIO LÓGICO QUANTITATIVO
RACIOCÍNIO LÓGICO QUANTITATIVO AULA 1 ESTUDO DA LÓGICA O estudo da lógica é o estudo dos métodos e princípios usados para distinguir o raciocínio correto do incorreto. A lógica tem sido freqüentemente
O que é Microsoft Excel? Microsoft Excel. Inicialização do Excel. Ambiente de trabalho
O que é Microsoft Excel? Microsoft Excel O Microsoft Excel é um programa para manipulação de planilhas eletrônicas. Oito em cada dez pessoas utilizam o Microsoft Excel pra trabalhar com cálculos e sistemas
INF1005: Programação I. Algoritmos e Pseudocódigo
INF1005: Programação I Algoritmos e Pseudocódigo Tópicos Principais Definição de Algoritmo Exemplos Básicos Formas de representação Condicionais Exemplos com Condicionais Repetições Exemplos com Repetições
Capítulo II : A Linguagem Pascal Conceitos Fundamentais
Capítulo II : A Linguagem Pascal Conceitos Fundamentais 1 Capítulo II : A Linguagem Pascal Conceitos Fundamentais (Niklaus Wirth, 1970) 1. Introdução Um exemplo: Observações: (* Programa para somar dois
4. Álgebra Booleana e Simplificação Lógica. 4. Álgebra Booleana e Simplificação Lógica 1. Operações e Expressões Booleanas. Objetivos.
Objetivos 4. Álgebra Booleana e Simplificação Lógica Aplicar as leis e regras básicas da álgebra Booleana Aplicar os teoremas de DeMorgan em expressões Booleanas Descrever circuitos de portas lógicas com
CAPÍTULO 2 SISTEMAS DE NUMERAÇÃO E CÓDIGOS
CAPÍTULO 2 SISTEMAS DE NUMERAÇÃO E CÓDIGOS Código BCD; Comparação entre BCD e Binário; Circuitos Digitais para BCD; Código Gray; Código ASCII; Detecção de erros pelo método de Paridade O que é um Código?
Figura 8: modelo de Von Neumann
3. ORGANIZAÇÃO DE SISTEMA DE COMPUTADORES Olá, caro aluno! Neste capítulo vamos ver como são organizados os componentes que formam um sistema computacional. O conceito é histórico, mas é aplicado até os
Projetando um Computador
Objetivo Projetando um Computador Parte II (2) Projetando um Computador Parte II Arquitetura do Processador BIP Apresentar as noções do funcionamento de um computador através da descrição da arquitetura
Normas para a elaboração de um relatório. para a disciplina de projecto integrado. 3.º ano 2.º semestre. Abril de 2004
Normas para a elaboração de um relatório para a disciplina de projecto integrado 3.º ano 2.º semestre Abril de 2004 Instituto Superior de Tecnologias Avançadas Índice Introdução...3 O que é um relatório...3
Fundamentos de Arquitetura e Organização de Computadores
Fundamentos de Arquitetura e Organização de Computadores Dois conceitos fundamentais no estudo dos sistemas de computação são o de Arquitetura e Organização de computadores. O termo arquitetura refere-se
UNIPAC Araguari FACAE - Faculdade de Ciências Administrativas e Exatas SISTEMAS DE INFORMAÇÃO
UNIPAC Araguari FACAE - Faculdade de Ciências Administrativas e Exatas SISTEMAS DE INFORMAÇÃO SAD Sistemas de Apoio à Decisão 2011/02 Aula Cinco [email protected] Modelos de decisão Sistemas de
Introdução. Software Básico Aula 3. Prof. Dr. Rogério Vargas.
Introdução Software Básico Aula 3 Prof. Dr. Rogério Vargas http://rogerio.in Provocação Você já se perguntou como é que os programas que você escreve são traduzidos em instruções executáveis pelas estruturas
CAP. II RESOLUÇÃO NUMÉRICA DE EQUAÇÕES NÃO LINEARES
CAP. II RESOLUÇÃO NUMÉRICA DE EQUAÇÕES NÃO LINEARES Vamos estudar alguns métodos numéricos para resolver: Equações algébricas (polinómios) não lineares; Equações transcendentais equações que envolvem funções
TECNOLOGIA EM MECATRÔNICA INDUSTRIAL CONTROLADORES LÓGICOS PROGRAMÁVEIS
TECNOLOGIA EM MECATRÔNICA INDUSTRIAL CONTROLADORES LÓGICOS PROGRAMÁVEIS TECNOLOGIA EM MECATRÔNICA INDUSTRIAL CONTROLADORES LÓGICOS PROGRAMÁVEIS Autor: Prof. Heliliano Carlos Sartori Guedes [email protected]
FOLHA DE CÁLCULO ELABORAÇÃO DE GRÁFICOS
ELABORAÇÃO DE GRÁFICOS Elaboração de gráficos Os gráficos são visualmente atraentes e constituem uma fantástica ajuda para a apresentação e interpretação de dados armazenados numa folha de cálculo. Numa
O AMBIENTE DELPHI. Programação de Computadores.
O AMBIENTE DELPHI Programação de Computadores Profº.: Cristiano Vieira [email protected] A IDE (Integrated Development Environment) do Delphi consiste em quatro partes principais: JanelaPrincipal(1)
Programação de Computadores I Estruturas de Repetição PROFESSORA CINTIA CAETANO
Programação de Computadores I Estruturas de Repetição PROFESSORA CINTIA CAETANO Introdução Existem situações onde é necessário repetir um determinado trecho de um programa um certo número de vezes. Assim,
Capítulo VI Circuitos Aritméticos
Capítulo VI Circuitos Aritméticos Introdução No capítulo anterior estudamos a soma e subtração de números binários. Neste capítulo estudaremos como as operações aritméticas de soma e subtração entre números
Histórico e Evolução da Computação
Lista de Exercícios Introdução à Informática Professor: Sérgio Salazar Histórico e Evolução da Computação O 1º computador foi o ENIAC, utilizado para montar tabelas para o cálculo de projéteis na 2ª Guerra
Modelo de Entidade-Relação (ER)
Modelo de Entidade-Relação (ER) Autores como Peter Chen ou Bachman sugerem um modelo que facilite a criação do modelo conceptual. Este modelo Entity Attribute Relation Ship (Entidade- Relação, ou abreviadamente
OBSERVAÇÕES: EXERCÍCIOS
OBSERVAÇÕES: 1. Esta lista de exercícios poderá ser resolvida individualmente ou em grupos de 2 pessoas. 2. A lista possui 25 exercícios, destes você deve responder os 5 primeiros exercícios e os outros
Comandos de Desvio 1
Programação de Computadores I UFOP DECOM 2014 1 Aula prática 3 Comandos de Desvio 1 Sumário Resumo Nesta aula você irá resolver problemas que requerem uma decisão com base em um teste, ou condição. Para
1. Manual Resumido de Gestão de Contratos
1. Manual Resumido de Gestão de Contratos ÍNDICE 1. MANUAL RESUMIDO DE GESTÃO DE CONTRATOS 1 1.1 MENU GESTÃO DE CONTRATOS... 3 1.1.1 INTRODUÇÃO... 3 1.1.2 APRESENTAR CONTRATOS... 3 1.1.2.1 PASSO 1 IDENTIFICAÇÃO
Algoritmos APRENDENDO A PROGRAMAR COM C#
Algoritmos APRENDENDO A PROGRAMAR COM C# Alô Mundo AULA 01 Conhecendo o ambiente O objetivo principal desse programa não é mostrar a mensagem Alo Mundo. O objetivo é apresentar o ambiente de desenvolvimento
Projetando um Computador Parte II Arquitetura do Processador BIP
Projetando um Computador Parte II Arquitetura do Processador BIP Prof. Dr. Cesar Albenes Zeferino ([email protected]) Objetivo Projetando um Computador Parte II (2) Apresentar as noções do funcionamento
LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea
BANCO DE DADOS Prof. Fabiano Taguchi http://fabianotaguchi.wordpress.com [email protected] SQL A Structed Query Language foi desenvolvida em 1974 nos laboratório da IBM em San José na Califórnia,
Até o momento, vimos que a estrutura de um computador segue uma seqüência: ENTRADA => PROCESSAMENTO => SAÍDA
Curso de Sistemas de Informação Disciplina: Algoritmos 1º e 2º Períodos Turmas 216071A, 216071B e 216062 Notas de Aula Aulas 07, 08 e 09. Professor: Edkallenn Aula 07 Variáveis Talvez o conceito de variável
Vírgula flutuante Aula 6
Vírgula flutuante Aula 6 17 de Março de 2005 1 Estrutura desta aula Números em vírgula flutuante Formatos dos números em vírgula fixa e em vírgula flutuante A norma IEEE 754 Normalizações, expoentes, zeros
Qualidade de Produto. Maria Cláudia F. P. Emer
Qualidade de Produto Maria Cláudia F. P. Emer Introdução Qualidade diretamente ligada ao produto final Controle de qualidade Adequação do produto nas fases finais no processo de produção Software Atividades
Introdução à Ciência da Informação
Introdução à Ciência da Informação Prof. Edberto Ferneda Software 1 Software Níveis de Software Hardware Software Aplicativos Software Tipos de Software Softwares Aplicativos de Sistema (Utilitários) Finalidades
1. À primeira coluna (P), atribui-se uma quantidade de valores V igual à metade do total de linhas
LÓGICA MATEMÁTICA Walter Sousa Resumo teórico 1) PROPOSIÇÕES LÓGICAS SIMPLES Uma proposição é uma sentença declarativa que pode ser classificada em verdadeira (V) ou falsa (F), mas não ambas as interpretações.
Versão 1. Identifica, claramente, na folha de respostas, a versão do teste (1 ou 2) a que respondes.
Teste Intermédio de Matemática Versão 1 Teste Intermédio Matemática Versão 1 Duração do Teste: 90 minutos 27.04.2010 3.º Ciclo do Ensino Básico 8.º Ano de Escolaridade Decreto-Lei n.º 6/2001, de 18 de
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS MATEMÁTICA 8.º ANO PLANIFICAÇÃO GLOBAL 1. Representação, comparação e ordenação. Representar números racionais
Parte 05 - Técnicas de programação (mapas de Veitch-Karnaugh)
Parte 05 - Técnicas de programação (mapas de Veitch-Karnaugh) Mapas de Veitch-Karnaugh Montar circuitos lógicos a partir de tabela verdade, embora seja tarefa fácil, geral um circuito extremamente grande.
Caminho de Dados e Controle. Prof. Leonardo Barreto Campos 1
Caminho de Dados e Controle Prof. Leonardo Barreto Campos 1 Sumário Introdução; Convenções Lógicas de Projeto; Construindo um Caminho de Dados; O Controle da ULA; Projeto da Unidade de Controle Principal;
Plano de Ensino PROBABILIDADE E ESTATÍSTICA APLICADA À ENGENHARIA - CCE0292
Plano de Ensino PROBABILIDADE E ESTATÍSTICA APLICADA À ENGENHARIA - CCE0292 Título PROBABILIDADE E ESTATÍSTICA APLICADA À ENGENHARIA Código da disciplina SIA CCE0292 16 Número de semanas de aula 4 Número
Métodos Formais. Agenda. Relações Binárias Relações e Banco de Dados Operações nas Relações Resumo Relações Funções. Relações e Funções
Métodos Formais Relações e Funções por Mauro Silva Agenda Relações Binárias Relações e Banco de Dados Operações nas Relações Resumo Relações Funções MF - Relações e Funções 2 1 Relações Binárias Definição
Circuitos Aritméticos
Circuitos Aritméticos Semi-Somador Quando queremos proceder à realização de uma soma em binário, utilizamos várias somas de dois bits para poderemos chegar ao resultado final da operação. Podemos, então,
Universidade Federal da Paraíba Centro de Informática Departamento de Informática
Universidade Federal da Paraíba Centro de Informática Departamento de Informática Disciplina: Introdução à Programação Horário: T08002, I08002 Sala: CISB01 T10002, I10002 Sala: CI304 Número de Créditos:
Programa de Matemática 2º ano
Programa de Matemática 2º ano Introdução: A Matemática é uma das ciências mais antigas e é igualmente das mais antigas disciplinas escolares, tendo sempre ocupado, ao longo dos tempos, um lugar de relevo
Arquitetura e Organização de Computadores
Arquitetura e Organização de Computadores Interconexão do Computador Givanaldo Rocha de Souza http://docente.ifrn.edu.br/givanaldorocha [email protected] Material do prof. Sílvio Fernandes -
Prova Modelo. Nome: Número:
Arquitectura de Computadores (2008/2009) Licenciatura em Engenharia Informática Prova Modelo 27 de Abril de 2009 Duração: 56 min. + 5 min. de tolerância Nome: Número: Isto trata-se de uma prova modelo
CRITÉRIOS ESPECÍFICOS DE AVALIAÇÃO
ANO LECTIVO 2009/2010 1 CURSO DO ENSINO REGULAR DISCIPLINA: INTRODUÇÃO ÀS TECNOLOGIAS INFORMAÇÃO E COMUNICAÇÃO ANO: 9.º DOMÍNIOS COMPETÊNCIAS PONRAÇÃO Rentabilizar as Tecnologias da Informação e Comunicação
2) Escreva um algoritmo que leia um conjunto de 10 notas, armazene-as em uma variável composta chamada NOTA e calcule e imprima a sua média.
1) Inicializar um vetor de inteiros com números de 0 a 99 2) Escreva um algoritmo que leia um conjunto de 10 notas, armazene-as em uma variável composta chamada NOTA e calcule e imprima a sua média 3)
CAPÍTULO II. Variáveis e Expressões CAPÍTULO II COMENTÁRIOS SINTAXE / SEMÂNTICA ESTRUTURA DE UM ALGORITMO EM PSEUDOCÓDIGO
NBT110 Algoritmos e Estruturas de Dados Profa. Rosanna Mara Rocha Silveira Fevereiro/2013 - Versão 1.1 10 CAPÍTULO II COMENTÁRIOS Os comentários são usados para aumentar a clareza de um algoritmo. O trabalho
Bases de Dados BDDAD. Álgebra Relacional. Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/33
BDDAD Bases de Dados Álgebra Relacional Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/33 1. Introdução 2. Expressões Algébricas 3. Álgebra Relacional Implementada em SGBD 4. Operações Algébricas Remover Parte
Matemática Aplicada às Ciências Sociais
ESCOLA SECUNDÁRIA DE AMORA PLANIFICAÇÃO ANUAL Matemática Aplicada às Ciências Sociais Ensino Regular Curso Geral de Ciências Sociais e Humanas 11º ANO Ano Letivo 2014 / 2015 PLANIFICAÇÃO A LONGO PRAZO
Sistemas Digitais Ficha Prática Nº 7
Departamento de Sistemas Digitais Ficha Prática Nº 7 Implementação de um conversor analógico/ digital tipo Flash: com Codificador e com Descodificador Grupo: Turma: Elementos do Grupo: 1. Introdução Os
Programação. Folha Prática 4. Lab. 4. Departamento de Informática Universidade da Beira Interior Portugal 2015. Copyright 2010 All rights reserved.
Programação Folha Prática 4 Lab. 4 Departamento de Informática Universidade da Beira Interior Portugal 2015 Copyright 2010 All rights reserved. LAB. 4 4ª semana CONCEÇÃO DE ALGORITMOS E ESTRUTURAS DE CONTROLO
BANCO DE DADOS I AULA 2. Willamys Araújo [email protected]
BANCO DE DADOS I AULA 2 Willamys Araújo [email protected] Modelagem de Dados Modelagem de dados é o estudo das informações existentes em um contexto sob observação para a construção de um modelo
Engenharia Econômica
UNIVERSIDADE FEDERAL DE PERNAMBUCO UFPE CENTRO ACADÊMICO DO AGRESTE NÚCLEO DE TECNOLOGIA ENGENHARIA CIVIL Engenharia Econômica Aula I Professora Jocilene Otilia da Costa, Dra Conteúdo Juros Simples Juros
LINGUAGEM JAVA - RESUMO
LINGUAGEM JAVA - RESUMO 1.1. Estrutura Geral de um Programa 1. ESTRUTURAS BÁSICAS public class nome do programa public static void main(string[] args) instruções do programa 1.2. Tipos Primitivos de Dados
Introdução. Qualidade de Produto. Introdução. Introdução ISO/IEC 9126. Normas
Qualidade de Produto Maria Cláudia F.P. Emer Introdução z Qualidade diretamente ligada ao produto final z Controle de qualidade Adequação do produto nas fases finais no processo de produção z Software
Oganização e Arquitetura de Computadores
Oganização e Arquitetura de Computadores Capítulo 14 e 15 Unidade de Controle Parte I Operação da Unidade de Controle 1 Micro-Operações Um computador executa um programa Ciclo: Busca/Executa Cada ciclo
Algoritmo e Pseudo-código
Departamento de Sistemas de Computação Universidade de São Paulo Algoritmo e Pseudo-código Responsável Prof. Seiji Isotani ([email protected]) Objetivos do Curso Desenvolver o Pensamento Computacional
Do alto-nível ao assembly
Do alto-nível ao assembly Compiladores Cristina C. Vieira 1 Viagem Como são implementadas as estruturas computacionais em assembly? Revisão dos conceitos relacionados com a programação em assembly para
1. Estrutura de Dados
1. Estrutura de Dados Não existe vitória sem sacrifício! Filme Transformers Um computador é uma máquina que manipula informações. O estudo da ciência da computação inclui o exame da organização, manipulação
OpenPDV: Sistema aberto para gerenciamento de restaurantes
Universidade Federal de Santa Catarina Departamento de Informática e Estatística INE5638 Introdução a Projetos Orientador: José Eduardo de Lucca OpenPDV: Sistema aberto para gerenciamento de restaurantes
Matemática A COTAÇÕES GRUPO I GRUPO II. Teste Intermédio. Versão 2. Duração do Teste: 90 minutos 29.11.2013. 12.º Ano de Escolaridade. 5...
Teste Intermédio Matemática A Versão 2 Duração do Teste: 90 minutos 29..203 2.º Ano de Escolaridade Decreto-Lei n.º 74/2004, de 26 de março????????????? COTAÇÕES GRUPO I.... 0 pontos 2.... 0 pontos 3....
AGRUPAMENTO DE ESCOLAS DE SAMORA CORREIA ESCOLA BÁSICA PROF. JOÃO FERNANDES PRATAS ESCOLA BÁSICA DE PORTO ALTO
AGRUPAMENTO DE ESCOLAS DE SAMORA CORREIA ESCOLA BÁSICA PROF. JOÃO FERNANDES PRATAS ESCOLA BÁSICA DE PORTO ALTO Prova Extraordinária de Avaliação (Matemática) 3º Ciclo - 8.º Ano de Escolaridade Despacho
Placas Gráficas. Placas Gráficas. Placas Gráficas. Placas Gráficas. O que é? Para que serve? Resolução (cont.) Resolução
O que é? Para que serve? -A função das placas gráficas é a de construir as imagens que são apresentadas nos monitores dos computadores. -O conteúdo dessa memória está sempre a ser actualizado pela placa
Simplificação de Expressões Booleanas e Circuitos Lógicos
Simplificação de Expressões Booleanas e Circuitos Lógicos Margrit Reni Krug Julho/22 Tópicos Revisão Álgebra Booleana Revisão portas lógicas Circuitos lógicos soma de produtos produto de somas Simplificação
ÁLGEBRA BOOLEANA- LÓGICA DIGITAL
ÁLGEBRA BOOLEANA- LÓGICA DIGITAL LÓGICA DIGITAL Álgebra Booleana Fundamentação matemática para a lógica digital Portas Lógicas Bloco fundamental de construção de circuitos lógicos digitais Circuitos Combinatórios
Orientação a Objetos
Orientação a Objetos 1. Manipulando Atributos Podemos alterar ou acessar os valores guardados nos atributos de um objeto se tivermos a referência a esse objeto. Os atributos são acessados pelo nome. No
Java possui 4 tipos de dados. Estes tipos de dados são divididos em: boolean, character, integer e float.
1 - Tipos de Dados em Java Java possui 4 tipos de dados. Estes tipos de dados são divididos em: boolean, character, integer e float. a. Boolean Um dado boolean poderá assumir somente dois valores: true
EXPLORANDO A RESOLUÇÃO DE PROBLEMAS COM O MAPLE
EXPLORANDO A RESOLUÇÃO DE PROBLEMAS COM O MAPLE José Domingos Albuquerque Aguiar UFRPE [email protected] Polyana de Cássia Cavalcanti dos Santos UFRPE - [email protected] 1. INTRODUÇÃO
1 Teoria de conjuntos e lógica
1 Teoria de conjuntos e lógica Estes breves apontamentos dizem respeito à parte do programa dedicada à teoria de conjuntos e à lógica matemática. Embora concebidos sem grandes formalismos e com poucas
Medidas e Escalas: Escalas não Comparativas
Medidas e Escalas: Escalas não Comparativas 1-1 Sumário do Capítulo 1) Escalas não comparativas 2) Escalas de rácios contínuos 3) Escalas de Itens i. Escala de Likert ii. iii. Escala de Diferencial semântico
Microprocessadores e Aplicações
Microprocessadores e Aplicações Planificação das aulas teóricas e aulas práticas Ano Lectivo 2005/ 2006 Aula 1 Semana 26 a 30 de Setembro - Apresentação 1. Apresentação da disciplina aos alunos: a. Programa
INTERFACE PARALELA. Área: Eletrônica Nível de conhecimento necessário: básico. Autor:
INTERFACE PARALELA Área: Eletrônica Nível de conhecimento necessário: básico Tópicos abordados: O que é a interface paralela? Quantas entradas e saídas ela possui? Construindo a interface Manipulando no
EXAME NACIONAL DO ENSINO SECUNDÁRIO
EXAME NACIONAL DO ENSINO SECUNDÁRIO 11.º/12.º Anos de Escolaridade (Decreto-Lei n.º 74/2004, de 26 de Março) PROVA 703/8 Págs. Duração da prova: 120 minutos 2007 2.ª FASE PROVA PRÁTICA DE APLICAÇÕES INFORMÁTICAS
O Sistema de Computação
Departamento de Ciência da Computação - UFF O Sistema de Computação Profa. Débora Christina Muchaluat Saade [email protected] O Sistema de Computação Capítulo 2 Livro do Mário Monteiro Componentes
