Lógica de Programação - Algoritmos e Estruturas de Dados

Lógica de Programação - Algoritmos e Estruturas de Dados

(Parte 1 de 3)

Apostila Completa de Estruturas de Dados Algoritmos

Conceitos

• É um conjunto de instruções ou comandos que, quando executados , levam a um conjunto finito de ações.

• É um conjunto ordenado de instruções que quando seguidas desempenham uma tarefa especifica.

Características

• È rigoroso em sua definição • Legibilidade

• Portabilidade

Programa. É uma adaptação ou codificação de um algoritmo atendendo as regras de uma linguagem especifica.

Estrutura Básica de um 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 Paravra 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.

Exemplo: INICIO

Primeira Parte PROCEDA

Segunda Parte

É 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 única diferença é que no lagoritmo 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 como veremos a seguir:

Problemas de Narrativa: Utilização do Não, somente, mas, e/ou, A menos que:

• Conforme as palavra utilizadas para descrever uma função , poderão surgir interpretações diversas como nos exemplos abaixo:

• “Somar A e B a menos que A seja menor que B aonde neste caso subtrair A de B”

• “Somar A e B , entretanto se a for menor que B a resposta será a diferença entre A e B”

• “Somar A e B mas subtrair A de B quando A for menor que B”

• “O Total é a soma de A e B , somente quando A for menor é que a diferença deve ser utilizada no total”

Até , acima, abaixo:

• “Abaixo de 20 unidades não há desconto, acima de 20 unidades da direito a 5% de desconto”

• O que acontece com exatamente vinte unidades?

• Para solucionar este problema utilizar os operadores relacionais:

Ambigüidade do E/OU

“Clientes regulares que adquirirem mais de 1 Milhão e que tem um bom histórico de pagamento ou que estão conosco a mais de 20 anos devem receber tratamento especial”

• Dependendo da entonação da frase podem surgir interpretações diferentes.

• Adjetivos indefinidos:

O que é um bom Histórico? O que é um cliente regular?

• A frase “bom histórico” implica na existência de um Mau histórico, ambos deverão ser definidos?

Como pode ser visto acima a utilização da linguagem coloquial pode gerar diversas interpretações, e também muitas duvidas. Desta forma faz-se necessário a utilização de uma linguagem mais próxima a lógica dos computadores. E também , com uma linguagem bem parecida com as linguagens de programação, fica mais facil a transformação do algoritmo em um programa. O Algoritmo é então um intermediário entre a lingagem coloquial utilizada normalmente , e as linguagens de programação em outras palavras “Portugol”

ALGORITMOS E ESTRUTURAS DE DADOS Problemas de Interpretação:

ALGORITMOS E ESTRUTURAS DE DADOS Itens fundamentais:

Para que possamos entender e desenvolver algoritmos vamos precisar de alguns conceitos básicos:

Variáveis

Uma variável corresponde a uma área de memória , cujo conteúdo varia durante a execução do algoritmo. Devemos encarar uma variável como o endereço de memória aonde esta guardada uma determinada informação. Esta informação pode ser de diversões tipos, mas somente um tipo de cada vez. O algoritmo poderá alterar este valor, de acordo com as suas instruções, quantas vezes forem necessárias, por isto elas são chamadas variáveis.

Tipos de Dados

Todos os dados processados por um algoritmo devem ser previamente definidos, isto porque o computador precisa saber previamente o tipo e o tamanho da informação que será processada. Como já foi visto anteriormente, nós vamos armazenar estes dados dentro de variáveis, para que possamos alterar o seu valor durante a execução do algoritmo. Sendo assim , cada variável deverá ser declarada previamente e com um tipo já definido que deverá ser um dos tipos abaixo, ou uma de suas variações que serão vistas posteriormente.

Nomes de Variáveis

Para que possamos declarar uma variável devemos dar-lhe um nome. Dentro do algoritmo , toda vez que eu precisar usar o valor armazenado nesta variável , eu vou referencia-la pelo seu nome.

Regras para Nomes de Variáveis:

• Os nomes das variáveis devem representar o que será guardado dentro dela • O primeiro caracter de um nome deverá ser sempre alfabético

• Não podem ser colocados espaços em branco no nome de variáveis, usar o UNDERSCORE.

• A declaração de uma variável é feita no algoritmo informando o seu nome, seguido pelo seu tipo, separados por ":"

Tipos de Dados Primitivos

São os tipos de dados mais comuns, e que podem dar origem a outros tipos de dados mais complexos.

Números inteiros maiores ou menores que 0 representados por 2 bytes, em uma faixa que vai de

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: SALÁRIO : REAL

No exemplo acima foi declarada uma variável do tipo REAL com o nome de "SALÁRIO".

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:

Declaração FLAG : LÓGICO

No exemplo acima, foi declarada uma variável do tipo LÓGICO com o nome de FLAG.

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 agradado 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

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 colunas e 5 linhas , aonde todos os elementos serão do tipo INTEIRO. Note que o primeiro numero sempre representa o numero máximo de colunas que uma matriz pode ter, e o segundo numero representa o numero máximo de linha 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.

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.

Além das variáveis existem outros elementos que irão fazer parte dos algoritmos. Declaração de Variáveis:

Exercício 01 Declare variáveis que sejam capazes de armazenas as seguintes informações

• Sua Idade • A Média entre 2 numeros

• O seu Salário

• Seu nome, numero, nota do primeiro bimestre, nota do segundo bimestre e media final

• Os 12 meses dos ano (Só o numro do mês) com os sues respeqtivoas números de dias

Variaveis:

Nome; String; Media: real Salario:real

Comentários.

O comentário é um texto delimitado por chaves, cuja função é explicar com mais clareza alguma parte especifica do algoritmo. O comentário é um texto que não deve ser levado em consideração na hora de executar o algoritmo, ele serve apenas para dar informações adicionais a leitura do algoritmo.

Operadores

Operadores são sinais utilizados nos algoritmos para indica a realização de operações que podem ser de três categorias:

•••• Aritméticas •••• Relacionais

Operadores Aritméticos

Servem para realizar operações com números inteiros ou reais. são eles:

OPERADOR SINAL PRIORIDADE ADIÇÃO + 3 SUBTRAÇÃO - 3 MULTIPLICAÇÃO * 2 DIVISÃO / 2

POTÊNCIA ↑ 1

Operadores Relacionais

São operadores que servem para estabelecer relações entre variáveis do mesmo tipo. São eles

OPERADOR SINAL PRIORIDADE IGUAL = 1 DIFERENTE < > 1 MENOR QUE < 1 MAIOR QUE > 1 MAIOR OU IGUAL > = 1 MENOR OU IGUAL < = 1

ALGORITMOS E ESTRUTURAS DE DADOS Operadores Lógicos

São operadores utilizados para unir duas relações criadas através dos operadores relacionais são eles:

Resumo das Prioridades.

PRIORIDADES ITENS 1 PARÊNTESES E FUNÇÕES 2 EXPRESSÕES ARITMÉTICAS 3 RELAÇÕES 4 NÃO 5 E 6 OU

ALGORITMOS E ESTRUTURAS DE DADOS Funções

As funções são algoritmos pré-definidos que irão retornar valores normalmente resultantes de operações aritméticas. Estas funções têm por finalidade agilizar o desenvolvimento dos nossos algoritmos, já que os procedimentos para calculo destas funções não são de grande importância. Mais tarde estudaremos mais a fundo as funções , por hora basta saber como elas são utilizadas em nossos algoritmos.

São elas:

FUNÇÃO RETORNO SQR ( P ) RAIZ QUADRADA DE P ABS ( P ) VALOR ABSOLUTO DE P TRUNCA ( P ) PARTE INTEIRA DE P ARREDONDA( P ) INTEIRO MAIS PROXIMO DE P EXP ( P ) FUNÇÕES EXPONENCIAL DE P QUOC ( P,Q ) QUOEFICIENTE INTEIRO DE P POR Q RESTO ( P,Q ) RESTO DA DIVISÃO INTEIRA DE P POR Q LOG ( P ) LOGARITMO NA BASE 10 DE P LN ( P ) LOGARITMO NEPERIANO DE P

Comando de Atribuição.

É o comando usado para atribuir um valor a uma variável. A natureza deste valor deve ser compatível com o tipo da variável declarada. O sinal utilizado para indicar uma atribuição é o : = (dois pontos igual) É importante neste ponto esclarecer com é que funciona o processo de atribuição: Caso eu esteja atribuindo para uma variável o resultado de uma expressão, o algoritmo primeiro deverá resolver a expressão para depois fazer a atribuição.

Exemplo

O resultado deste comando será 15, porque o algoritmo primeiro resolve a expressão e depois guardou o valor conseguido na variável especificada (A). Também podem ser utilizados os valores armazenados em outras variáveis, para se fazer uma atribuição:

No final desta seqüência de comandos o valor dentro da variável c será 4, pois o algoritmo utilizou o valor das variáveis A e B para calculara o valor da expressão e depois o armazenou em C. Também pode ser utilizado o valor da própria variável que receberá a atribuição:

No final desta seqüência o valor de C será 7 , pois o algoritmo primeiro utiliza o valor 9 armazenado em C para resolver a expressão, e depois de resolvida , o novo valor será armazenado em C , apagando o valor anterior. Isto fica mais claro no exemplo abaixo:

CONTADOR : = 1 CONTADOR : = CONTADOR + 1 MOSTRE (CONTADOR) { RESULTADO 2}

A variável CONTADOR foi inicializada com o valor 1 , e logo abaixo este valor foi utilizado em uma expressão, e o resultado desta expressão foi armazenado dentro da própria variável CONTADOR. Mas é importante notar que o algoritmo primeiro utilizou o valor 1 para resolver a expressão , e somente após ter a resposta é que ele alterou o valor da variável CONTADOR. Na verdade eu apenas somei 1 ao valor que já existia na variável.

Comandos de Entrada E Saída

Um comando de entrada permite a entrada de dados do meio externo para o computador, e um comando de saída permite a saída de dados do computador para o meio externo.

São eles:

Comando Leia

Permite que o usuário entre com um valor , que será armazenado em uma variável e poderá ser utilizado pelo algoritmo. O comando Leia interrompe a execução do algoritmo até que o usuário digite o valor solicitado, quando então, armazena este valor na variável especificada no comando e dá proceguimento a execução do Algoritmo. O comando Leia não permite que se faça uma critica dos valores digitados, por isso, se for necessário esta critica , ela deverá ser implementada no próprio algoritmo. A nível de Algoritmo, não será necessário implementar este tipo de critica.

Sintaxe:

Leia (Variável)

Onde:

• Variável é o nome da variável aonde o valor digitado pelo usuário será armazenado. Note que o valor digitado deverá ser do mesmo tipo da variável.

Comando Mostre:

O comando Mostre permite que sejam mostrados para o usuário os valores armazenados em variáveis ou então expressões literais. Uma vez que o algoritmo tenha cumprido as suas funções, o comando Mostre é a forma de mostrar ao usuário os resultados do processamento. Alem disso, o comando Mostre também pode ser utilizado para mostrar mensagens que ajudaram o usuário na utilização do algoritmo.

Sintaxe:

Mostre (Variável) Mostre (Expressão Literal)

Onde:

Variável é o nome da variável cujo valor se deseja mostrar Expressão Liretal é uma frase ou expressão que se deseja mostra para o usuário. Ela deve estar entre Aspas (““)

Expressões Literais

As expressões literais são frases ou outro tipo de expressões que são colocadas no algoritmo com mensagens ou para atribuição em variáveis do tipo STRING ou CHAR. Estas expressões são identificadas por estarem entre aspas ( " " ). É importante notar que nada impede que um numero seja colocado dentro de uma expressão literal, ou em uma variável STRING ou CHAR, mas note que este tipo de numero não vai possuir o valor numérico, ou seja, este numero não vai poder ser usado para realizar operações aritméticas. Para este caso nós devemos utilizar números armazenados em variáveis do tipo inteiro ou real.

Exemplo:

MOSTRE (NUM){ RESULTADO IGUAL A 1000000}
X: = X + 1{ ESTE COMANDO É INVALIDO JÁ QUE X É DO TIPO STRING}
MOSTRE (X){RESULTADO IGUAL A "9"}

INICIO NUM : INTEIRO X : STRING [ 6 ] PROCEDA NUM: = 9 X : = "9" NUM : = NUM + 1 FIM

Note que no exemplo acima eu declarei 2 variáveis, uma do tipo INTEIRO e outra do tipo STRING, e que eu atribui para ambas o valor 9, mas no caso da variável do tipo STRING eu usei as aspas para indicar que este valor é uma expressão literal, e que por isso não tem valor numérico. Este tipo de expressão é muito útil no caso de termos que armazenar informações como endereço ou telefones, que exigem a presença de números e letras. No caso da variável do tipo INTEIRO o valor 9 foi atribuído sem as aspas, já que a eu estou utilizando o valor numérico, e poderei usar este numero em qualquer operação aritmética.

Estruturas de Controle. São as formas como serão executados os comandos do algoritmo, são elas.

Estrutura Seqüencial

É a mais simples, eficiente e legível das estruturas de controle. Estabelece que uma declaração passa a ser analisada imediatamente após o termino de sua predecessora. Um algoritmo se inicia com a palavra INICIO, após o que, aparecem as declarações de variáveis, seguidas de comandos que, se não houverem indicações ao contrario , serão executados um depois do outro em seqüência. A finalização do algoritmo é feita com a palavra FIM.

Exemplo

INICIO A,B : INTEIRO MEDIA : REAL PROCEDA MEDIA {CALCULO DA MEDIA ENTRE 2 NUMEROS} LEIA ( A ) LEIA ( B ) MEDIA : = (A + B ) / 2 MOSTRE ( MEDIA ) FIM.

(Parte 1 de 3)

Comentários