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...
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
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.
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.
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 ;
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,
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;
n
Algoritmos não se aprende:
E
Copiando Algoritmos
E
Estudando Algoritmos
nAlgoritmos 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.
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
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
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
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:
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.
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:
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.
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.
nSintaxe:
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;
Ø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.
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é:
nSua 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;
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.
nO array unidimensional também é conhecido por
vetor, enquanto o
array
bidimensional é
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.
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>]);
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 =
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
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.
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;
nExemplo : 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
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
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
nLoader
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
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.
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.