Prof. Sidney Cassemiro do Nascimento
Lógica de Programação IFS
2013/2
2
Conteúdo
Introdução
Programação Estruturada Linguagem Pascal
3
Origem
Criada em 1968 pelo prof. Niklaus Wirth (Suíça)
Homenagem a Blaise Pascal (1623-1662) Inicialmente destinada à programação
científica
Linguagem estruturada
Favorece o uso de boas técnicas de programação
4
Algoritmo x Programa
Algoritmo: “Conjunto de etapas finitas,
ordenadamente definidas com o propósito de obter soluções para um determinado problema.”
Programa: “Formalização de um algoritmo em uma linguagem inteligível pelo computador. É escrito em uma linguagem de alto nível, gerando o
programa fonte.”
5
Conceitos básicos
Qual o tipo de linguagem que o computador entende?
– Linguagem de máquina
Como podemos fazer a tradução de uma
linguagem de programação para linguagem de máquina?
– Usando um compilador
Como um programa é executado no computador?
– Primeiro ele é carregado na memória e depois cada instrução é executada de acordo com a lógica do programa
6
Conceitos básicos
Linguagem de programação: As
linguagens de programação constitui um conjunto de regras sintáticas bem definidas e se seguidas, é
possível construir um programa de computador.
Exemplos de linguagem : Pascal, C, C++, Java e etc.
Compiladores: O compilador é uma ferramenta ou um aplicativo cuja função é "traduzir" o código
escrito em linguagem de alto nível (linguagem de programação) para um código de baixo nível
(linguagem de máquina) permitindo assim, a criação de um programa de computador (aplicativo).
7
Compiladores
8
Programação Estruturada
Qual são os objetivos da programação estruturada?
– Facilitar a escrita dos programas
– Facilitar a leitura dos programas
– Permitir a verificação prévia dos programas
– Facilitar a manutenção e modificação dos programas
Porque ela é tão importante?
– Devido a complexidade dos sistemas
9
Programação Estruturada
Qual as características da programação estruturada?
– Desenvolvimento Top-Down
– Modularização
– Estruturas de Controle
Quais os problemas na produção de software?
– Confiabilidade x Complexidade
– Manutenabilidade
– Documentação
– Fluxo de controle dos algoritmos
10
Programação Estruturada
Desenvolvimento Top-Down
– identificar o sistema que se deseja modelar
– ir descendo cada vez mais no nível de especificação dos sub-sistemas relacionados
Modularização
– separar o sistema em pequenos blocos funcionais
– realizar o encadeamento destes blocos funcionais
– alterações a nível de bloco => reaproveitamento de código fonte
Estruturas de controle: sequencial, condicional e repetitivo
11
Fases
1) Definição do problema
2) Desenvolvimento de um algoritmo
3) Transcrição para a linguagem (PASCAL) 4) Digitação do programa
5) Compilação
6) Executa e Análise dos resultados
12
program SomaPares; {nome do programa} var par: integer; { declaração de variáveis } soma: integer;
begin { inicio do bloco principal do programa }
soma := 0; { inicializa a variável soma }
par := 0; { inicializa a variável par }
while par <= 10 do { loop da soma }
begin { inicio do comando enquanto }
soma := soma + par; { acumula a variável par }
par := par + 2; { adiciona 2 a variável par }
end; { fim do comando enquanto }
writeln (soma); { escreve o valor da variável soma }
13
Ambiente de programação
PascalZIM
– http://br.geocities.com/pascalzim/ – Espaço em disco: 1,11 Mb
– Sistema Operacional: Windows 95, 98, ME, XP, Vista*, NT4 ou 2000
Free Pascal
– http://www.freepascal.org/
– Espaço em disco: 130 Mb
– Sistema Operacional: DOS, UNIX, Windows, OS/2 ou Mac OS/2
Dev-Pascal
– Espaço em disco: 26 Mb
14
Comentários
Usado para aumentar a clareza do programa, embora não seja analisado pelo computador:
{ comentário } ou (* comentário *)
Ex:
var mat: integer; { num. de matricula } nome: string; { nome do aluno }
15
Palavras Reservadas
absolute and array asm begin case const constructor destructor div do downto else end file for function goto if implementation in inherited inline interface label mod nil not object of on operator or packed procedure program record reintroduce repeat self set shl shr string then to type unit until uses var while with xor Linguagem Pascal16
Formato básico de um programa
Todo programa em PASCAL deve ter a seguinte forma:
– program <nome>; – <bloco>.
– Onde:
<nome> - nome do programa <bloco> - bloco do programa
17
Bloco do programa
Linguagem Pascal
O <bloco> é formado por:
const
//declaração de constantes;
type
//definição de novos tipos;
var
//declaração de variáveis;
//definição de funções e procedimentos;
begin
//sequência de comandos;
18
Constantes
Valor fixo;
Não muda durante a execução de um programa;
Podem ser numéricas, lógicas ou alfanuméricas (literal).
Ex:
Const
e = 2.7182818; { Real type constant. } a = 2; { Ordinal (Integer) type constant. } c = ’4’; { Character type constant. }
s = ’This is a constant string’; { String type constant. } k = chr(32);
19
Definição de novos tipos
Uma vez definido o novo tipo, este passa a ser referenciado pelo seu identificador.
Exemplo:
type Indices = 0..10; Letras = ‘A’..’Z’; Faixa = -3..3; var i, k: Indices;
letra, opcao: Letras; fx: Faixa;
20
Variáveis
São representadas por identificadores Formado por:
– uma letra, ou
– uma letra seguida de letras ou dígitos:
Ex: A, Nota, matricula, x, a, a1, a2, dt, Tot32Sub
Maiúsculas são iguais a minúsculas: dt = DT
var lista-de-variáveis: tipo;
onde tipo=integer, real, boolean, char,
string ou novo tipo (pré-definido)
21
Comando de atribuição
Identificador := expressão; program Exemplo;
var A, B, X, Y: integer; { tipo inteiro } Media: real; { tipo real }
teste: boolean; { tipo lógico } letra: char; { tipo caractere }
cor: string; { tipo pré-definido cadeia de caracteres } begin
X := 1; B := 3; A := B; Media := (A+B)/2; Y := X-1; teste := (X=0) and (Y<>2);
letra := ‘K’; cor := ‘azul’; end.
22
Expressões aritméticas
Ordem de prioridade:
– 1a: *, /, div, mod
– 2a: +, -
div - quociente inteiro (divisão e truncamento, sem arrendondamento)
mod - resto inteiro da divisão
begin
x := 11 div 4; { x = 2; retorna o quociente } y := 11 mod 4 { y = 3; retorna o resto }
z := sqrt(x); { x = 4; retorna a raiz quadrada } w := sqr(z); { w = 2; retorna o quadrado }
end.
23
Expressões lógicas
Relações
– A<>B, nome=‘Maria’, mat<0, tot=0 Operadores lógicos
– p and q, p or q, not p
Ex: (idade>18) and (nome=‘Luzia’) Prioridade
– 1a: not
– 2a: *, /, div, mod, and – 3a: +, -, or
– 4a: =, <>, <, <=, >=, >, in
24
Expressões literais
Caracter: chr(cod) { cod=código ASCII }
Ordem: ord(char) { código ASCII, char=caracter }
Sucessor do caracter: succ(char)
Antecessor do caracter: pred(char)
25
Comandos de entrada
Leitura
program leitura;
var cod: integer; nota: real;
Begin
read (cod); read (nota); read (cod, nota);
readln (cod, nota); { a diferença é que o readln gera uma mudança de linha após a leitura dos valores }
end.
26
Escrita
program escrita;
var cod: integer; nota: real; begin
cod := 1010; nota := 7.5;
write(cod, ’ ‘); write(nota); // write (cod, ' ', nota);
writeln; // pula uma linha
writeln(’Código: ‘, cod); writeln(’Nota: ‘, nota:4:1); // writeln (‘Código: ‘, cod,’ ‘, ‘Nota: ‘, nota:4:1);
{ a diferença é que o writeln gera uma mudança de linha após a escrita dos valores }
end.
Linguagem Pascal
27
Formatação na escrita
program formata;
var a,b: real; k, l : char;
begin
a:=3.2; b:=5.81; k:=‘+’; l:=‘=’;
write (a:5:2, k:2, b:5:2, l:4, a+b:6:3);
end.
Saída:
3.20 + 5.81 = 9.010 Linguagem Pascal
28
Sequência
begin
end;
Importante a indentação dos comandos (recuo para direita)
– Lembrar que o programa não será mantido apenas por você, outras pessoas irão também dar manutenção nele
Comando_1; ...
Comando_N;
29
Seleção
A sintaxe do comando simples é mostrada abaixo:
if (Expressão Lógica) then
Sequência;
O comando de seleção simples funciona da seguinte maneira:
1.A expressão lógica é resolvida;
2.Se o resultado da expressão for true, então a
Sequência será executada;
3.Caso o resultado seja false a Sequência não será executada.
30
Seleção
A sintaxe do comando composto é mostrada abaixo:
if (Expressão Lógica) then Sequência_1
else
Sequência_2;
O comando de seleção composta funciona da seguinte maneira:
1.A expressão lógica é resolvida;
2.Se o resultado da expressão for true, então a
Sequência_1 será executada;
3.Caso o resultado seja false a Sequência_2 será executada.
31
Comando de Seleção Aninhado
É possível ter casos em que seja
necessário a utilização de um comando de seleção dentro de outro comando de
seleção
O comando de seleção aninhado permiti a avaliação de diversas condições para os possíveis valores de um dado conjunto de variáveis
32
Comando de Seleção Aninhado
Abaixo segue um exemplo de um trecho de um código utilizando comando de seleção aninhado:
...
if Num1 > Num2 then
writeln(‘O maior número é: ’, Num1)
else if Num1 < Num2 then
writeln(‘O maior número é: ’, Num2)
else
writeln(‘Os números são iguais’);
33
Comando escolha
O comando ESCOLHA (case), corresponde ao comando SE-ENTÃO, mas de uma forma mais compacta nas operações de seleção.
Ex.:
var c: char; ...
Case c of
’a’ : WriteLn (’A pressed’);
’b’ : WriteLn (’B pressed’);
’c’ : WriteLn (’C pressed’);
else
WriteLn (’unknown letter pressed : ’, c);
end;
34
Comando de Repetição - Enquanto
A sintaxe do comando while é mostrada abaixo:
while (Expressão Lógica) do Sequência;
O comando while analisa a Expressão
Lógica e enquanto o seu resultado for, o
valor lógico, true a Sequência é executada.
35
Comando de Repetição - Repita
A sintaxe do comando repeat é mostrada abaixo:
repeat
Sequência;
until (Expressão Lógica);
O comando repeat executa a Sequência até que o valor retornado pela Expressão
Lógica seja true.
36
Comando de Repetição - Para
A sintaxe do comando for é mostrada abaixo:
for variável := valor_inicial to / downto
valor_final do
Sequência;
O comando for incrementa, a variável, a partir do valor_inicial de uma unidade, até que, esta atinja o valor_final. E para cada incremento a Sequência é executada.
37
Estruturas de Dados Homogêneas
Estruturas de dados homogêneas são
tipos de dados que permitem agrupar em uma mesma estrutura variáveis do mesmo tipo básico.
Arrays Vetores Matrizes
38
Vetores
No caso de vetores, cada elemento possui um índice (unidimensional) que o diferencia dos outros elementos. A sintaxe da
declaração de vetor é da forma:
var identificador[,..,identificador]:
array[1..tamanho] of tipo_var;
39
Matrizes
Matrizes também são tipos de dados que
permitem agrupar em uma mesma
estrutura variáveis do mesmo tipo básico, sendo que cada elemento possui agora dois índices (bidimensional) que o
diferencia dos outros elementos. A sintaxe da declaração da matriz é da forma:
var identificador[,..,identificador]:
array[1..tam1,1..tam2] of tipo_var;
40
Estruturas de Dados Heterogêneas
Estruturas de dados heterogêneas são
tipos de dados que permitem agrupar em uma mesma estrutura mais de tipo de
dados.
Registro
As variáveis constituintes de um registro são denominadas campos;
Em Pascal, os tipos registro devem ser
declarados antes das definições das variáveis através da instrução type.
41
Registro
type
identificador_registro = record
<declaração dos campos>;
end; var
identificador_var: identificador_registro;
42
Modularização
Modularização é um técnica de
decomposição em unidades funcionais
(subrotinas), proveniente da programação estruturada.
Uma subrotina é um sub-programa com variáveis e comandos próprios e que, para ser executada, precisa ser chamada pelo programa principal.
43
Modularização
Subrotinas
São trechos de códigos;
Devem ser logicamente coerentes;
Cada um deve realizar uma função definida; De modo geral a estrutura da subrotina e a mesma do programa principal, isto é, tem o cabeçalho e o corpo.
44
Modularização
Na linguagem PASCAL temos dois tipos de subrotinas:
Função (Function);
Procedimento (Procedure).
Tanto as funções como os procedimentos devem ser colocados após todas as outras subáreas (como const, type e var) e antes
do bloco do programa.
45
Função
Uma função é um bloco de programa no qual são válidas todas as regras de
programação vistas;
Uma função (function) sempre retorna um valor, que é utilizado exatamente no ponto onde a função é chamada no bloco de
origem.
O valor de retorno pode ser numérico, lógico ou literal.
46
Função
function nome_funcao [(par1[..,parN]:tipo[;..;parA[..,parZ]:tipo]) :tipo_retorno]; var//Declarações de variáveis locais;
begin
//Comandos;
end;
47
Função - Exemplo
function fatorial(n:integer):integer; var i,f: integer; begin f := 1; for i := 1 to n do f := f * i; fatorial := f; end; Linguagem Pascal
Com relação a esta função vejamos alguns itens:
Qual o nome da função? O que ela faz?
O que retorna?
Escreva um programa completo que a utilize.
48
Procedimento
A diferença básica entre um procedimento (procedure) e uma função (function) é o fato do procedimento NÃO possuir valor de retorno.
A função retorna um valor, o procedimento não.
49
Procedimento
Procedure nome_procedimento
[(par1[..,parN]:tipo[;..;parA[..,parZ]:tipo])];
var
//Declarações de variáveis locais;
begin
//Comandos;
end;
50
Procedimento - Exemplo
procedure troca(var x,y: integer); var temp: integer; begin temp := x; x := y; y := temp; end; Linguagem Pascal
Com relação a este procedimento vejamos alguns itens:
Qual o nome do procedimento? O que ele faz?
O que retorna?
Escreva um programa completo que o utilize.
51
Passagem de parâmetros
Nomenclatura dos parâmetros
Reais: chamadora; Formais: subrotina.
Linguagem Pascal …
Procedure Troca (var X,Y: integer);
…
Begin // bloco do programa …
Troca ( A,B );
… End.
52
Passagem de parâmetros
Passagem
por valor: Apenas o valor é transferido. Então, as
alterações feitas nos parâmetros formais (da subrotina) não alteram os reais (chamadora).
por referência: O endereço do parâmetro real é
transferido. Então, as alterações nos parâmetros formais da subrotina na verdade estão sendo feitas sobre os parâmetros reais.
Declaração
Linguagem Pascal
procedure inicializa ( var A,B: real; C: real; var D: integer );
por referência