Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Programação IIProgramação II
Prof. Jano Moreira de Souza e
Jonice Oliveira
ObjetivosObjetivos
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 CursoO 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çãoAvaliação
2 provas (60%)1ª Prova: 24 setembro2ª Prova: 12 novembroProva 2ª.Chamada: 26 novembro
Matéria Completa
Trabalhos em Grupo (40%)
ContatosContatos
Prof. Jano – [email protected] Oliveira – [email protected]ágina do curso:http://www.cos.ufrj.br/~jonice/classes/comp2/index.htm
Obs: Ainda NÃO atualizada!!!
O Primeiro ProgramaO 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 LinguagemTipos 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 LinguagemTipos 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 InterpretadorCompilador X Interpretador
1. Compilador
Editor Compilador Linkeditor
Código Fonte Código Objeto Código Executável
Erros de Compilação
Erros de Linkedição
Erros na Execução
Bibliotecas Externas
Compilador X InterpretadorCompilador X Interpretador
Interpretador, que traduz os comandos ``passo-a-passo'' e na medida da necessidade; LeituraTradução Execução de cada linha do
programa-fonte,
Linguagem PascalLinguagem Pascal
Pascal é uma linguagem de alto nível Ela consiste em:
comandostipos de dados
Ela contém também maneiras de modularizar o desenvolvimento de programasfunções e procedimentos
Esquema de Programa PascalEsquema de Programa Pascal
Todo programa escrito em Pascal tem a seguinte forma geral:
program Nome_do_Programa;
Declarações
begin
Comandos
end.
O Primeiro ProgramaO Primeiro Programa
ProblemaEfigê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 ProgramaO 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çãoAlgoritmo da Solução
1. Entre com os dois números no computador
2. Calcule a soma dos dois números
3. Calcule a média dos números
4. Imprima a média
Programa da SoluçãoPrograma 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 ProgramaExecução do Programa
Digite dois números inteiros:
56 75
A média deles é 6.550000000000000E+001
O Alfabeto do PascalO Alfabeto do Pascal
O alfabeto da linguagem Pascal consiste em:letrasdígitossímbolos especiaispalavras-chaves
O Alfabeto do PascalO Alfabeto do Pascal
LetrasConsiste nas letras latinas maiúsculas e
minúsculasA, B, C, ..., Y, Za, b, c, ..., y, z
DígitosSão os dígitos decimais indo-arábicos
0, 1, 2, ..., 9
O Alfabeto do PascalO Alfabeto do Pascal
Símbolos especiaisSão os símbolos usados para delimitadores,
pontuação, operadores, etc.+, -, *, /, =, <>, <, >, <=, >=, (, ), [, ], :=, ., ,, :, ;, .., ', ^
Palavras-chavesSão palavras da língua inglesa usadas como
se fossem símbolos individuais em várias partes de um programa
O Alfabeto do PascalO Alfabeto do Pascal
Palavras-chavesElas 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úmerosNúmeros
Os números podem ser representados em Pascal em duas formas:inteirosreais
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úmerosNúmeros
Exemplos de números inteiros válidos:60-6+7000000
Números inteiros inválidos:6.437.271-6,0-6.0
NúmerosNú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úmerosNúmeros
Exemplos de números reais válidos:0.00.873-74.173.367890E08.73E+02-741E-10.7336789E2
NúmerosNúmeros
Exemplos de números reais inválidos0.
.736
2,736.45
25.94E
245.62E0.5
E34
5.E2
NúmerosNú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
IdentificadoresIdentificadores
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
IdentificadoresIdentificadores
Exemplos de identificadores válidosIovniPC49UmnomelongodefatoUmExemploQualquer
Exemplos de identificadores inválidos1abcerva-doce$100
Identificadores PadrõesIdentificadores 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 CaracteresCadeias 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áriosComentá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 Estrutura Básica de um Programa em Pascalem Pascal
program identificador;
parte_das_declarações
begin
parte_dos_comandos
end.
VariáveisVariá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áveisDeclaraçã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áveisDeclaraçã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áveisDeclaração de Variáveis
Sintaxevar lista_de_variáveis : tipo;
lista_de_variáveis : tipo;
...
lista_de_variáveis : tipo;
Declaração de VariávelDeclaração de Variável
Exemplos
var x : integer;
a, b : char;
area, perimetro : real;
temTelefone : boolean;
Criação de VariáveisCriaçã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áveisDestruiçã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
ComandosComandos
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çãoComando de Atribuição
Sintaxevariável := expressão
SemânticaA 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çãoComando 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
Exemplosa := 3.52a := b*b*bj := j + 1;p := (j > 0) or (c <> ' ')c := '.'
Entrada e Saída Simples de DadosEntrada 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 DadosEntrada de Dados
Toda informação que quisermos passar para o computador é realizada por meio dos procedimentos:readreadlnSintaxe
read( lista_de_variáveis )
Procedimento readProcedimento read
Exemplosread( a )read( alfa, beta, gama )read( input, a )read( input, alfa, beta, gama )
A chamadaread( v1, v2, v3, ..., vn )
é equivalente aread( v1 ); read( v2 ); read( v3 ); ...;read( vn )
Saída de DadosSaí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:writewriteln
Procedimento writeProcedimento write
Exemploswrite( a, b, c + 1 )
write( 2*x + 7 )
write( output, a, b, c + 1 )
write( output, 2*x + 7 )
write( 'a = ', x*x - 2*x - 5 )
Saída FormatadaSaí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
Sintaxevalor_de_saída : largura_do_campo : comprimento_da_fração
Saída FormatadaSaí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çãoProjeto de Programação
ProblemaQueremos calcular a área e o perímetro de
um círculo dado seu raioAná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çãoProjeto 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:
rPrA 2 ,2
Projeto de ProgramaçãoProjeto de Programação
Algoritmo Dados
raio do tipo real área do tipo real perímetro do tipo real
1. Leia o raio do círculo
2. Calcule a área
3. Calcule o perímetro
4. Imprima a área e o perímetro
ImplementaçãoImplementação1 program Circulo;
2 { Calcula a área e o perímetro de um círculo dado o raio. }
3 const
4 PI = 3.141592653589793;
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;
13
14 writeln( 'A área do círculo é: ', area );
15 writeln( 'O perímetro é: ', perimetro );
16 end.
Definição de constante
Saídas com a formatação default para números reais
TestesTestes____________________________________________
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 EstruturadosComandos 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 EstruturadosComandos Estruturados
Pascal fornece várias estruturas de controle:Comandos compostosComandos repetitivosComandos condicionais
Comando CompostoComando Composto
Sintaxebegin
C1;
C2;
...
CnendCada Ci é um comando qualquer
Comando CompostoComando 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
Exemplobegin
a := b;
b := c;
c := a
end
Comando CompostoComando Composto
Semântica (fluxograma)
C1
C2
C3
Comandos CompostosComandos 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 CondicionaisComandos 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 ifComandos case
Por enquanto, vamos estudar apenas os comandos if
Comandos ifComandos if
SintaxeForma simples
if condição then
comandoForma completa
if condição then
comando
else
comando
Comando if SimplesComando 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
B
C
V
F
ExemplosExemplos
1) if c = '?' then pergunta := true
2) if i > 0 then begin t := x; x := y; y := t end
Comando if CompletoComando 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
C1C2
BV F
ExemploExemplo
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çãoProjeto de Programação
ProblemaEufrá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çãoProjeto de Programação
Análise do problemaA 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çãoProjeto de Programação
Algoritmo da solução Dados
nota1, nota2, nota3, média : real
1. Leia as três notas
2. Calcule a soma das três notas
3. Calcule a média
4. Se média ≥ 60, então imprima 'Aprovado(a)' senão imprima 'Reprovado(a)'
Implementação em PascalImplementação em Pascal1 program Avaliacao( input, output );
2 { Determina a aprovação de um aluno em uma disciplina, baseado na
3 média de três notas de provas. }
4 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
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.
Comando if completo
Teste do ProgramaTeste 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 AninhadosComandos 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çãoNova 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 média de três notas de provas. }
4 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
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 end
20 end.
Observe que, para colocar mais de um comando dentro das alternativas de um if, é necessário criar um comando composto delimitado por begin-end
Teste do ProgramaTeste do Programa
________________________________________
Digite as três notas das provas:64 75 43Sua média foi 60.7 ===> Aprovado(a)______________________________________________
Digite as três notas das provas:50 50 50Sua média foi 50.0 ===> Reprovado(a)Você deve fazer a disciplina novamente!
Projeto de ProgramaçãoProjeto 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çãoProjeto de Programação
Algoritmo Dados
nota1, nota2, nota3, média : realconceito : caracter
1. Leia as notas2. Calcule a média3. 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 ProgramaTeste 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 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.