Unidade 3 Estruturas de Programação
Prof. Anderson Fernandes
Unidade 3.1 Estrutura Seqüêncial
Prof. Anderson Fernandes
Estrutura Seqüêncial
início inteiro: A, B; leia (A,B); C:= (A+B)*B; imprima (C); fim.
Prof. Anderson Fernandes
Sequência program Calculo; var A,B,C: real; begin read (A, B); C:=(A+B)*B; write (A, B, C); end. Prof. Anderson Fernandes
Unidade 3.2 Estrutura de Decisão
Prof. Anderson Fernandes
Estruturas de controle: Condição início inteiro: A, B; A←1; B←2; se A>B então A←5; senão A←10; fim se; fim.
Prof. Anderson Fernandes
Condição: IF/ELSE program x; var A, B, C, menor: real; begin if (A<B) and (A<C) then menor:=A else if B<C then menor:=B else menor:=C; write (menor); end. Prof. Anderson Fernandes
simples
if condicao then bloco;
composta
if condicao then bloco1 else bloco2;
Condição: IF/ELSE program x; var nome: string; nota1, nota2, nota3: real; media: real; aprovado: boolean; begin write (´Digite seu nome: ´); readln (nome); write (´Digite suas 3 notas: ´); readln (nota1, nota2, nota3); media := (nota1+nota2+nota3)/3; aprovado:=(media>=6);
if aprovado then begin writeln (´Parabens ´, nome, ´ você está aprovado !´); writeln (´Sua média foi ´, media:5:2); end else begin writeln (nome, ´, você está reprovado !´); writeln (´Sua média foi ´, media:5:2); end; end.
Prof. Anderson Fernandes
Condição: CASE
CASE <expressão> OF <opção1> : <comando1>; <opção2> : <comando2>; ... ... <opçãoN> : <comandoN>; [ ELSE <comando>; ] END;
Prof. Anderson Fernandes
Condição: CASE program x; var letra: char; begin read (letra); case letra of ‘a’..’z’ : letra := chr ( ord (letra) -‐ 32 ); ‘ç’ : letra := ‘Ç’; ... ‘ñ’ : begin writeln(‘Não usado na língua portuguesa!’); letra:= ‘?’; end; else begin writeln(‘Não está na lista dos aceitos...’); letra:= ‘?’; end; end; Prof. Anderson Fernandes end.
Unidade 3.3 Estrutura de Repetição
Prof. Anderson Fernandes
Estruturas de controle: RepeYção início inteiro: A, B, I, C; A←1; B←1; I←1; enquanto I<5 faça C←A+B; A←B; B←C; I ←I+1; fim enquanto; fim. Prof. Anderson Fernandes
RepeYção: while (enquanto) while condição do begin comandos; end;
program x; var resp: char; begin resp := ‘X’; while ( resp <> ‘N’ ) and ( resp <>’n’ ) do begin writeln (‘Olá!’); write (‘Novamente (S/N) ? ‘); readln (Resp); end; end. Prof. Anderson Fernandes
RepeYção: while (enquanto) ...
readln (Media); { parar com -‐1 (flag=sinal) } while Media <> -‐1 do begin if Media >= 6.0 then writeln (‘Aprovado’) else writeln (‘Reprovado’); readln (Media); end; ... Prof. Anderson Fernandes
RepeYção: while (enquanto) -‐ ERROS!
... WHILE Idade < 20 { Laço Infinito! } DO Salario := Salario – Desconto; ... X := 1.0; WHILE X < 10.0 { Condição mal definida } DO X := X – 0.1; ... Resp := ‘?’; { Laço Infinito! } WHILE Resp <> ‘S’ DO WriteLn (‘Novamente (S/N) ? ‘); ReadLn (Resp); ... Prof. Anderson Fernandes
RepeYção: for (para...) program x; var aluno: integer; nota1, nota2: real;
for var := inicial to final do begin comandos; end;
begin for aluno := 1 to 5 do begin readln (nota1, nota2); writeln (‘Média = ‘, (nota1+nota2)/2); end; end. Prof. Anderson Fernandes
RepeYção: for (para...) program x; var f, i, N: integer; begin read (N); f:=1; for i:=1 to N do
f:=f*i;
write (f); end. Prof. Anderson Fernandes
RepeYção: for (para...)
program x; var c: char; begin for c:=´Z´ downto ´A´ do
write (c);
end.
Prof. Anderson Fernandes
RepeYção: repeat ... unYl repeat comandos; unYl condicao;
repeat writeln (‘Olá!’); write (‘Novamente (S/N) ? ‘); readln (resp); unnl ( resp = ‘N’ ) or ( resp =’n’ ) ; ... repeat { -‐1 pára o programa } begin readln (Media); if (Media <> -‐1) then if ( Media >= 6.0 ) then writeln (‘Aprovado’) else writeln (‘Reprovado’); end; unnl Media = -‐1 ; ... Prof. Anderson Fernandes
Exercício • Fazer um programa que calcule o valor de ex através da série:
ex = x0 + x1/1! + x2/2! + x3/3! + ...
com erro inferior a 0,0001.
Prof. Anderson Fernandes
Trabalho • Fazer um programa para calcular o número de dias decorridos entre duas datas, sabendo-‐se que: – cada par de datas é lido numa linha, a úlnma linha contém o dia neganvo (-‐1) : “dia1 mês1 ano1 dia2 mês2 ano2” – a data1 é mais annga que a data2; – o ano está digitado com 4 dígitos; – considerar os anos bissextos. Um ano é bissexto se for divisível por 400.
Prof. Anderson Fernandes
Unidade 3.4 Combinação de Estruturas
Prof. Anderson Fernandes
Arrays (“Variáveis compostas homogêneas”)
• Arrays unidimensionais:
iden0ficador: array [inicial..final] of 0po; ex: var Nota: array [1..10] of integer;
7,2
4,8
6,4
5,1
2,2
9,2
8,3
7,4
5,9
8,9
1
2
3
4
5
6
7
8
9
10
X:=Nota[3]; { X ← 6,4 } Prof. Anderson Fernandes
Arrays (“Variáveis compostas homogêneas”)
• Exr: Leia cinco elementos e imprima
program Le; var a: array[1..5] of integer; i: integer; begin for i:=1 to 5 do read (a[i]); for i:=1 to 5 do writeln (a[i]); end.
Prof. Anderson Fernandes
Arrays (“Variáveis compostas homogêneas”)
• Exr: Ler e ordenar uma lista de N números Idéia: Para inserir um número aj supõe-‐se a1, a2, ..., aj-‐1 já ordenados, então compara-‐se aj com aj-‐1, aj-‐2, ... até se descobrir que ele deve ser inserido entre ai e ai+1. Move-‐se então ai+1 e os elementos seguintes, já ordenados, atribuindo-‐se a ai+1 o valor original de aj. Prof. Anderson Fernandes
Arrays (“Variáveis compostas homogêneas”)
• Arrays mulndimensionais: iden0ficador: array [i1..f1, i2..f2, ..., in..fn] of 0po; ex: var Matriz: array [1..4, 1..4] of integer; 1
1
2
3
4
2
5
6
7
8
3
9
10
11
12
4
13
14
15
16
1
2
3
4
Prof. Anderson Fernandes
X:=Matriz[3,2];
{ X←10 }
Exercício • Implementar um programa em PASCAL que leia duas matrizes A4x4 e B4x4 e imprima a matriz resultado C = A*B.
Prof. Anderson Fernandes
Registros (“Variáveis compostas heterogêneas”)
• São conjuntos de dados logicamente relacionados, mas de npos diferentes.
CADASTRO PESSOAL Nome: Endereço: Bairro: Data de nascimento:
Cidade: /
/
Profissão:
Prof. Anderson Fernandes
UF:
Registros Var Idennficador: record cadastro: record componentes; nome: string[40]; endereco: string[100]; end; bairro: string[40]; cidade: string[40]; Ex: Writeln(´Nome: ´, cadastro.nome); uf: string[2]; dia_nasc, mes_nasc, ano_nasc: integer; profissao: string[40]; end;
Prof. Anderson Fernandes
Registros dentro de Registros Ex: Writeln(´Estado: ´, cadastro.endereco.uf);
Var cadastro: record nome: string[40]; endereco: record rua: string[100]; bairro: string[40]; cidade: string[40]; uf: string[2]; end; dia_nasc, mes_nasc, ano_nasc: integer; profissao: string[40]; end;
Prof. Linguagem Anderson PFASCAL ernandes
Conjunto de Registros Writeln(´Estoque da camisa cod.55: ´, mercadorias[55].camisas.estoque);
Var camisas: record descricao: string[100]; preco: real; estoque: real; end; mercadorias: array[1..100] of camisas;
Prof. Anderson Fernandes
idennficador: array [i1..f1, i2..f2, ..., in..fn] of Ypo;