Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Estrutura de Dados Prof. André Rocha (EAGS-SIN) - AE001 Roteiro Conceito de algoritmos - Conceitos; Tipos de lógica - Conceitos; Diagrama de Blocos - Fluxograma; Pseudocódigo - Portugol; Tipos de dados; Operadores, variáveis e expressões; Estruturas de controle; e Estruturas de dados: vetores e matrizes. Conceitos - Algoritmo É uma seqüência de passos computacionais que transformam a entrada na saída. Um algoritmo é formalmente uma seqüência finita de passos que levam a execução de uma tarefa. É um evento que ocorre em período de tempo finito e com efeito bem sucedido. É um processo sistemático para a resolução de um problema. Aspectos básicos para estudo de algoritmos: Correção e Análise. Conceitos - Lógica Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo. Seqüência Lógica Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa. Seqüência Lógica são passos executados até atingir um objetivo ou solução de um problema. Conceitos - Software Softwares são programas. Programas são roteiros, escritos por programadores, que apresentam seqüências de instruções que o computador deve seguir para realizar determinadas tarefas. Lógica de Programação A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o desenvolvimento. Tipos de Lógica Existem vários tipos de lógica. As usadas em processamento automático de dados são: Lógica Linear; Lógica Modular; e Lógica Estruturada. Particularidades entre Lógicas Lógica Linear - Visa a solução de problemas como foram proposto sem dividi-los em seguimentos. Tenta-se resolver os problemas linearmente, tratando de cada ação na ordem em que sua necessidade for aparecendo. Lógica Modular - Caracteriza-se pela subdivisão do problema proposto em diversos módulos (subproblemas), para poder analisar melhor cada rotina (separadamente) visando, assim, à solução geral da questão proposta. Lógica Estruturada - Caracteriza-se por soluções em laços, de dentro para fora. Dentro de uma rotina existem outras rotinas, numa espécie de aninhamento. É muito usada em ambientes que utilizam linguagens que pouco fazem uso de comandos de desvio. Particularidades entre Lógicas Linear - este tipo de procedimento está voltado à técnica matemática, a qual permite determinar a atribuição de recursos limitados, utilizando uma coleção de elementos organizados ou ordenados por uma só propriedade, de tal forma que cada um deles seja executado passo a passo de cima para baixo, em que tenha um só “predecessor” e um só “sucessor”; Estruturada - Possui características e padrões particulares, os quais diferem dos modelos das linguagens elaboradas por seus fabricantes. Tem como pontos fortes para elaboração futura de um programa. A seqüência, a seleção e a iteração são as três estruturas básicas para a construção do diagrama de blocos; Particularidades entre Lógicas Modular - Elaborada como uma estrutura de partes independentes, módulos, cujo procedimento é controlado por um conjunto de regras. A modularização deve ser desenvolvida, se possível, em diferentes níveis. É utilizada para separar um problema em sistemas, um sistema em programas e um programa em módulos. Diagrama de Chapin - Substitui o diagrama de blocos por um diagrama de quadros que apresenta uma visão hierárquica e estruturada da lógica. Usar este tipo de diagrama é representar as estruturas que tem um ponto de entrada e um ponto de saída e são compostos pelas estruturas básicas de controle de sequencia, seleção e repetição; e Particularidades entre Lógicas Português Estruturado - o diagrama de blocos é a primeira forma de notação gráfica, mas existe outra, que é uma técnica narrativa denominada pseudocódigo, também conhecida com português estruturado ou chamada por alguns de portugol. Esta técnica de algoritmização é baseada em uma PDL – Program Design Language (Linguagem de Projeto de Programação). Estrutura do Algoritmo Um Algoritmo é normalmente dividido em 2 partes: A Primeira parte é aonde será declaradas tudo o que é necessário para a execução do algoritmo. Esta parte vai desde a palavra INICIO até a Palavra PROCEDA. A segunda parte é aonde serão colocados os comandos que serão executados pelo Algoritmo.Esta parte se inicia com a Palavra PROCEDA e vai até a palavra FIM. Estrutura do Algoritmo Exemplo: INICIO Primeira Parte PROCEDA Segunda Parte FIM. É algo muito parecido com uma receita de bolo, aonde primeiro colocamos os ingredientes, e depois colocamos o modo de preparo, aonde detalhamos os procedimentos necessários para o preparo da receita. A diferença é que no algoritmo procuramos fazer a “receita” de acordo com uma linguagem especifica. O uso desta linguagem evita que sejam feitas interpretações diferentes da mesma sentença. Algoritmo Estruturado Objetivos das Técnicas do Desenvolvimento Estruturado de Algoritmo: Facilitar o desenvolvimento dos algoritmos; Facilitar o entendimento pelos humanos; e Facilitar a manutenção e a sua modificação. Formas de Algoritmos Fluxograma - representação gráfica de algoritmos, ou seja, das instruções e/ou módulos do processamento, conhecido também como diagrama de bloco; Descrição narrativa - expressa o algoritmo em linguagem natural, como por exemplo, as instruções de operação de uma determinado eletrodoméstico, constantes do manual do operador; e Portugol (linguagem estruturada - pseudocódigo) - forma de escrever algoritmos que muito se assemelha a forma na qual os programas são escritos nas linguagens de programação (Pascal, Cobol, C++, Java, etc...). Diagrama de Chapin - Forma de substituição gráfica da representação tradicional (diagrama de blocos) por uma diagramação com quadros que oferecem a visão hierárquica e estruturada da lógica proposta para um programa. Fluxograma - (Diagrama de Bloco) O fluxograma é uma representação gráfica do algoritmo, através de formas geométricas, facilitando a compreensão da lógica utilizada pelo profissional. Fluxograma - (Diagrama de Bloco) • Processamento • entrada /saída • decisão • Terminal • conexão • conexão de página Fluxograma - (Diagrama de Bloco) • Processamento pré-defenido • exibição • documento • Vários documentos • acesso a disco • direção do fluxo Fluxograma - (Diagrama de Bloco) Fluxograma - (Diagrama de Bloco) - Manzano Fluxograma - (Diagrama de Bloco) - Manzano Fluxograma - (Diagrama de Bloco) - Manzano Algoritmo Não Computacional Portugol Esta é uma forma de representar um algoritmo que ao contrário do fluxograma é mais rica em detalhes, se assemelhando muito as fontes (linhas de código) de uma linguagem de programação, onde temos que definir as variáveis, rotinas, sub-rotinas, etc... Ao invés de símbolos gráficos, utilizamos ordens (comandos) para solicitar uma determinada tarefa/rotina. Sua sintaxe básica é: Algoritmo <nome do algoritmo> <declaração das variáveis> Inicio da rotina <instruções a serem seguidas> Fim da rotina Algoritmo Para nosso fim didático vamos usar a seguinte estrutura: Algoritmo <nome do algoritmo> 1. início 2. declare <declaração das variáveis>; 3. atribuição de valores; 4. leia <entrada de dados>; 5. processamento <instruções a serem seguidas>; 6. escreva <saída de informações> 7. fim. DIAGRAMA DE CHAPIN Foi elaboradopor Nassi e Shneiderman e ampliada por Ned Chapin. Itens Fundamentais Constantes: É um determinado valor fixo que não se modifica ao longo do tempo durante a execução do algoritmo ou programa. Ex.: O Valor de π ← 3,14. Classificação: Numérica; Literal; e Lógica. Itens Fundamentais Constantes Numéricas: A representação de uma constante numérica dos algoritmos é feita no sistema decimal, podendo ser um número com ou sem parte fracionária. Ex.: 25 e 2.8. Constantes Literais: Uma constante desse tipo pode ter qualquer seqüência de caracteres (letras, dígitos ou símbolos especiais) que forme um literal com algum significado para o problema em estudo. Ex.: “ANDRÉ ROCHA”, “12345”, “A!#@3”. Obs. 1: Não pode haver espaço em branco entre os caracteres para representar uma constante numérica; e Obs. 2: As aspas “”, são utilizadas para representar uma constante literal. Itens Fundamentais Constantes Lógicas: É um valor lógico que pode ser falso ou verdadeiro, usado em proposições lógicas conforme o problema a ser estudado. Ex.: falso, verdadeiro. Variáveis É uma representação simbólica dos elementos de um certo conjunto. Nos algoritmos, destinados a resolver um problema no computador, a cada variável corresponde uma posição de memória, cujo conteúdo pode variar ao longo do tempo, durante o tempo de execução de um programa. Formação dos Identificadores Um identificador (Nome de Variável ou Constante) é formado por um ou mais caracteres, sendo que o primeiro caractere deva, obrigatoriamente ser uma letra e as seguintes letras ou dígitos, não sendo permitido o uso de símbolos especiais. Ex.: A, AS, MATRICULA, PROG1. Não pode ser. Ex.: 5B, X-Y, E(13). Não podem ter nomes de palavras reservadas (comandos da linguagem); Devem possuir como 1º caractere uma letra ou Underscore ( _ ); Ter como demais caracteres letras, números ou Underscore; Ter no máximo 127 caracteres; Não possuir espaços em branco; e A escolha de letras maiúsculas ou minúsculas é indiferente. Tipos de Dados Quando os dados são dispostos e manipulados de uma forma homogênea, constituem um tipo abstrato de dados. Um algoritmo é projetado em termos de tipos abstratos de dados. Para implementá-los numa linguagem de programação é necessário encontrar uma forma de representá-los nessa linguagem. Na representação do modelo matemático emprega-se uma estrutura de dados. Tipos de Dados Todas as Variáveis devem assumir um determinado tipo de informação. O tipo de dado pode ser: Primitivo - Pré-definido pela linguagem; • A : INTEIRO (Primitivo) Sub-Faixa - É uma parte de um tipo já existente; • TIPO NOTA=[1..10] DE INTEIRO Escalar - Definidos pelo programador. • TIPO SEMANA = (Segunda-feira, Terça-feira, Quarta-feira, Quinta-feira, Sexta-feira, Sábado, Domingo) Tipos Primitivos de Dados INTEIRO ADMITE SOMENTE NÚMEROS INTEIROS. GERALMENTE É UTILIZADO PARA REPRESENTAR UMA CONTAGEM (QUANTIDADE). REAL ADMITE NÚMEROS REAIS (COM OU SEM CASAS DECIMAIS). GERALMENTE É UTILIZADO PARA REPRESENTAR UMA MEDIÇÃO. CARACTERE ADMITE CARACTERES ALFANUMÉRICOS. OS NÚMEROS QUANDO DECLARADOS COMO CARACTERES TORNAM SE REPRESENTATIVOS E PERDEM A ATRIBUIÇÃO DE VALOR. LÓGICO ADMITE SOMENTE VALORES LÓGICOS (VERDADEIRO/FALSO). Tipos Primitivos de Dados Inteiro Números inteiros maiores ou menores que 0 representados por 2 bytes, em uma faixa que vai de -32.768 até 32.767. Declaração: NUMERO : INTEIRO No exemplo acima foi declarada uma variável do tipo INTEIRO que atende pelo nome de "NUMERO“. Real Conjunto dos números racionais. representado por 4 bytes. Declaração: SALARIO : REAL No exemplo acima foi declarada uma variável do tipo REAL com o nome de "SALARIO". Tipos Primitivos de Dados Caractere (Char) Conjunto dos caracteres alfanuméricos (números, letras, símbolos, etc).Representado por apenas um byte. Note que as variáveis do tipo CHAR podem armazenar apenas 1 caracter. Declaração: SEXO : CHAR No exemplo acima foi declarada uma variável do tipo CHAR com o nome "SEXO" Lógico Quando assume apenas 2 valores: • FALSO • VERDADEIRO Declaração FLAG : LÓGICO No exemplo acima, foi declarada uma variável do tipo LÓGICO com o nome de FLAG. Tipos Primitivos de Dados Agregados de Dados Os agregados são estruturas formadas a partir dos tipos de dados primitivos, e que permitem o processamento de informações mais aprimoradas, são eles: Cadeia de Caracteres (String) É um agregado de dados homogêneo, ou seja, usa somente um tipo primitivo, aonde todos os elementos são do tipo caractere (CHAR) Declaração: NOME_CLI : STRING [ 40 ] No exemplo acima foi declarada uma variável do tipo STRING, que poderá ter no máximo 40 posições e o seu nome é NOME_CLI Tipos Primitivos de Dados Matriz É um agregado de dados do tipo homogêneo, aonde todos os elementos podem ser de qualquer tipo, desde que todos os componentes sejam do mesmo tipo. Declaração: NUMERO : MATRIZ [ 4 , 5 ] DE INTEIRO No exemplo acima, foi declarada uma MATRIZ com 4 linhas e 5 colunas, aonde todos os elementos serão do tipo INTEIRO. Note que o primeiro numero sempre representa o numero máximo de linhas que uma matriz pode ter, e o segundo numero representa o numero máximo de colunas que uma matriz pode ter. Note que podem existir matrizes unidimensionais, os chamados vetores. Neste caso a matriz possui apenas linhas ou colunas. neste caso não será necessário informar a coluna e a linha , mas somente um numero, não importando se ele representa a quantidade de colunas ou linhas. Tipos Primitivos de Dados Registros É o único agregado de dados heterogêneo, ou seja pode combinar dados de diferentes tipos em uma única estrutura. Declaração: REG_DADOS : REGISTRO NOME : STRING [ 40 ] SEXO : CHAR IDADE : INTEIRO SALARIO : REAL FIM_REGISTRO Note que o REGISTRO é formado por 4 CAMPOS, e cada campo é de um tipo diferente, entretanto , todos os campos fazem parte de uma única estrutura, que atende pelo nome de REG_DADOS. Operadores Aritméticos + Adição - Subtração * Multiplicação / Divisão Exponenciação ^ ou ** Exponenciação ex. 2³ = 2 ^ 3 ou 2 ** 3 Operadores Relacionais > Maior que < Menor que >= Maior ou Igual <= Menor ou Igual = Igual <> Diferente Operadores Aritméticos Especiais MOD Retorna o resto da divisão entre 2 números inteiros. DIV Retorna o valor inteiro que resulta da divisão entre 2 números inteiros. Ex.: 13 DIV 2 = 6 13 MOD 2 = 1 8 * 3 + 7 mod 2 + 6 * 9 Calculando: 24 + 1 + 54 = 79 Expressões Lógicas As expressões compostas de relações baseadas em uma proposição sempre resultam em um valor lógico do tipo Verdadeiro ou Falso. Exemplos: 2+5>4 Verdadeiro 3<>3 Falso Operadores Lógicos Atuam sobre expressões lógicas retornando resultados do tipo Falso ou Verdadeiro. .E. RETORNA VERDADEIRO, SE AMBAS AS PARTES DA EXPRESSÃO FOREM VERDADEIRAS. .OU. BASTA QUE UMA PARTE DA EXPRESSÃO SEJA VERDADEIRA PARA RETORNAR VERDADEIRO. .NÃO. INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICE-VERSA. Prioridades dos operadores Lógicos: a) .não. ← Negação b) .e. ← Conjunção c) .ou. ← Disjunção Tabela Verdade A B A .e. B A .ou. B .não. (A) V V V V F V F F V F F V F V V F F F F V Símbolos Os principais e mais utilizados são: ou := atribuição de dados a variáveis; ( início de um conjunto dados; ) fim de um conjunto de dados; “ inicio e fim de uma expressão caracter; // { } % comentário; ; terminadores de linhas de instruções; . fim do algoritmo; e , separador de conjunto de dados Exemplo: Símbolos INICIO // variáveis INTEIRO A, X,idade; REAL peso, L; CARACTER nome, cep, K; LOGICO resposta; // principal A 5; Peso 65.4; nome “FEPI” ; resposta falso FIM. Funções Uma função é um instrumento (Sub- algoritmo) que tem como objetivo retornar um valor ou uma informação. A chamada de uma função é feita através da citação do seu nome seguido opcionalmente de seu argumento inicial entre parênteses. As funções podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. Funções São usados procedimento e funções. A passagem de parâmetros é feita por referência, isto é, o endereço do parâmetro é transmitido para rotina. Essa forma de transmissão possibilita a alteração do conteúdo da variável utilizada. Recursivo é um tipo especial de procedimento que contém, em sua descrição chamadas a si mesmo, e a chamada a sim mesmo é dita chamada recursiva. Exemplo é o fatorial. Funções SEN(x) - retorna o seno do valor especificado entre os parênteses; COS(x) - retorna o cosseno do valor especificado entre os parênteses; MOD(x) - retorna o resto da divisão de um valor especificado por parênteses; ABS(x) - retorna o valor absoluto do valor especificado entre os parênteses; SQRT(x) - retorna a raiz quadrada do valor especificado entre os parênteses; SQR(x) - retorna o valor elevado ao quadrado; TRUNC(x) - Valor Truncado; Ex.trunc(7,9)=7 ou trunc(7,1) =7; ROUND(x) - Valor Arredondado; Ex. Round() de 7,0 até 7,4 = 7 e de 7,5 até 7,9 = 8 Estruturas de Controle Existem 3 estruturas básicas de controle que se baseiam os algoritmos: Sequênciação; Decisão; e Repetição ESTRUTURAS SEQÜÊNCIAIS Como pode ser analisado no tópico anterior, todo programa possui uma estrutura seqüencial (seqüência de comandos) determinada por um INICIO e FIM. PONTO E VÍRGULA ; (flexível) O sinal de ponto e vírgula “;” indica a existência de um próximo comando (passa para o próximo). Na estrutura INICIO e no comando que antecede a estrutura FIM não se usa “;”. Comandos Palavras chaves ou instruções pré-definidas que são interpretadas pelo processador e passam produzir interações entre o usuário e a máquina. Principais comandos: LEIA(x) permite ao usuário informar um valor para a variável durante a execução do algoritmo; ESCREVA(x) mostra na tela do computador o valor da variável em questão; IMPRIMA(x) envia para impressora o valor da variável em questão; Comandos INICIO // variáveis INTEIRO A, B, C; // principal Escreva(“ Informe um valor para variável A: “); Leia(A); Escreva(“ Informe um valor para variável B: “); Leia(B); C A / B; Escreva(A); Escreva(“ Resultado da divisão = “, C); Imprima(“ O resultado da divisão de “,A, “ por “, B, “ é “,C) FIM. Sentenças É a mistura de todas as estruturas a fim de se obter um resultado ou uma solução para um problema. Formam uma sentença o conjunto de regras, comandos, variáveis, funções e símbolos, agrupados de forma lógica permitindo que o computador possa processar e interagir com os dados. INICIO // variáveis INTEIRO A, B, C; // principal Leia(A); Leia(B); C A / ABS(B); Escreva( “o valor de C é :” , C) FIM. Primeiro Algoritmo FAÇA UM ALGORITMO PARA LER E SOMAR 2 NÚMEROS E IMPRIMIR A SOMA. Primeiro Algoritmo algoritmo SOMA; 1. início 2. declare NUMERO1, NUMERO2, SOMA: INTEIRO; 3. leia (NUMERO1); 4. leia (NÚMERO2); 5. SOMANUMERO1+NUMERO2; 6. escreva (SOMA) 7. fim. Algoritmos de Estudos Criar um algoritmo que leia 2 números inteiros A e B, troque seu conteúdo e os exiba. ALGORITMO TROCATUDO; VAR A,B, AUXILIAR: INTEIRO; INICIO LER(A); LER (B); AUX<- A; A<- B; B<- AUX; ESCREVER (A,B) FIM. Algoritmos de Estudos Estrutura Condicional Simples Simples: SE <<CONDIÇÃO>> ENTÃO <<COMANDO1>>; <<COMANDON>> FIM-SE Obs: Os comandos Só são executados se a condição for verdadeira!!! Faça um ALGORITMO que leia uma nota e se ela for maior ou igual a 7 imprima “APROVADO”. Algoritmos de Estudos Estrutura Condicional Simples No Diagrama de Bloco Estrutura Condicional Composta SE <<CONDIÇÃO>> ENTÃO <<COMANDO1>>; <<COMANDON>> SENÃO <<COMANDO1>>; <<COMANDON>>; FIM-SE FAÇA UM ALGORITMO PARA LER NOME E SEXO, SE O SEXO FOR “M” IMPRIMA “É HOMEM”, SENÃO IMPRIMA “É MULHER” Algoritmos de Estudos Estrutura Condicional Composta FAÇA UM ALGORITMO QUE LEIA 3 VALORES INTEIROS, DETERMINE E IMPRIMA O MENOR DELES. Algoritmos de Estudos Algoritmos de Estudos Exercícios Segue um Algoritmo que lê o nome e as 4 notas bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a média obtida pelo aluno escrevendo também se o aluno foi aprovado ou reprovado. Média para aprovação maior ou igual a 6. ALGORITMO MEDIA_FINAL; VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: REAL; NOME : CARACTERE [35] INICIO LER (NOME); LER (NOTA1, NOTA2, NOTA3, NOTA4); MEDIA := (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; SE MEDIA>=6 ENTÃO ESCREVER (‘APROVADO’) SENÃO ESCREVER (‘REPROVADO’) ; ESCREVER (NOME, MEDIA) FIM-SE FIM. Exercícios Estrutura de Repetição Em vários momentos, na programação, se torna necessário repetir um trecho de um programa um determinado número de vezes. Nesse caso, pode ser criado um laço de repetição que efetue o processamento de um determinado trecho, tantas vezes quantas forem necessárias. Os laços de repetição também são conhecidos por loopings. Estrutura de Repetição Existem três tipos de estruturas de repetição: Repita-Até, Enquanto-Faça e Para-de-Até- Passo-Faça, cada uma com suas peculiaridades e apropriada para cada problema, normalmente é possível resolver um mesmo problema usando qualquer uma das estruturas de repetição, mas, na maioria das situações, haverá uma mais adequada. Estrutura de Repetição - Para / fim_para Repetição utilizando estrutura Para / Próximo - Variável de Controle. A estrutura do Para/fim_para é garantida, e sua sintaxe em português estruturado é apresentada no seguinte formato: para <var> de <início> ate <fim> passo <incremento> <comandos> Fim_para Estrutura de Repetição - Para / fim_para 1. início 2.declare media,n1,n2,i numérico; 3. Para i de 1 ate 3 passo 1 faça // (no caso passo 1 é opcional); leia (n1); leia (n2); media (n1+n2)/2; escreva (“Média:”, media); fim_para 4. fim. Estrutura de Repetição - Para / fim_para Estrutura de Repetição - Enquanto / fim_enquanto Embora também possa ser utilizada quando se tem um número pré-determinado de repetições a executar, como no exemplo acima, essa estrutura é mais indicada quando é necessário repetir um determinado trecho de programa indefinidamente. Para ilustrar, suponha que um determinado valor deva ser lido indefinidamente, até que seja digitado zero (condição de parada). Nesse caso devemos usar a estrutura Enquanto: Estrutura de Repetição - Enquanto / fim_enquanto 1. início 2. declare val numérico; 3. val 1; 3. Enquanto val <> 0 faça escreva (“Valor:”); leia (val); <comandos>; fimenquanto 4. <comandos>; 5. fim. Nesse caso, quando for digitado 0 (zero) para val, o fluxo do programa segue até chegar no comando fimenquanto. Ao retornar na linha faça enquanto, é verificado que o valor não é diferente de zero e o controle do programa passa para a linha comandos2. A partir daí o fluxo do programa segue normalmente. Estrutura de Repetição - Enquanto / fim_enquanto 1. início 2. declare media, n1, n2, i numérico; 3. i 1; 4. Enquanto i<=3 faça leia (n1); leia (n2); media (n1+n2)/2; escreva (“Média:”,media); i i+1; fimenquanto 5. fim. Estrutura de Repetição - Enquanto / fim_enquanto Português Estruturado algoritmo "Looping_1A" Var X, R: inteiro CONT: inteiro inicio CONT <- 1 enquanto (CONT <= 5) faca leia(X) R <- X * 3 escreva(R) CONT <- CONT + 1 fimenquanto fimalgoritmo • Segue um algoritmo que calcule a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0. Estrutura de Repetição - Enquanto / fim_enquanto PROGRAMA SOMA_SALARIOS; VAR SOMA, SALARIO: REAL; INICIO SOMA:=0; SALARIO:=0; ENQUANTO SALARIO>=0 FAÇA SOMA:=SOMA+SALARIO; LER (SALARIO); FIM_ENQUANTO ESCREVER (SOMA) FIM. Estrutura de Repetição - Enquanto / fim_enquanto Estrutura de Repetição - Repita / Até A estrutura de repetição repita difere da enquanto no que diz respeito ao momento em que o teste da condição é submetido. repita comando1; comando2; ... comandoN; até < condição >; Estrutura de Repetição - Repita / Até 1. início 2. declare media, n1, n2, i numérico; 3. i 1; 4. Repita leia (n1); leia (n2); media (n1+n2)/2; escreva (“Média:”, media); i i+1; até i > 3; 5. fim. Estrutura de Repetição - Repita / Até Português Estruturado algoritmo "Looping_2A" var X, R: inteiro CONT: inteiro inicio CONT <- 1 repita leia (X) R <- X * 3 escreva(R) CONT <- CONT + 1 ate (CONT > 5) fimalgoritmo Contadores e Acumuladores Em algoritmos com estruturas de repetição (Repita, Enquanto ou Para) é comum surgir a necessidade de utilizar variáveis do tipo contador e/ou acumulador. Contadores É uma variável de controle, inteira, que serve para controlar quantas vezes um determinado trecho de programa foi executado. Considere, por exemplo, um programa que leia 10 valores, podendo eles serem somente negativos ou positivos (desconsidere os valores nulos). A seguir, considere que o programa deva mostrar a quantidade de valores positivos digitados. Nesse caso, devemos fazer um teste a cada leitura, e, no caso do valor lido ser positivo, adicionar +1 para uma variável tipo contador (contp=contp+1). Exercício.: faça o algoritmo acima (ler 100 valores), mostrando no final a quantidade de números negativos e positivos digitados. Contadores 1) A variável (do contador) deve possuir um valor inicial conhecido, isto é, ela deve ser inicializada. Normalmente, inicializa-se a variável do contador com zero, ou seja, zera-se a variável antes de utilizá-la. Para zerar uma variável basta atribuir a ela o valor zero: VARIÁVEL 0 2) A constante (que é geralmente o valor 1) determina o valor do incremento da variável (do contador), ou seja, o que será somado (acrescido) a ela. Escreva um algoritmo para ler a nota de 10 alunos e contar quantos foram aprovados, sendo que, para ser aprovado, a nota deve ser maior ou igual a 6,0. Escrever o número de aprovados. Acumuladores ou Somadores É uma variável de controle, inteira, que serve para acumular valores. Um acumulador (somador) é uma variável (qualquer) que recebe ela mesma mais uma outra variável. VARIAVEL1 VARIAVEL1 + VARIAVEL2 Acumuladores ou Somadores 1) A variável1 (do acumulador) deve possuir um valor inicial conhecido, isto é, ela deve ser inicializada. Normalmente, inicializa-se a variável do acumulador com zero, ou seja, zera-se a variável antes de utilizá-la. Para zerar uma variável basta atribuir a ela o valor zero: VARIAVEL1 0 2) A variável2 indica o valor a ser acumulado, somado e armazenado na variável1. Considere que um programa, além de ler 100 valores e mostrar a quantidade de números positivos, deva mostrar a média dos valores positivos digitados. Exemplo Problema: Supondo que pedíssemos para criar um algoritmo para ler o nome de 5 pessoas, e mostrasse esses nomes na ordem inversa de leitura. A princípio, vocês pensariam em cinco variáveis: nome1, nome2, nome3, nome4 e nome5. Solução Inicio caracter: nome1, nome2, nome3, nome4, nome5; escreva(‘Informe o nome de 5 pessoas: ‘); leia(nome1); //ANA leia(nome2); //PAULA leia(nome3); //CRISTINA leia(nome4); //GUSTAVO leia(nome5); //ANTONIO escreva(‘Ordem Inversa de Leitura ‘); escreva(nome5); escreva(nome4); escreva(nome3); escreva(nome2); escreva(nome1); Fim Solução Se alterássemos esse algoritmo para ler o nome de 100 pessoas, a solução anterior se tornaria inviável. Para casos como este, podemos fazer uso de vetores. Se tivéssemos criado 100 variáveis, teríamos que declarar e usar: nome1, nome2, nome3, ..., nome99, nome100. Com o vetor passamos a ter: nome[1], nome[2], nome[3], nome[99], nome[100], onde a declaração do vetor se limita à linha: caracter: nome[100]. Veja que para todos os elementos nos referimos ao mesmo nome de vetor “Nome”. 91 91 Variáveis Composta Homogênea - VETORES Os vetores são estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo. Por este motivo, são chamadas de estruturas homogêneas. Os vetores são unidimensionais, pois cada elemento do vetor é identificado por um índice. Podemos definir vetores como posições de memória, identificadas por um mesmo nome, individualizadas por índices e cujo conteúdo é de mesmo tipo. Para acessarmos um elemento de um vetor, referimo-nos ao nome do vetor acompanhado pelo seu índice que virá entre colchetes ( [ e ] ). Correspondem a posições de memória, Exemplo: Supondo-se um dado instante a variável composta NOTA contivesse os seguintes valores: NOTA Obs.: A variável I, possibilita o acesso a qualquer uma das notas armazenadas. NOTA [I] = NOTA[10] = 2 7 8 9 6 3 1 4 3 10 2 1 2 3 4 5 6 7 8 9 10 Índice VETORES - Declaração declare <NOMEVETOR>: VETOR[1:N] <TIPO>; declare NOTA: VETOR[1:10] REAL; NOTA: VETOR[1..10] DE REAL Estrutura de Comando Para V de I até L passo P faça <Comando>; fimpara Para I de 1 até 10 passo 1 faça SOMA SOMA + NOTA [I]; fimpara 93 93 VETORES algoritmo VETORIDADE; 1. inicio 2. declare IDADE:VETOR[1:15] numérico; SOMA, CIDADAO, I, MEDIA numérico; 3. SOMA0; 4. Para I de 1 até 15 faça LER(IDADE[I]); SOMASOMA+IDADE[I]; fim-para 5. escrever (SOMA); 6. MEDIA SOMA/15; 7. escrever (MEDIA); 8. escrever (´Digite o numero do Cidadão o qual deseja obter a idade´); 9. ler (CIDADAO); 10. escrever (IDADE[CIDADAO]) 11. fim. 94 94 VETORES Exemplo Problema (Com vetores): Supondo que pedíssemos para criar um algoritmo para ler o nome de 5 pessoas, e mostrasse esses nomes na ordem inversa de leitura. A princípio, vocês pensariam em cinco variáveis: nome1, nome2, nome3, nome4 e nome5. Solução com vetor Representação da memória: Matrizes - Variáveis Multidimensionais A matriz é uma estrutura de dados homogênea multidimensional. As matrizes são estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo, mas em dimensões diferentes. Os vetores são unidimensionais, enquanto as matrizes podem ser bidimensionais (duas dimensões) ou multidimensionais. Podemos conceituar matrizes como um conjunto de dados referenciado por um mesmo nome e que necessitam de mais de um índice para ter seus elementos individualizados. Para fazer referência a um elemento da matriz serão necessários tantos índices quantas forem as dimensões da matriz. Matrizes - Variáveis Multidimensionais Veja a sintaxe da declaração de uma matriz: <<NOME>>: MATRIZ [1 : N, 1 : M] <<TIPO>>, onde: N - Número máximo de linhas; M - Número máximo de colunas; Exemplo: NOTAS: matriz[1..8, 1..4] de real Obs: Quando você desejar percorrer uma matriz, linha por linha, crie uma estrutura de repetição, fixando a linha e variando a coluna. Parapercorrer uma matriz, coluna por coluna, fixe a coluna e varie a linha. Matrizes - Variáveis Multidimensionais Vamos pensar numa estrutura onde as colunas representem os cinco dias úteis da semana, e as linhas representem as três vendedoras de uma loja. Na interseção de cada linha x coluna, colocaremos o faturamento diário de cada vendedora. A representação desta tabela em forma de matriz, seria: VendasDiarias : matriz [ 1..3, 1..5 ] de real; ou VendasDiarias : matriz [ 3, 5 ] de real; Matrizes - Variáveis Multidimensionais Veja como ficaria o algoritmo para ler esses valores: algoritmo LeVendasDiarias; 1.inicio 2. declare VendasDiarias[3,5] numérico; indLinha, indColuna, numérico; //Variando o número de linhas - Vendedoras 3. para indLinha de 1 até 3 faça escreve (“Vendedora :”, indLinha); //Variando o número de colunas - Dias da Semana para indColuna de 1 até 5 faça escreva (“Faturamento do Dia : “, indColuna); leia (VendasDiarias[indLinha, indColuna]); fimpara; fimpara; 4. fim. Matrizes - Variáveis Multidimensionais Algoritmo LeVendasDiariasVersao2; 1. inicio 2. declare VendasDiarias[3,5] numérico; Vendedoras[3], DiasSemana[5] literal; indLinha, indColuna numérico; 3. Vendedoras[1] "Sandra"; 4. Vendedoras[2] "Vera"; 5. Vendedoras[3] "Maria"; 6. DiasSemana ["Segunda", "Terça", "Quarta", "Quinta", "Sexta"); //Variando o número de linhas - Vendedoras 7. Para indLinha de 1 até 3 faça escreva (“Vendedora :”, Vendedoras[indLinha]); //Variando o número de colunas - Dias da Semana Para indColuna de 1 até 5 faça escreva ("Fatur.do Dia:", DiasSemana[indColuna]); leia (VendasDiarias[indLinha, indColuna]); fimpara; fimpara; 8. fim. Matrizes - Variáveis Multidimensionais Matrizes - Métodos de Pesquisa Método de Pesquisa Seqüencial Consiste em efetuar a busca da informação desejada a partir do primeiro elemento seqüencialmente até o último. Este método de pesquisa é lento, porém eficiente nos casos em que uma matriz encontra-se com seus elementos desordenados. Método de Pesquisa Binária É em média mais rápido que o anterior, porém exige que a matriz esteja previamente classificada, pois este método “divide” a lista em duas partes e “procura” saber se a informação a ser pesquisada está acima ou abaixo da linha de divisão. Se estiver acima, por exemplo, toda a metade abaixo é desprezada. Em seguida, se a informação não foi encontrada, é novamente dividida em duas partes, e pergunta se aquela informação está acima ou abaixo, e assim vai sendo executada até encontrar ou não a informação pesquisada. Pelo fato de ir dividindo sempre em duas partes o volume de dados é que o método recebe a denominação de pesquisa binária. Variáveis Globais - são declaradas no início do algoritmo principal de um programa, podendo ser utilizada por qualquer sub-rotina subordinada ao algoritmos principal. Este tipo de variável passa a ser visível a todas as sub-rotinas hierarquicamente subordinadas à rotina principal, que poderá ser o próprio programa principal ou uma outra sub-rotina. Devem ser declaradas fora do corpo de todos os procedimentos ou funções do programa Locais - são declaradas e usadas apenas em sub- rotinas. Tem como escopo a função onde foi declarada. Os nomes e valores dessas variáveis tem uso restrito à função que declarou estas variáveis. Escopo das Variáveis As variáveis A e B da rotina principal são num primeiro momento globais às sub-rotinas 1 e 2. Porém, dentro da sub- rotina 1, a variável A é definida novamente, assumindo assim um contexto local para esta sub-rotina (é como se tivesse utilizando uma nova variável, no caso A’), mas será global para as sub-rotinas 1.1 e 1.2 com relação à variável A’ que também terá como global a variável X. As variáveis W e Y que respectivamente pertencem às sub- rotinas 1.1 e 1.2 são locais. A variável B é global para as sub-rotinas 1, 1.1 e 1.2. Parâmetros Os parâmetros têm por finalidade servir como um ponto de comunicação bidirecional entre uma sub- rotina e o programa principal ou uma outra sub-rotina hierarquicamente de nível mais alto. Desta forma, é possível passar valores de uma sub-rotina ou rotina chamadora à outra sub-rotina e vice-versa, os parâmetros que podem ser: Formais; e Reais. Parâmetros Parâmetros Formais: Declarados por meio de variáveis juntamente com a identificação do nome da sub-rotina, os quais serão tratados exatamente da mesma forma que são tratadas as variáveis globais ou locais. Procedimento CALCSOMA (A, B: inteiro) var inicio Z : inteiro Z <- A + B escreva(Z) fimprocedimento a variável Z é local e está sendo usada para armazenar a soma das variáveis A e B que representam os parâmetros formais da sub-rotina CALCSOMA. Parâmetros Parâmetros Reais: Substituem os parâmetros formais, quando da utilização da sub-rotina por um programa principal ou por uma rotina chamadora. inicio leia(x, y) CALCSOMA(x, y) leia(w, t) CALCSOMA(w, t) CALCSOMA(8, 2) fimalgoritmo Toda vez que a sub-rotina CALCSOMA é chamada, faz-se uso de parâmetros reais. Desta forma, são parâmetros reais as variáveis x, y, w e t, pois seus valores são fornecidos pela instrução leia() e também os valores 8 e 2. Passagem de Parâmetros A passagem de parâmetro ocorre quando é feita uma substituição dos parâmetros formais pelos reais no momento da execução da sub-rotina. Esses parâmetros são passados por variáveis de duas formas: por valor; e por referência. Passagem Por Valor A passagem de parâmetro por valor caracteriza-se pela não-alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. Assim sendo, o valor passado pelo parâmetro real é copiado para o parâmetro formal, que no caso assume o papel de variável local da sub-rotina. Desta forma, qualquer modificação que ocorra na variável local da sub-rotina não afetará o valor do parâmetro real correspondente, ou seja, o processamento é executado somente dentro da sub-rotina, ficando o resultado obtido “preso”na sub-rotina. Passagem Por Referência A passagem de parâmetro por referência caracteriza-se pela ocorrência de alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub- rotina. Desta forma, qualquer modificação feita no parâmetro formal implica em alteração no parâmetro real correspondente. A alteração efetuada é devolvida para a rotina chamadora. FIM
Compartilhar