Programação II
Prof. Jano Moreira de Souza e
Jonice Oliveira
Objetivos

Conceitos mais profundos de
programação Pascal.
Revisão Programação I;
 Bibliotecas;
 Arquivo Texto;
 Arquivo Binário;
 Ponteiros e Estruturas Encadeadas;
 Estruturas Avançadas de Busca.

O Curso
Aulas Teóricas – 2ª. Feira (8:00/10:00);
 Exercícios Práticos - sem nota;
 Trabalhos em Grupo de 3-5 pessoas;


Definam os grupos;
2 Provas;
 Período: 06/agosto  3/Dezembro (18
aulas)
 Monitor: Rafael De Martino

Avaliação

2 provas (60%)
1ª Prova: 24 setembro
 2ª Prova: 12 novembro
 Prova 2ª.Chamada: 26 novembro

 Matéria

Completa
Trabalhos em Grupo (40%)
Contatos
Prof. Jano – [email protected]
 Jonice Oliveira – [email protected]
 Página do curso:

http://www.cos.ufrj.br/~jonice/classes/comp2/index.htm
Obs: Ainda
NÃO
atualizada!!!
O Primeiro Programa
Programar significa resolver um problema
usando uma solução que o computador
seja capaz de realizar;
 Para tanto, usamos uma linguagem de
programação que o computador seja
capaz de “entender”;


Linguagens de Alto Nível
Tipos de Linguagem

Linguagem de alto nível





Este é o tipo de linguagem de programação que é
usado efetivamente na prática para escrever
programas
O grau de abstração é bem alto, próximo ao modo de
o ser humano pensar
Neste nível, não trabalhamos com o conceito de
instrução de máquina e sim com o de comando
Um comando perfaz várias instruções de máquina
As posições de memória são denotadas por variáveis
e constantes
Tipos de Linguagem

Linguagem de alto nível



Todo programa escrito em linguagem de alto nível
também tem que passar por um processo de
tradução para linguagem de máquina
Esse processo é executado por um programa
tradutor chamado compilador ou, em certas
situações, interpretador
Sem um compilador ou interpretador, os programas
escritos em linguagem de alto nível resultam em
peças inúteis na prática, pois o computador não é
capaz de executá-los diretamente
Compilador X Interpretador

1. Compilador
Erros de
Compilação
Editor
Compilador
Código Fonte
Bibliotecas
Externas
Erros de
Linkedição
Linkeditor
Código Objeto
Código Executável
Erros na
Execução
Compilador X Interpretador

Interpretador, que traduz os comandos ``passoa-passo'' e na medida da necessidade;

LeituraTradução  Execução de cada linha do
programa-fonte,
Linguagem Pascal
Pascal é uma linguagem de alto nível
 Ela consiste em:

comandos
 tipos de dados


Ela contém também maneiras de
modularizar o desenvolvimento de
programas

funções e procedimentos
Esquema de Programa Pascal

Todo programa escrito em Pascal tem a
seguinte forma geral:
program Nome_do_Programa;
Declarações
begin
Comandos
end.
O Primeiro Programa

Problema
Efigênia e Cristóvão querem calcular a média
de dois números inteiros por meio de um
computador
 Eles sabem como calcular média, mas não
sabem usar computador
 Para tanto, pediram ajuda a vocês.

O Primeiro Programa

Solução



A média é uma estatística muito utilizada na prática,
quando se quer representar por apenas um valor um
conjunto de valores numéricos
Uma forma fácil de estimar a média de um conjunto
de dados numéricos é somar todos os dados e,
depois, dividir essa soma pelo número de dados do
conjunto
No nosso caso, temos apenas dois dados o que torna
a solução mais fácil ainda
Algoritmo da Solução
1.
2.
3.
4.
Entre com os dois números no
computador
Calcule a soma dos dois números
Calcule a média dos números
Imprima a média
Programa da Solução
program Media( input, output );
{ Calcula a média de dois números inteiros. }
var x, y : integer;
m : real;
begin
{ Lê dois números inteiros. }
writeln( 'Digite dois números inteiros:' );
readln( x, y );
{ Calcula a média dos números. }
m := (x + y)/2;
{ Imprime a média. }
writeln( 'A média deles é ', m );
end.
Execução do Programa
Digite dois números inteiros:
56 75
A média deles é 6.550000000000000E+001
O Alfabeto do Pascal

O alfabeto da linguagem Pascal consiste
em:
letras
 dígitos
 símbolos especiais
 palavras-chaves

O Alfabeto do Pascal

Letras

Consiste nas letras latinas maiúsculas e
minúsculas
 A,
B, C, ..., Y, Z
 a, b, c, ..., y, z

Dígitos

São os dígitos decimais indo-arábicos
 0,
1, 2, ..., 9
O Alfabeto do Pascal

Símbolos especiais

São os símbolos usados para delimitadores,
pontuação, operadores, etc.
+, -, *, /, =, <>, <, >, <=, >=, (, ), [, ], :=, ., ,, :,
;, .., ', ^

Palavras-chaves

São palavras da língua inglesa usadas como
se fossem símbolos individuais em várias
partes de um programa
O Alfabeto do Pascal

Palavras-chaves

Elas são:
 div,
mod, nil, in, or, and, not, if, then, else,
case, of, repeat, until, while, do, for, to,
downto, begin, end, with, goto, const, var,
type, array, record, set, file, function,
procedure, label, packed, program
As palavras-chaves da linguagem Pascal são
reservadas
 A linguagem Pascal não distingue letras
maiúsculas de minúsculas

Números
Os números podem ser representados em
Pascal em duas formas:
 inteiros
 reais
 Um número inteiro pode ser positivo,
negativo ou zero
 Um número inteiro é escrito como uma
seqüência de dígitos que pode ser
precedida por um sinal, + ou 
Números

Exemplos de números inteiros válidos:
6
0
-6
+7000000

Números inteiros inválidos:
6.437.271
-6,0
-6.0
Números
Os números reais contêm uma parte
fracionária ou um fator de escala
 A parte fracionária é separada da parte
inteira por um ponto decimal
 O fator de escala é um sufixo contendo a
letra E ou e, seguida de um inteiro. Este
inteiro é a potência de 10 pela qual se
deve multiplicar o número para obter sua
grandeza correta

Números

Exemplos de números reais válidos:
0.0
0.873
-74.1
73.36789
0E0
8.73E+02
-741E-1
0.7336789E2
Números

Exemplos de números reais inválidos
0.
.736
2,736.45
25.94E
245.62E0.5
E34
5.E2
Números

As seguintes formas são todas corretas
para escrever o número real 253.0:
253.0
2.53E2
25.3E+01
253E0
2530E-1
Identificadores
Certos itens de um programa requerem
um nome para que sejam identificados
 Os nomes são chamados de
identificadores
 Um identificador consiste em uma letra
seguida por qualquer quantidade de
outras letras ou dígitos
 Na prática, os identificadores devem ser
significativos

Identificadores

Exemplos de identificadores válidos
I
ovni
PC49
Umnomelongodefato
UmExemploQualquer

Exemplos de identificadores inválidos
1abc
erva-doce
$100
Identificadores Padrões


Existem alguns identificadores que são pré-declarados
em qualquer implementação do Pascal padrão
Eles são:
abs
eoln
maxint
pred
round
trunc
arctan
exp
new
put
sin
unpack
boolean
false
odd
read
sqr
write
char
get
ord
readln
sqrt
writeln
chr
input
output
real
succ
cos
integer
pack
reset
text
eof
ln
page
rewrite
true
Cadeias de Caracteres
Uma seqüência de caracteres entre
apóstrofes forma uma cadeia de
caracteres
 Pode ser chamada também pelo nome em
inglês: string
 Exemplos de cadeias

'Isto é um exemplo de cadeia'
'?'
'Seu nome é Joana D''Arc'
Comentários
São frases colocadas por todo um
programa com o objetivo de explicar ou
clarear partes do código-fonte
 Eles vêm entre chaves { e }, ou, às
vezes, (* e *). Ainda existe //
 Comentários são completamente
ignorados pelos compiladores
 Sua função é apenas aumentar a clareza
e documentar um programa

Estrutura Básica de um Programa
em Pascal
program identificador;
parte_das_declarações
begin
parte_dos_comandos
end.
Variáveis
Variável de programa é uma abstração
para célula de memória
 Portanto uma variável armazena um valor
ou estado

Declaração de Variáveis



Em Pascal, toda variável para ser usada em um
programa tem que ser declarada antes
As variáveis de um programa são declaradas na
parte de declarações
Declarar uma variável significa instruir o
computador a reservar espaço na memória o
qual passará a ser referenciado pelo nome da
variável apresentado na declaração
Declaração de Variáveis




Além disso, na declaração, um tipo é associado
à variável
Ou seja, o tipo de uma variável determina quais
valores podem ser armazenados pela variável
Em Pascal, desde o momento em que uma
variável é criada, seu tipo não pode ser
modificado mais posteriormente
Dizemos assim que a linguagem é
estaticamente tipada
Declaração de Variáveis

Sintaxe
var lista_de_variáveis : tipo;
lista_de_variáveis : tipo;
...
lista_de_variáveis : tipo;
Declaração de Variável

Exemplos
var x : integer;
a, b : char;
area, perimetro : real;
temTelefone : boolean;
Criação de Variáveis
A partir do momento em que uma variável
é criada, ela já possui um valor
 Este valor inicial conhecido pode ser
modificado durante a execução do
programa

Destruição de Variáveis
Uma variável deixa de existir quando o
bloco de programa ou de subprograma em
que ela foi criada termina de ser
executado
 Ao ser executado o último comando de
um programa, toda a memória que foi
alocada para o nosso programa é liberada
para o sistema operacional e assim as
variáveis do programa são destruídas

Comandos
Os comandos têm a função essencial de
manipular e alterar o estado armazenado
nas variáveis
 Existem vários comandos em Pascal,
porém o mais fundamental de todos é o
comando de atribuição
 O comando de atribuição modifica
explicitamente o valor que uma variável
armazena

Comando de Atribuição

Sintaxe
variável := expressão

Semântica
A expressão que aparece do lado direito do
operador de atribuição,:=, é avaliada. O valor
resultante da avaliação é então atribuído à
variável que aparece do lado esquerdo
 Isto é, o valor atual da variável é reposto pelo
novo valor resultante da avaliação da expressão

Comando de Atribuição



O comando de atribuição destrói o valor
corrente armazenado na variável—obviamente,
ele não destrói a variável
O valor da expressão passa a ser o novo valor
armazenado na variável
Exemplos
a
a
j
p
c
:=
:=
:=
:=
:=
3.52
b*b*b
j + 1;
(j > 0) or (c <> ' ')
'.'
Entrada e Saída Simples de Dados
Dentre os comandos simples da
linguagem, podemos considerar os de
entrada e saída de dados
 Na realidade, em Pascal, a entrada e a
saída são realizadas por meio de
chamadas de procedimentos padrões
 Por detrás, esses procedimentos de
entrada/saída utilizam estruturas de
arquivo para realizar as operações

Entrada de Dados

Toda informação que quisermos passar
para o computador é realizada por meio
dos procedimentos:
 read
 readln

Sintaxe
read( lista_de_variáveis )
Procedimento read

Exemplos
read(
read(
read(
read(

a )
alfa, beta, gama )
input, a )
input, alfa, beta, gama )
A chamada
read( v1, v2, v3, ..., vn )

é equivalente a
read( v1 ); read( v2 ); read( v3 ); ...;
read( vn )
Saída de Dados
Qualquer informação produzida por um
computador fica conhecida por nós
somente se for realizada alguma operação
de saída
 Em Pascal, podemos realizar uma saída
de dados por meio dos procedimentos
padrões:
 write
 writeln

Procedimento write

Exemplos
write(
write(
write(
write(
write(
a, b, c
2*x + 7
output,
output,
'a = ',
+ 1 )
)
a, b, c + 1 )
2*x + 7 )
x*x - 2*x - 5 )
Saída Formatada



A linguagem Pascal permite uma capacidade
limitada de formatação do texto de saída por
meio dos procedimentos write ou writeln
A cada valor de saída podemos acrescentar até
dois sufixos separados pelo símbolo especial
dois-pontos
Sintaxe
valor_de_saída : largura_do_campo : comprimento_da_fração
Saída Formatada

Exemplo

Suponha que a variável a seja do tipo real e
contenha o valor -0.357000000E+02
Comando
Saída
write( a )
-0.357000000E+02
write( a:10 )
-0.357E+02
write( a:5:1 )
-35.7
write( 'a = ', a:5:1 )
a = -35.7
Projeto de Programação

Problema


Queremos calcular a área e o perímetro de
um círculo dado seu raio
Análise do problema
O cálculo da área e do perímetro de um
círculo já foi bem estudado pela geometria,
desde a época dos gregos antigos
 Descobriu-se que estes cálculos envolviam o
número irracional 

Projeto de Programação

Análise (cont.)

Dado o comprimento do raio r de um círculo,
temos que sua área A e seu perímetro P são
dados pelas fórmulas:
Ar ,
2
P  2 r
Projeto de Programação

Algoritmo

Dados



1.
2.
3.
4.
raio do tipo real
área do tipo real
perímetro do tipo real
Leia o raio do círculo
Calcule a área
Calcule o perímetro
Imprima a área e o perímetro
Implementação
1 program Circulo;
2 { Calcula a área e o perímetro de um círculo dado o raio. }
3 const
4
PI = 3.141592653589793;
Definição de constante
5 var
6
raio, area, perimetro : real;
7 begin
8
writeln( 'Entre com o raio do círculo:' );
9
readln( raio );
10
11
area := PI * sqr( raio );
12
perimetro := 2.0 * PI * raio;
Saídas com a formatação
default para números reais
13
14
writeln( 'A área do círculo é: ', area );
15
writeln( 'O perímetro é:
16 end.
', perimetro );
Testes
____________________________________________
Entre com o raio do círculo:
2
A área do círculo é: 1.256637061435917E+001
O perímetro é:
1.256637061435917E+001
____________________________________________
Entre com o raio do círculo:
3
A área do círculo é: 2.827433388230814E+001
O perímetro é:
1.884955592153876E+001
Comandos Estruturados
Os comandos estruturados contêm outros
comandos em sua constituição
 Eles estabelecem o fluxo de execução dos
comandos simples de um programa
 O poder de um computador reside na sua
capacidade de executar ações
seqüenciais, repetitivas e seletivas a
grande velocidade e confiabilidade

Comandos Estruturados

Pascal fornece várias estruturas de
controle:
Comandos compostos
 Comandos repetitivos
 Comandos condicionais

Comando Composto

Sintaxe
begin
C1;
C2;
...
Cn
end

Cada Ci é um comando qualquer
Comando Composto

Semântica


A execução do comando composto envolve a
execução de seus comandos componentes Ci na
ordem em que são escritos
Exemplo
begin
a := b;
b := c;
c := a
end
Comando Composto

Semântica (fluxograma)
C1
C2
C3
Comandos Compostos

Uso de ponto-e-vírgula em comandos




Em Pascal, o símbolo especial ; é usado na parte de
comandos para separar um comando do outro
O ponto-e-vírgula não é parte integrante de nenhum
comando
Observe que o último comando de qualquer comando
composto não tem ponto-e-vírgula
Porém, se o programador colocar um ponto-e-vírgula
após o último comando, não causará nenhum erro de
sintaxe, porque existe o conceito de comando vazio
em Pascal
Comandos Condicionais
É muito comum tornar a execução de um
comando dependente de alguma condição
 Pascal fornece duas formas de comandos
com este propósito:

Comandos if
 Comandos case


Por enquanto, vamos estudar apenas os
comandos if
Comandos if

Sintaxe

Forma simples
if condição then
comando

Forma completa
if condição then
comando
else
comando
Comando if Simples

Semântica
(fluxograma)

Vamos considerar
primeiro a forma
simples:
if B then C

onde B é uma
expressão lógica e C é
um comando qualquer
F
B
V
C
Exemplos
1)
if c = '?' then
pergunta := true
2)
if i > 0 then
begin
t := x;
x := y;
y := t
end
Comando if Completo

Semântica
(fluxograma)


A forma completa do
if:
if B then
C1
else
C2
onde B é uma
expressão lógica e C1
e C2 são comandos
V
C1
B
F
C2
Exemplo
if sqr(b) < 4*a*c then
write('A equação tem raízes complexas')
else
begin
d := sqrt(sqr(b) - 4*a*c);
x1 := (-b + d)/(2*a);
x2 := (-b - d)/(2*a)
end
Projeto de Programação

Problema
Eufrásia fez três provas para avaliação do
seu rendimento na disciplina de Semiótica.
Ela gostaria de saber se foi aprovada,
baseando-se no seguinte critério: se a média
das três notas for maior ou igual a 60, foi
aprovada; caso contrário, foi reprovada.
 Faça um programa em Pascal para ajudar
Eufrásia a determinar sua aprovação ou
reprovação por meio do uso de computador.

Projeto de Programação

Análise do problema
A determinação da média de três números é
trivial: basta somá-los e depois dividir a soma
por 3
 Tendo a média, podemos determinar a
aprovação ou reprovação pelo seguinte teste:

 Se
a média for maior ou igual a 60, então
aprovação
 Senão reprovação
Projeto de Programação

Algoritmo da solução

Dados

1.
2.
3.
4.
nota1, nota2, nota3, média : real
Leia as três notas
Calcule a soma das três notas
Calcule a média
Se média ≥ 60, então imprima 'Aprovado(a)'
senão imprima 'Reprovado(a)'
Implementação em Pascal
1
program Avaliacao( input, output );
2
{ Determina a aprovação de um aluno em uma disciplina, baseado na
3
4
média de três notas de provas. }
var
5
nota1, nota2, nota3 : real;
6
media : real;
7
begin
8
writeln( 'Digite as três notas das provas:' );
9
readln( nota1, nota2, nota3 );
10
11
media := (nota1 + nota2 + nota3) / 3.0;
Comando if completo
12
13
write ('Sua média foi ', media:5:1 );
14
if media >= 60.0 then writeln( ' ===> Aprovado(a)' )
15
else writeln( ' ===> Reprovado(a)' )
16
end.
Teste do Programa
_____________________________________
Digite as três notas das provas:
50 50 50
Sua média foi 50.0 ===> Reprovado(a)
_____________________________________
Digite as três notas das provas:
64 75 43
Sua média foi 60.7 ===> Aprovado(a)
Comandos if Aninhados

Testes com casos múltiplos são
implementados com comandos if dentro
de outros comandos if:
if condição then
comando
else if condição then
comando
else ...
Nova Implementação
O programa do cálculo da média e teste
de aprovação feito a pedido de Eufrásia
pode ser melhorado
 No caso de reprovação, Eufrásia gostaria
de que fosse feita uma recomendação ao
usuário
 A nova implementação vem a seguir

1
program Avaliacao( input, output );
2
{ Determina a aprovação de um aluno em uma disciplina, baseado na
3
4
média de três notas de provas. }
var
5
nota1, nota2, nota3 : real;
6
media : real;
7
begin
8
writeln( 'Digite as três notas das provas:' );
9
readln( nota1, nota2, nota3 );
10
11
media := (nota1 + nota2 + nota3) / 3.0;
12
Observe que, para colocar
mais de um comando dentro
das alternativas de um if, é
necessário criar um comando
composto delimitado por
begin-end
13
write ('Sua média foi ', media:5:1 );
14
if media >= 60.0 then writeln( ' ===> Aprovado(a)' )
15
else
16
begin
17
writeln( ' ===> Reprovado(a)' );
18
writeln( 'Você deve fazer a disciplina novamente!' )
19
20
end
end.
Teste do Programa
________________________________________
Digite as três notas das provas:
64 75 43
Sua média foi 60.7 ===> Aprovado(a)
______________________________________________
Digite as três notas das provas:
50 50 50
Sua média foi 50.0 ===> Reprovado(a)
Você deve fazer a disciplina novamente!
Projeto de Programação


Eufrásia gostou tanto do programa feito pelos
alunos que até pediu uma nova versão, agora
para calcular também o conceito recebido, de
acordo com a média final
Sua universidade usa o seguinte critério para
atribuição de conceitos:

Notas entre 90 (inclusive) e 100, conceito A; notas
entre 80 (inclusive) e 90, conceito B; notas entre 70
(inclusive) e 80, conceito C; notas entre 60 (inclusive)
e 70, conceito D; e notas menores que 60, conceito R
Projeto de Programação

Algoritmo

Dados
nota1, nota2, nota3, média : real
conceito : caracter
1.
2.
3.
Leia as notas
Calcule a média
Se média ≥ 90 então conceito  'A'
senão se média ≥ 80 então conceito  'B'
senão se média ≥ 70 então conceito  'C'
senão se média ≥ 60 então conceito  'D'
senão conceito  'R'
1
program Avaliacao( input, output );
2
{ Calcula a média de três notas e atribui conceitos de acordo com a média.}
3
var
4
nota1, nota2, nota3, media : real;
5
conceito : char;
6
begin
7
writeln( 'Digite suas três notas:' );
8
readln( nota1, nota2, nota3 );
9
10
media := (nota1 + nota2 + nota3) / 3.0;
11
12
write( 'Sua média foi ', media:5:1 );
13
14
if media >= 90.0 then conceito := 'A'
15
else if media >= 80.0 then conceito := 'B'
16
else if media >= 70.0 then conceito := 'C'
17
else if media >= 60.0 then conceito := 'D'
18
else conceito := 'R';
19
writeln( ' ===> Conceito ', conceito )
20
end.
Comandos if aninhados
Teste do Programa
_____________________________________
Digite suas três notas:
64 75 43
Sua média foi 60.7 ===> Conceito D
_____________________________________
Digite suas três notas:
50 50 50
Sua média foi 50.0 ===> Conceito R
Para Casa 
Eufrásia que melhorar o programa. Como
funcionalidade adicional ela quer saber a
sua menor nota e qual foi (primeira,
segunda ou terceira). Além disto, caso
tenha sido reprovada, ela quer saber o
quanto faltou na média para ela passar... Se
a diferença for até 5 pontos, ela quer ser
notificada para pedir revisão de prova.
Download

Document