• Nenhum resultado encontrado

Introdução à Lógica de Programação. Então o que é lógica?

N/A
N/A
Protected

Academic year: 2021

Share "Introdução à Lógica de Programação. Então o que é lógica?"

Copied!
29
0
0

Texto

(1)

Introdução à Lógica de

Programação

Prof. Giuliano Prado de Morais Giglio, M.Sc.

n

A lógica de programação é necessária para

pessoas que desejam trabalhar com

desenvolvimento de sistemas e programas,

pois ela permite definir a seqüência lógica

para o desenvolvimento.

n

Então o que é lógica?

n

Lógica de programação é a técnica de encadear

pensamentos para atingir determinado objetivo.

n

Estes pensamentos, podem ser descritos

como uma seqüência de instruções, que

devem ser seguidas para se cumprir uma

determinada tarefa.

n

Seqüência Lógica são passos executados até

atingir um objetivo ou solução de um

problema.

n Na linguagem comum, entende-se por instruções “um

conjunto de regras ou normas definidas para a realização ou emprego de algo”.

n Em informática, porém, instrução é a informação que indica a um

computador uma ação elementar a executar.

n Uma ordem isolada não permite realizar o processo

completo, para isso é necessário um conjunto de instruções colocadas em ordem seqüencial lógica.

n Por exemplo, se quisermos fazer uma omelete de batatas,

precisaremos colocar em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc...

(2)

n

É evidente que essas instruções tem que ser

executadas em uma ordem adequada – não se

pode descascar as batatas depois de fritá-las.

n

Dessa maneira, uma instrução tomada em

separado não tem muito sentido; para obtermos o

resultado, precisamos colocar em prática o

conjunto de todas as instruções, na ordem correta.

n

Instruções são um conjunto de regras ou normas

definidas para a realização ou emprego de algo.

Em informática, é o que indica a um computador

uma ação elementar a executar.

n

“Chupar uma bala”.

n Pegar a bala n Retirar o papel n Chupar a bala

n Jogar o papel no lixo

n

“Somar dois números quaisquer”.

n Escreva o primeiro número no retângulo A n Escreva o segundo número no retângulo B n Some o número do retângulo A com número do

retângulo B e coloque o resultado no retângulo C

n

FAZER: Seqüência de tomar banho;

n

Seqüência de trocar 4 pneus de um automóvel;

Introdução aos

Algoritmos

Prof. Giuliano Prado de Morais Giglio, M.Sc.

n

O uso de algoritmos surgiu como uma forma de

indicar o caminho para a solução dos mais

variados problemas.

n

Dado um problema, as principais funções de um

programador são:

n Entender perfeitamente o problema n Escolher métodos para sua solução

n Desenvolver um algoritmo baseado nos métodos n Codificar o algoritmo na linguagem de programação

(3)

n Fazemos uso constantemente de algoritmos em

nosso cotidiano: a maneira como uma pessoa toma banho é um algoritmo.

n Outros algoritmos freqüentemente encontrados são:

n instruções para se utilizar um aparelho eletrodoméstico; n uma receita para preparo de algum prato;

n guia de preenchimento para declaração do imposto de

renda;

n a regra para determinação de máximos e mínimos de

funções por derivadas sucessivas;

n a maneira como as contas de água, luz e telefone são

calculadas mensalmente; etc.

n “Um Algoritmo é uma seqüência de instruções

ordenadas de forma lógica para a resolução de uma determinada tarefa ou problema.”

n Um algoritmo é um conjunto finito de instruções que, se

seguidas, realizam uma determinada tarefa.

n Além disso, todo algoritmo deve satisfazer:

n Entrada - zero ou mais valores de entrada n Saída - pelo menos um valor deve ser produzido n Clareza - toda instrução deve ser clara e não ambígua

n Término - o algoritmo deve terminar após um nº finito de passos

n Problema: Usar um telefone público.

Início

1. Tirar o fone do gancho; 2. Ouvir o sinal de linha;

3. Introduzir o cartão; 4. Teclar o número desejado; 5. Se der o sinal de chamar 5.1 Conversar; 5.2 Desligar; 5.3 Retirar o cartão; 6. Senão 6.1 Repetir; Fim. Desvio Seqüencial

n A importância do algoritmo está no fato de termos que especificar uma seqüência de passos lógicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si só não tem vontade própria, faz apenas o que mandamos.

n Com uma ferramenta algorítmica, podemos conceber uma solução para um dado problema, independendo de uma linguagem específica e até mesmo do próprio computador.

(4)

n Todo algoritmo deve apresentar algumas

características básicas:

ü ter fim;

ü não dar margem à dupla interpretação (não ambíguo);

ü capacidade de receber dado(s) de entrada do mundo

exterior;

ü poder gerar informações de saída para o mundo

externo ao do ambiente do algoritmo;

ü ser efetivo (todas as etapas especificadas no algoritmo

devem ser alcançáveis em um tempo finito).

Descrição Narrativa

n Faz-se uso do português para descrever algoritmos. n EXEMPLO:

Receita de Bolo:

n Providencie manteiga, ovos, 2 Kg de massa, etc. n Misture os ingredientes

n Despeje a mistura na fôrma de bolo n Leve a fôrma ao forno

n Espere 20 minutos n Retire a fôrma do forno n Deixe esfriar

n Prove

Descrição Narrativa n

VANTAGENS:

n o português é bastante conhecido por nós;

n

DESVANTAGENS:

n imprecisão;

n pouca confiabilidade (a imprecisão acarreta a

desconfiança);

n extensão (normalmente, escreve-se muito para dizer

pouca coisa).

Linguagem Algorítmica ou Pseudo-Linguagem

n Esta forma de representação de algoritmos, também

conhecida como pseudocódigo, português estruturado ou portugol, é bastante rica em detalhes e, por assemelhar-se bastante à forma em que os programas são escritos, encontra muita aceitação, sendo portanto a forma de representação de algoritmos que será adotada nesta disciplina.

n Esta representação é suficientemente geral para permitir

que a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta.

(5)

Linguagem Algorítmica

n Consiste na definição de uma pseudolinguagem de

programação, cujos comandos são em português, para representar algoritmos.

n Os algoritmos são descritos em uma linguagem chamada

pseudocódigo.

n Este nome é uma alusão à posterior implementação em uma

linguagem de programação, ou seja, quando formos programar em uma linguagem, por exemplo PASCAL, estaremos gerando código em PASCAL.

n Por isso os algoritmos são independentes das linguagens de

programação. Ao contrário de uma linguagem de programação não existe um formalismo rígido de como deve ser escrito o algoritmo.

Linguagem Algorítmica

n O algoritmo deve ser fácil de se interpretar e fácil de codificar. Ou

seja, ele deve ser o intermediário entre a linguagem falada e a linguagem de programação. EXEMPLO: Algoritmo CALCULA_DOBRO início Leia NUM DOBRO ← 2 * NUM Escreva DOBRO fim Linguagem Algorítmica n VANTAGENS:

n Independência física da solução (solução lógica apenas); n Usa o português como base;

n Pode-se definir quais e como os dados vão estar estruturados; n Passagem quase imediata do algoritmo para uma linguagem de

programação qualquer.

n DESVANTAGENS:

n Exige a definição de uma linguagem não real para trabalho; n Não padronizado.

n

Um algoritmo possui caráter imperativo, razão pela

qual uma ação em um algoritmo é chamada de

comando.

n

Ex.: algoritmo para descascar batatas para o

jantar:

n traga a cesta com batatas do porão ; n traga a panela do armário ;

n descasque as batatas ; n devolva a cesta ao porão ;

(6)

n

Um algoritmo (ou programa) apresenta dois

aspectos complementares:

n Aspecto estático: é a representação concreta do

algoritmo através de um texto contendo comandos que devem ser executados numa ordem prescrita (atemporal).

n Aspecto dinâmico: que é a execução do algoritmo no

tempo.

n

O problema central da computação consiste em

relacionar esses dois aspectos, isto é, consiste no

entendimento

(visualização)

das

estruturas

dinâmicas das possíveis execuções do algoritmo a

partir da estrutura estática do seu texto.

n A generalização do algoritmo para descascar batatas para

o jantar pode ser:

n traga a cesta com batatas do porão ; n traga a panela do armário ;

n se saia é clara então coloque avental ;

n enquanto número de batatas é insuficiente faça

n descasque uma batata ;

n devolva a cesta ao porão ;

n Um algoritmo deve ser determinístico, isto é, dadas as

mesmas condições iniciais, deve produzir em sua execução, os mesmos resultados.

n Só interessam os algoritmos executáveis em tempo finito.

Os programas de computadores nada mais são do que algoritmos escritos numa linguagem de computador

e que são interpretados e executados por uma máquina, no caso um computador. Dada esta interpretação rigorosa, um programa é por natureza

muito específico e rígido em relação aos algoritmos da vida real.

n São Softwares que permitem o desenvolvimento de

programas. Possuem um poder de criação ilimitado, desde jogos, editores de texto, sistemas empresariais até sistemas operacionais.

n Existem várias linguagens de programação, cada

uma com suas características próprias.

n Exemplos: Pascal, Clipper, C, C++, Visual Basic,

(7)

n Ao montar um algoritmo, precisamos primeiro dividir

o problema apresentado em três fases fundamentais.

n Onde temos:

n ENTRADA: São os dados de entrada do algoritmo

n PROCESSAMENTO: São os procedimentos utilizados para

chegar ao resultado final

n SAÍDA: São os dados já processados

Entrada Processamento Saída

n Quando temos um problema e vamos utilizar um

computador para resolve-lo inevitavelmente temos que passar pelas seguintes etapas:

a) Definir o problema.

b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema.

c) Terminada a fase de estudo, utilizar uma linguagem de

programação para escrever o programa que deverá a princípio, resolver o problema.

d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser retornado para a fase de estudo para descobrir onde está a falha.

n

Os algoritmos terão a seguinte estrutura:

ALGORITMO <Nome do algoritmo>

<definições>

INÍCIO

<Comandos>

FIM

.

n Para escrever um algoritmo precisamos descrever a

seqüência de instruções, de maneira simples e objetiva.

n Para isso utilizaremos algumas técnicas:

n Usar somente um verbo por frase;

n Imaginar que você está desenvolvendo um algoritmo para

pessoas que não trabalham com informática;

n Usar frases curtas e simples; n Ser objetivo;

(8)

n

Algoritmos não se aprende:

E

Copiando Algoritmos

E

Estudando Algoritmos

n

Algoritmos só se aprendem:

E

Construindo Algoritmos

E

Testando Algoritmos.

Estruturas de

Implementação de

Algoritmos

Prof. Giuliano Prado de Morais Giglio, M.Sc.

n Um algoritmo é considerado completo se os seus comandos forem do

entendimento do seu destinatário.

n Num algoritmo, um comando que não for do entendimento do

destinatário terá que ser desdobrado em novos comandos, que constituirão um refinamento do comando inicial, e assim sucessivamente, até que os comandos sejam entendidos pelo destinatário.

n Por exemplo, o algoritmo para calcular a média aritmética de dois

números pode ser escrito da seguinte forma: Algoritmo CALCULA_MÉDIA

Início

Receba os dois números;

Calcule a média dos dois números; Exiba o resultado;

Fim

n Podemos desdobrar o comando “Calcule a média dos

dois números” em:

Soma os dois números; Divida o resultado por 2;

n Após esse refinamento, o algoritmo pode ser

considerado completo, a menos que o destinatário não saiba fazer as operações de adição e divisão, ou não seja capaz de entender diretamente algum comando.

(9)

n O algoritmo estando completo, podemos

reescrevê-lo, inserindo o refinamento na posição do comando que foi refinado. Assim sendo, obtém-se:

Algoritmo CALCULA_MÉDIA Início

Receba os dois números; Soma os dois números; Divida o resultado por 2; Exiba o resultado;

Fim.

n Reescrever um algoritmo completo, com os

refinamentos sucessivos inseridos nos seus devidos lugares, permite ter uma visão global de como o algoritmo deve ser executado.

n À medida que o algoritmo passa a ser maior e mais

complexo, esta visão global torna-se menos clara e, neste caso, um algoritmo apresentado com os refinamentos sucessivos separados oferece uma melhor abordagem para quem precisar entendê-lo.

n Para a construção de Algoritmos todas as expressões

aritméticas devem ser linearizadas, ou seja, colocadas em linhas.

n É importante também ressalvar o uso dos operadores

correspondentes da aritmética tradicional para a computacional.

n A modularização é a divisão da expressão em partes,

proporcionando maior compreensão e definindo prioridades para resolução da mesma.

n Como pode ser observado no exemplo anterior, em

expressões computacionais usamos somente parênteses “( )” para modularização.

n Na informática podemos ter parênteses dentro de

parênteses.

n Exemplos de prioridades:

n (2+2)/2=2 n 2+2/2=3

(10)

n Os cálculos do computador são de pouco valor a

não ser que, primeiro, possamos fornecer os dados sobre os quais estes cálculos serão efetuados e, segundo, ver os resultados destes cálculos.

n Definimos aqui dois novos comandos da nossa

linguagem algorítmica para manusear entrada e saída.

n O comando leia nos permite ler valores dados

atribuindo-os à variáveis indicadas;

n o comando escrevanos permite mostrar os resultados.

n A entrada pode vir do teclado ou de qualquer outro dispositivo

de entrada.

n A saída pode aparecer na tela do monitor de vídeo ou ser

impressa em papel.

n Caso deseja-se imprimir o resultado, usa-se o comando

imprima

n A sintaxe destes comandos são:

leia (variável-1, variável-2, ..., variável-n)

escreva (expressão-1, expressão-2, ..., expressão-n)

n Exemplos: Imprima (Result) Escreva (A,B) Leia (Nome) Imprima (Tel) Escreva (Nota + 2) Leia (A,B,C) Imprima (Nota) Escreva (15) Leia (Nota) / Divisão ** Exponenciação Operador Operação * Multiplicação -Subtração + Adição < = Menor ou igual <> Diferente Operador Operação = Igual <= Maior ou igual < Menor que > Maior que Aritméticos Relacionais

n Os operadores lógicos servem para combinar

resultados de expressões, retornando se o resultado final é verdadeiro ou falso.

n Os operadores lógicos são:

n E (AND) = Uma expressão E é verdadeira se todas as condições

forem verdadeiras

n OU (OR) = Uma expressão OU é verdadeira se pelo menos uma

condição for verdadeira

n NÃO (NOT) = Um expressão NÃO inverte o valor da expressão ou

(11)

Tabela Verdade

-n Exemplos:

n Suponha que temos três variáveis A = 5, B = 8 e C =1 n Os resultados das expressões seriam:

Falso NÃO A <= B Falso B = C OU A >= B Verdadeiro B > C E A < B Verdadeiro NÃO A > B Verdadeiro B < C OU A <> B Falso B > C E A = B Resultado Expressões

n MOD : Retorna o resto da divisão entre 2 números inteiros.

n DIV : Retorna o valor inteiro que resulta da divisão entre 2

números inteiros.

Variáveis e

Tipos de Dados

(12)

n Sabe-se da Matemática que uma variável é a

representação simbólica dos elementos de um certo conjunto.

n 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 a execução de um

algoritmo. Embora a variável possa assumir

diferentes valores, ela só pode armazenar um valor a cada instante.

n Toda variável é identificada por um nome ou identificador.

n Exemplo: num algoritmo para calcular a área de um triângulo retângulo

pelo teorema de pitágoras (a2= b2+ c2), os identificadores A, B e C podem representar as posições de memória que armazenam o valor da hipotenusa e dos catetos.

n Nunca usar uma palavra reservada (que faça parte da linguagem

algorítmica) ⇒ poderá causar ambigüidade no entendimento do algoritmo.

n Na nossa linguagem algorítmica, vamos admitir que nossas

variáveis poderão armazenar valores numéricos ou alfanuméricos (strings).

n A operação de atribuição permite que se forneça um valor

a uma certa variável.

n Se for atribuído uma expressão à variável, será armazenado

o resultado daquela expressão.

n Se for atribuído uma outra variável, será armazenado o

conteúdo daquela variável.

n Para a operação de atribuição, utilizaremos a seguinte

sintaxe: variável ← expressão n Exemplos: X ← 2.5 NOTA ← NOTA - 1 A ← B + C C ← 1 / 3 SENHA ← 'X3Y9' NOME ← 'João' NOTA ← 10 B ← A A ← 2

n São os nomes dados a variáveis, constantes e

programas.

n Regras Para construção de Identificadores:

n Não podem ter nomes de palavras reservadas (comandos da

linguagem);

n Devem possuir como 1º caractere uma letra ou Underscore ( _ ); n Ter como demais caracteres letras, números ou Underscore; n Ter no máximo 127 caracteres;

n Não possuir espaços em branco;

n A escolha de letras maiúsculas ou minúsculas é indiferente.

n Exemplos:

(13)

n No momento que formos trabalhar com variáveis,

indiquemos o tipo de informação que uma variável pode conter, isto é, se uma dada posição de memória armazenará um número ou uma letra etc.

n O Tipo de dado podem ser:

n Primitivo = Pré-definido pela linguagem;

n Sub-Faixa = É uma parte de um tipo já existente;

n Definido pelo usuário (Escalar) = Definidos pelo

programador.

Tipos de Dados

CHAR(Caracter) e STRING(Cadeia)

n As definições de variáveis como sendo do tipo CHAR e STRING, possuem

algumas curiosidades que merecem um cuidado especial por parte do usuário.

n Uso das aspas (‘):

n Atribuição de um valor para uma variável do tipo CHAR (Caracter) ou STRING

(Cadeia) ⇒colocar o valor ( dado ) entre aspas ( ‘ ), pois esta é a forma de informar que a informação é caracter.

n Exemplo: ALGORITMO Teste VARIÁVEIS Letra : CARACTER Nome : CADEIA INICIO Letra ← ‘A’; Nome ← ‘João’; FIM

Manipulação de caracteres individuais

em STRING’s (Cadeias)

n Muitas vezes é necessário manipular caracteres individuais em uma STRING

(Cadeia).

n Utilizaremos uma forma toda especial de permitir tal operação, através do uso

de colchetes ( [ ] ) logo após o Nome da variável do tipo STRING (Cadeia), e o número do caracter que se deseja manipular entre os colchetes ( forma baseada no Pascal ).

n Exemplo: Atribuir o primeiro caracter de uma STRING a uma variável do tipo

CHAR. Algoritmo AtribuiString; VARIÁVEIS letra : CARACTER Nome : CADEIA INICIO Nome ← ‘Joao’; letra ← Nome[1]; FIM.

(14)

Manipulação de caracteres individuais

em STRING’s (Cadeias)

n Quando definimos uma variável como sendo do tipo

STRING não estamos alocando 1 posição de memória

apenas ( uma caixa, pela analogia inicial ), mas na verdade, estamos alocando até 255 caixas, uma para cada caracter da STRING (lembre-se que uma STRING pode ter no máximo 255 caracteres ).

n Ao utilizarmos o símbolo de colchete, estamos na verdade

indicando qual o caracter ( qual a caixa ) desejamos manipular.

Manipulação de caracteres individuais

em STRING’s (Cadeias)

n De acordo com o Exemplo acima, teríamos na memória a

seguinte situação:

a) Alocamos 255 bytes ( caracteres ) na memória. A estas posições de memória é dado o Nome de “Nome”.

Inicialmente estas posições de memória ( Caixas ) possuem o conteúdo indefinido.

b) Alocamos 1 byte ( caracter ) na memória. A este caracter é dado o Nome de “Letra”. Inicialmente esta posição de memória possuí o conteúdo indefinido

Manipulação de caracteres individuais

em STRING’s (Cadeias)

c) Na memória temos a seguinte situação:

d) Atribuímos a variável “Nome” o valor “João”,

obtendo na memória a seguinte configuração

Manipulação de caracteres individuais

em STRING’s (Cadeias)

e) Atribuímos a variável “Letra” o primeiro caracter da variável “Nome”, ou seja, o conteúdo da primeira posição de

memória ( caixa ). Na memória teremos a seguinte configuração:

(15)

Manipulação de caracteres individuais

em STRING’s (Cadeias)

n Obs.: É possível definir variáveis do tipo STRING(Cadeia) com menos

de 255 caracteres. Para isto, basta colocar, após a palavra STRING (Cadeia), o número de caracteres desejados entre colchetes ( [ ] ). Exemplo: ALGORITMO Define; VARIÁVEIS Nome: CADEIA[80]; INICIO FIM.

n Desta forma, o espaço ocupado por uma variável STRING(Cadeia)

passa de 255 bytes para apenas 80 bytes, na memória.

Estruturas de decisão e

repetição

Prof. Giuliano Prado de Morais Giglio, M.Sc.

n Num algoritmo, os comandos deverão ser executados numa seqüência linear,

seguindo-se o texto em que estão escritos, de cima para baixo, se não houver indicação em contrário. Linguagem Algorítmica: inicio comando-1; comando-2; . . . comando-n; Fim. n Exemplo: início leia A,B; SOMA ←A + B; escreva SOMA; Fim.

(16)

n A estrutura condicional permite a escolha do grupo de ações e estruturas a ser

executado quando determinadas condições (expressões lógicas) são ou não satisfeitas. Esta estrutura pode se apresentar de duas formas:

n ESTRUTURA CONDICIONAL SIMPLES

se condição então comando-1; comando-2; . . . comando-n; fim-se; n Exemplo: se MÉDIA >= 7 então SITUAÇÃO ←'Aprovado'; Escreva (SITUACAO); fim-se

n ESTRUTURA CONDICIONAL COMPOSTA

se condição então comando-A1 comando-A2 . . . comando-An senão comando-B1 comando-B2 . . . comando-Bn fim-se; Exemplo: . . . se PESO > 80 então escreva 'Você está obeso' escreva 'Faça atividades físicas'

senão

escreva 'Você está no peso certo'

escreva 'Procure manter sua forma'

. . .

n

Usados para tomadas de decisões para mais de 2

opções.

n

Sintaxe:

SE CONDIÇÃO ENTÃO

Comando1;

SENÃO

SE CONDIÇÃO ENTÃO

Comando2;

SENÃO Comando3;

n A estrutura de condição equivale a um ninho de SE’s. n Sintaxe: ESCOLHA <expressão> : CASO 1 Comando A1; CASO 2 Comando A2; CASO n Comando An; SENÃO Comando N;; FIM-ESCOLHA;

(17)

ØExemplo: ALGORITMO OpcoesTitulo VARIÁVEIS Titulo: STRING; Op: INTEIRO; INICIO LEIA (OP); ESCOLHA OP: CASO 1 TITULO = “OPÇÃO 1”; CASO 2 TITULO = “OPÇÃO 2”; CASO 3 TITULO = “OPÇÃO 3”; CASO 4 TITULO = “OPÇÃO 4”; CASO 5 TITULO = “OPÇÃO 5”; SENÃO

TITULO = “OPÇÃO ERRADA”; FIM-ESCOLHA;

n

A estrutura de repetição permite que uma

seqüência de comandos seja executada

repetidamente até que uma determinada condição

não seja satisfeita. Utilizaremos os comandos

abaixo para representar esta estrutura.

n Enquanto..faça n Para..faça n Repete..até

n

Enquanto .. Faça:

Sua sintaxe é:

enquanto condição faça

comando-A1;

comando-A2;

. . .

comando-An;

fim-enquanto;

n Exemplo ( Enquanto .. Faça ):

n Faça um algoritmo para ler e escrever o Nome de 20 pessoas.

ALGORITMO LeEscreve VARIÁVEIS Nome: STRING; Total: INTEIRO; INICIO Total ←0;

ENQUANTO (Total < 20) FAÇA LEIA(Nome);

ESCREVA ('Nome=', Nome); Total ←Total + 1;

FIM-ENQUANTO; END.

(18)

n Para .. Faça: n Sua sintaxe é:

PARA <Variável> DE <INICIO> Até <FIM>, PASSO <N> FAÇA

comando-A1; comando-A2; . . .

comando-An;

fim-para;

n Exemplo ( Para .. Faça):

Faça um algoritmo para ler e escrever o Nome de 20 pessoas.

ALGORITMO LeEscreve VARIÁVEIS

Nome : CADEIA Cont : INTEIRO INICIO

PARA Cont DE 1 ATE 20 PASSO 1 FACA

LEIA(Nome); ESCREVA(Nome); FIM-PARA; FIM. n

Repita .. Até:

n

Sua sintaxe é:

REPITA comando-A1; comando-A2; . . . comando-An;

ATE <Condição for verdadeira>

n Exemplo ( Repita .. Até ):

Faça um algoritmo para ler e escrever o Nome de 20 pessoas. ALGORITMO LeEscreve VARIÁVEIS Nome: CADEIA Total: INTEIRO INICIO Total ←0; REPITA LEIA(Nome);

ESCREVA(' Nome= ',Nome); Total ← Total + 1; ATÉ Total >=20;

(19)

Variáveis Compostas

Homogêneas

--

Vetores e Matrizes

Vetores e Matrizes

-

-Prof. Giuliano Prado de Morais Giglio, M.Sc.

n

Imagine que é necessário controlar uma

centena de valores de pontos em um torneio

n

ponto_1, ponto_2, ……., ponto_100

n

Array é um agregado de variáveis do mesmo

tipo e de mesmo nome

n

cada variável é distinguida pelo seu índice no

array

int ponto [100]

for (i=0; i<99; i++)

ponto [i] = 0;

n

são alocadas em posições consecutivas de

memória

ponto[0] ponto[1] ………. ponto[99]

n

As

variáveis compostas homogêneas, mais

conhecidas como

arrays, correspondem a

conjuntos de elementos de um mesmo tipo,

representados por um único nome.

n

Os arrays podem variar quanto a sua dimensão,

isto é, a quantidade de índices necessária para a

individualização de cada elemento do conjunto.

n

O array unidimensional também é conhecido por

vetor, enquanto o

array

bidimensional é

(20)

n

Cada elemento dos arrays podem ser

referenciados através de índices.

n

Exemplos:

V[1] = 4

M[1,1] = 3

T[1,1,1] = 3

V[2] = 7

M[2,3] = 4

T[2,3,2] = 9

V[5] = 3

M[3,1] = 2

T[1,2,3] = 3

n Vetores são arrays que necessitam de apenas um índice para individualizar um

elemento do conjunto.

n Declaração:

ALGORITMO Define VARIÁVEIS

<Nome>: VETOR [INICIOV : FIMV] DE <tipo> INICIO

<Comandos> FIM

onde:

n Nome = são os nomes das variáveis que se deseja declarar; n Iniciov = é o limite inferior do intervalo de variação do índice; n FimV = é o limite superior do intervalo de variação do índice; n tipo = é o tipo dos componentes da variável

n

Em Pascal:

PROGRAM Define; VAR

<Nome>: ARRAY [INICIO..FIM] OF <tipo>; BEGIN

<Comandos>; END.

(21)

n EXEMPLO:

n Declarar uma variável composta de 8 elementos

numéricos de nome NOTA. var NOTA : array[1..8] of real;

n Fará com que passe a existir um conjunto de 8

elementos do tipo real, individualizáveis pelos índices 0, 1, 2, 3, ..., 7 = 8 elementos.

n Outros exemplos de declarações de vetores:

var

IDADE : array[1..20] of integer; NOME : array[1..30] of string;

RECEITA, DESPESA : array[90..96] of real; VETOR: array[-5..5] of char;

n Para processarmos individualmente todos os

componentes de um vetor, é aconselhável o uso da estrutura FOR, para que possamos variar o índice do vetor.

n Exemplo Definir uma variável indexada como sendo

do tipo REAL, sendo que a mesma deverá corresponder a 10 posições de memória.

ALGORITMO Exemplo VARIÁVEIS

Vet : VETOR [1 : 10] OF REAL INICIO

<Comandos> FIM

n No Exemplo acima, após a definição da variável, a memória

estará como mostrado no esquema abaixo:

n Os Valores numéricos apresentados acima correspondem aos

índices da variável. n Atribuição:

<Nome>[<Índice>] ←Valor; LEIA (<Nome>[<Índice>]);

(22)

n Exemplo:

ALGORITMO Atribui VARIÁVEIS

Nomes : VETOR [1 : 20] DE CADEIA; i : INTEIRO;

BEGIN

Nomes[0] ‘João da Silva’;

PARA i 2 ATE 20 PASSO 1 FACA LEIA(Nomes[i]);

FIM PARA FIM

n Matrizes são arrays que necessitam de dois índices para individualizar um elemento do conjunto. O primeiro índice representa as linhas e o segundo as colunas. n Declaração: Para definirmos uma variável do tipo matriz, utilizamos a seguinte

sintaxe:

ALGORITMO Define VARIÁVEIS

<Nome>: MATRIZ [I : J, L:M] DE <tipo> INICIO

<Comandos> FIM

Onde:

n Nome = são os nomes das variáveis que se deseja declarar; n I = é o limite inferior do intervalo de variação do primeiro índice; n J = é o limite superior do intervalo de variação do primeiro índice; n L = é o limite inferior do intervalo de variação do segundo índice; n M = é o limite superior do intervalo de variação do segundo índice; n tipo = é o tipo dos componentes da variável

n

Em pascal:

PROGRAM Define; VAR

<Nome>: ARRAY [I..J, L..M] OF <tipo>; BEGIN

<Comandos>; END.

n EXEMPLO:

n Declarar uma matriz M, de 4 linhas por 3 colunas, constituída de

elementos numéricos inteiros.

var M : array[1..4,1..3] of integer;

n Fará com que passe a existir uma estrutura de dados agrupada

denominada M, com 4x3=12 elementos inteiros, endereçáveis por um par de índices, com o primeiro indicando a linha e o outro, a coluna.

a43 a42 a41 a33 a32 a31 a23 a22 a21 a13 a12 a11 M =

(23)

n Outros exemplos de declarações de matrizes:

Var

M1 : array[1..4,80..90] of real; M2 : array[-3..3,1..3] of char;

2) Definir uma variável indexada bidemensional para armazenar os dados de uma matriz 4 por 4 de números do tipo REAL, sendo que a mesma deverá corresponder no total a 16 posições de memória.

ALGORITMO Exemplo; VARIÁVEIS

MAT : MATRIZ [1:4,1:4] DE REAL INICIO

<Comandos> FIM

n No Exemplo acima, após a definição da variável, a memória estará

como mostrado no esquema abaixo:

n Os Valores numéricos apresentados acima correspondem aos índices da

variável. Atribuição <Nome>[<Índice>,<Índice>] ←Valor; LEIA (<Nome>[<Índice>,<Índice>]); n Exemplo: ALGORITMO Atribui VARIÁVEIS

Nomes : VETOR [1:4,1:4] DE STRING; I,J : INTEIRO;

BEGIN

PARA I 1 ATE 4 PASSO 1 FACA

PARA J 1 ATE 4 PASSO 1 FACA LEIA (Nomes [ I , J] ); FIM PARA; FIM PARA; FIM.

Aspectos

da programação

(24)

n

Metodologia de projeto de programas que

visa:

n

Facilitar a escrita dos programas;

n

Facilitar a leitura (o entendimento) dos

programas;

n

Permitir a verificação a priori dos programas;

n

Facilitar a manutenção e modificação dos

programas;

n

A tarefa básica da programação estruturada

é reduzir a complexidade, em três níveis:

n Desenvolvimento do programa em diferentes fases

por refinamento sucessivo (desenvolvimento top-down)

n Decomposição do programa total em módulos

funcionais, organizados de preferência num sistema hierárquico;

n Usando dentro de cada módulo só um número muito

limitado de estruturas básicas de fluxo de controle;

n Para as estruturas de dados usamos igualmente

representações abstratas de acordo com as necessidades do problema, que vão sendo refinadas até chegar è representação implementável na linguagem de programação. Isso nos permite desenvolver passo a passo o algoritmo-solução e as estruturas de dados em termos das categorias relevantes ao problema, e não das peculiaridades de uma linguagem específica de programação.

n Cada nova fase desse desenvolvimento “de cima para

baixo” é obtida por “refinamento” da fase anterior, até chegar a um nível de detalhamento que permita implementar o algoritmo diretamente na linguagem de programação.

n Durante a fase de projeto anterior, a solução total

vai sendo fatorada em soluções de subproblemas, o que permite geralmente dividir o programa em forma natural em módulos com subfunções claramente delimitadas, que podem ser implementados separadamente por diversos programadores em uma equipe.

(25)

n Programação orientada a objetos é uma evolução da

programação estruturada;

n Na programação estruturada temos funções ( procedures ou

rotinas) e dados (normalmente globais) que podem ser acessados por qualquer função;

n Na programação orientada a objetos, temos funções agregadas

aos dados em uma unidade chamada objeto, ou seja, os dados não estão separados das funções, mas sim unidos as mesmas;

n A tendência para os próximos anos é que a maioria das

linguagens de programação sejam baseadas em objetos.

n

Linguagem interpretada = programador roda o

código tão logo ele o tenha criado.

n

Feito pequenos ajustes, pode ser executado de

imediato;

n

Permite uma maior criatividade, detectando erros

com presteza e observando o efeito dos ajustes;

n

Exemplo : escultor;

n

Desempenho de máquina inferior aos dos

compiladores;

n

Compilador dinâmico = compila um método ao

invés do programa todo (pool de métodos

recém-compilados em memória);

n

Blocos: um conjunto de comandos com uma

função bem definida

n

Serve para definir os limites onde as variáveis

declaradas em seu interior são conhecidas

n

Variáveis locais a blocos e globais a blocos

n

Blocos podem possuir um nome: sub-programas

(funções em Pascal) ou não

n

São delimitados por

begin .. end

Linguagem Compilada e

Interpretada

(26)

If (a>b) begin

writeln( “A é maior”); end else begin writeln (“B é maior”); end; Tradutor: Compilador + Linkeditor programa.pas programa.exe A é maior

n

Linguagens de Programação: são

projetadas em função da facilidade na

construção e confiabilidade dos programas

n

Como executam em uma computador cuja

Linguagem de Máquina é bastante diferente?

n

Existem basicamente duas alternativas para

esta implementação:

1)

Interpretação

2)

Tradução

n

A interpretação de um programa é feita pela

chamada dos subprogramas, escrito na

linguagem de máquina do computador

hospedeiro, em seqüência apropriada

1.

Obter o próximo comando do programa

2.

Determinar que ações devem ser

executadas

3.

Executar essas ações

Ø

simulação de um computador hospedeiro

de uma máquina especial cuja linguagem

de máquina é de nível mais alto

(27)

n

Esta seqüência é bastante semelhante

àquela executada por computadores

tradicionais:

1. Obter a próxima instrução

2. Incrementar o “contador de programa”

3. Decodificar a instrução

4. Executar a instrução

n

Programas escritos em Linguagem de

Programação de alto nível são traduzidos

para versões equivalentes em linguagem de

máquina antes de serem executados

n

Essa tradução é feita em vários passos

n

Compilador

n

Linkeditor

n

Loader

n

Logicamente a tradução pode ser dividida em 2

grandes partes:

n

análise do programa fonte (dados de entrada)

n

síntese do programa objeto executável

n Um computador só pode executar programas em linguagens de

máquina.

n Cada programa executável é uma seqüência de instruções que

o processador central interpreta, executando as operações correspondentes.

n Esta seqüência de instruções também é representada como

uma seqüência de códigos numéricos.

n Os programas ficam armazenados em disco e, para serem

executados pelo computador, devem ser carregados (transferidos) para a memória principal.

n Uma vez na memória, o computador executa a seqüência de

(28)

n No caso da interpretação, um programa interpretador (IM),

escrito em uma linguagem de máquina (M), lê o programa (PS) e simula cada uma de suas instruções, modificando os dados do programa da forma apropriada.

n No caso da compilação, um programa compilador (CM), escrito

em M, lê o programa PC, e traduz cada uma de suas instruções para M, escrevendo um programa PM cujo efeito é o desejado.

n Como conseqüência deste processo, PM, por ser um programa

escrito em M, pode ser executado em qualquer máquina com a mesma linguagem de máquina M, mesmo que esta máquina não possua um compilador.

Ps Programa Fonte Dados de Entrada IM Interpretador Saída

Execução de programas com linguagem interpretada

Pc Programa Fonte CM Compilador PM Programa Executável Compilação Dados de Entrada PM Programa executável Saída

Execução de programas com linguagem compilada

n

Devemos notar que, na Interpretação, o

programa fonte é um dado de entrada a mais

para o interpretador.

n

No caso da Compilação, identificamos duas

fases:

n na primeira, o programa executável é a saída do

programa compilador e,

n na segunda, o programa executável é executado,

recebendo os dados de entrada e gerando a saída correspondente.

(29)

n Observamos que, embora seja comum termos linguagens

funcionais implementadas por interpretação e linguagens convencionais por compilação, há exceções, não existindo nenhum impedimento conceitual para implementar qualquer linguagem por qualquer dos dois métodos, ou até por uma combinação de ambos.

n O termo “máquina” usado acima é intencionalmente

vago.

n Por exemplo, computadores idênticos com sistemas

operacionais diferentes devem ser considerados “máquinas”, ou “plataformas”, diferentes. Assim, um programa em Pascal, que foi compilado em um PC com Windows, não deverá ser executado em um PC com Linux, e vice-versa.

Referências

Documentos relacionados

da equipe gestora com os PDT e os professores dos cursos técnicos. Planejamento da área Linguagens e Códigos. Planejamento da área Ciências Humanas. Planejamento da área

Partindo dos elementos focais que se apresentam nesse trabalho como, o absenteísmo docente nas escolas da rede municipal de ensino; a falta de controle dessas

Não obstante a reconhecida necessidade desses serviços, tem-se observado graves falhas na gestão dos contratos de fornecimento de mão de obra terceirizada, bem

A Escola Estadual Médio Solimões (EEMS), objeto deste estudo, é considerada uma escola de médio porte, segundo a classificação estabelecida pela Secretaria de

Preenchimento, por parte dos professores, do quadro com os índices de aproveitamento (conforme disponibilizado a seguir). Tabulação dos dados obtidos a partir do

Além desta verificação, via SIAPE, o servidor assina Termo de Responsabilidade e Compromisso (anexo do formulário de requerimento) constando que não é custeado

De acordo com o Consed (2011), o cursista deve ter em mente os pressupostos básicos que sustentam a formulação do Progestão, tanto do ponto de vista do gerenciamento

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo