Baixe o app para aproveitar ainda mais
Prévia do material em texto
UUNNIIVVEERRSSIIDDAADDEE FFEEDDEERRAALL DDEE MMAATTOO GGRROOSSSSOO DDOO SSUULL CCAAMMPPUUSS DDEE TTRRÊÊSS LLAAGGOOAASS LLIICCEENNCCIIAATTUURRAA EEMM MMAATTEEMMÁÁTTIICCAA IINNTTRROODDUUÇÇÃÃOO ÀÀ CCIIÊÊNNCCIIAA DDAA CCOOMMPPUUTTAAÇÇÃÃOO RROOTTEEIIRROO DDEE AAUULLAA PPrrooff ªª.. DDrrªª.. AAlleessssaannddrraa BBoonnaattoo AAllttrraann TTRRÊÊSS LLAAGGOOAASS,, 11 oo SSEEMMEESSTTRREE DDEE 22001133 2 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran PPRREEFFÁÁCCIIOO O presente roteiro foi elaborado na intenção de auxiliar o desenvolvimento da atividade educacional na disciplina “Introdução à Ciência da Computação”, parte integrante da grade curricular do curso de “Licenciatura em Matemática” da Universidade Federal de Mato Grosso do Sul, campus de Três Lagoas. Procurou-se desenvolver um material sucinto, porém, que contenha informações básicas e fundamentais, contemplando todo o conteúdo programático do plano de ensino das disciplinas. Vale lembrar que, este material é apenas um roteiro, sugiro a todos fazer uso também do material que consta na bibliografia da disciplina. Os exemplos e exercícios são feitos durante a explicação do conteúdo, cabe ao aluno deixar seu caderno em dia. Para críticas, sugestões e contribuições em relação a este roteiro entrem em contato através do e- mail: lealtran@gmail.com ou alessandra.altran@ufms.br. 3 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran SSUUMMÁÁRRIIOO 1 – CONCEITOS BÁSICOS 5 INTRODUÇÃO 5 FLUXOGRAMA 9 PSEUDOCÓDIGO 10 TIPOS DE DADOS 11 OPERADORES 13 2 – ESTRUTURAS DE CONTROLE 16 ENTRADA DE DADOS 16 SAÍDA DE DADOS 17 EXERCÍCIOS PROPOSTOS 18 PROCESSAMENTO 19 ESTRUTURA SEQUENCIAL 19 ESTRUTURA DE SELEÇÃO OU DECISÃO 19 ESTRUTURA DE REPETIÇÃO 23 EXERCÍCIOS PROPOSTOS 28 3 – ESTRUTURAS DE DADOS HOMOGÊNEAS 32 VETOR 32 MATRIZ 34 EXERCÍCIOS PROPOSTOS 37 4 – SUBALGORITMO 40 FUNCIONAMENTO DE UM SUBALGORITMO 40 TIPOS DE SUBALGORITMOS 41 4 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran FUNÇÃO 41 PROCEDIMENTO 43 VARIÁVEIS LOCAIS E VARIÁVEIS GLOBAIS 45 PARÂMETROS 46 PASSAGEM DE PARÂMETROS POR VALOR E POR REFERÊNCIA 47 EXERCÍCIOS PROPOSTOS 50 5 – BIBLIOGRAFIA 51 5 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran CCOONNCCEEIITTOOSS BBÁÁSSIICCOOSS INTRODUÇÃO De modo a encontrar uma forma estruturada de representação da resolução de um problema, surgem os Algoritmos. Vale lembra que, um algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo, assim, um algoritmo é um “caminho” para a solução de um problema. Pode-se dizer que um algoritmo é uma sequência de procedimentos finitos a serem seguidos e quando executados em determinado período de tempo, chegará a seu objetivo, ou seja, à resolução de um problema ou execução de uma tarefa. Em outras palavras, é uma sequência de passos que visam atingir um objetivo bem definido. Essa é uma definição geral, podendo se aplicada a qualquer circunstância que exija a descrição da solução. No dia-a-dia, as pessoas utilizam algoritmos de maneira intuitiva, sem que haja necessidade de planejar os passos da resolução dos problemas cotidianos. São exemplos de algoritmos: Fazer café; Trocar um pneu furado; Fazer um bolo; Trocar uma lâmpada queimada. Apesar de óbvias demais, muitas vezes realiza-se esse tipo de atividade inconscientemente, sem perceber seus pequenos detalhes. Cada uma dessas atividades pode ser resolvida de diversas maneiras, com poucos (ou muitos) detalhes que, certamente, dificultam (ou facilitam) a resolução. A seguir, será apresentado um exemplo para entender melhor esta questão, explicitando, passo a passo, a resolução de um problema. Algoritmo Troca de Lâmpada 1 1. Pegar a escada; 2. Posicioná-la embaixo da lâmpada; 3. Buscar uma lâmpada nova; 4. Subir na escada; 5. Retirar a lâmpada velha; 6. Colocar a lâmpada nova. 1 6 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Assim, o problema da lâmpada queimada foi resolvido seguindo uma determinada sequência de passos. Porém, é possível incluir alguns passos intermediários para verificar o problema antecipadamente. Dessa forma, o algoritmo ficaria: Algoritmo Troca de Lâmpada 2 1. Pegar a escada; 2. Posicioná-la embaixo da lâmpada; 3. Buscar uma lâmpada nova; 4. Acionar o interruptor; 5. Se a lâmpada não acender, então; 1. Subir na escada; 2. Retirar a lâmpada queimada; 3. Colocar a lâmpada nova. Sendo assim, pode-se dizer que todo algoritmo é compostas por instruções finitas, e bem definidas, com objetivo de resolver um problema proposto. Comprovando o que foi dito anteriormente, é um caminho para a solução de um problema. Os caminhos que levam à solução são muitos, alguns mais curtos, outros mais longos, o importante, na verdade, é alcançar o objetivo. Todo algoritmo deve ser feito de maneira lógica e racional, visando principalmente, a sua eficiência e clareza. O importante é saber interpretar o problema antes de começar a construir o algoritmo, veja a seguir um esboço das dos principais passos para a construção de um algoritmo: Passos para a construção de um algoritmo 1. Identificar o objetivo do problema mediante leitura atenta de seu enunciado. É justamente o enunciado de um exercício que fornece o encaminhamento necessário à resolução do problema, que se torna, portanto, dependente de sua completa compreensão; 2. Retirar do enunciado todos os dados necessários para a resolução do problema, ou seja, identificar as “entradas de dados” que o enunciado fornece; 3. Retirar do enunciado todos os dados que serão gerados como resultado da solução do problema, ou seja, identificar as “saídas de dados” que o enunciado fornece (ou seja, saída desejada); 4. Determinar o que dever ser feito para transformar as entradas determinadas nas saídas desejadas. Nesta fase é que se determina a construção do algoritmo propriamente dito, pois, a partir de alguns requisitos especificados, deve-se determinar qual a sequência de ações é capaz de transformar um conjunto definido de dados nas informações de resultado; 7 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 5. Construir o algoritmo.É nessa fase que se esquematiza todo o processo de resolução do problema, ou seja, constrói-se o “passo a passo”, a sequência das ações a serem executadas. 6. Testar a solução. O teste da solução é realizado através da execução de todas as ações mediante análise dos resultados obtidos, é a partir daí que são detectados possíveis erros. Caso haja, basta corrigi-lo e realizar o teste novamente. Durante a formalização do algoritmo é necessário que algumas etapas fundamentais sejam identificadas, tais como, entrada, processamento e saída. A seguir, é apresentado um esquema simples para fazer essa identificação: Nota-se que as questões acima são claras e objetivas, assim, a analogia a cada etapa torna mais simples a identificação das mesmas. Veja nos exemplos a seguir, como é feita a identificação de cada etapa: Exemplo 1 Construir um algoritmo para fazer um suco de laranja. Entrada: laranja; Processamento: cortar a laranja; espremer a laranja; Saída: suco de laranja. Note que o processo para resolver o problema de para fazer o suco de laranja foi descrito sucintamente, cumprindo-se assim, as etapas descritas acima. Ao ler o enunciado pôde-se notar que o objetivo (“O que eu quero?)” era fazer um suco de laranja, para isso foi necessário utilizar laranja (“O que eu preciso?”), e, para chegar ao suco, foi preciso cortar e espremer as laranjas (“Como chegar onde eu O que eu preciso? (Entrada) Como chegar ao que eu quero? (Processamento) O que quero? (Saída) 8 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran quero?”). Porém, esse processo talvez possa ser feito de forma um pouco mais detalhada, veja a seguir, outra opção: Entrada: laranja; faca; jarra; Processamento: cortar a laranja; espremer a laranja; Saída: suco de laranja. Logo, como dito anteriormente, não existe uma única maneira de resolver um problema, porém, todas têm que estar cumprindo as necessidades que o processo de resolução requer. Exemplo 2 Construir um algoritmo para calcular a média aritmética entre quatro notas dadas. Entrada: nota 1 nota 2 nota 3 nota 4 Processamento: somar as notas dividir o resultado por 4 Saída: média O algoritmo de um problema tem várias formas de representação; dentre elas: pseudocódigo, descrição narrativa, fluxograma e diagrama de Chaplin. 1. Pseudocódigo – utiliza uma representação de forma estruturada, através da descrição de cada passagem a ser executada para realização de uma tarefa. É uma representação bastante utilizada. 2. Descrição narrativa – utiliza uma representação natural para realização das tarefas. É pouco utilizada, pois, apresenta ambiguidades e más interpretações. 3. Fluxograma – é uma forma universal de representação pois, utiliza de figuras geométricas para ilustrar os passos a serem seguidos. Bastante utilizado; é também chamado de diagrama de blocos. 9 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 4. Diagrama de Chaplin – também conhecido como diagrama Nassi-Shneiderman (N-S), apresenta solução por meio de um diagrama de quadros com uma visão hierárquica e estruturada. Esse tipo de diagrama é muito pouco utilizado por apresentar dificuldades em representar recursividade. Observação: No que segue, serão abordadas apenas as duas formas mais usuais de representação, o fluxograma.e o pseudocódigo. FLUXOGRAMA O fluxograma é um tipo de representação algoritmo que utiliza símbolos gráficos (figuras geométricas) para representar as ações ou instruções a serem seguidas. Assim, a representação simbólica utilizada no fluxograma (ou diagrama de blocos), está apresentada no quadro abaixo: Terminal Representa início e fim do fluxograma. Entrada Representa a entrada de dados do fluxograma. Saída Representa a saída de dados do fluxograma. Atribuição Representa execução de operações ou ações como cálculos e atribuição de valores. Decisão Representa uma ação lógica que resultará na escolha de uma das seqüências de instruções. Conector Utilizado para interligar partes do fluxograma ou desviar o fluxo para outro trecho. Direção Seta de orientação do fluxo, pode ser de forma vertical ou horizontal. 10 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Logo, a utilização desses símbolos de forma interligada e coerente, a fim de representar a resolução de um problema específico, se dá o nome de fluxograma. Como mostra o exemplo abaixo: Os blocos que representam o início e o fim são representados exatamente como mostra a figura, agora, nos demais, a informação dentro de cada figura deve ser substituídas; por exemplo, onde está escrito <nome da variável a ser lida> (inclusive os sinais < >), será substituído exatamente pelo nome que foi dado à variável, por exemplo, A, X, SOMA, etc... A apresentação mais detalhada dessas formas de representação, será realizada nos próximos capítulos, agora será abordada apenas as características teóricas principais sobre os dados que são utilizados em um algoritmo. PSEUDOCÓDIGO A palavra pseudocódigo significa “código falso”; é dado esse nome devido sua proximidade com a representação em linguagem de programação; sua descrição formal é representada da seguinte forma: Todo cuidado é pouco para que o pseudocódigo represente um caminho correto para resolução do problema em questão. Veja algumas observações detalhando a construção de um pseudocódigo: Todo algoritmo representado por pseudocódigo deverá ser, primeiramente, identificado, ou seja, o primeiro passo é dar um nome algoritmo. Assim, onde está escrito <nome_do_algoritmo> (inclusive os sinais < >), terá que ser substituído por um nome específico, relativo ao problema a ser resolvido. Início <nome da variável a ser lida> <execução das ações> <nome da variável a ser impressa> Fim Algoritmo <nome_do_algoritmo> <declaração_de_variáveis> Início <corpo_do_algoritmo> Fim. 11 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Todas as variáveis que serão utilizadas na resolução do problema devem ser previamente declaradas. Do mesmo modo, onde estiver está escrito <declaração_de_variáveis> (inclusive os sinais < >), terá que ser substituído por definições específicas sobre as variáveis, e são representados da seguinte forma: Sendo var uma palavra reservada para a sessão de declaração de variáveis; <nome das variáveis> será substituído pelo nome que será dada a cada variável, e, <tipo das variáveis> (inclusive os sinais < >), será substituídos por um dos tipos de variáveis que serão estudados logo a seguir. Todos os passos para resolução do problema devem ser bem descritos, logo, onde está escrito <corpo_do_algoritmo> (inclusive os sinais < >), terá que ser substituído por algumas representações, tais como: entrada de valores para as variáveis; operações de atribuição, lógicas e aritméticas;escolhas e laços de repetição; exibição de resultados, entre outros. Toda essa teoria será apresentada posteriormente. Cabe ressaltar ainda, que durante a formalização de um pseudocódigo, é importante atentar a algumas observações relevantes, tais como: Não utilizar espaço entre as letras; Não iniciar nomes com algarismos (números), ou seja, não utilizar nomes do tipo 1A; Não utilizar caracteres especiais, tais como, acentos (´, ~, ^), símbolos (@, #, $, %, &), etc.; Não utilizar como nomes de variáveis palavras reservadas, ou seja, as palavras que por definição já fazem parte das estruturas do algoritmo, tais como, se, enquanto, etc.; Não utilizar nomes iguais para representar variáveis diferentes; Ser sucinto e utilizar nomes coerentes. TIPOS DE DADOS Os dados são os valores a serem utilizados na resolução do problema. No decorrer da organização dos algoritmos, é necessário armazenar informações a serem utilizadas posteriormente, para tanto, utiliza- se de variáveis e constantes. Uma constante é um tipo de dado que não sofre nenhuma alteração no decorrer do tempo, ou seja, o valor é constante do início ao fim da execução do algoritmo, por exemplo: 5, Verdadeiro, 0.3, SIM var <nome das variáveis> : <tipo das variáveis> 12 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Em outras palavras, são todos os números, letras ou palavras fixas, não podem ser modificados em nenhum momento. Por exemplo, na equação y=2x+1, o numero 1 que está sendo adicionado, será sempre o mesmo para qualquer valor de x. Já, uma variável, como o próprio nome diz, é um tipo de dado que pode ser alterado, em algum momento, durante a execução do algoritmo, ou seja, o valor sofre alteração em um determinado momento, tais como: o clima, o peso de uma pessoa, as notas da escola Agora, para o mesmo exemplo acima, o da equação y=2x+1, o x e o y são as variáveis, pois, podem assumir qualquer valor em um determinado momento. Assim, uma variável (ou constante) tem que ser definida segundo o conjunto de valores que ela receberá. Deste modo, os tipos de dados referem-se, exatamente, a esses valores, podendo ser classificados como variáveis (ou constantes) do tipo inteiro, real, caracter (ou literal) e lógico. Variáveis do Tipo Inteiro São variáveis que podem armazenar qualquer valor pertencente ao conjunto dos números inteiros (nulo, positivos e negativos), por exemplo: 53, 0, -21, 1043, -256 Variáveis do Tipo Real São variáveis que podem armazenar qualquer valor pertencente ao conjunto dos números reais (nulos, negativos e positivos), como segue: -10.5, 0., 0.0, 2.0, 15.3 Variáveis do Tipo Caracter (ou Literal) São variáveis que podem armazenar qualquer tipo de informação composta por um conjunto de caracteres alfanuméricos, sendo: numéricos (0...9), alfabéticos (A...Z e a...z) e especiais (#, ?, !, @), como os exemplos abaixo: “Use caneta.”, “João”, “1.6”, “BR3” 13 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Variáveis do Tipo Lógico (ou Booleano) São variáveis que podem armazenar apenas os valores lógicos, verdadeiro (V) ou falso (F), podendo ser representadas como: sim – não, 0 – 1 Toda variável, ou constante, tem que ter um nome, ou seja, tem que ser identificada. Assim, um identificador é uma sequência de caracteres alfabéticos e/ou numéricos que obedecem às seguintes regras: 1. O primeiro caractere deve ser uma letra. 2. Não utilizar espaços entre as letras. 3. Não utilizar caracteres especiais. 4. Os nomes das variáveis não podem ser os mesmos das palavras reservadas. 5. Não utilizar nomes muito longos. 6. Os nomes escolhidos devem ser explicativos do seu conteúdo. OPERADORES Os operadores são utilizados para representar expressões de cálculo, comparação, condição e atribuição. Esses operadores são divididos em operadores de atribuição, aritméticos, relacionais e lógicos. Operadores de Atribuição O operador de atribuição é utilizado para expressar o armazenamento de um valor em uma variável, ou seja, indica o que a variável vai receber em seu conteúdo num determinado momento. Identificador ← valor Assim, o operador ← indica qual valor que o identificador está recebendo naquele exato momento, veja os exemplos a seguir: nome ← “Fulano de tal” Resp ← x + 1 Valor ← 131.5 Resposta ← Verdadeiro N ← 0 14 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Operadores Lógicos Os operadores lógicos são utilizados para concatenar ou associar expressões que estabelecem uma relação de comparação entre valores. São utilizados três operadores básicos para a formação de novas proposições lógicas compostas a partir de outras proposições lógicas mais simples, que são: Operadores não ( negação) e (conjunção) ou (disjunção) O resultado dessas expressões é sempre um valor lógico (verdadeiro ou falso), e a ordem de prioridade é a mesma apresentada acima, primeiro negação, depois conjunção e, por último, disjunção. Operadores Aritméticos Os operadores aritméticos são dados por um conjunto de símbolos que representam as operações básicas da matemática, veja a tabela a seguir: Operadores Exemplos + adição 2 + 3, a + b, x + 1 – subtração 5 – 1, c – d, y – 3 * multiplicação 3 * 4, m * n, t * 2 / divisão 10 / 2, x1 / x2 ** ou ^ exponenciação x ** 2, 3 ^ 3 SQRT raiz quadrada SQRT (4) MOD resto da divisão inteira 9 mod 4 (=1) DIV quociente da divisão inteira 9 div 4 (=2) Os operadores aritméticos vistos na tabela acima, quando utilizados tem que obedecer a uma ordem de prioridade, que é a seguinte: 1. parênteses mais internos; 2. potenciação (**), raiz quadrada (SQRT); 3. multiplicação (*), divisão (/), resto da divisão inteira (mod), quociente da divisão inteira (div); 4. adição (+), subtração (–). 15 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Por exemplo: 2–3*(5+2)–SQRT(4) = 2–3*7-SQRT(4) = 2–3*7–2 = 2–21–2 = –21 Operadores Relacionais Os operadores relacionais são utilizados para estabelecer uma relação de comparação entre valores ou expressões. Tais valores são representados por constantes, variáveis, ou expressões aritméticas, utilizando, para tanto, os símbolos mostrados logo abaixo: Operadores Exemplos = igual a 3 = 3, a = b > maior que 5 > 2, x > y < menor que 1 < 10, c < d >= maior ou igual a 15 >= 10, x >= y <= menor ou igual a 2 <= 6, k <= t <> diferente de 7 <> 3, b <> c Agora, considerando situações com operações mistas, ou seja, com a utilização de vários tipos de operações em uma mesma expressão, as prioridades para execução devem ser as mesmas que as adotadas na matemática: 1. Efetuar operações em parênteses mais internos ( ( ) ) 2. Efetuar exponenciação e funções (** ou ^) 3. Efetuar multiplicação e divisão (*, /) 4. Efetuar adição e subtração (+, -) 5. Efetuar atribuição (←) 6. Efetuar operações relacionais ( =, >, <, >=, <=, <>) 7. Efetuar operações lógicas (não, e, ou) As expressões que utilizam os operadores aritméticos, relacionais elógicos são denominadas expressões aritméticas relacionais e lógicas, respectivamente. A seguir, são propostos alguns exercícios relacionados ao conteúdo visto até aqui. São problemas bastante simples. Sua resolução tem a finalidade de reforçar o conteúdo aprendido, visto que, o aprendizado e o desenvolvimento da lógica algorítmica, requerem bastante prática. Bom trabalho. 16 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran EESSTTRRUUTTUURRAASS DDEE CCOONNTTRROOLLEE Durante a criação de um algoritmo é necessário que se saiba o que se tem, e onde se quer chegar, para tanto, utiliza-se uma sequência lógica de ações, que devem ser bem estruturadas para que ocorra uma execução correta. Em outras palavras, quando se constrói um algoritmo é necessário ter em mente a intenção de quem irá utilizá-lo. Assim, torna-se importante conhecer a sequência dos fatos, ou seja, saber o que é fornecido e em que isso resulta. Dessa forma, segue-se a seguinte lógica: Logo, os dados que entram em processamento sofrem transformações resultantes do processo e uma saída será produzida representando a solução de um problema. A seguir, serão apresentados os principais conceitos relacionados à entrada e saída de dados. ENTRADA DE DADOS A entrada de dados nada mais é que a passagem dos dados do problema para o algoritmo, que a utiliza para realizar o processamento. Em outras palavras, a entrada de dados é a etapa em que são passadas, ao algoritmo, todas as informações necessárias para que o mesmo execute ações que levem à solução do problema. A leitura de dados é indicada do seguinte modo, sendo que, em pseudocódigo se faz necessário o uso da palavra leia e no fluxograma, o uso da respectiva figura geométrica: Pseudocódigo Fluxograma 2 Entrada Processamento Saída leia ( <dados> ) dados 17 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Resumindo, entrada de dados nada mais é que a apresentação das informações que se têm sobre o problema, sendo estas utilizadas para obtenção da resposta desejada. SAÍDA DE DADOS A saída de dados é a forma de mostrar o resultado das operações realizadas durante o processamento, ou seja, é a resposta do problema. Assim como para a entrada, a saída também tem sua forma de representação. Em pseudocódigo, é necessário o uso da palavra escreva, e em fluxograma o uso da respectiva figura geométrica, como segue: Pseudocódigo Fluxograma Observação: Tanto para entrada quanto saída, no fluxograma, não são utilizadas as palavras reservadas, leia e escreva, o próprio formato da figura indica tais fatos. Veja um exemplo de um algoritmo que lê o nome de uma pessoa e o escreve. Pseudocódigo Fluxograma Assim, sempre que uma informação for fornecida, o algoritmo terá que obter essa informação para que, através dela, realize o processamento de algumas ações, chegando a um determinado objetivo. E, feito isso, é necessário mostrar esse resultado obtido, ou seja, escrever esse resultado. Na literatura, existem algumas variações nos termos utilizados para entrada e saída de dados, tais como, ler, imprimir, entre outros. Porém, aqui serão adotados, exclusivamente, os termos leia, para entrada de dados, e escreva, para saída de dados. escreva ( <dados> ) dados algoritmo entrada_saida var nome: caracter inicio leia ( nome ) escreva ( nome ) fim. Início nome nome Fim 18 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran EXERCÍCIOS PROPOSTOS Observação: Os problemas abaixo devem ter a solução representada em forma de pseudocódigo e fluxograma. 1. Leia dois números reais e os imprima em ordem inversa, por exemplo, lidos os números, 23.3 e 34.0, serão escritos 34.0 e 23.3. 2. Calcule e escreva o resultado da multiplicação de dois números quaisquer. 3. Que escreva o nome dos integrantes de um time de futebol. 4. Calcule e escreva o resultado da potencia quadrada de um número inteiro qualquer. 5. Leia um número inteiro e escreva seu sucessor e seu antecessor. 6. Calcule a média aritmética de dois números quaisquer. 7. Dados dois números inteiros, um sendo o divisor e outro o dividendo, calcule e escreva os valores do quociente e do resto. 8. Dado o saldo de uma aplicação, calcule e escreva o novo saldo considerando o reajuste de 1%. 9. Dado o valor do lado de um quadrado, calcular e escrever o perímetro, a área e a diagonal. 10. Dado um único número inteiro, no formato DU (dezena - unidade), o escreva de modo invertido, UD (unidade – dezena). Por exemplo, dado o número inteiro 25, será escrito o número 52. 11. Dado o valor do raio de um círculo, calcular e escrever seu perímetro e a área. 12. Entre com o valor de um produto e escreva o novo valor com desconto de 9%. 13. Calcular e escrever o valor do volume (V) de uma lata de óleo sendo: 23,14 . .V R A , em que R representa o raio e A a área da lata. 14. Leia a temperatura em graus Centígrados (C) e escreva esta temperatura convertida em graus Fahrenheit (F), sendo: 9 160 5 C F . 15. Leia o valor gasto pelo consumidor de um restaurante e escreva o valor total com a gorjeta de 10%. 19 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran PROCESSAMENTO O processamento das ações lógicas é regido pelo chamado fluxo de execução do algoritmo. Assim, através das estruturas básicas de controle de fluxo de execução, tais como, estrutura sequencial, estruturas de seleção, estruturas de repetição, e da combinação delas, podem-se criar algoritmos para resolver problemas. Veja a seguir cada uma dessas estruturas. ESTRUTURA SEQUENCIAL Esse tipo de estrutura é caracterizado por utilizar-se de ações imperativas, sem nenhum tipo de decisão. O conjunto de ações é executado na ordem em que as mesmas são escritas, de cima para baixo, linha por linha. Veja a seguir um exemplo de algoritmo utilizando a estrutura sequencial. Pseudocódigo Fluxograma ESTRUTURA DE SELEÇÃO OU DECISÃO Essa estrutura é caracterizada por representar um desvio no fluxo normal do algoritmo, conforme o resultado da expressão lógica; ou seja, essas estruturas são utilizadas quando existe a necessidade de verificar as condições para realização de uma instrução ou uma sequência de instruções. As estruturas de seleção podem ser classificadas em seleção simples ou seleção composta, como segue: algoritmo soma var X, Y, S: inteiro inicio leia ( X, Y ) S ← X + Y escreva ( S ) fim. Início X, Y S ← X + Y S Fim 20 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Seleção Simples A seleção simples é utilizada para verificar se uma condição dada é atendida. Se a condição for satisfeita, um conjunto de ações será executado; caso contrário, ou seja, se não for satisfeita, o fluxo de execuçãodo algoritmo seguirá até o fim do bloco de decisão. Essa estrutura é representada por um comando que avalia uma expressão lógica resultando num valor verdadeiro ou falso. A seguir, será apresentada a sintaxe da estrutura em pseudocódigo e fluxograma, vale lembrar que, por comodidade, apenas a estrutura é apresentada em forma de pseudocódigo e fluxograma, e não um algoritmo completo. Que segue as regras descritas anteriormente. Modelo Geral: Pseudocódigo Fluxograma Exemplo usando variáveis: Pseudocódigo Fluxograma Seleção Composta A seleção composta é utilizada quando ocorre uma situação em que duas alternativas dependem da mesma condição, ou seja, se a condição for verdadeira, um conjunto de ações é executado e, se a condição for falsa, outro conjunto de ações é executado. Considere a sintaxe abaixo, lembrando que a representação diz respeito apenas ao trecho da estrutura e não ao algoritmo completo. se <condição> então <conjunto de ações> fim se conjunto de ações condição S N se (A > B) então escreva ( “A é Maior” ) fim se S N A > B “A é Maior” 21 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Modelo Geral: Pseudocódigo Fluxograma Exemplo usando variáveis: Pseudocódigo Fluxograma Pode ocorrer também a utilização de vários testes de seleção, tanto simples, quanto composta, ao mesmo tempo, num mesmo algoritmo. Em outras palavras, é possível que se tenha uma sequência de testes de seleção, os quais serão executados ou não, de acordo com os resultados das condições, assim, quando as seleções estão dispostas dessa forma, diz-se que essas seleções são encadeadas. As seleções podem ser encadeadas de diversas formas, quando estas seguem um padrão lógico diz- se que a seleção é encadeada homogênea, quando não seguem esse padrão lógico, a seleção é encadeada heterogênea. A seguir, será apresentada a sintaxe da estrutura de seleção encadeada. Neste caso, a segunda condição só será analisada caso o resultado da primeira condição for verdadeiro, pois, uma condição é interna à outra. Assim, a obrigatoriedade da análise das duas condições não ocorre. se <condição> então <conjunto de ações 1> senão <conjunto de ações 2> fim se conjunto de ações 1 condição S N conjunto de ações 2 se (A > B) então escreva ( “A é Maior” ) senão escreva ( “B é Maior” ) fim se A > B S N “B é Maior” “A é Maior” 22 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Pseudocódigo Fluxograma Exemplo: Por outro lado, existem casos em que a variável assume apenas um valor para cada estrutura, ou seja, uma estrutura de seleção é localizada após a outra, ocorrendo à obrigatoriedade da análise das duas condições, pois, uma não depende da outra. Veja então como fica: se <condição 1> então se <condição 2> então <conjunto de ações 1> senão <conjunto de ações 2> fim se senão <conjunto de ações 3> fim se conjunto de ações 3 conjunto de ações 1 condição 1 N S condição 2 N S conjunto de ações 2 se (A > B) então se (B > C) então escreva ( “C é Menor” ) senão escreva ( “B é Menor” ) fim se senão escreva ( “A é Menor” ) fim se A > B N S B > C N S “A é Menor” “C é Menor” “B é Menor” 23 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Pseudocódigo Fluxograma Exemplo: Observação: Quando isso acontece, a seleção é dita de múltipla escolha. ESTRUTURA DE REPETIÇÃO São estruturas que permitem a repetição controlada por comandos, utilizadas quando se tem a necessidade de repetir certo trecho de ações por um determinado número de vezes. Esse número de repetições pode, ou não, ser conhecido, porém, deverá ser finito. A esses trechos que serão repetidos, dá-se o nome de laços repetitivos, sendo estes, divididos em laços contados, quando se conhece previamente o número de vezes em que as ações serão repetidas; e laços condicionais, quando se conhece a condição para que a repetição aconteça. Em alguns casos, faz-se necessário a utilização uma variável que auxilie na contagem do número de vezes a ser repetido, essa variável é denominada contador. O conteúdo armazenado no contador é alterado pelo seu próprio valor adicionado, ou subtraído, de uma constante. se <condição 1> então <conjunto de ações 1> fim se se <condição 2> então <conjunto de ações 2> fim se se (A = 1) então escreva ( “Um” ) fim se se (A = 2) então escreva ( “Dois” ) fim se conjunto de ações 1 condição 1 S N conjunto de ações 2 condição 2 S N S N A = 1 “Um” S N A = 2 “Dois” 24 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran nome_contador ← nome_contador + (ou -) constante Exemplos: cont ← cont + 1 c ← c + 2 a ← a – 1 contador ← contador – 2 Observação: O contador é uma variável como qualquer outra, por isso tem, obrigatoriamente, que ser declarada. Não se pode deixar de salientar que um contador deve ser iniciado com algum valor, já que, durante a contagem, ele depende do próprio valor. Outra variável de apoio utilizada é o acumulador que, diferente do contador, tem seu valor alterado pelo próprio valor adicionado, ou subtraído, de uma variável, e não de uma constante como o contador. O acumulador também tem que ser iniciado, porém, com o valor nulo (zero). nome_acumulador ← nome_acumulador + (ou -) variável Exemplos: acum ← acum + soma s ← s + a f ← f – k acumulador ← acumulador + m Assim como as estruturas de seleção, nas estruturas de repetição também são analisadas condições; tais condições determinam o critério de parada para o laço repetitivo, ou seja, determinam o momento em que a repetição deve terminar. Sendo assim, existem formas diferentes para se organizar essas condições, levando à definição de três estruturas diferentes para a repetição, sendo estas: estrutura de repetição com teste inicial; estrutura de repetição com teste final e estrutura de repetição determinística. Repetição com Teste Inicial A repetição com teste inicial é utilizada quando ocorre a repetição de um mesmo trecho do algoritmo por diversas vezes, porém, com a necessidade da verificação da condição antes de entrar no laço repetitivo, isto é, a condição é testada inicialmente. 25 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Veja, a seguir, como ocorre a representação dessa estrutura em pseudocódigo e em fluxograma: PseudocódigoFluxograma Observação: Note que, durante o processamento, antes de entrar no teste da condição, é necessário inicializar os contadores e/ou acumuladores, ou seja, é necessário dar um valor ao contador e/ou acumulador, que será utilizado dentro da estrutura de repetição. Veja o exemplo a seguir. Pseudocódigo Fluxograma <iniciar variável de controle> enquanto <condição> faca <conjunto de ações> <atualizar variável de controle> fim enquanto iniciar variável de controle condição conjunto de ações atualizar variável de controle N S cont ← 1 acum ← 0 enquanto (cont < 10) faca leia ( A ) acum ← acum + A cont ← cont + 1 fim enquanto cont ← 1 acum ← 0 cont < 10 acum←acum+A cont←cont+1 N S A 26 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Conforme visto no trecho acima, o valor é testado no início, se a condição for verdadeira, o bloco de ações é executado até que a condição se torne falsa, conforme atualizações. Se ela for falsa desde o início, então as ações não serão executadas nenhuma vez. Repetição com Teste Final A repetição com teste final é muito parecida com a anterior, também é utilizada quando ocorre a necessidade da repetição de um bloco de ações, porém, a condição é analisada somente no final do bloco de ações, permitindo assim, a repetição de uma ou mais ações até que a condição seja satisfeita, ou seja, permite que as ações sejam executadas antes de testar o valor da condição. Assim como para na repetição com teste inicial, para na repetição com teste final também se faz necessário a inicialização dos contadores e/ou acumuladores a serem utilizados. Assim fica: Pseudocódigo Fluxograma Dessa forma, a estrutura repita tem o funcionamento contrário à estrutura enquanto, sempre processando as ações, pelo menos, uma vez. Se a condição for falsa as ações são repetidas até que a condição se torne verdadeira. Assim, é necessário ter muita cautela no seu uso, ou ainda, quando se reescreve um algoritmo mudando sua estrutura de repetição com teste final para repetição com teste inicial. Veja um exemplo da estrutura de repetição com teste final: <iniciar variável de controle> repita <conjunto de ações> <atualizar variável de controle> ate que <condição> iniciar variável de controle condição conjunto de ações atualizando variável de controle N S 27 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Pseudocódigo Fluxograma Repetição Determinística Até agora, foram vistas duas formas de organizar um laço repetitivo fazendo uso de um contador, porém, existe uma forma de facilitar a utilização desses contadores, isso se dá utilizando a estrutura de repetição determinística ou repetição com variável de controle, como é também chamada. Essa estrutura é diferente já que sempre repete a execução do conjunto de ações um número de vezes predeterminado, pois ela não prevê uma condição e possui limites fixos, um valor inicial e um valor final. Assim como mostrado abaixo: Pseudocódigo Fluxograma cont ← 1 acum ← 0 repita leia ( A ) acum ← acum + A cont ← cont + 1 ate que (cont = 10) N S cont ← 1 acum ← 0 cont = 10 acum←acum+A cont←cont+1 A Para <variável> de <valor_inicial> ate <valor_final> passo <incremento> faca <conjunto de ações> Fim Para conjunto de ações variável = valor_inicial, valor_final, incremento 28 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Exemplo: Pseudocódigo Fluxograma Observações: O incremento significa de quanto em quanto a variável caminha dentro do intervalo preestabelecido (valor_inicial até valor_final). No exemplo anterior, a variável de controle i vai de 1 até 5 de 1 em 1, ou seja, inicialmente i vale 1, depois 2, assim por diante, até i ser igual a 5. Por não haver necessidade de um contador, algumas etapas são excluídas, tais como, inicialização e atualização do contador, tornando essa estrutura mais compacta. EXERCÍCIOS PROPOSTOS 1. Faça um algoritmo que leia um número leia um número inteiro qualquer, se ele for positivo, escreva seu inverso. Por exemplo, se o número lido for 1234, deverá ser escrito o número -1234. 2. Dados três valores reais (três notas de um aluno em uma determinada disciplina), faça um algoritmo que calcule a média aritmética entre esses três valores, caso a média obtida seja inferior a 7.0, escreva “Fazer a atividade complementar!”, e recalcule a média incluindo essa nova atividade, que será dada por: média atual = (media anterior + nota complementar) / 2. O algoritmo tem que escrever a média final da disciplina, tendo ou não sido realizada a atividade complementar. 3. Num jogo, um dado pode ser lançado ao acaso no mínimo 2 e no máximo 3 vezes, a terceira jogada só ocorrerá se nas duas jogadas anteriores for obtido o mesmo valor de face. Por exemplo, se na primeira jogada foi obtido o número 3 e na segunda o número 5, não ocorrerá a terceira jogada, pois, os valores de face são distintos, agora, se na primeira jogada for obtido o valor 4 e na segunda for obtido também o valor 4, o dado deverá ser lançado novamente. Sendo assim, faça um algoritmo que represente as jogadas do dado, e ainda, mostre que valor de face foi obtido em cada jogada, independente de quantas vezes foi lançado. Para i de 1 até 2 passo 1 faça Leia ( Num ) Soma ← Soma + Num fim para Soma ← Soma + Num i = 1, 2, 1 Num 29 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 4. Faça um algoritmo que leia um número inteiro e informe se esse número lido é, ou não é, divisível por 3. 5. Faça um algoritmo que leia um número inteiro e informe se esse número é divisível por 2, por 5, ou se não é divisível por nenhum desses. 6. Faça um algoritmo que realize o cálculo da idade de uma pessoa sendo dados, o ano de nascimento e o ano atual; escreva a idade dessa pessoa. Não se esqueça de verificar se o ano de nascimento é um ano válido, por exemplo, se o ano atual for 2012, a pessoa não poderá escolher como ano de nascimento 2015, 2021, 2030... 7. A prefeitura de Andradina abriu linha de crédito para seus funcionários. O valor máximo da prestação não poderá ultrapassar 30% do salário bruto. Faça um algoritmo que permita entrar com o salário bruto e o valor da prestação e informe se o empréstimo pode ou não ser concedido. 8. Fazer um algoritmo que, dado um valor numérico, escreva uma das seguintes mensagens: “MAIOR QUE 10”, “IGUAL A 10”, “MENOR QUE 10”. 9. Dado um número inteiro com 3 casas decimais, faça um algoritmo que analise o algarismo da casa das centenas, caso seja par, escreva a palavra “PAR”, caso contrário, “IMPAR”. 10. Faça um algoritmo que indiquese o número digitado está compreendido entre 20 e 90 ou não. 11. Dados dois números, faça um algoritmo que escreva-os em ordem crescente. 12. Dados dois números, faça um algoritmo que escreva-os em ordem decrescente. 13. Dados três números, faça um algoritmo que escreva-os em ordem crescente. 14. Dados três números, faça um algoritmo que escreva-os em ordem decrescente. 15. Dados três números inteiros, fazer um algoritmo que armazene estes números em três variáveis com os seguintes nomes: MENOR, INTERMEDIARIO, MAIOR, suponha que os três números sejam diferentes. 16. Fazer um algoritmo que leia três números e escreva se estes podem ser, ou não, os lados de um triângulo. 17. Fazer um algoritmo que leia três valores inteiros (variáveis A, B e C) e efetue o cálculo da equação do segundo grau, apresentando: duas raízes, se para os valores informados for possível fazer o cálculo (delta positivo ou zero); a mensagem “Não há raízes reais”, se não for possível fazer o cálculo (delta negativo); e a mensagem “Não é equação do segundo grau”, se o valor for igual a zero. 30 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 18. Fazer um algoritmo que leia o percurso em quilômetros, o tipo do carro e informe o consumo estimado de combustível, sabendo-se que o carro tipo A faz 12 Km com um litro de gasolina, o tipo B faz 9 Km e o tipo C faz 8 Km por litro. 19. Fazer um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela: DESTINO IDA IDA E VOLTA Região Norte R$ 500,00 R$ 900,00 Região Nordeste R$ 350,00 R$ 650,00 Região Centro-Oeste R$ 350,00 R$ 600,00 Região Sul R$ 350,00 R$ 550,00 20. Fazer um algoritmo que ajude um comerciante no cálculo do valor da venda, tendo em vista a tabela a seguir: VALOR DA COMPRA VALOR DA VENDA valor < R$ 10,00 lucro de 70% R$ 10,00 ≤ valor < R$ 30,00 lucro de 50% R$ 30,00 ≤ valor < R$ 50,00 lucro de 40% valor ≥ R$ 50,00 lucro de 30% São dados de entrada o nome do produto e o valor de compra, e dados de saída o nome do produto e o valor de venda. 21. A polícia rodoviária resolveu fazer cumprir a lei e cobrar dos motoristas pela renovação do emplacamento do carro. Sabendo-se que o mês do emplacamento é determinado pelo último número da placa do mesmo, criar um algoritmo que, a partir da leitura da placa do carro, informe o mês em que o emplacamento deverá ser renovado. 22. Fazer um algoritmo que ao ter como entrada o valor de x e escreva o valor de f (x) dado por: 8 ( ) 2 f x x 23. Faça um algoritmo que leia um número x e escreva o valor de y, sendo: 2 3 1 1 2 1 2 2 3 3 se x se x y x se x x se x 31 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 24. Leia uma quantidade qualquer de números reais e termine a leitura quando for apresentado um número negativo, ao final escreva quantos números positivos foram lidos. 25. Entre com vários números positivos e escreva a média dos números digitados. 26. Leia vários números e informe quantos números, entre 100 e 200, foram digitados. Quando o valor zero for lido, o algoritmo deverá cessar sua execução. 27. Entre com vários números e escreva o quadrado de cada número até que entre um número menor que 1 ou maior que 20. 28. Leia uma quantidade qualquer de números inteiros e escreva a quantidade de números primos dentre os que foram digitados. O critério de parada da leitura é quando for lido um número menor ou igual a zero. 29. Fazer um algoritmo que, dado um número N, calcule e escreva: S = 1 * 2 * ... * N. O algoritmo deverá considerar N um número inteiro positivo maior que zero. Testar o algoritmo para N = 3. 30. Dada uma sequência de números inteiros positivos e/ou negativos, contar quantos são números negativos, e quantos são números positivos. Após o último número da sequência aparece o zero. 31. Dada uma sequência de números inteiros positivos não nulos, determinar qual o maior número da sequência. Após o último número da sequência aparece o zero. 32. Dada uma sequência de números inteiros positivos não nulos, determinar qual o menor número da sequência. Após o último número da sequência aparece o zero. 33. Dada uma sequência arbitrária de números inteiros positivos não nulos, terminada com um número zero, calcular a média aritmética entre o maior e o menor números desta sequência. 34. Dada uma sequência arbitrária de números inteiros positivos não nulos, terminada com um número zero, determinar a posição do maior número nesta sequência. 35. Dada uma sequência arbitrária de números inteiros positivos não nulos, terminada com um número zero, determinar a posição do menor número nesta sequência. 36. Fazer um algoritmo que lê as idades de um grupo de pessoas e informa quantas pessoas desse grupo, têm idades acima de 20 anos. O número de pessoas do grupo é arbitrário e a indicação de final das idades é dada quando lê-se uma idade nula. 32 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran EESSTTRRUUTTUURRAASS DDEE DDAADDOOSS HHOOMMOOGGÊÊNNEEAASS Quando se trabalha com uma quantidade maior de valores é preciso encontrar a melhor forma de representá-los, essa representação pode ser feita agrupando esses valores em conjuntos. Neste caso, utilizam-se estruturas de dados especiais, denominadas variáveis indexadas. As variáveis indexadas nada mais são que um conjunto de variáveis com o mesmo nome e o mesmo tipo de dados, diferenciadas apenas por índices. Assim, a utilização desses índices leva a duas definições diferentes. Quando se utiliza apenas um índice essa estrutura é chamada de vetor e, quando se utiliza mais de um índice, é chamada de matriz. O índice é um valor numérico inteiro e positivo que corresponde à posição a ser ocupada em um vetor ou matriz, elemento é o conteúdo que ocupa uma dessas posições e, dimensão corresponde à quantidade de índices necessários para localização de um elemento dentro da variável indexada. A seguir, serão apresentados os principais conceitos relacionados a vetores, a teoria de matrizes não é prevista para essa disciplina. VETOR O vetor é uma variável indexada que tem apenas uma dimensão, também denominado como matriz unidimensional. Assim, um vetor é uma coleção de variáveis de um mesmo tipo que compartilham o mesmo nome. A representação abaixo é realizada apenas para levar o leitor a ter uma noção de como é um vetor; na teoria, propriamente dita, essa representação não existe, a formalização teórica é dada no que segue. 1 2 3 4 5 6 7 índices nomes posições Para que um vetor seja utilizado é preciso, primeiramente, definir em detalhes como é constituído seu tipo, definindo assim, o tipo individual de cada elemento do vetor; e seu tamanho, que determina quantos valores o vetor poderá armazenar, ou seja, o tamanho na verdade indica a quantidade máxima de 3 33 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran valores que poderão ser armazenados no vetor, isso não significaque todas essas posições terão que ser, obrigatoriamente, preenchidas. Veja abaixo como fica a declaração de uma variável indexada (vetor) em um algoritmo: Pode-se notar que a declaração é muito parecida com aquela que foi vista anteriormente, porém, para uma variável indexada é necessário apontar o tamanho que a variável tem, sendo este, representado sempre, por um valor numérico colocado entre parênteses, após o nome da variável. Além disso, como essa variável está associada a um índice, este também tem a necessidade de ser declarado. Exemplo: Este exemplo mostra que foram declarados dois vetores, o vetor A do tipo real e tamanho 50, ou seja, o vetor A pode armazenar até 50 elementos, sendo estes, do tipo real; e o vetor V do tipo real e tamanho 100; e ainda, uma variável i, do tipo inteiro, que será utilizada como índice desses vetores. A partir de agora, será possível entender como o índice é utilizado na teoria das variáveis indexadas. As operações de atribuição, leitura e impressão dos valores para o vetor, são todas controladas pelo índice. Dessa forma, pode-se atribuir, ler e imprimir os valores de um elemento fazendo referência a seu índice. Assim, fica: Logo, a representação nas operações de atribuição, leitura e impressão, citadas acima, é realizada apenas colocando o nome da variável seguido do índice entre parênteses. Veja o exemplo a seguir: Neste exemplo, foi atribuído o número 5 à posição 1 do vetor A, foi lida o número que irá ocupar a posição 3 do vetor B e foi impresso o número que ocupa a posição 2 do vetor C. tipo_da_variavel: nome_da_variavel (tamanho) tipo_da_variavel: indice real: A(50), V(100) inteiro: i nome_da_variavel (indice) valor leia ( nome_da_variavel (índice) ) escreva ( nome_da_variavel (índice) ) A(1) 5 leia ( B(3) ) escreva ( C(2) ) 34 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Um atrativo na utilização de vetores é o fato de sua indexação permitir o acesso a qualquer elemento, em qualquer instante e em qualquer ordem. Para tanto, faz-se o uso de uma estrutura de repetição (determinística) que torna possível o acesso a todos os elementos armazenados no vetor, como mostra algoritmo a seguir. O exemplo ao lado, calcula a soma de todos os números entre 1 e 5, representados por um vetor V, ou seja, a primeira posição do vetor é preenchida com o número 1, a segunda com o número 2, assim por diante, e ao final o resultado da soma desses números é apresentado. Como os vetores permitem manipulação de seus elementos de forma independente, é possível realizar operações com seus elementos. MATRIZ Uma matriz é uma variável indexada que tem duas (ou mais) dimensões, sendo assim, necessitam de dois (ou mais) índices para indicar seus elementos. Assim com feito para vetor, a representação abaixo, é realizada apenas para levar o leitor a ter uma noção de como é uma matriz. Novamente, na teoria essa representação não existe, a formalização teórica é vista mais adiante. 1 2 3 índices 1 2 posições 3 nomes índices Para que uma matriz seja utilizada é necessário, assim como para um vetor, definir em detalhes de como é constituído seu tipo, definindo assim o tipo individual de cada elemento da matriz, e seu tamanho, algoritmo VETOR inteiro: V(5), soma, i inicio soma 0 para i de 1 ate 5 passo 1 faca V(i) i soma soma + V(i) fimpara escreva ( soma ) fim. 35 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran que determina quantos valores a matriz poderá armazenar; porém, pode-se dizer que esses elementos serão dispostos em linhas e colunas, assim, sua localização terá que ser representada utilizando dois índices, que também devem ser declarados. Veja abaixo como fica a declaração de uma matriz: Neste caso a única diferença da matriz para o vetor é que a representação do tamanho agora é feita por dois valores e não apenas por um, como era feito para vetor. Veja como fica: No exemplo acima, foram declaradas duas matrizes, sendo M uma matriz real, composta por 10 linhas e 10 colunas, ou seja, M pode armazenar até 100 elementos do tipo real, e uma matriz N real, composta por 5 linhas e 5 colunas, logo, N é uma matriz que tem a capacidade de armazenar 25 elementos do tipo inteiro. E ainda, pôde-se notar que os dois índices também foram declarados. As operações de atribuição, leitura e impressão, agora são controladas pelos dois índices, assim, pode-se atribuir um valor a um elemento e obter orientação através dos seus índices, possibilitando também a leitura e impressão. Veja com fica: Do mesmo modo como feito para um vetor, para uma matriz, a representação nas operações de atribuição, leitura e impressão, citadas acima, são realizadas apenas colocando o nome da variável seguido dos índices, colocados entre parênteses e separados por vírgula. Veja o exemplo a seguir: tipo_da_variável: nome_da_variavel (valor_inicial, valor_final) tipo_da_variável: indice1, indice2 real: M(10,10), N(5,5) inteiro: i, j nome_da_variavel (indice1, indice2) valor leia ( nome_da_variavel (indice1, indice2) ) escreva ( nome_da_variavel (indice1, indice2) ) M(2,1) 4 leia ( T(3,1) ) escreva ( N(1,2) ) 36 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran No exemplo acima, foi feita um atribuição o valor (número) 4 à posição 2,1 (linha 2 e coluna 1) da matriz M; foi lido um número que ocupará a posição 3, 1 (linha 3 e coluna 1) da matriz T e, foi impresso o valor que ocupava a posição 1, 2 (linha 1 e coluna 2) da matriz N. Analogamente ao vetor, a matriz também faz uso de repetições para que as posições sejam percorridas. Como é mostrado no algoritmo abaixo. No exemplo ao lado, são lidos (preenchidos) os elementos de uma matriz real M, de duas linhas e quatro colunas (dimensão 2x4). Após a leitura é realizada a soma, elemento a elemento; e, ao final o resultado dessa soma é apresentado. Portanto, foi possível observar que as características que se aplicam ao vetor, também se aplicam às matrizes. Observações importantes Formas análogas de declaração de vetor e matriz: A inclusão de um elemento em determinada posição implica substituição de um valor já existente nessa posição. Em outras palavras, cada posição do vetor ou matriz, tem a capacidade de armazenar apenas um único valor. Esses fatores permitem que sejam realizadas tanto ordenação quanto busca. Nas operações com matrizes é possível fixar linha e percorrer coluna, ou fixar coluna e percorrer linhas, isso depende da ordem em que à repetição com o respectivo índice é colocada. algoritmo MATRIZ real: M( 2 , 4 ), soma inteiro: i, j inicio soma 0 para i de 1 até 2 passo 1 faça para j de 1 até 4 passo 1 faça leia ( M( i , j ) ) soma soma + M( i , j ) fimpara fimpara escreva ( Soma ) fim. real: V(100), M(50,50)ou real: V(1:100), M(1:50, 1:50) 37 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran EXERCÍCIOS PROPOSTOS 1. Para cada um dos itens abaixo faça um algoritmo que: a) Armazene números em dois vetores de cinco elementos cada, calcule e escreva o vetor resultante da soma desses dois vetores. b) Armazene 15 números em um vetor V e escreva uma listagem numerada contendo o número e uma das mensagens: par ou ímpar. c) Dados um vetor A composto por números inteiros, gerar e escrever um vetor B, em que, cada elemento é o quadrado do elemento, da respectiva posição do vetor A. d) Dados dois vetores de números inteiros, calcule e escreva o vetor resultante da soma desses vetores. e) Dados dois vetores de números inteiros, calcule e escreva vetor resultante da diferença entre esses dois vetores. f) Dado um vetor composto por N valores inteiros, calcule e escreva o resultado da soma desses N valores. 2. Fazer um algoritmo que leia uma sequência arbitrária de N valores, e escreva apenas os números pares desta sequência, caso haja. 3. Dados 10 valores inteiros, faça um algoritmo que realize a escrita desses números organizados de forma crescente. 4. Fazer um algoritmo que, dado um conjunto arbitrário de 20 números reais, informe calcule a média aritmética entre os 20 valores lidos. 5. Fazer um algoritmo que, dados um vetor composto por N números quaisquer, escreva apenas os valores que estiverem nas posições pares do vetor. 6. Dado um vetor V, composto por 10 valores inteiros, escreva os vetores P e I, sendo P um vetor compostos pelos elementos pares de V, e I o vetor composto pelos elementos ímpares de V. 7. Dado um vetor A de 5 posições, escrever um vetor B composto apenas pelos elementos de A que não estão repetidos. 8. Fazer um algoritmo que leia dois conjuntos de números inteiros, um tendo 10 elementos e outro 20 elementos, escrever os elementos comuns aos dois conjuntos. 9. Faça um algoritmo que leia dois vetores A e B, contendo, cada um, 25 elementos inteiros. Intercale esses dois conjuntos (A[1]/B[1]/A[2]/B[2]/...), formando um vetor V de 50 elementos e o escreva. 10. Fazer um algoritmo que faça a leitura de vários números inteiros e escreva quantos números dentre os lidos são iguais ao último (anterior ao zero). O limite de números é 100. 11. Faça um algoritmo que leia um vetor VET1 do tipo inteiro, com 20 posições, onde pode haver valores repetidos. A partir de VET1, gere um vetor VET2 contendo somente os elementos de VET1 retirando as repetições, ou seja, quando houver valor repetido em VET1, ele aparecerá apenas uma vez em VET2. 38 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 12. Fazer um algoritmo que leia um vetor VC, de tamanho qualquer, escreva o vetor, ordene este vetor de modo crescente, e escreva o vetor VC após a ordenação. 13. Fazer um algoritmo que leia um vetor VD, de tamanho qualquer, escreva o vetor, ordene este vetor de modo decrescente, e escreva o vetor VD após a ordenação. 14. Faça um algoritmo que leia um vetor VET1, de tamanho qualquer, escreva o vetor VET1, gere o vetor PAR, apenas com os elementos pares de VET1, escreva o vetor PAR, gere o vetor CRES, com os elementos de PAR ordenados de forma crescente, escreva CRES. 15. Faça um algoritmo que leia um vetor VET2, de tamanho qualquer, escreva o vetor VET2, gere o vetor IMPAR, apenas com os elementos ímpares de VET2, escreva o vetor IMPAR, gere o vetor DEC, com os elementos de IMPAR ordenados de forma decrescente, escreva DEC. 16. Faça um algoritmo que, dada uma matriz Anxn, escreva: a) Os elementos da diagonal principal; b) Os elementos da diagonal secundária; c) Os elementos que estão acima da diagonal principal; d) Os elementos que estão abaixo da diagonal principal; e) Os elementos que estão acima da diagonal secundária; f) Os elementos que estão abaixo da diagonal secundária. g) Os elementos que ocupam as posições em que seus índices, quando somados, resultam num número par. h) Os elementos que ocupam as posições em que seus índices, quando somados, resultam num número ímpar. 17. Dada uma matriz M, de ordem qualquer, composta por elementos do tipo inteiro, faça um algoritmo que, escreva a matriz lida, escolha duas linhas quaisquer (LA e LB) da matriz M e realize a troca entre elas (trocar LA com LB), e escreva e mesma matriz M, após a realização das trocas das linhas LA e LB. 18. Dada uma matriz R, de ordem qualquer, composta por elementos do tipo inteiro, faça um algoritmo que, escreva a matriz lida, escolha duas colunas quaisquer (CA e CB) da matriz R e realize a troca entre elas (trocar CA com CB), e escreva e mesma matriz R; após a realização das trocas das colunas CA e CB. 19. Dadas duas matrizes A e B, quaisquer; calcule e imprima o resultado da multiplicação dessas duas matrizes (atentar às regras da multiplicação usual de matrizes). 20. Dizemos que uma matriz quadrada inteira é um “quadrado mágico” se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. A matriz abaixo é um exemplo de quadrado mágico: 39 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran 8 0 7 4 5 6 3 10 2 Sendo assim, faça um algoritmo que, dada uma matriz quadrada Anxn, verifica se A é um quadrado mágico. 21. Faça um algoritmo que, leia uma matriz C, de ordem qualquer, e verifique se ela é ou não uma matriz identidade. A matriz abaixo é um exemplo de matriz identidade de ordem 3: 1 0 0 0 1 0 0 0 1 22. Pode-se gerar uma matriz triangular inferior de ordem N, a partir de um dado valor inteiro X, com o seguinte esquema: O primeiro elemento de cada linha e os elementos da diagonal principal é igual a X; Cada elemento abaixo da diagonal principal (excluindo o primeiro da linha e o da própria diagonal) é calculado somando dois elementos da linha anterior: o imediatamente acima e o que está à esquerda deste; Todos os elementos acima da diagonal são nulos. Veja o exemplo para N = 6 e X = 2: 2 0 0 0 0 0 2 2 0 0 0 0 2 4 2 0 0 0 2 6 6 2 0 0 2 8 12 8 2 0 2 10 20 20 10 2 Deste modo, faça um único algoritmo que, dados os valores de N e X (N indica a ordem da matriz triangular a ser gerada e X o valor a ser utilizado para gerar a matriz): a) Calcula os elementos da matriz a matriz A, que é a matriz triangular de ordem N, gerada da forma descrita acima. b) Escreva a matriz A gerada, da seguinte forma (ou seja, sem os zeros): Elementos não nulos da linha 1: 2 Elementos não nulos da linha 2: 2 2 Elementos não nulos da linha 3: 2 4 2 Elementos não nulos da linha 4: 2 6 6 2 Elementos não nulos da linha 5: 2 8 12 8 2 Elementos não nulos da linha 6: 2 10 20 20 10 2 10 = 2 + 8 40 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran SSUUBBAALLGGOORRIITTMMOOSS Problemas complexos exigem algoritmos com uma estruturação um poucomais elaborada para representar sua resolução. Sempre é possível dividir um grande problema em vários problemas menores. Assim, para representar a forma de solução de cada subproblema foram criados os subalgoritmos; a união desses subalgoritmos resulta na solução do problema complexo inicial. É fato que a decomposição de um problema é fator determinante para a redução da complexidade. Sabe-se que complexidade é sinônimo de variedade, ou seja, quantidade de situações diferentes que um problema pode apresentar. Assim, quando se decompõe um problema, divide-se também a complexidade, simplificando, consequentemente, sua resolução. Outra vantagem da decomposição é que permite focalizar a atenção em um problema pequeno de cada vez que levará a uma melhor compreensão do todo. Entretanto, é necessário adotar um critério coerente para orientar o processo de decomposição da melhor maneira. Assim, é preciso: 1. Dividir o problema em suas partes principais; 2. Analisar a divisão obtida para garantir coerência; 3. Caso alguma parte permaneça complexa, decompô-la novamente; 4. Analisar o resultado para garantir o entendimento. Logo, nota-se que é possível subdividir o problema quantas vezes for necessário, esse processo de decomposição contínua é conhecido como Refinamento Sucessivo. Esse nome se dá porque inicia com um problema complexo e abrangente que é sucessivamente dividido até resultar em problemas mais simples e específicos. FUNCIONAMENTO DE UM SUBALGORITMO Um algoritmo é dividido em um algoritmo principal e vários subalgoritmos. No algoritmo principal, é iniciada a execução do algoritmo e é onde ocorre a invocação (ou chamada) dos subalgoritmos. Estes, quando invocados desenvolvem suas funções específicas e a resposta é devolvida ao algoritmo principal. Para isso, os subalgoritmos, assim como os algoritmos, têm que obedecer a uma organização estruturada. 4 41 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Por estar associado a um algoritmo principal, um subalgoritmo tem uma localização específica dentro do mesmo, ou seja, as definições de um subalgoritmo não podem estar representadas em qualquer lugar do algoritmo principal, existe uma regra para que isso aconteça. A a definição do subalgoritmo pode estar localizada no final do algoritmo principal, antes da palavra fim., ou ainda, após a declaração de variáveis, antes da palavra inicio, como mostrado abaixo: ou Além disso, as definições dos subalgoritmos têm que obedecer a uma organização específica. Assim, um subalgoritmo deve ser composto por: Cabeçalho: onde é definido o, tipo (indicação do tipo de subalgoritmo a ser utilizado), o nome (com o qual ele será chamado pelo algoritmo principal), os parâmetros (canais por onde serão transferidos os dados pelo algoritmo chamador ao subalgoritmo e vice-versa) e as variáveis locais (àquelas definidas dentro do subalgoritmo e utilizadas apenas por ele); Corpo: onde são definidas as ações que serão executadas todas as vezes que o subalgoritmo for chamado; Fim: finalização do subalgoritmo. A descrição detalhada das partes que compõem o cabeçalho é apresentada no que segue. TIPOS DE SUBALGORITMO O tipo do subalgoritmo é definido de acordo com o número de valores que este retorna ao algoritmo que o invocou. Assim, um subalgoritmo pode ser classificado como função ou procedimento. FUNÇÃO Uma Função é um subalgoritmo e, assim como tal, contém início e fim, além de ser indicada por um nome, por meio do qual será referenciada em algum momento pelo programa principal; como tratado anteriormente. algoritmo <nome> <declaração de variáveis> início <corpo do algoritmo> <definições dos subalgoritmos> fim. algoritmo <nome> <declaração de variáveis> <definições dos subalgoritmos> início <corpo do algoritmo> fim. 42 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran Uma função tem a característica de retornar apenas um valor, ou seja, sua resposta é representada apenas por um único valor. O retorno é feito de modo associado a seu nome, sendo necessário fazer a declaração do tipo de dado a ser retornado, ou seja, é necessário declarar uma variável com o mesmo nome da função e do mesmo tipo dos valores utilizados. Em suma, numa função os valores são retornados através do próprio nome. Assim, a estrutura de uma função é dada da seguinte forma: Em que: Nome: É o nome simbólico pelo qual a função é invocada pelo algoritmo principal; Parâmetros: São as variáveis responsáveis pelo recebimento dos valores enviados pelo algoritmo principal. Para melhor entender esse processo, é apresentado o exemplo a seguir. O exemplo ao lado mostra as definições de uma função denominada FATORIAL em que, dado um valor N (vindo do algoritmo principal) calcula-se o fatorial deste número, o resultado deste cálculo é retornado ao algoritmo principal através do próprio nome da função (FATORIAL), por isso, ocorre a necessidade da declaração da função FATORIAL, que armazena a resposta a ser retornada. Observe que este é apenas o trecho da função, e não o algoritmo todo. Observações: função <nome> (<parâmetros>) <declaração de variáveis (inclusive da função)> início <comandos do subalgoritmo (ações)> fimfunção função FATORIAL (N) inteiro: N, i, aux, FATORIAL início aux ← 1 se (N=0) então FATORIAL ← 1 senão para i de 1 até N passo 1 faça aux ← aux * i fimpara FATORIAL ← aux fimse fimfunção 43 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Profa. Dra. Alessandra Bonato Altran A declaração do tipo de variáveis e da função pode ser feita de outra forma, tal como (considere o exemplo anterior): Note que o parâmetro N e a própria função são declaradas, quanto a seu tipo, no caso inteiro, na primeira linha das definições da função. Assim, não há necessidade de repetir essa declaração na segunda linha. Como dito anteriormente, uma função tem início e fim, sendo que o fim é representado, obrigatoriamente, pela palavra reservada fimfunção, lembre-se que, que a palavra reservada fim. é exclusiva para finalização do algoritmo. PROCEDIMENTO Um Procedimento, do mesmo modo que a função, é um subalgoritmo que possui início, fim e um nome pelo qual será referenciado no algoritmo principal. Ao contrário da função, o procedimento retorna um ou mais valores, e não apenas um valor, ou seja, a resposta de um procedimento pode ser representada por um ou vários valores. Diferente da função, o retorno da resposta não é feito através do nome do procedimento, e sim, por variáveis (parâmetros) que tem, exclusivamente, a tarefa de retornar os valores, por exemplo, se forem retornados dois valores, será necessário duas variáveis, uma para cada valor a ser retornado. Logo, um procedimento é estruturado da seguinte forma: Em que: Nome - É o nome simbólico pelo qual o procedimento é chamado pelo algoritmo principal; Parâmetros – São as variáveis responsáveis pelo recebimento dos valores do algoritmo principal e, pelo envio da resposta do procedimento ao algoritmo principal. De forma a propiciar o melhor entendimento,
Compartilhar