INTRODUÇÀO COMPUTAÇÀO

Transcrição

INTRODUÇÀO COMPUTAÇÀO
CURSO DE
INTRODUÇÃO
À
COMPUTAÇÃO
2002
O
X
Template <class GS> void Stack<GS>::push( G
O
X
O
X
X
X
C
A
B
X
X
UTILIZADO NA UNIVERSIDADE FEDERAL DE SÃO CARLOS
Roberto Ferrari
CURSO DE
INTRODUÇÃO À COMPUTAÇÃO
ROBERTO FERRARI
2002
2
Edição do autor.
Copyright  1999, 2002 Roberto Ferrari.
Todos os direitos reservados.
Publicação não destinada à exploração comercial.
Direitos autorais reservados.
Informações adicionais com o autor.
[email protected]
www.dc.ufscar.br/~ferrari/
Ferrari, Roberto.
Curso de introdução à Computação/ Roberto Ferrari - Sâo Carlos,
2002.
p.
Inclui bibliografia.
1. Programação.
I. Título
3
APRESENTAÇÃO
Este Curso de Introdução à Computação
contém um
resumo das notas de aula, exercícios, trabalhos e provas de anos
anteriores. Seu objetivo não é substituir o livro texto, mas
mostrar aos alunos o curso que os aguarda, possibilitando um
planejamento prévio do estudo e do aprendizado.
4
CONTEÚDO
Módulo 1- Algoritmos e Programas
6
Módulo 2- Elementos Fundamentais
14
Módulo 3- Estruturas de Dados
28
Módulo 4- Modularização
36
Módulo 5- Arquivos
40
Especificação dos trabalhos do curso
45
Provas de Anos Anteriores
48
Referências Bibliográficas
50
5
Módulo 1: Algoritmos e Programas
Objetivos de aprendizado neste módulo...
• o conceito de algoritmo e de programa
• técnica básica para desenvolvimento de algoritmos
• a contextualização de algoritmos e programas em
relação à tecnologia atual e aos objetivos
profissionais dos alunos
• executar um programa exemplo
Texto base para este módulo: Farrer e outros, "Algoritmos Estruturados", cap. 0.
1- Evolução Tecnológica dos Computadores
•
•
•
manuais (ex. ábaco)
mecânicos (ex. máquina de somar à manivela)
eletrônica digital
• válvulas e relés
• transístores (semicondutores), Bell Labs., 1948 => menor, menos consumo de
energia
• circuitos integrados (semicondutores) => menor ainda => computador de uso
pessoal
2- A Tecnologia Digital
diferença: analógico X digital
•
dispositivo analógico: funciona por analogia, por comparação, por proporção.
• ex.: termômetro (varia a temperatura, varia a dilatação do mercúrio, ou
corrente elétrica)
• ex.: válvula reguladora de pressão ou do escoamento de fluidos (varia a
corrente enviada à válvula, varia a pressão ou escoamento de fluidos)
• lida com grandezas contínuas
•
dispositivo digital: trabalha com as grandezas discretas e absolutas:
"1"s, ligado e desligado, com corrente e sem corrente.
"0"s e
Bit (Binary Digit)
Menor unidade de informação, que pode assumir um dentre dois estados: "0" ou
"1".
Byte
Conjunto de 8 bits -- capaz de identificar um caractere do alfabeto .
0
bi
0
1
0
0
0
0
0
1
byte
6
Representação de números em decimal (base 10) e em binário (base 2)
representação
decimal
0
1
2
3
4
5
6
7
8
9
10
...
representação
em binário
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
...
Conversão binário-decimal e decimal-binário
binário --> decimal
1101 = (2
3
* 1)
+
(2
2
* 1) + (2
1
* 0) + ( 2
0
* 1) = 8 + 4 + 0 + 1 = 13
decimal --> binário
13
1
2
6
2
0
3
2
1
1
2
1
0
resposta =
restos das divisões sucessivas por 2, na ordem inversa => 1101
Representação de caracteres (alfabéticos e outros)
caractere
A
B
C
...
+
4
...
0
1
2
...
representação
em ASCII
01000001
01000010
01000011
...
00101011
00100100
...
00110000
00110001
00110010
...
Capacidades de representação
7
Variando o estado (0 ou 1) de cada bit de 1 byte, quantas combinações posso ter
?
28 = 256
8
•
•
•
N
(1 byte)
16
32
...
2 N
256
65536
4,2 x 10
...
9
1 Kbyte (Kilobyte) = 1024 Bytes
1Mbyte (Megabyte) = 1024 Kbytes
1 Gbyte (Gygabyte) = 1024 MBytes
3- Evolução dos Tecnológica dos Computadores - Continuação
hardware
capacidade
custo
aplicações
•
tendência inicial...
mainframes, grande porte
pequena
$$$$$$$$$$$$$$$
científicas, grandes
empresas
com o tempo...
microcomputadores
cresceu muito
$
escritório, casa,
escola
anos 80: microcomputadores, várias arquiteturas, nenhuma padrão
• IBM abriu a arquitetura ( IBM PC)
• terceirizou a fabricação do sistema operacional ao estudante Bill Gates
• virou padrão, aumentaram os fabricantes, a concorrência, competitividade,
abaixou o custo...
Comparação
• Mark I, 1944, 5 toneladas.
• ENIAC 1946 19.000 válvulas, consumia grande energia, podia registrar um
máximo de 20 números de até 10 dígitos. A programação era feita com com fios
e pinos, como em um antigo painel de telefonista.
• anos 80: XT 4,77 MHz, 20 Mbytes disco, 256 Kbytes RAM vídeo monocromático.
• atualmente: Pentium 600 MHz, 64 Mbytes RAM, 6 Gbytes disco, CD, video SVGA
color...
4- Conceitos Básicos sobre Programação de Computadores
1
computador:
Máquina capaz de executar processos de acordo com regras precisamente definidas.
• Existe um repertório finito de instruções elementares que o computador
entende e é capaz de executar.
• Os elementos desse repertório finito podem ser agrupados (ou programados) de
modo a dar origem a um número infinito de combinações. Exemplos:
• Música (composta pela combinação das 7 notas musicais)
• Representação decimal de números reais (a partir de dígitos de 0 a 9)
• Coreografia de um ballet clássico (a partir de um conjunto limitado de
passos básicos).
Programação (de computadores, de uma coreografia, etc.)
É o ato de agrupar instruções em seqüências de forma que, quando seguidas,
produzem um resultado esperado.
1
alguns conceitos e exemplos foram adaptados do texto experimental de Catto e outros, de data
desconhecida
8
Ação
Acontecimento de duração finita, com um efeito previsível e bem definido.
• executada sobre um objeto.
• interesse é pelo efeito da ação no objeto.
• a ação leva o objeto de um estado inicial a um estado final.
• a execução de uma ação é chamada de processo.
• o agente que executa o processo é chamado de processador.
exemplo: descascar uma banana
• ação = descascar
• objeto = banana
• efeito = banana descascada
contra-exemplos
• viver (duração indeterminada)
• disputar um jogo de azar (imprevisível)
• esperar (não parece algo bem definido)
Ações primitivas
São ações que o processador é capaz de entender e executar (sobre objetos bem
determinados).
Algoritmo
• (Abib) seqüência ordenada e sem ambiguidade de passos que levam à solução de
um dado problema.
• (Farrer) Descrição de um conjunto de comandos que, obedecidos, resultam numa
sucessão finita de ações.
• (Catto e outros) Definição de um padrão de comportamento em termos de um
conjunto finito, bem conhecido e bem definido de ações primitivas, que se
supõe possam ser executadas sobre objetos bem determinados, produzindo o
efeito desejado.
Linguagem de programação
Um conjunto finito, conhecido e bem definido de ações primitivas.
Programa
(Abib) Um algoritmo escrito numa linguagem de programação qualquer (Pascal, C,
C++ etc.).
Técnica de desenvolvimento de algoritmos: refinamentos sucessivos
• Descrever o conjunto de ações que, executadas, levam à obtenção de um efeito
desejado.
• Se uma ação não pertencer ao conjunto das ações primitivas ela deverá ser
decomposta em ações mais simples e específicas, e assim sucessivamente até
que todas as ações pertençam ao conjunto de ações primitivas.
Problema 1: ensinar
robô a fazer um bolo
"Bata no liquidificador 2 cenouras, 4 ovos e 1 chícara de óleo. Já na batedeira,
adicione fermento e açucar a gosto. Leve ao forno como um bolo normal"
Identificar ambiguidades, indefinições e efeitos não previsíveis...
1º refinamento
1. bata no liquidificador 2 cenouras, 4 ovos e 1 chícara de óleo por 2 minutos.
2. colocar na batedeira e acrescentar um tablete de fermento e 1 chícara de
açucar, bata por 3 minutos.
9
3. leve ao forno por 1 hora.
Identificar indefinições...
Refinamento do passo1
1. pegar o liquidificador
2. inserir 2 cenouras
3. inserir 4 ovos
4. inserir 1 chícara de óleo
5. ligar o liquidificador
6. esperar por 2 menutos
7. desligar o liquidificador
Identificar indefinições...
Refinamento do passo 1.1
1. ir até o armário
2. abrir a porta do armário
3. estender as mãos até o liquidificador
4. segurá-lo
5. ir até a mesa
6. posicionar o liquidificador sobre a mesa
7. soltá-lo
e assim por diante... até que todas as ações possam ser compreendidas pelo robô.
Problema 2 (introdução ao conceito de variáveis, em um programa) : "programar o
robô, de modo que este aprenda a fazer o tal bolo em diferentes quantidades para 3 pessoas, para 10, etc.
solução:
Seja X o nº de cenouras, Y o nº de ovos, e Z o nº de chícaras de óleo.
Descrever o algoritmo em função de X, Y e Z.
Definir X, Y e Z no momento da execução do processo.
Problema 3 (introdução ao conceito de tipos de dados e de linguagem de
programação): Sejam conhecidos os seguintes tipos, ações e regras:
•
•
tipo coisa = sacola, panela, liquidificador, batedeira
tipo fruta = banana, mamão, laranja, maçã, goiaba
ação
pegar
descascar
guardar
válida sobre objetos do tipo...
coisa, fruta
fruta
coisa, fruta
Exemplos de ações (verificar se são válidas):
• pegar panela
• descascar banana
• descascar sacola (não)
• descascar pera (não)
• etc.
Linguagems de programação - exemplos
• Pascal
• C
• C++
S
N
Fluxograma (flowchart)
10
•
•
Uma outra forma de descrever algoritmos.
Mostra o "fluxo" (seqüência) de ações, e seus
relacionamentos com os objetos que estão sendo
processados
5- Hardware, Software, Aplicativos, Compiladores, Linguagens
Contextualizando o conceito de algoritmos e programas na tecnologia atual ...
•
•
•
IBM PC
MAC
Sun Sparc
Station
AS 400
•
•
•
•
•
•
•
C++
Pascal
Java
•
•
•
•
•
•
•
•
•
•
•
Borland C++
Turbo Pascal
Delphi
•
•
•
•
•
•
•
•
•
•
•
•
sistema para
clínicas
médicas
folha de
pagamentos
contabilidade
SAP
•
•
•
•
netscape
director
video maker
bug do ano
2000
virus
hacker
windows 98
windows NT
Unix
MacOS
•
•
•
RAM
disco rígido
CD ROM
scanner
access
oracle
sybase
informix
hardware
sistema
operacional
software
Linguagens de programação: conjunto de ações primitivas e regras de sintaxe.
Exemplos: pascal, C, C++
Compiladores e geradores de aplicações ou geradores de programas: programas
que traduzem instruções de uma linguagem mais acessível ao homem (mais fácil)
em uma linguagem compreendida pela máquina. Ex.: Turbo Pascal, Borland C++...
Hardware: máquina
Software: programas
Sistema Operacional: programa usado para controlar funções básicas da máquina
como gerenciamento do sistema de arquivos, gerenciamento da memória, etc.
Exemplos: Windows, Unix, MacOS
11
•
•
•
•
Memória RAM: memória temporária (as informações se perdem assim que o
equipamento é desligado)
Disco rígido, CD ROM, Floppy disc: armazenam informações mesmo após desligar
o equipamento.
Dispositivos de entrada de informações: teclado, mouse, scanner...
Dispositivos de saída: vídeo, auto-falante, impressora...
6- Exemplo de um Programa
program Exemplo;
uses crt;
var a,b, soma:integer;
begin
clrscr;
write('a= ');
readln(a);
write('b= ');
readln(b);
soma := a + b;
writeln( a, ' + ', b, ' = ', soma );
writeln( 'pressione enter para continuar');
readln
end.
d
b
l
0
7- Atividade Extra-Classe: Executar e Alterar um Programa
O objetivo da atividade é "quebrar o gelo", ou seja, ter um primeiro contato
com programação (aos alunos que ainda não tiveram), com a linguagem e com o
compilador que serão utilizados neste curso.
Roteiro
1. Vá até o laboratório e, tendo dificuldades, peça ajuda ao monitor.
2. Execute o programa Turbo Pascal.
3. Acione a opção File/New para criar um novo arquivo, digite (como em um editor
de texto) o programa dado como exemplo.
4. Acione a opção Run para executar o programa.
5. Altere o programa, segundo seus próprios critérios, e execute novamente.
6. Execute outros programas-exemplo, eventualmente existentes no laboratório.
7. Consulte o "help" do turbo pascal e procure se familiarizar com o ambiente de
trabalho.
Aqueles que pretendem estudar em seu próprio computador podem adquirir e
instalar uma versão completa do Turbo Pascal ou, alternativamente, copiar uma
versão compacta do laboratório, que só poderá ser utilizada para fins de
aprendizado e desenvolvimento de pesquisas.
8- Temas para Debate:
•
•
•
Quais podem ser as aplicações da informática na sua futura profissão?
Que conhecimentos de informática você precisa ter para manter a
competitividade profissional?
Que contribuições este curso pode trazer para a sua formação?
9- Exercícios de Fixação
1. O computador que você usa é dito ´digital´. O que é um dispositivo digital?
Qual a diferença entre um dispositivo digital e um dispositivo analógico?
2. Qual a representação em binário dos decimais 7, 12 e 1240?
3. Qual a representação decimal dos binários 11001 e 10111 ?
12
4. Quantos caracteres distintos seria possível representar com apenas 4 bits?
5. O que significa 64 MBytes de memória?
6. Qual a diferença entre armazenar uma informação na memória RAM e armazenar
uma informação no disco rígido?
7. Que é um algoritmo?
8. Que é um programa de computador?
9. Qual a técnica básica para desenvolvimento de algoritmos?
10.
No contexto de programação, para que serve um fluxograma?
11.
Qual a diferença entre linguagem de programação e compilador?
10- Leituras Recomendadas
•
•
sobre o módulo 1, leia o Capítulo 0 do livro de Farrer e outros,
Estruturados".
"Algoritmos
sobre o módulo 2, como preparação para a próxima aula, leia o Capítulo 1 de
ambos os livros de Farrer e outros, entitulados "Ítens Fundamentais".
13
Módulo 2: Elementos Fundamentais
Objetivos de aprendizado neste módulo...
• apresentar ao estudante os elementos básicos de um programa:
variáveis, tipos, estruturas de controle, entrada e saída, etc.
• praticar o desenvolvimento de algoritmos com a utilização de tais
elementos
Texto base para este módulo
•
•
Farrer e outros, "Algoritmos Estruturados", cap. 1.
Farrer e outros, "Pascal Estruturado", cap. 1.
Tópicos
1. Constantes, variáveis e tipos
• Identificadores
• Tipos de dados
• Declaração de variáveis
• Declaração de constantes
• Declaração de tipos
2. Comentários
3. Comandos de atribuição, entrada e saída
• Atribuição
• Comandos de entrada
• Comandos de saída
4. Expressões
• Expressões aritméticas
• Expressões lógicas
5. Estruturas básicas de controle
• Estrutura seqüencial
• Estrutura condicional
• Estrutura de repetição
1- Constantes, variáveis e tipos
Conceito de variável
2
=> 4X + 3X + 9
=> constantes: 4, 3, 9
X
2
Y
4
X
Y
contém
vinho
contém
água
14
=> variáveis: X
Variáveis podem assumir diversos valores. ..
• em uma equação aritmética, X pode assumir diversos valores.
• uma variável pode ser comparada a um copo que pode receber água ou vinho (ou outro líquido), ou
ainda a uma caixinha que pode abrigar diferentes objetos.
• exemplo de utilização em um programa: X pode representar o número de colheres de fermento em um
bolo, Y o número de ovos e Z o nº de bananas.
1.1- Identificadores
Variáveis são identificadas por nomes, ou identificadores. Nos exemplos acima, X é um identificador.
Em
•
•
•
•
•
•
Pascal os identificadores podem ser formados basicamente por...
uma combinação de letras a-z, A-Z e números 0-9
não pode começar com número
não pode usar uma palavra reservada do Pascal (como read, write, program..)
Turbo Pascal permite a utilização do caractere especial ´_´ (underscore)
nenhum outro caractere ( +, -, *, &, $ etc..) pode ser utilizado
em um identificador, Pascal não faz diferença entre letras maiúsculas e minúsculas.
Exemplos de identificadores válidos
• Aluno
• X
• A34
• NotaDoAluno
Exemplos de identificadores não válidos
• 23
• Nota do Aluno
• 1treco
1.2- Tipos de Dados
Recordação
• tipo coisa = sacola, panela, liquidificador, batedeira
• tipo fruta = banana, mamão, laranja, maçã, goiaba
ação
pegar
descascar
guardar
válida sobre objetos do tipo...
coisa, fruta
fruta
coisa, fruta
O que é um tipo?
Um tipo define um padrão de comportamento para constantes e variáveis. Por exemplo, objetos do tipo fruta
podem ser descascados, objetos do tipo coisa não.
15
Principais tipos pré-definidos no Pascal
tipo
descrição
Integer
Real
Char
String[size]
Boolean
valores inteiros
valores reais
um caractere
cadeia de
caracteres
valores lógicos
faixa
-32.768 a +32.767 (2 bytes)
+/- 10 38 (4 bytes)
qualquer caractere
qualquer cadeia que caiba
no tamanho definido
True, False
exemplos de constantes desse
tipo
• 01, 12, -15, 6.678
• 2.43, -5.678, 1x10 6, etc
• A, C, 8, &, *, , -, etc
• String[3] = ‘ABC´, ´6T$´, ‘o´, ..
• String[5] = ´a´, ´´, ´pares´, ..
• True, False
Cada variável é definida como sendo de um tipo específico, e pode assumir somente valores válidos a esse
tipo.
• se X é do tipo Integer, pode assumir valores inteiros: 2, 15, 5555, -4, etc.
• se X é do tipo Boolean, pode assumir os valores True ou False
• etc.
1.3- Declaração de variáveis
Podemos definir variáveis através da seguinte declaração:
Var lista de identificadores : tipo ;
Exemplos:
• Var X : Integer;
• Var Y, Z : Real;
• Var Disciplina : String[10];
• Var Turma : Char;
• Var Status : Boolean;
1.4- Declaração de constantes
É possível definir novas constantes através da seguinte declaração
Const identificador : valor ;
Exemplos:
• Const NumerodeBananas = 10;
• Const Pi = 3,1416;
• Const Status = False;
• Const Tamanho = 30;
• Const Nome = ´Jose da Silva´;
• Const Turma = ´C´;
1.5- Declaração de tipos
É possível acrescentar novos tipos de dados (como tipo fruta, tipo coisa etc.) ao conjunto de tipos
conhecidos do Pascal (Integer, Real etc.). Esse tema será tratado posteriormente.
2- Comentários
Podemos inserir comentários em um programa, sob a forma de texto, sem que isso interfira em sua lógica.
O objetivo dos comentários é proporcionar maior clareza ao programa. Comentários podem ser expressos
da seguinte forma.
{ texto }
16
ou ainda
(* texto *)
Exemplos:
• Var NomeDoIndividuo
: String[ 20 ] ; { armazena o nome do indivíduo }
• Var EstadoCivil
: Boolean;
{ True significa casado, False solteiro }
3- Comandos de atribuição, entrada e saída
3.1- Comando de atribuição
É possível atribuir um valor qualquer a uma variável.
• valor atribuído pode ser um valor constante, o valor de uma variável ou ainda o valor de uma expressão.
• valor atribuído precisa ser compatível com o tipo da variável.
O comando de atribuição é expresso da seguinte forma:
identificador := expressão ;
onde a expressão pode simplesmente ser uma constante ou variável.
Exemplos:
Var X : Integer;
Var Y, Z : Real;
Var Disciplina : String[10];
Var Turma : Char;
Var Status : Boolean;
{casos válidos }
X := 5;
X := X + 1;
Y := Z;
Z := Y + 5 + X;
Turma := ‘B’;
Status := True;
Disciplina := ‘Química I’;
X
2
Y
4,5
Z
{ Casos não válidos… }
X := Y;
Z + Y := 5;
5 := X;
3.2- Comandos de entrada
Entrada de dados, ou ainda leitura de dados, seria análogo a atribuir a uma variável um valor obtido
externamente. O exemplo mais natural para leitura de dados é pedir ao usuário fornecer valores via teclado.
Mas pode-se também ler dados de arquivos, ou ainda de outros dispositivos de entrada.
Considerando-se a entrada de dados via teclado, os comandos seriam:
Read ( identificador );
ou ainda
17
Readln ( identificador ) ;
Observações:
• A diferença entre ambos é que o Readln considera que a próxima leitura, se houver, será realizada na
linha seguinte.
• Não é possível ler variáveis do tipo Boolean.
• Na verdade é possível usar um único comando Read ou Readln para ler uma lista de identificadores.
Exemplos:
{ considere as seguintes variáveis… }
Var X : Integer;
Var Y, Z : Real;
Var Disciplina : String[10];
Var Turma : Char;
Var Status : Boolean;
{ casos válidos }
Read ( X );
Read ( Y );
Readln ( Z );
Readln ( Disciplina );
Read ( Turma );
Readln( X, Y, Z );
{ casos não válidos }
Read ( Status );
Read( 55 );
3.3- Comandos de saída
A saída de dados significa mostrar tais dados em um dispositivo de saída, como vídeo, impressora ou
arquivo. A forma mais simples de saída de dados ocorre quando se escreve valores de variáveis,
constantes ou expressões no vídeo.
Considerando-se a saída de dados no vídeo, os comandos seriam:
Write ( lista de identificadores, constantes ou expressões );
ou ainda
Writeln (lista de identificadores, constantes ou expressões) ;
Observações:
• A diferença entre ambos é que o Writeln escreve a lista de valores e considera que a próxima operação
de escrita, se houver, será realizada na linha seguinte.
Exemplos:
{ considere as seguintes variáveis… }
Var X : Integer;
Var Y, Z : Real;
Var Disciplina : String[10];
Var Turma : Char;
Var Status : Boolean;
18
{ casos válidos }
Write ( X );
Write ( ‘O valor de X é:’, X );
Writeln ( ‘pressione uma tecla para continuar’ );
Writeln ( ‘A soma de ‘, Y, ‘ com ‘, Z, ‘ resulta em ‘, Y + Z );
Writeln ( Disciplina, ‘- ‘, Turma );
{ casos não válidos }
Writeln ( O valor de X é… X );
Writeln ( X Y Z );
Writeln ( X,
Y,
Z ); { válido porém os espaços não aparecem }
Formatação de saída
Opcionalmente, os comandos de saída podem ser expressos da seguinte forma:
Write ( p1, p2, p3… pn );
ou ainda
Writeln ( p1, p2, p3… pn ) ;
Cada parâmetro pi sendo expresso em uma das 3 formas abaixo…
• e
• e:e1
• e:e1:e2
Onde
• e é uma expressão (que pode ser simplesmente uma constante ou variável).
• e1 é um valor inteiro positivo que indica o número de caracteres que será utilizado na escrita de e.
• e2 é um inteiro positivo que determina o número de casas decimais que devem ser utilizadas na escrita
de e (que, neste caso, só pode ser do tipo Real).
Exemplos:
Var X : Integer;
Var Y, Z : Real;
Var Disciplina : String[10];
Var Turma : Char;
{ casos válidos }
Write ( X:1 );
{ se X vale 5, a saída será: 5 }
Write ( X:4 );
{ se X vale 5, a saída será: 5 }
Writeln ( Y:6:2, Z:6:2 ); { 6 caracteres, 2 casas decimais }
Writeln ( Disciplina:10, ‘- ‘, Turma:4 );
{ casos não válidos }
Writeln ( X:5:2 );
4- Expressões
conceitos
A+B
Seno ( X )
A<B
•
•
•
•
A e B são operandos
+ é o operador
Seno é uma função
< é uma relação
19
4.1- Expressões aritméticas
Operadores
• *, /, DIV, MOD
• +, -
{ maior prioridade }
Observações
• DIV = divisão inteira e MOD = resto da divisão inteira.
• A prioridade pode ser alterado com o uso de ( e ).
Funções
Ln( x )
Exp( x )
Abs( x )
Trunc( x )
Round( x )
Sqr( x )
Sqrt( x )
Sin( x )
Cos( x )
Arctan( x )
Logaritmo neperiano
Número e elevado a x
Valor absoluto
Pega a parte inteira
Arredonda
Quadrado de x
Raiz quadrada de x
Seno de x
Co-seno
Arco tangente
real
Real
Integer ou real
Integer
Integer
Real ou integer
Real
Real
Real
Real
Exemplos:
• 11 DIV 4
• 11 MOD 4
• 2 * X + 10
• (A + B) * C
• X / N + Sqr ( Z )
4.2- Expressões lógicas
Relações
• =, <>, <=, >=, <, >
Operadores
• AND, OR, NOT
Expressões lógicas podem envolver expressões aritméticas. Neste caso, a prioridade de execução obedece
a seguinte tabela:
Prioridade
1a
2a
3a
4a
Operadores
NOT
*, /, DIV, MOD, AND
+, -, OR
=, <>, <, <=, >=, >
Exemplos:
• A<B
• A=B
• A=0
• 2=6
• D <> 6
• (A = 1) AND ( (B + C <> 0) OR (K <=2) )
• NOT ( (total >= 5) AND (A <> B) ) OR Teste
20
5- Estruturas básicas de controle
Estruturas de controle:
• Controlam a (ordem, seqüência… de) execução de um programa
Estruturas básicas
• Estrutura seqüencial
• Estrutura condicional
• Estrutura repetitiva
5.1- Estrutura seqüencial
Os comandos de um programa são executados na seqüência em que aparecem.
Um programa Pascal segue a sintaxe definida abaixo.
Program identificador;
Declarações
Begin
Comandos
End.
Exemplo de um programa Pascal
program Exemplo1;
{ faz a soma de dois inteiros }
uses crt;
{ crt = “biblioteca” de funções.
Na prática, acrescenta novos comandos ao elenco de comandos do Pascal }
var a,b,soma:integer;
{ declara as variáveis a, b e soma }
begin
clrscr;
{ limpa a tela, comando da biblioteca crt }
write('a= ');
readln(a);
write('b= ');
readln(b);
soma := a + b;
{ soma recebe o valor de A + B }
writeln( a, ' + ', b, ' = ', soma );
writeln( 'pressione enter para continuar');
readln
end.
5.2- Estrutura condicional
A estrutura condicional simples é expressa da forma:
If condição
Then comando ;
Neste caso, o comando só seria executado se a condição for verdadeira. A estrutura condicional composta
é expressa da forma abaixo:
21
If condição
Then comando1
Else comando2;
Se a condição for verdadeira, o comando1 é executado. Caso contrário será executado o comando2.
Exemplos:
If A > B
Then C := A;
If A < B
Then C := A
Else C := B;
If C <> 0
Then C := C + 1
Else
If A > C
Then C := A;
Agrupamento de comandos
É possível agrupar comandos em blocos da forma abaixo:
Begin
Comando 1
Comando 2
…
comando n
End;
Além de agrupar comandos, Begin e End podem funcionar como uma espécie de parêntesis, alterando o
controle da execução do programa ou ainda resolvendo ambiguidades.
Exemplos:
If C <> 0
Then Begin
B := C;
Read( C );
G := Sqr( C );
Writeln( B, C, G );
End
Else
If A > C
Then C := A;
If C <> 0
Then Begin
If A > B
Then C := A
Else C := B;
End;
Definição: Identação
Significa alinhar os comandos de forma a facilitar a visualização do programa, como nos exemplos acima.
Exercícios para fazer durante a aula
Resolva as questões abaixo com a técnica de refinamentos sucessivos. Refine até chegar a um programa
Pascal.
1. Ler três valores inteiros e determinar o menor deles.
22
2. Ler dois valores A e B, troque os valores e escreva A e B.
3. Ler o preço de venda de um produto, o seu preço de custo. Calcular o imposto a ser pago (30% sobre o
lucro).
4. Ler cinco valores inteiros e escrever os dois maiores.
5. Ler três valores reais e escrevê-los em ordem crescente.
6. Faça um programa chamado ‘Calculadora’, onde o usuário fornece dois valores e o operador ( um
dentre +, -, * e /), e o programa faz a conta.
Atividades extra classe
• Já é possível fazer o primeiro trabalho
• Já é possível fazer vários dos exercícios propostos no capítulo 1 do Farrer.
• Ler sobre estruturas de repetição
Resolução dos exercícios de aula
Exercício 1: Ler três valores inteiros e determinar o menor deles.
Algoritmo
Program EscolheMenor;
1. declare 3 inteiros A, B e C e um 4 inteiro Menor
Var A, B, C, Menor : Integer;
2. Leia A, B e C
Begin
Write( ‘forneça A’); Readln( A );
Write( ‘forneça B’); Readln( B );
Write( ‘forneça C’); Readln( C );
3. Menor ! A
Menor := A;
4. Se C < Menor
If C < Menor
Então Menor! C
Then Menor := C;
5. Se B < Menor
If B < Menor
Então Menor ! B
Then Menor := B;
6. Escreva o Menor
Writeln ( ‘O menor valor é: ‘, Menor );
End.
Exercício 2: Ler dois valores A e B, troque os valores e escreva A e B.
" para trocar o valor de duas variáveis é preciso usar uma terceira variável como auxiliar.
Algoritmo
1. declare inteiros A, B e auxiliar
2. Leia A e B
3. Salve o valor de A em Auxiliar
4. Passe o valor de B para A
5. Passe o valor de Auxiliar para B
6. Escreva os valores A e B
Program Troca;
Var A, B, Auxiliar : Integer;
Begin
Write( ‘forneça A’); Readln( A );
Write( ‘forneça B’); Readln( B );
Auxiliar := A;
A := B;
B := Auxiliar;
Writeln ( ‘Novo A =’, A:6, ‘Novo B = ‘, B:6 );
End.
Exercício 3: Ler o preço de venda de um produto e o seu preço de custo. Calcular o imposto a ser pago
(30% sobre o lucro).
Algoritmo
Program Leao;
1. declare PrecoVenda, Custo, Lucro, Imposto
Var PrecoVenda, Custo, Lucro, Imposto : Real;
2. Leia PrecoVenda e Custo
Begin
Write( ‘forneça o Preco de Venda’); Readln( PrecoVenda );
Write( ‘forneça o custo’); Readln( Custo );
3. Calcule Lucro = PrecoVenda - Custo
Lucro := PrecoVenda – Custo;
4. Calcule Imposto = Lucro x 30%
Imposto = Lucro * 0,3;
5. Escreva o imposto a ser pago
Writeln ( ‘O imposto a ser pago = ‘, Imposto:10:2 );
End.
23
Exercício 4: Ler cinco valores inteiros e escrever os dois maiores.
" Vamos usar duas variáveis auxiliares, Maior1 e Maior2, para indicar o primeiro e o segundo maior.
" Maoir1 e Maior2 começam com os valores de A e B ( ou B e A, o que for apropriado).
" Vamos passar pelos 3 valores restantes primeiramente verificando se eles são maiores que o segundo
maior. Se forem, o Maoir2 deve ser atualizado. A seguir verificamos se o Maior2 é maior que o Maior1.
Se for, devemos trocar os valores.
Algoritmo
1. declare A, B, C, D, E, Maior1, Maior2
2. Leia os 5 valores
3. Escolhe o maior entre A e B e atribui a
Maoir1, o outro valor vai para Maior2
4. Verifique se C é maior que Maior2, se for,
Atualiza maior2 com C. Se Atualizou, verifique
se Maior2 é maior que Maior1: se for, troque.
Obs.: repetir o processo para D e E
5. Escreva os 2 maiores
Program DoisMaiores;
Var A, B, C, D, E, Maior1, Maior2 : Real;
Begin
Write( ‘forneça A: ’); Readln( A ); { idem para B, C, D e E }
If A > B
Then Begin
Maior1 := A;
Maior2 := B;
End
Else Begin
Maior1 := B;
Maior2 := A;
End;
If C > Maior2
Then Begin
Maior2 := C;
If Maior2 > Maior1
Then { troca, ver exercício 2 }
End;
{ idem para D e E }
Writeln ( ‘O maoir é:‘, Maior1:8:2, ‘e o 2o maior é: ‘, Maior:8:2
);
End.
Exercício 5: Ler três valores reais e escrevê-los em ordem crescente.
" uma das maneiras de resolver este problema é através de expressões lógicas.
Algoritmo
1- declare a, b, c
2- leia a, b, c
3- se A >= B e A >= C
então se B >= C
então escreva A, B, C
senão escreva A, C, B
4- senão se B >= A e B >= C
então se A >= C
então escreva B, A, C
senão escreva B, C, A
senão se A >= B
então escreva C, A, B
24
senão escreva C, B, A
Exercício 6: Faça um programa chamado ‘Calculadora’, onde o usuário fornece dois valores e o operador (
um dentre +, -, * e /), e o programa faz a conta.
" o principal desafio deste exercício é a escolha do operador que será utilizado. Para isso, podemos usar
um conjunto de ‘if’s aninhados.
Algoritmo
1- declare A, B inteiros, Resultado Real e Operador tipo caractere
2- leia A, B e Operador
3- de acordo com o operador lido, execute A + B, A – B, A * B ou A / B. Atualiza Resultado
4- escreva o resultado
Refinamento 3
Se Operador = ‘+
Éntão Resultado ! A + B
Senão Se Operador = ‘Éntão resultado ! A – B
Senão se Operador = ‘*
Éntão Resultado ! A * B
Senão se Operador = ‘/’ e B <> 0
Éntão resultado ! A / B
Senão resultado ! 0
Refinamento 4
Writeln( A:5, Operador:3, B:5, ‘= ‘, Resultado:7:2 );
5.3- Estrutura repetitiva
A estrutura repetitiva permite que uma seqüência de comandos sejam executados um número determinado
de vezes, ou até que uma condição seja (ou deixe de ser) satisfeita. A estrutura repetitiva pode ser expressa
de 3 maneiras:
" comando For,
" comando Repeat e
" comando While.
For identificador := valor1 To/Downto valor2 Do
comando ;
{ escolher entre To e Downto }
{ ou bloco de comandos, usando Begin e End }
" Note que o comnando For executa um número determinado de vezes, dependendo apenas de valor1 e
valor2.
Exemplo: fatorial de N (inteiro maior que 1)
Readln( N );
Fat := 1;
For I := N downto 1 do
Fat := Fat * I;
Writeln( ‘O fatorial de ‘, N:5, ‘ é ‘, Fat : 5 );
Repeat
Comando1
25
Comando2
…
Comandon
Until condição;
{ não precisa usar Begin e End para delimitar o bloco de comandos }
" Note que o comando Repeat executa Comando1, Comando2 etc. pelo menos uma vez, pois a condição
de parada é no fim.
" Note também que se a condição de parada nunca ocorrer, o comando nunca será encerrado. Diz-se
que o programa entra em “loop”.
" Ao contrario do For, o número de repetições pode não ser determinado
Exemplo: ler uma lista de valores (e fazer alguma coisa com eles) até encontrar um valor inválido.
Total := 0;
NroElementos := 0;
Writeln(‘Digite os elementos. Querendo acabar, digite 99999’);
Repeat
Readln( Elemento );
If Elemento <> 99999
Then Begin
NroElementos := NroElementos + 1;
Total := Total + Elemento;
End;
Until Elemento = 99999;
Media := Total / NroElementos;
Writeln (‘ A média dos ‘, NroElementos:4, ‘ que você digitou é ‘, Media:7:2 );
While Condição Do
Comando;
{ ou bloco de comandos, usando begin e end }
" A diferença entre o While e o Repeat é que no While a condição de parada é no início. Assim, pode ser
que o Comando não seja executada nem uma vez.
Exemplo: ler uma lista de valores (e fazer alguma coisa com eles) até encontrar um valor inválido.
Total := 0;
NroElementos := 0;
Writeln(‘Digite os elementos. Querendo acabar, digite 99999’);
Readln( Elemento );
While Elemento <> 99999 Do
Begin
NroElementos := NroElementos + 1;
Total := Total + Elemento;
Readln( Elemento );
End;
Media := Total / NroElementos;
Writeln (‘ A média dos ‘, NroElementos:4, ‘ que você digitou é ‘, Media:7:2 );
Exercícios para fazer durante a aula (continuação)
" Resolva as questões abaixo com a técnica de refinamentos sucessivos. Pense na solução do problema,
descreva e refine até chegar a um programa Pascal.
7. Ler uma taxa de juro Taxa (tipo 1,3% ao mes) e calcular o valor final de um valor aplicado Valor após
Meses meses.
8. Calcule o fatorial de N com While e com Repeat (com For já fizemos)
9. Uma pesquisa sobre dados da população anotou o sexo, a cor dos cabelos e a idade das pessoas. Leia
um conjunto de valores (sexo, idade, cor do cabelo) e determine:
26
• a maior idade
• percentual de homens e mulheres
• quanto porcento das mulheres são loiras
10. Fazer um programa que ofereça opções ao usuário (exemplo da calculadora: soma, subtração,
multiplicação e divisão, e sair do programa). O usuário escolhe. Se a opção for válida, executa; se for
inválida da uma mensagem de erro ao usuário. Fica oferecendo ao usuário e (eventualmente)
executando até que este escolha a opção para sair do programa.
11. Faça um programa para calcular as contas de água de uma cidade. O valor da conta para consumo até
500 mil litros é 0.04 * consumo (em mil litros). O valor da conta para consumo maior que 500 mil litros é
0.06 * consumo (em mil litros). Os dados serão lidos da forma abaixo.
Rua São Sebastião
• Nro da casa, consumo
• Nro da casa, consumo
• Nro da casa, consumo
Rua Celso Junqueira
• Nro da casa, consumo
• Nro da casa, consumo
• Nro da casa, consumo
Etc.
Exercícios de Fixação: já dá para fazer todos os do capítulo 1 do Farrer.
27
Módulo 3: Estruturas de Dados
Objetivos de aprendizado neste módulo...
• apresentar ao estudante os conceitos de variáveis
compostas homogêneas (vetores, matrizes) e
heterogêneas (registros)
• praticar o desenvolvimento de algoritmos com a
utilização de tais conceitos
Texto base para este módulo
•
•
Farrer e outros, "Algoritmos Estruturados", seções 2.1, 2.2 e 2.3.
Farrer e outros, "Pascal Estruturado", seções 2.1, 2.2 e 2.3.
Tópicos
1.
2.
3.
4.
5.
conceito de variáveis estruturadas (variáveis compostas)
variáveis compostas homogêneas unidimensionais - vetores
variáveis compostas homogêneas bidimensionais - matrizes
variáveis compostas homogêneas multidimensionais
variáveis compostas heterogêneas - registros
1- conceito de variáveis estruturadas (variáveis compostas)
Variável estruturada (ou composta): conjunto de dados referenciável por um mesmo identificador.
60
50
70
12
-1
0
0
2
8
51
10
Vetor V
31
77
2
14
-6
2
5
90
0
Matriz M
Nome
Roberto
Nº
6345-2
P1
9
P2
10
Sub
--
média
9.5
Registro R
28
Variáveis compostas podem ser
• Homogêneas = todos os elementos do conjunto são do mesmo tipo
• Unidimensionais = vetores
• Bidimensionais = matrizes
• …
• multidimensionais = N dimensões
• Heterogêneas (registros) = os elementos do conjunto são de tipos diferentes
2- Variáveis compostas homogêneas unidimensionais - vetores
60
50
70
12
-1
0
0
10
Vetor V
Declaração:
Var identificador : Array [Li..Lf] of tipo ;
Onde:
• Li = limite inferior (valor inteiro)
• Lf = limite superior (valor inteiro)
Exemplos:
•
Var Vetor : Array [ 1 .. 8 ] of Integer;
Vetor
60
50
70
12
-1
0
0
10
1
2
3
4
5
6
7
8
•
Var Vet1 : Array [ 1 .. 19 ] of Char;
Vet1
A
1
•
D
G
H
+
-
L
N
*
R
Y
U
I
O
$
P
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
U
Y
18
19
Var Vet2 : Array [ 20 .. 25 ] of String [ 5 ] ;
Vet2
XICO
20
Ratos
ASDFG
21
22
23
TT
#$%¨*
24
25
29
Referência a todo o vetor
• Atribuição de um vetor para o outro
Exemplo
• V1 := V2;
{ V1 do mesmo tipo que V2, todos os valores de V1 recebem seus equivalentes em V2 }
Referência a um único elemento do vetor
• Atribuição
• Leitura
• Uso em expressões
Exemplos:
• V1 [ 5 ] := 2;
• V1 [ 5 ] := V1 [ 2 ] + 30;
• V1 [ I + 1 ] := V1 [ I ];
• Read ( V1 [ 1 ] );
• Write ( V1 [ I ] );
• For I := 1 to N do
Read ( V1 [ I ] ) ;
{ sendo ´V1´ um vetor de inteiros }
Exemplo de uso: fazer um programa para ler 50 valores, armazená-los em um vetor, calcular e escrever a
média dos valores.
Algoritmo
1- declare variáveis Soma, Média, Vetor, I
2- leia os elementos, armazenando-os no vetor
3- calcule a média
4- escreva a média
Refinamento 2: leia os elementos
For I := 1 to 50 do
Begin
Write( ´ Entre o valor para Vetor [ ´, I , ´ ] ` );
Readln ( Vetor [ I ] );
End;
Refinamento 3: calcule a média
Soma := 0;
For I := 1 to 50 do
Soma := Soma + Vetor [ I ];
Media := Soma / 50;
Programa
Program Calcula_Media;
Var
I : integer;
Soma, Media : Real;
Vetor : Array [ 1 .. 50 ] of Integer;
Begin
{ 2- leitura dos elementos }
For I := 1 to 50 do
Begin
Write( ´ Entre o valor para Vetor [ ´, I , ´ ]
Readln ( Vetor [ I ] );
` );
30
End;
{ 3- cálculo da média }
Soma := 0;
For I := 1 to 50 do
Soma := Soma + Vetor [ I ];
Media := Soma / 50;
{ 4- escrevendo a média }
Writeln ( ´A média dos elementos é
Readln;
End.
´, Média );
3- Variáveis compostas homogêneas bidimensionais - matrizes
2
8
51
31
77
2
14
-6
2
5
90
0
Matriz M
Declaração:
Var identificador : Array [Li..Lf , Li, Lf ] of tipo ;
Onde:
• Li = limite inferior (valor inteiro)
• Lf = limite superior (valor inteiro)
Exemplos:
• Var Matriz : Array [ 1 .. 3, 1 .. 2 ] of Integer;
1
2
31
77
14
-6
5
90
1
2
3
Matriz
Referência a toda matriz
• Atribuição de uma matriz para outra
Exemplo
• M1 := M2; { M1 do mesmo tipo que M2, todos os valores de M1 recebem seus equivalentes em M2 }
Referência a um único elemento da matriz
• Atribuição
• Leitura
• Uso em expressões
Exemplo:
• V1 [ 1, 2 ] := 2;
• V1 [ 2, 1 ] := V1 [ 2, 2 ] + 30;
• V1 [ I + 1 , j ] := V1 [ I , j ];
• Read ( V1 [ I, j ] );
• Write ( V1 [ I, j ] );
• For I := 1 to N do
For J := 1 to M do
Begin
{ sendo ´V1´ um vetor de inteiros }
31
Write ( ´ Entre o elemento M [ ´, I, ´ , ´, j, ´ ] ´);
Readln ( M [ i, j] ) ;
End;
Exemplo de uso: fazer um programa para ler 2 matrizes 5 x 4, calcular e escrever a matriz soma entre elas.
Algoritmo
1- declare variáveis Matrizes A, B e Soma, I e j inteiros
2- ler a matriz a
3- ler a matriz b
4- calcule a matriz soma
5- escreva a matriz soma
Refinamento 2: leia a matriz A
For I := 1 to 5 do
For J := 1 to 4 do
Begin
Write ( ´ Entre o elemento A [ ´, I, ´ , ´, j, ´ ] ´);
Readln ( A [ i, j] ) ;
End;
Refinamento 3: leia a matriz B
For I := 1 to 5 do
For J := 1 to 4 do
Begin
Write ( ´ Entre o elemento B [ ´, I, ´ , ´, j, ´ ] ´);
Readln ( B [ i, j] ) ;
End;
Refinamento 4: calcule a matriz soma
For I := 1 to 5 do
For J := 1 to 4 do
Soma [ I, j ] := A [ I, j ] + B [ I, j ] ;
Refinamento 5: escreva a matriz soma
For I := 1 to 5 do
begin
For J := 1 to 4 do
Write ( Soma [ I, j ] : 6 );
Writeln ( ´´ ) ;
End;
{ muda de linha}
Programa
Program Soma_matrizes;
Var
I, j : integer;
A, B, Soma : array [ 1..5, 1..4 ] of integer;
Begin
{ lendo a matriz A }
For I := 1 to 5 do
For J := 1 to 4 do
Begin
Write ( ´ Entre o elemento A [ ´, I, ´ , ´, j, ´ ] ´);
Readln ( A [ i, j] ) ;
End;
32
{ Refinamento 3: leia a matriz B }
For I := 1 to 5 do
For J := 1 to 4 do
Begin
Write ( ´ Entre o elemento B [ ´, I, ´ , ´, j, ´ ] ´);
Readln ( B [ i, j] ) ;
End;
{ Refinamento 4: calcule a matriz soma }
For I := 1 to 5 do
For J := 1 to 4 do
Soma [ I, j ] := A [ I, j ] + B [ I, j ] ;
{ Refinamento 5: escreva a matriz soma }
For I := 1 to 5 do
begin
For J := 1 to 4 do
Write ( Soma [ I, j ] : 6 );
Writeln ( ´´ ) ;
{ muda de linha}
End;
Readln;
End.
4- Variáveis compostas homogêneas multidimensionais
Declaração:
Var identificador : Array [Li1..Lf1 , Li2 Lf2, … Lin..Lfn ] of tipo ;
Onde:
• Li1 e Lf1 = limites inferior e superior da primeira dimensão (valors inteiros)
• Li2 e Lf2 = limites inferior e superior da segunda dimensão (valors inteiros)
…
• Lin e Lfn = limites inferior e superior da n-ésima dimensão (valors inteiros)
Exemplo:
• Var Matriz : Array [ 1 .. 4, 1 .. 4, 1 .. 4 ] of Integer;
{ um " cubo" de valores }
5- Variáveis compostas heterogêneas - registros
Nome
Roberto
Nº
6345-2
P1
9
P2
10
Sub
--
média
9.5
Registro R
Declaração:
Var identificador : Record
33
Campo1 : tipo1;
Campo2 : tipo2;
…..
CampoN : tipoN;
End;
Onde:
• Campo1, campo2, … campoN = identificadores;
• Tipo1, tipo2, tipoN = tipos associados aos campos.
Exemplo:
Var Aluno = Record
Nome : string [ 20 ];
Numero : string [ 6 ];
P1
: real;
P2 : real;
Sub : real ;
Media : real;
End;
{ desenho acima }
Referência a todo o registro
• Atribuição de um registro para o outro
Exemplo
• V1 := V2;
{ V1 é registro do mesmo tipo que V2}
{ todos os valores de V1 recebem seus equivalentes em V2 }
Referência a um único elemento do vetor
• Atribuição
• Leitura
• Uso em expressões
Exemplos:
• Aluno.nome := ´Roberto´;
{ sendo Aluno um registro como declarado acima }
• Aluno.numero := ´6345-2´;
• Aluno.Media := (Aluno.P1 + Aluno.P2)/2;
• Readln ( Aluno.p1 );
• Writeln ( Aluno.nome );
Exemplo de uso: fazer um programa para ler os dados de 41 alunos (modelo acima), suas notas, calcular e
escrever nome do aluno e sua respectiva média. Use um vetor de registros para armazenar
temporariamente os valores.
Algoritmo
1- declare variáveis Tabela (vetor de registros), I tipo inteiro
2- leia os dados (nome, nro, notas…), armazenando-os na tabela
3- calcule a média para cada aluno
4- escreva o nome e a média de cada aluno
34
Programa
Program Calcula_Medias;
var i : integer;
Tabela : Array [1..4] of Record
nome : string;
numero: string;
p1 : real;
p2 : real;
media : real;
end;
begin
{ ref. 2 leitura dos dados }
For i := 1 to 4 do
begin
write( 'nome = '); readln( Tabela[i].nome );
write( 'nro = '); readln ( tabela[i].numero );
write( 'p1 = ' ); readln ( Tabela[i].p1 );
write( 'p2 = ' ); readln ( Tabela[i].p2 );
writeln;
end;
{ ref. 3 calculo das médias }
For i := 1 to 4 do
Tabela[ i ].media := (tabela[i].p1 + tabela[i].p2)/2;
{ ref. 4 escrever nomes e m‚dias }
writeln('
nome
medias ');
For i := 1 to 4 do
Writeln( Tabela[i].nome:10, tabela[i].media:10:2);
writeln;
Writeln( 'pressione enter para continuar ');
readln;
end.
Exercícios de fixação
1- Ler um conjunto de 50 inteiros e escreve-los na ordem inversa à ordem de leitura.
2- Ler 30 elementos inteiros, colocar em um vetor. Depois, calcule e escreva o maior elemento, a soma de
todos e a média.
3- Ler 2 vetores a e b, de inteiros, montar o vetor soma = a + b.
4- Ler dois vetores a e b, de char, montar um vetor que intercale os elementos de a (todos os ímpares) e b
(os pares).
5- Ler um vetor e, em seguida, ordenar os valores (monte um novo vetor), escreva o resultado: ambos os
vetores, lado a lado.
6- Multiplicação de matrizes: leia a e b (4x4), crie C = A*B, escreva C.
Nas questões abaixo, preocupe-se, antes de começar a fazer o algoritmo, em definir a estrutura de dados
mais adequada para resolver o problema.
7- Gabarito vestibular. Faça um programa para corrigir provas de vestibular. Primeiramente leia (e
armazene temporariamente em um vetor) um gabarito (alternativas a-e, 50 questões). Depois leia um
conjunto indeterminado de provas, calcule e escreva o número de acertos para cada uma delas. Não é
necessário armazenar os valores de cada prova. Ao final da correção de cada prova, pergunte ao
usuário se existem mais provas a serem corrigidas. Se não existirem mais, encerre o programa.
8- Loteria esportiva. Faça um programa para ler um "gabarito" com os resultados dos jogos da loteria
esportiva (coluna 1, coluna2, coluna do meio, 13 jogos), armazenando em um vetor. Depois leia um
35
conjunto indeterminado de jogos e verifique se ganhou o prêmio. Ao final da verificação, pergunte se o
usuário quer entrar mais jogos. Ao final do programa, informe quantos ganharam o prêmio.
9- Estoque de supermercado. Faça um programa para controlar o estoque de um supermercado. Para
cada produto armazene: nome, estoque, preço, e estoque mínimo. Leia dados para o estoque e guarde
em um vetor. Depois percorra o vetor e escreva o nome e as demais informações de todos os produtos
que estão com estoque abaixo do estoque mínimo.
10- Folha de pagamentos. Monte um vetor para armazenar o nome, cargo, salário bruto de cada funcionário
de uma empresa. Depois execute a folha de pagamentos da seguinte forma: Para cada funcionário,
imprima nome, salário bruto, salário líquido (para salários menores que 1000 o salário líquido é o
próprio salário bruto; para salários maiores ou iguais a 1000 o salário líquido é cerca de 87% do salário
bruto).
Módulo 4: Modularização
Objetivos de aprendizado neste módulo...
• apresentar ao estudante o conceito de subprograma e
considerações sobre modularização
• praticar o desenvolvimento de algoritmos com a
utilização de tais conceitos e considerações.
Texto base para este módulo
•
•
Farrer e outros, "Algoritmos Estruturados", capítulo 3.
Farrer e outros, "Pascal Estruturado", capítulo 3, e capítulo 4 (sobre declaração de tipos).
Tópicos
1. Conceito de modularização
2. Subprogramas em Pascal
• procedimentos
• funções
• Abrindo um parêntesis: declaração de tipos
3. exercícios
1- Conceito de modularização
O que é um ´sistema modular´? O que é um aparelho de som modular?
Conceito de módulo: porção do sistema com função bem definida.
Conceito de módulo (no contexto de programação): trecho de um programa com função bem definida.
Na fase de projeto do programa (refinamentos sucessivos, algoritmo), deve-se buscar o projeto de um
programa modular.
36
Visão de um programa na fase de projeto: programa principal e vários módulos.
Programa
Principal
A
Program Principal;
A1
B
C
A2
Begin
A;
B;
C;
End.
Procedure A;
Begin
A1;
A2;
End;
{ refinamento A? }
2- Subprogramas em Pascal
Subprograma
• Trecho de programa com função bem definida
• Variáveis próprias
• Parâmetros de entrada e saída (para comunicação com o o programa principal e demais subprogramas)
• Acionado pelo nome, como se fosse um comando da linguagem.
Tipos
• Procedimentos (procedure)
• Funções (function): tem pelo menos um resultado
Sintaxe de um programa com subprogramas…
Program identificador;
Declaração de variáveis
Declaração de subprogramas
Begin
Comandos
End.
2.1- Procedimentos
sintaxe:
Procedure identificador [ (declaração dos parâmetros de entrada e saída) ] ;
Declaração das variáveis, constantes e tiops locais ao subprograma em questão
Declaração de subprogramas locais ao subprograma em questão
Begin
Comandos
End;
37
Exemplo:
Program troca_troca;
Var a, b : integer;
Procedure Troca (var A, B : integer ) ;
Var aux : integer;
Begin
Aux := a;
A := b;
B := aux;
End;
Begin { programa principal }
Read( a );
Read( b );
Troca( a, b );
Write( a );
Write( b );
End.
Parâmetros
• Entrada
• Entrada e saída (são precedidos por ´var´
Variáveis com nomes iguais
• Dentro de subprogramas, a referência prioritária é a uma variável local
Variáveis locais e parâmetros
• Conhecidos somente dentro do subprograma no qual foram declarados
2.2- Funções
sintaxe:
Function identificador [ (declaração dos parâmetros de entrada e saída) ] : tipo ;
Declaração das variáveis, constantes e tiops locais ao subprograma em questão
Declaração de subprogramas locais ao subprograma em questão
Begin
Comandos
End;
Exemplo:
Program Calcula_Media;
Var a, b : integer;
Var med: real;
Function Media ( a, b : integer ) : real;
Begin
Media := (a + B)/2;
End;
Begin
Readln( a );
Readln( b );
Med := media( a, b );
38
Writeln( med );
End.
2.3- Abrindo um parêntesis: declaração de tipos
Sintaxe
Type identificador = descrição de tipo válida em pascal ;
Exemplo:
…
Type matriz = array[1..3, 1..3] of integer;
Var a, b : matriz;
…
3- Exercícios
Refazer os seguintes exercícios, agora usando subprogramas para tornar o programa mais modular.
1. Fazer um programa que leia dois valores A e B, calcule e escreva a sua média aritmética.
Subprograma para calcular a média.
2. Fazer um programa que leia dois valores A e B, determine e escreva o maior entre eles. Subprograma
para calcular o maior.
3. Escrever um procedimento para leitura de um valor inteiro entre 1 e 100. Se o usuário fornecer um valor
for a desta faixa, deve-se repetir o processo até que seja fornecido um valor válido.
4. A conversão de graus Farenheit para centígrados segue a fórmula C = 5/9 ( F – 32 ). Fazer um
programa para gerar uma tabela mostrando temperaturas em F e em C, variando F de 1 em 1 grau de
40 até 160 F. Use uma função para fazer a conversão.
5. Leia 50 valores do tipo (nome, Notap1, Notap2, Nota_trabalhos, Percentual_de_presença), e determine
quantos alunos foram aprovados e quantos foram reprovados. Para aprovação é preciso ter média
maior ou igual a 6 e 75% de presença. A média é calculada pela expressão: Media = (P1 + P2) * 70% +
Nota1Trabalhos * 30%. Use uma função para calcular a média.
6. Programa que le dois vetores A e B e apresenta o vetor Soma. Use subprogramas para ler os vetores e
para somar os vetores.
7. Fazer programa para ler duas matrizes e apresentar a soma. Subprogramas para ler, somar e escrever
as matrizes.
8. Fazer procedimento para multiplicar 2 matrizes A (MxN) e B (NxK) e retornar a matriz resultado (MxK).
Obs:
A (M x N) * B (N x K) = Mult (M x K)
For I := 1 to M do
For J := 1 to K do
Mult (I, j) := ∑ A ( I, x) * B(x,j)
{ x variando de 1 a N }
39
Módulo 5: Arquivos
Objetivos de aprendizado neste módulo...
• apresentar ao estudante o conceito e as operações
básicoas sobre arquivos
• praticar o desenvolvimento de algoritmos com a
utilização de tais conceitos e comandos.
Texto base para este módulo
•
•
Farrer e outros, "Algoritmos Estruturados", seção 2.4.
Farrer e outros, "Pascal Estruturado", seção 2.4.
Tópicos
1.
2.
3.
4.
5.
6.
conceito de arquivo
arquivos com tiipo - operações básicas
visão geral de arquivos sequenciais
visão geral de arquivo texto
exercícios
comandos adicionais
1- Conceito de Arquivo
Nos programas que fizemos até o moment, se desligarmos o computador, todos os dados armazenados são
perdidos.
Arquivo: depósito de dados em memória permanente (disco rígido, disquete, etc.)
Tipos
• Arquivo com tipo: armazena dados de um único tipo (inteiros, vetores, registros, etc.), sequencialmente
• Arquivo texto : armazena textos (como em um editor de texto)
Exemplos
40
Esquema de um arquivo de inteiros
0
1
2
3
4
5
6
5
4
54
10
6
0
12
Esquema de um arquivo do tipo Aluno (registro)
0
1
2
3
4
5
Nome
José
Xico
Tiago
Mané
Maria
Julia
Nro
34344
23
2324
234
232
23123
P1
10
9
8
9
8
0
P2
5
5
6
7
8
6
media
7
8
9
8
7
8
2- Arquivos com tipo
Operações sobre arquivos
• Declarar
• Associar com um nome físico
• Criar
• Abrir
• Fechar
• Escrever
• Ler
Declarar
Var identificador : file of tipo;
Exemplo
Var F : File of integer;
Associar com um nome físico…
Assign( identificador, nome físico);
Exemplos
Assign( F, ´a:dados.dat´);
Assign( F, ´c:\progs\ic\quinto.xxx´);
Criarum arquivo vazio (exemplo)
Rewrite( F );
Abrir um arquivo já existente (exemplo)
Reset( F );
Fechar um arquivo (exemplo)
Close( F );
Ler um registro de um arquivo (exemplo)
Read( F, I );
{ sendo F um arquivo de inteiros e I variável tipo inteiro }
Escrever um registro em um arquivo (exemplo)
Write( F, I );
{ sendo F um arquivo de inteiros e I variável tipo inteiro }
Exemplo de programa: ler e armazenar uma tabela de Alunos, notas e médias
Program Alunos;
Type Tabela = array[1..41] of record
Nome : tring[10];
41
Numero: string[5];
P1:real;
P2:real;
Media: real;
End;
Var T
Var Arquivo
Var I
: Tabela;
: File of Tabela;
: integer;
Begin
For I := 1 to 41 do
Readln( T.nome, T.numero, T.p1, T.p2 );
Assign( arquivo, ´c:\progs\myfile.dat´ );
Rewrite( arquivo );
Write( arquivo, T );
Close( arquivo );
End.
1
2
3
4
…
40
41
Nome
José
Xico
Tiago
Mané
Maria
Julia
Nro
34344
23
2324
234
232
23123
P1
10
9
8
9
8
0
P2
5
5
6
7
8
6
media
3- Visão geral de arquivos seqüenciais
Arquivo do tipo Aluno = registro (nome, numero, p1, p2, media)
Nome
Nro
P1
P2
media
0 José
34344
10
5
7
1 Xico
23
9
5
8
2 Tiago
2324
8
6
9
3 Mané
234
9
7
8
4 Maria
232
8
8
7
5 Julia
23123
0
6
8
Operações
• EOF ( F );
{ end of file? Função de resultado boolean }
• Filesize( F );
{ retorna o tamanho do arquivo, em número de registros }
• Filepos( F );
{ retorna a posição corrente para leitura ou escrita }
• Seek( F, posição ); { posiciona o indicador de posição corrente na posição indicada }
Exemplo1: cópia de arquivos
Program Copia;
Type aluno : record
Nome : tring[10];
Numero : string[5];
P1, p2, media : real;
End;
42
Var A, B : file of Aluno;
Aux : aluno;
Begin
Assing( a, ´origem.pas´);
Assign( b, ´destino.pas´);
Reset( a );
Rewrite( b );
Read( a, aux);
While not eof( a ) do
Begin
Write( b, aux);
Read( a, aux );
End;
Close( a );
Close( b );
End.
Outros exemplos…
Altera a nota de um aluno…
Reset( b );
Seek( b, 4 );
Read( b, aux );
Aux.p1 := 10;
Seek( b, 4 );
Write( b, aux );
Close( b );
Inclui um novo registro no final do arquivo…
Reset( b );
Readln( aux.nome, aux.numero, aux.p1, aux.p2 );
Seek( b, filesize( b ) );
Write( b, aux );
Close( b );
4- Visão geral de arquivo texto
Program Exemplo_de_arquivo_texto;
Var
f : text;
Linha : string [ 80 ] ;
Begin
Assign ( F, ´texto.txt´);
Rewrite( F );
Linha := ´xxx´;
While linha <> ´´ do
Begin
Readln( linha );
If linha <> ´´
Then Writeln ( F, Linha );
End;
Close( F );
End.
43
5- Exercícios
1. Listar no vídeo um arquivo existente, com registros do tipo inteiro.
2. Dado um arquivo existente, com registros com os dados: nome, sexo, endereço, idade… criar 2
arquivos, um só com os homens e outro só com as mulheres.
3. Criar um arquivo de alunos (nome, nro, p1, p2, media), armazenar elementos (quantos o usuário quiser)
. Abrir o arquivo, a seguir, a atualizá-lo com as médias dos alunos. A seguir, liste nome e média de cada
aluno.
6- Comandos adicionais
Comando Case (seleção múltipla)
Case <variável de tipo enumerável. Of
Valor1 : comando;
Valor2: comando;
…
Valorn : comando;
[ else bloco de comandos ]
end;
Exemplo
Program Seleciona_opcao;
Uses crt;
Var opcao : integer;
Fim : boolean;
Begin
Fim := false;
Repeat
Clrscr;
Writeln (´Opções 1=incluir, 2=excluir, 3=alterar, 4=terminar´);
Readln( opcao );
Case Opcao of
1 : incluir;
2: excluir;
3: alterar;
4: fim := true;
else writeln (´opção inválida´);
end;
until fim;
end.
44
Trabalhos
Os trabalhos a seguir serão considerados na avaliação do aluno, conforme o
descrito no plano de ensino. Para melhor cumprirem seus objetivos os trabalhos
devem ser desenvolvidos no momento certo. O calendário do curso estabelece uma
data máxima para entrega de cada trabalho.
O resultado do trabalho é um relatório contendo:
a (1) listagem do
programa, (2) cópia da tela de execução (demonstrando que o programa funciona)
e (3) algoritmo. Coloque na capa ou primeira folha do relatório, em destaque, o
nome do aluno, número, nome da disciplina, turma e período (1º 2002, 2º 2002),
bem como o número e o título do trabalho.
Não é necessário entregar a versão digital (em disquete, CD), mas guarde
uma versão digital de cada um de seus trabalhos até o final do curso. O
professor poderá solicitar, em algum momento até o final do curso, a
apresentação do trabalho em uma entrevista.
Os trabalhos devem ser compilados por uma versão qualquer do Turbo Pascal
da Borland inc. Na home page do curso existe uma versão para download.
Possíveis Problemas nos Trabalhos...
1. Trabalho incompleto ou diferente do especificado.
2. Erro nos algoritmos.
3. Execução inexistente ou insuficiente,.
4. Algoritmo inexistente ou insuficiente
5. Usar nomes não significativos para variáveis, tipos ou subprogramas.
6. Ausência de identação ou comentários implicando em complexidade de leitura.
7. Não entregar no prazo.
8. Trabalhos notadamente duplicados.
Primeiro Trabalho:
Imposto de Renda.
Alvo de aprendizado: estrutura básica de um programa, estrutura condicional,
expressões aritméticas, variáveis, tipos, comandos de entrada e saída.
Fazer um programa que leia o salário bruto de um trabalhador, calcule e escreva
o seu salário líquido e o valor do desconto. O desconto refere-se exclusivamente
ao Imposto de Renda Retudo na Fonte (IRRF).
O cálculo do IRRF ocorre da seguinte forma: salários brutos até R$900 são
isentos (desconto = 0). O IRRF para salários maiores que R$900 e menores ou
iguais a R$1800 é de 15% do que exceder a R$900 (o que equivale a 15% do salário
45
bruto menos R$135,00). Para salários maiores que R$1800 o IRRF é de 27,5% menos
247,50 (R$135 + R$112,5). A tabela abaixo resume a forma de cálculo do IRRF.
Tabela do IRRF (até 2002)
Faixa salarial (R$)
0,01 a 900,00
900,01 a 1800,00
1800,01 ou maior
Segundo Trabalho:
alíquota
isento
15%
27,5%
Menos (R$)
135,00
247,00
Juro Composto.
Alvo de aprendizado: estruturas de repetição.
Enunciado: Fazer um programa que leia uma taxa de juros mensal, um valor
inicial, e o número de meses. Calcule e escreva o valor final, calculado pela
aplicação da taxa de juros mês a mês. Use uma estrutura de repetição (REPEAT ou
WHILE. Não use o comando FOR) para efetuar os cálculos.
Terceiro Trabalho: Matrizes.
Alvo de aprendizado: vetores e matrizes.
Enunciado: Fazer um programa para ler duas matrizes A e B, quadradas de ordem N,
e apresentar de forma organizada (como no desenho de uma matriz) as matrizes A,
B , Soma e Mult (multiplicação).
• N deve ser definido como constante. Use N pequeno - 3, 4 - para facilitar a
formatação.
• Preocupe-se com a formatação da entrada e saída de dados, e com a validação
dos dados fornecidos pelo usuário.
Quarto Trabalho: Controle Acadêmico.
Alvo de aprendizado: registros e subprogramas.
Enunciado: Fazer um programa para ler os nomes e as notas de N alunos (N como
constante, como 5, 10), armazenar em um vetor, calcular as médias de cada aluno
e então escrever de forma organizada (uma lista) os nomes, notas e médias de
cada um.
• Deve ser definido o tipo Aluno, um registro contendo nome, número, e as notas
p1, p2, sub e trabalhos, e também a média final. O vetor, no caso, será um
vetor de registros do tipo aluno.
• A média deve ser calculada por uma função chamada MediaDoAluno. Essa função
calcula a média de 1 (um) aluno. As informações necessárias (as notas do
aluno) devem ser passadas como parâmetro.
46
•
•
Deve-se primeiramente ler todos os dados, só então efetuar o cálculo de todas
as médias, e só então escrever tudo.
Preocupe-se com a validação da entrada de dados, e com a formatação da saída.
Quinto Trabalho: Controle Acadêmico com Arquivos.
Alvo de aprendizado: arquivos.
Enunciado: Fazer um programa para cadastro e gerenciamento do aproveitamento de
alunos em um determinado curso.
• Definir um registro tipo aluno, com nome, número, notas individuais e média.
• Definir um arquivo para armazenar registros do tipo aluno
• Fazer um programa que forneça ao seu usuário opções para
1. incluir aluno,
2. excluir aluno,
3. alterar as notas de um aluno,
4. (re)calcular as médias.
5. mostrar a lista de nomes, notas e médias e
6. sair do programa
• Preocupe-se com a modularização do programa, definindo subprogramas quando
conveniente.
• Preocupe-se com a validação da entrada de dados, e com a formatação da saída.
47
Provas de Anos Anteriores
Objetivos destas informações
• dar ao estudante uma noção do tipo de questão que
será utilizada para avaliação de seu aprendizado
Fontes de consulta para este módulo:
Provas aplicadas nos cursos de Introdução à Computação, na UFSCar, em anos
anteriores
1. O que é um compilador?
2. Faça um programa que calcule a área de uma região retangular a partir de sua
base e altura. Leia a base e a altura, calcule o valor da área e escreva o
resultado. Método de cálculo: Área = base * altura.
3. Faça um programa que leia o valor do salário bruto de um trabalhador, calcule
e escreva o salário líquido. O salário líquido é calculado da forma abaixo:
• liquido = bruto - descontos
• desconto = 10% do bruto para salários bruto menor que R$ 800,00
• desconto = 25% do bruto para salários maiores ou iguais a R$ 800,00
4. Faça um programa que escreva os números de 100 a 500 seguidos de seu
quadrado.
5. No contexto de programação, o que é e para que serve um arquivo de dados?
6. Seja um arquivo de números inteiros de tamanho desconhecido, de nome
dados.dat. Faça um programa que encontre e escreva o maior número do arquivo.
7. Faça um programa que leia duas matrizes A e B, ambas N x N, e escreva a
matriz C onde C = A + B. Considere prontos (e use!) os seguintes
subprogramas:
• procedure Le_matriz (var M : Matriz );
• procedure Escreve_Matriz( M : Matriz );
48
onde o tipo Matriz é definido da forma:
• const N = <não interessa>;
• type Matriz = array[1..n] of real;
8. Fazer uma função para calcular a média de um aluno a partir das notas de suas
2 provas normais e 1 substitutiva. Deve-se calcular a média aritmética das
duas notas maiores. Segue a definição da função:
• function Media( p1, p2, sub : real ) : real;
49
REFERÊNCIAS BIBLIOGRÁFICAS
•
Abib, S.; Material do curso de introdução à computação.
•
Catto, A. J.; e outros; "Uma Introdução à Programação
Estruturada".
Texto
experimental
editado
em
data
desconhecida.
•
Farrer, H.; "Algoritmos Estruturados". Editora Guanabara,
Rio de Janeiro, 1989.
•
Farrer, H.; "Pascal Estruturado". Editora Guanabara, Rio
de Janeiro, 1985.
50
X
getnode( P
)
info( P )
<-- X
next( P )
<-- P
L <-- P
X
O
X
X
O
X
X
X
O
X
O
O
X
X
X
O
X
O X
X
O
X
X
X
O
O
X
X
51

Documentos relacionados

Texto retirado e adaptado da apostila “A Linguagem Pascal

Texto retirado e adaptado da apostila “A Linguagem Pascal programa que será construído a seguir, o campo FLAG poderá guardar um de dois valores, o asterisco "*" para remoções lógicas ou um espaço em branco " " para determinar que o registro é ativo. Vale ...

Leia mais

1 conceitos básicos da linguagem pascal

1 conceitos básicos da linguagem pascal do programa. Os labels são utilizados em conjunto com a instrução goto. Isso o que eu particularmente, não recomendo para nenhum programa de computador desenvolvido. Na subárea Const, definimos tod...

Leia mais

programa em Pascal - Index of - Universidade Federal de Alagoas

programa em Pascal - Index of - Universidade Federal de Alagoas Em Maceió, no mês de maio do ano de 2004. Jaime Evaristo

Leia mais

Apostila de Pascal da UNICAMP - muito boa!

Apostila de Pascal da UNICAMP - muito boa! Imprima o resultado x. Algoritmo de Euclides Estilizado.

Leia mais