Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


721-Lógica de Programação, Notas de estudo de Lógica

Lógica de Programação

Tipologia: Notas de estudo

2012

Compartilhado em 09/05/2012

alexandre-melo-25
alexandre-melo-25 🇧🇷

2 documentos

1 / 110

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ALGORITMOS E ESTRUTURAS DE DADOS
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
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 ú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:
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe 721-Lógica de Programação e outras Notas de estudo em PDF para Lógica, somente na Docsity!

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

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 ú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”

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.

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:

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:  FALSOVERDADEIRO

Declaração

FLAG : LÓGICO

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

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éticasRelacionaisLógicas

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

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

A: = 3 + (2 * 6)

MOSTRE ( A ) {RESULTADO 15}

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:

A: = 5

B : = 3

C: = (A + B) / 2

MOSTRE (C) {RESULTADO 4}

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:

A: = 7

B: = 5

C : =

C: = (A + B + C) / 3

MOSTRE (C) {RESULTADO 7}

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.

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:

INICIO

NUM : INTEIRO

X : STRING [ 6 ]

PROCEDA

NUM: = 999999

X : = "999999"

NUM : = NUM + 1

MOSTRE (NUM) { RESULTADO IGUAL A 1000000}

X: = X + 1 { ESTE COMANDO É INVALIDO JÁ QUE X É DO TIPO STRING}

MOSTRE (X) {RESULTADO IGUAL A "999999"}

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 999999, 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 999999 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.

Comando SE SENÂO

O comando SE ainda permite que seja associado a ele um segunda opção, o comando SENÃO. O comando senão pode ou não ser associado ao comando SE, uma vez associado, ele especifica que os comandos a ele subordinados só serão executado no caso da condição lógico relaciona for falsa, ou seja, só será executado caso os comandos associados ao comando SE não forem executados.

Sintaxe:

SE < CONDIÇÃO >

B L O CO D E COM AN D O S

A

SENÃO

B L O CO D E COM AN D O S

B

FIM_SE

No comando acima, o bloco de comandos A só será executado no caso da condição lógico relaciona for verdadeira, e o bloco de comando B só será executado no caso da condição lógico relacional for falsa. De qualquer forma, após executar tanto o bloco A como o bloco B o algoritmo seguirá normalmente a partir da palavra FIM_SE.

Comando CASO

É o comando que permite a opção entre várias alternativas de acordo com a verificação de uma condição lógico relacional.

Sintaxe:

CASO

MES = 1

SALARIO : = SALARIO * 1.

MES = 2

SALARIO : = SALARIO * 1.

MES = 3

SALARIO : = SALARIO * 1.

FIM_CASO.

Note que no comando CASO , a mesma variável será testada com várias condições, caso uma delas seja atendida, o comando, ou bloco de comandos associados a esta condição será executado, e logo após o algoritmo seguirá normalmente após a palavra FIM_CASO. No caso de nenhuma condição ser verdadeira, o algoritmo seguirá normalmente após a palavra FIM_CASO sem executar nenhum comando associado ao comando CASO. O comando Caso é Equivalente a uma sequancia de comando SE SENÂO

Embutimento

Uma estrutura se seleção pode ter uma outra estrutura de seleção dentro dela, e assim por diante. Neste caso nós podemos colocar um comando SE subordinado a outro comando SE , ou um comando SE subordinado a um comando CASO , ou vice e versa, sem limite de encadeamento.

É importante ressaltar que para formação das condições dos comandos de seleção serão utilizados operadores relacionais associados ou não a operadores lógicos.

Estruturas de Repetição

São usadas sempre que for necessário repetir um conjunto de declarações para manter a abstração de controle do algoritmo. São as mais complicadas, e as que exigem o maior cuidado na sua escolha e aplicação.

Comando ENQUANTO.

Prescreve que os comandos a ele subordinados deverão ser repetidos ENQUANTO uma condição lógico relacional for verdadeira. O teste é feito no inicio do comando , e caso o resultado for verdadeiro os comandos serão executados , logo em seguida outro teste será feito. Caso o teste seja falso, o algoritmo continua normalmente após a palavra FIM_ENQUANTO. Note que se o primeiro teste de falso , os comando não serão executados nenhuma vez, e o algoritmo continuará normalmente após a palavra FIM_ENQUANTO.

Sintaxe:

B L OCO D E COM AN D OS

A S E R E M

R E P E TID OS

E N QU AN TO < CON D IÇÃO >

FIM _ E N QU AN TO

V E R D A D E I R O

FAL S O

Exercício 03:

Faça um algoritmo capaz de somar todos os números inteiros compreendidos entre 1 e 10, e mostrar o resultado da soma. INICIO SOMA,CONT : INTEIROS PROCEDA SOMA CONT : = 1 SOMA : = 0 ENQUANTO CONT < = 10 SOMA : = SOMA + CONT CONT : = CONT + 1 FIM_ENQUANTO MOSTRE ( SOMA) FIM.

Comando REPITA.

Prescreve que os procedimentos a ele subordinados deverão ser repetidos ATÉ que uma condição lógico relacional seja verdadeira. O teste será feito no final do comando, e caso seja FALSO , os comando que estão entre o REPITA , e o FIM_REPITA ,serão repetidos, e novamente será feito um teste. Quando o resultado do teste for verdadeiro, o algoritmo continua normalmente a partir da palavra FIM_REPITA. Note que sendo o teste feito no final do comando, os comando subordinados ao repita serão executados pelo menos uma vez.

Sintaxe:

COM AN D OS

A S E R E M R E P E TID OS

FIM _ R E P ITA

R E P ITA

ATÉ < CON D IÇÃO >

FAL S O

VE R D AD E IR O

Exercício 04:

Idem ao execicío 03 só que utilizando o comando REPITA.

INICIO

SOMA,CONT : INTEIRO

PROCEDA SOMA

CONT: = 1

SOMA : = 0

REPITA

SOMA : = SOMA + CONT

CONT : = CONT + 1

ATE CONT > 10

FIM_REPITA

MOSTRE ( SOMA)

FIM.