Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceitos bsicos
1 Introduo ______________________________________________________________________ 4
1.1 O que um programa ___________________________________________________________ 4
1.2 Evoluo da programao________________________________________________________ 4
1.3 O que uma Linguagem de Programao ___________________________________________ 5
1.4 Normas Bsicas de Programao __________________________________________________ 5
2 Linguagem TURBO PASCAL ______________________________________________________ 6
2.1 Estrutura de um Programa em Turbo Pascal__________________________________________ 6
2.1.1 rea de Identificao _______________________________________________________ 7
2.1.2 rea das definies de Variveis ______________________________________________ 7
2.1.3 rea dos Procedimentos e Funes ____________________________________________ 8
2.1.4 rea do Programa __________________________________________________________ 8
2.2 Observaes relativas a escrita de programas Pascal ___________________________________ 9
2.3 Comentrios __________________________________________________________________ 9
3 Tipos de dados _________________________________________________________________ 10
3.1 Identificadores________________________________________________________________ 10
3.2 Introduo aos Tipos de Dados Padro_____________________________________________ 11
3.2.1 Tipos de variveis numricas inteiras __________________________________________ 11
3.2.2 Tipos de variveis numricas Reais ___________________________________________ 11
3.2.3 Tipos de dados lgicos: Boolean _____________________________________________ 11
3.2.4 Tipos de dados caracter: Char e String _________________________________________ 12
3.3 Ambiente Turbo Pascal _________________________________________________________ 12
3.3.1 Comandos de edio _______________________________________________________ 12
3.3.2 Manipulao de Blocos _____________________________________________________ 12
3.3.3 Funes para uso do ambiente Turbo Pascal ____________________________________ 12
4 Comandos e funes do Turbo Pascal _______________________________________________ 14
4.1 Comandos/Funes bsicos aos programas _________________________________________ 14
4.2 Programa exemplo sem procedimentos ____________________________________________ 16
4.3 Programa exemplo com procedimentos ____________________________________________ 17
5 Programas seqenciais ___________________________________________________________ 18
5.1 Exerccios de programas seqenciais no Turbo Pascal_________________________________ 18
6 Testes e Selees________________________________________________________________ 21
6.1 Condio ____________________________________________________________________ 21
6.2 Comando Condicional Simples___________________________________________________ 23
6.3 Comando Condicional Mltiplo __________________________________________________ 25
6.4 Exerccios de programas com seleo no Turbo Pascal ________________________________ 26
7 Comandos de Repetio __________________________________________________________ 28
7.1 Novos Conceitos na utilizao de variveis _________________________________________ 28
7.1.1 CONTADOR ____________________________________________________________ 28
7.1.2 ACUMULADOR _________________________________________________________ 28
7.1.3 FLAG __________________________________________________________________ 28
7.2 Lao com contador ____________________________________________________________ 29
7.3 Lao com teste no final _________________________________________________________ 30
7.4 Lao com teste no incio ________________________________________________________ 31
7.5 Exerccios de programas com repetio ____________________________________________ 32
Tudo o que h dentro de um computador, alm das funes que ele realiza, foi criado pelo
homem. Pode, portanto, ser explicado e entendido.
COMPILADOR: Programa de computador (escrito por outras pessoas), que traduz a linguagem
entendida pelo homem e gera um cdigo a ser entendido pela mquina em um processo de
COMPILAO.
COMPILAO: Passar para a linguagem de mquina as instrues escritas em uma Linguagem de
Programao.
INTERPRETADOR: Programa de computador que em tempo de execuo (ou seja enquanto o
programa esta sendo executado) traduz a linguagem de programao de alto nvel para um cdigo que
a mquina entende. D mais flexibilidade ao programa, porm o torna mais lento.
rea de Identificao
Exemplo
program primeiro;
{ Este programa serve para o calculo de anos bissextos }
{ Autor: Fulano de tal Criado em: 29/02/1500 }
{ ltima modificao: 30/02/1900 }
uses crt;
onde vamos definir todas (mas todas mesmo) as variveis que vamos utilizar no programa.
Deve comear pela palavra chave var
Aps, na prxima linha, os nomes das variveis, divididos por vrgulas.
Os nomes das variveis seguem as mesmas regras do nome do programa.
Aps a ltima varivel de uma linha, utilizaremos o separador dois-pontos e colocaremos o tipo desta
lista de variveis, terminando a frase com um ponto-e-vrgula.
Nas prximas linhas, repetimos as listas de variveis (com nomes diversos) de tipos diferentes ou no.
Exemplo
var
mes, dia, ano : integer;
salario : real;
folgou_feriado : boolean;
dias_trabalhados : integer;
<nome>, <nome> : <tipo de varivel> ;
......, ...... : ..................
Exemplo:
procedure inicio;
begin
gotoxy(10,10);
write('Inicio do programa');
end ;
Exemplo
begin
clrscr;
inicio;
leitura;
x := calculo(a, b);
mostra('o resultado de x vale');
end.
2.3 Comentrios
Os comentrios devem ser escritos, sempre. Eles servem para futuramente sabermos o que
fizemos nos programas, ou at mesmo em grandes empresas para sabermos o que outros fizeram.
aconselhvel ao incio de um programa ou um procedimento, escrever para que serve o
programa/procedimento, qual a lgica utilizada e, em programas, o nome do autor e a data de criao bem
como a data da ltima modificao.
Eles so identificados pelos smbolos {, } (chaves) que marcam respectivamente o incio e o
fim do trecho de comentrios. Os comentrios no so interpretados pelo compilador.
Exemplo
program calc_media;
uses wincrt;
{ Este um programa de teste que calcula a mdia dos alunos }
procedure calculo;
{ Este procedimento calcula as raizes de uma equao de 2
grau, usando a formula de bskara }
As linguagens de programao possuem ainda tipos de dados padres que representam todos os
tipos bsicos. Na linguagem Pascal, ainda podemos criar nossos prprios tipos de dados.
3.1 Identificadores
Para a execuo de um programa, o computador faz uso das instrues a serem executadas,
juntamente com os valores dos dados que o programa manipula. Como j vimos, uma instruo pode ser
um comando ou uma chamada de procedimento/funo.
Um procedimento/funo identificado pelo seu nome. Os dados que o programa manipula,
devem tambm ser identificados. Para isto existem as variveis e constantes, que nada mais so do que a
identificao na memria do computador de um dado em especial. Como a memria do computador
internamente identificada atravs de posies (nmeros, onde esto gravados valores em binrio), o uso
de identificadores ao invs de sua posio na memria de vital importncia para o programador.
Existem regras para a definio dos identificadores, so elas:
Devem obrigatoriamente comear por letras, ter no mximo 64 caracteres e no podem possuir
espaos em branco no meio do nome;
indiferente o uso de letras maisculas ou minsculas no nome de identificadores. O Pascal
reconhece apenas o significado, no importando se foi escrito em letras maisculas ou minsculas;
Todos os nomes definidos pelo programador (nomes de variveis, do programa, de procedimentos e
de funes) devem ser mnemnicos e nunca repetidos;
Nunca usar uma varivel sem antes defini-la. E, aps utiliz-la, ter certeza de liberar seu espao
ocupado na memria;
Nunca utilizar o valor de uma varivel sem antes ter certeza de que ela realmente j possua um valor.
Constantes: Como o prprio nome diz, so valores que nunca mudam de valor durante a execuo de
um programa. Na prtica devemos ao incio de um programa definir o valor da constante e ela
permanecer com este valor at o final do programa.
Variveis: So identificados por um nome . Seu valor pode mudar durante a execuo de um
programa. Tecnicamente so regies na memria principal em que guardamos determinados dados.
Podemos sempre verificar ou alterar seu contedo.
Char: Varivel em que se armazena um caracter de acordo com o conjunto ASCII estendido (0-255);
normalmente representado entre aspas (' '), pode ser apenas um caracter e ocupa 1 byte. Mais de 1
caracter, usar o tipo string.
String: Cadeia de at 255 caracteres, armazena valores alfanumricos (nmeros e letras). Ocupa 1
byte por caracter. Pode-se visualizar um string como uma matriz de Char.
So manipuladas pelo programador de forma igual ao seu contedo, ou seja, no necessitam nem
de tratamento nem de formatao para uma perfeita visualizao.
Observaes:
Na composio dos nomes dos programas, utilizar apenas nomes com o formato DOS. Para o
nome do arquivo, utilizar no mximo 8 caracteres, sem espaos em branco. Nunca usar . ou colocar
extenso nos arquivos, deixar que o prprio ambiente se encarregue de adicionar a extenso aos
programas.
clrscr;
gotoxy(C, L): Posiciona o cursor em uma determinada posio da tela especificada pela dupla
(C, L).
C --> Coluna desejada, L --> linha desejada
Exemplo
gotoxy(10,5);
write : Escreve algo na tela do computador a partir da posio atual do cursor e mantm o cursor
no final do trecho escrito.
Exemplo
read : o comando de entrada de dados, atribui a uma varivel um valor lido pelo teclado.
Exemplo
read(varnum);
Atribuio : ( := )
Atribui a varivel da esquerda o valor da direita.
Exemplo
X := 10;
Y := 20 - X;
Z := X + y;
Z := Z - (X + 8);
varmed := X / Z;
total := Y * 5;
Existem muitos outros comandos e tantas outras funes padres no Pascal, porm, sero vistas
no decorrer das necessidades do semestre. Alguns destes comandos e destas funes esto descritos ao
final desta apostila. A seguir, um programa exemplo extremamente simples em Pascal, escrito em duas
verses: uma com uso de procedimentos e outra sem procedimentos.
uses crt ;
{ Final da area de Identificacao }
var
numero_do_aluno : integer ;
nota_prova1, nota_prova2, media : real ;
{ Final da area de Definicao das variaveis }
begin
clrscr; { limpa a tela }
readkey; { espera ate que uma tecla seja pressionada para que os resultados }
end. { do programa possam ser visualizados pelo usuario }
{ Final do programa }
uses crt ;
{ Final da area de Identificacao }
var
numero_do_aluno : integer ;
nota_prova1, nota_prova2, media : real ;
{ Final da area de Definicao das variaveis }
procedure leituras ;
{ Procedimento para ler (informar) as variveis p/ o programa }
{ E onde damos ENTRADA nos dados. So lidos: nmero do aluno e notas das provas}
begin
gotoxy(10,05) ; { posiciona o cursor }
write('Informe o Numero do Aluno .....: ') ;
read(numero_do_aluno) ;
gotoxy(10,07) ;
write('Informe a Nota da 1a. Prova ...: ') ; {Escreve mensagem na tela}
read(nota_prova1); { Le, informa a variavel a partir do teclado }
gotoxy(10,09) ;
write('Informe a Nota da 2a. Prova ...: ') ;
read(nota_prova2) ;
end ;
procedure calculo ;
{ Procedimento onde se faz o PROCESSAMENTO do programa }
begin
media := ( (nota_prova1 * 3) + (nota_prova2 * 7) ) / 10;
end;
procedure mostra_resultados ;
{ Procedimento que serve para externar (mostrar) os resultados obtidos }
{ pelo programa. E este procedimento que faz a SAIDA do programa }
begin
gotoxy(10,15);
write('RESULTADOS OBTIDOS');
gotoxy(10,17);
write('A media das provas e ',media:4:2);
end;
{ Final do programa }
Regra geral
2) Escrever um programa que leia uma temperatura em graus Centgrados. Calcular a converso desta
temperatura para graus Fahrenheit. Mostrar a temperatura lida em graus Fahrenheit. A frmula de
converso : F # (9 * C + 160) / 5. Onde F a temperatura em Fahrenheit e C a temperatura em
Centgrados.
3) Escrever um programa que leia uma temperatura em graus Fahrenheit. Calcular a converso desta
temperatura para graus Centgrados. Mostrar a temperatura lida em graus Centgrados. A frmula de
converso : C # (F - 32) * (5 / 9). Onde F a temperatura em Fanrenheit e C a temperatura em
Centgrados.
4) Escrever um programa que leia dois valores (A e B) e efetuar as operaes de adio, subtrao,
multiplicao e diviso de A por B, apresentando ao final os quatro resultados obtidos.
5) Escrever um programa que leia o raio de uma circunferncia. Calcular a rea desta circunferncia
atravs da frmula AREA # PI * RAIO2. Mostrar a rea da circunferncia calculada.
6) Escrever um programa que leia a quantidade de horas trabalhadas por um funcionrio em um ms, o
valor que ele recebe por hora e o percentual de desconto para o INSS. Calcular o salrio bruto (horas
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
19
trabalhadas * valor hora), o valor do desconto para o INSS e o salrio lquido (Salrio bruto -
desconto INSS). Mostrar o salrio bruto, o valor do desconto do INSS e o salrio lquido do
funcionrio.
7) Montar um programa que leia trs nmeros A, B e C, que representam os valores de uma equao de
2 grau (Ax2 + Bx + C = 0). Calcular e mostrar as razes reais.
8) Escrever um programa que leia 3 variveis: A, B e C. Calcular: a rea de um tringulo com base A e
B por altura, rea de um crculo com raio C, rea de um trapzio que tem A e B por bases e C por
altura, rea de um quadrado de lado B, rea de um retngulo de lados A e B e a rea da superfcie de
um cubo de aresta C. Mostrar as reas calculadas.
10) Ler dois valores para as variveis A e B, efetuar a troca dos valores de forma que a varivel A passe a
possuir o valor da varivel B e que a varivel B passe a possuir o valor da varivel A. Apresentar os
valores trocados.
11) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem, utilizando-se um
automvel que faz 12 km por litro. Para obter o clculo, o usurio dever fornecer o tempo gasto na
viagem e a velocidade mdia durante a mesma. Desta forma, ser possvel obter a distncia percorrida
com a frmula DISTNCIA # TEMPO * VELOCIDADE. Tendo o valor da distncia, basta calcular
a quantidade de litros de combustvel utilizada na viagem com a frmula:
LITROS_USADOS # DISTNCIA / 12. O programa dever apresentar os valores de velocidade
mdia, tempo gasto na viagem, a distncia percorrida e a quantidade de litros de combustvel
utilizados na viagem.
12) Escrever um programa que leia trs valores: A, B e C , que so os lados de um tringulo, calcule e
mostre a rea deste tringulo. rea = S * (S - A) * (S - B) * (S - C) onde S o semi-permetro.
13) Montar um programa que leia trs nmeros: A, B e C. Encontrar e mostrar o maior dos trs nmeros.
Frmulas: Maior [A,B] = (A + B + |A B|) / 2.
Obs.: Valor em mdulo: ABS(x) = |X|.
14) Escrever um programa que leia um valor em R$, calcule e mostre o menor nmero possvel de notas
de 100, 50, 10, 5, 1 em que o valor lido pode ser decomposto. Mostrar as quantidades de cada um dos
tipos de notas encontradas.
15) O custo ao consumidor de um carro novo a soma do custo de fbrica com a percentagem do
distribuidor e dos impostos, ambos aplicados ao custo de fbrica. Supondo que a percentagem do
distribuidor seja 28% e os impostos de 45%, escrever um programa para ler o custo de fbrica de um
carro e escrever o custo ao consumidor.
16) Fazer um novo programa, semelhante ao anterior (nmero 15), porm, deve-se aplicar a percentagem
do distribuidor aps j ter sido calculado o percentual dos impostos.
17) Uma loja de animais precisa de um programa para calcular os custos de criao de coelhos. O custo
calculado com a frmula : CUSTO # (70% do NR_COELHOS) / 18 + 10. Escrever um programa
que leia o nmero de coelhos, calcule o custo de criao e mostre o custo calculado.
19) Um imvel foi comprado por 5 pessoas. Joo, comprou a metade do imvel. Do restante, Pedro,
comprou a metade. O que ainda sobrou, foi divido por Maria, Jos e Luza, sendo que Jos, ficou com
a metade do que ficou Maria, que por sua vez, ficou com parte igual a Luza. Escrever um programa
em Pascal, que leia o valor recebido pelo aluguel do referido imvel, e quanto em R$ cada um dos
scios no imvel deve receber.
20) Ricardo, apostou em corridas de cavalos R$ 150,00. Acertou o ganhador e com isso, recebeu 80 vezes
o valor apostado. Ao receber o prmio, constatou que haviam descontos como segue:
a) 3,5 % para a associao dos apostadores
b) R$ 40,00 como taxa de uso do caixa do Hipdromo
c) 1,45% para o seguro do cavalo ganhador
d) e por fim, o I.R. lhe tirou 10%, do saldo j descontando as outras taxas, que ele ia levar para casa.
Escrever um programa que faa o extrato (na tela do computador) que Ricardo deveria receber pelo caixa
do Hipdromo, mostrando o valor ganho bruto, os descontos individualizados e o valor que realmente ele
levou para casa.
6.1 Condio
Condio nada mais do que uma (ou vrias) Expresso(es) Lgica(s).
Uma Expresso Lgica composta de proposies assertivas que podem estar corretas
(verdadeiras) ou incorretas (falsas). No resultado de uma condio, no existem valores diferentes de
Verdadeiro ou Falso.
Para formar uma expresso lgica, usa-se os seguintes operadores relacionais:
Vale relembrar, que o resultado de uma condio sempre TRUE (verdadeiro) ou FALSE
(Falso). No existem quaisquer outros resultados possveis. O operador de atribuio (:=), nunca pode
ser utilizado em uma condio.
Podemos ainda, montar um condio composta, ou seja, uma condio que depende de mais de
uma operao de verificao. Sendo uma condio composta ainda uma condio, seu resultado final
continua sendo sempre TRUE ou FALSE.
Conforme pode ser visto nos exemplos, os operadores lgicos ficam no centro de duas condies
e deve-se obrigatoriamente envolver os operadores relacionais da sentena por parnteses.
Na resoluo de uma condio com operadores lgicos, deve-se proceder da seguinte maneira:
a) Encontrar o resultado de cada uma das comparaes envolvidas (esta comparao como se fosse
uma condio separada, resulta em TRUE ou FALSE);
b) De posse dos resultados encontrados, comparar os resultados que fazem parte de um operador, ou
seja, sempre se compara os resultados, dois a dois (um de cada lado do operador lgico), encontrando
novamente um resultado para a condio, que sempre ser TRUE ou FALSE.
Vale lembrar ainda, que todos os exemplos com condies foram feitos com nmeros absolutos
(5, 10, 12, -1, ...), nos dois extremos dos operadores relacionais. Porm uma condio s tem sentido, se
em pelo menos um dos lados, o operador seja uma varivel.
Exemplos
P1 = A >=B
P2 = A < C
P3 = C > 1
Regra geral
if <condio> then
comando[;] / begin <comandos;> end[;]
else
comando; / begin <comandos;> end;
O comando condicional simples (Se ... Ento ...[Seno]), tem por finalidade avaliar uma
condio (simples ou composta) e decidir se os comandos sero ou no executados.
A forma de avaliao da condio, segue o descrito nas condies. SE o resultado da condio
for TRUE (verdadeiro), as instrues referentes ao ENTO (THEN) sero executadas, caso contrrio,
quando o resultado da condio for FALSE (falso), os comandos referentes ao ento (THEN) no
sero executados. O comando permite ainda opcionalmente (no obrigatrio seu uso) colocar comandos
que somente sero executados se a condio for falsa (FALSE). Estes comandos devero ser escritos
aps o comando de SENO (ELSE).
Em nenhuma hiptese comandos relativos ao ENTO e ao SENO sero executados juntos. Um
automaticamente exclui o outro, ou seja, caso a linha de execuo siga pelo then, ela no poder
passar pelo else e caso siga pelo else ela no poder passar pelo then.
Em ambos os casos de execuo poder existir apenas 1 comando ou um bloco de comandos
dentro das opes de condio verdadeira ou falsa.
Um bloco de comandos, consiste de um conjunto de comandos envolto pelo par begin
end. Um procedimento delimitado em um bloco de comandos, o programa principal tambm
delimitado em um bloco de comandos, entre outros.
Convm lembrar que todo o bloco de comandos deve possuir sempre incio e fim (begin
end), sob pena de acusar erros em tempo de compilao.
Exemplo
Quando fazemos uso da condio de seno (ELSE), devemos tomar o cuidado de no encerrar
o comando antes. Em Pascal, como j foi visto, um comando encerra-se com um ponto-e-vrgula.
Portanto, para incluirmos a opo de execuo, caso a condio seja falsa (ELSE), NO podemos
inserir o (;) no comando ou ao final do bloco de comandos (end do bloco de comandos).
Como observao final, podemos ainda frisar, que dentro de um comando condicional simples
(if then [else]), podemos ter diversos outros comandos condicionais. Isto conhecido
como condies aninhadas.
Exemplo
Regra Geral
case variavel of
25,50:
begin
write('variavel vale 25 ou 50');
end;
100:
write('variavel vale 100');
101..200:
write('variavel vale de 101 a 200');
300:
mostra300;
else
write('variavel no entrou em nenhum dos casos');
end;
22) Escrever um programa que leia um nmero inteiro. Mostrar se o nmero lido par ou mpar.
(No pode ser usada a funo odd() )
23) Escrever um programa que efetua a leitura de trs valores (variveis A, B e C) e calcula as razes de
uma equao de 2 grau, apresentando as duas razes, se para os valores informados for possvel
efetuar o referido clculo, caso os valores no possam ser resolvidos pela frmula de Bskara, indicar
que a equao no possui razes reais.
24) Escrever um programa que leia quatro valores referentes a quatro notas escolares de um aluno e
imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da mdia escolar for maior
ou igual a 5.0. Se o aluno no foi aprovado, indicar uma mensagem informando esta condio.
Apresentar junto com uma das mensagens o valor da mdia do aluno para qualquer condio.
25) Escrever um programa que leia dois valores numricos e mostre a diferena do maior para o menor.
26) Escrever um programa que leia dois valores A e B. Escrever a seguinte mensagem: So mltiplos
ou No so mltiplos.
27) Escrever um programa que leia trs valores A, B e C e verifica se eles formam ou no um tringulo.
Supor que os valores lidos so inteiros e positivos. Caso os valores formem um tringulo, calcular e
escrever a rea deste tringulo. Se no formam um tringulo, escrever esta mensagem: No formam
um tringulo.
28) Escrever um programa que leia 2 nmeros. Mostrar quais nmeros so divisveis por 2 e por 3.
29) Escrever um programa que leia 2 nmeros. Mostrar quais nmeros so divisveis por 4 ou por 5.
30) O departamento que controla o ndice de poluio do meio ambiente mantm trs grupos de indstrias
que so altamente poluentes. O ndice de poluio aceitvel varia de 0,05 a 0,25. Se o ndice sobe at
0,3 as empresas do 1 grupo so notificadas a paralisarem suas atividades. Se o ndice aumenta at 0,4
as empresas do 1 e 2 grupos so notificadas a paralisarem suas atividades. Finalmente, se o ndice
cresce para uma valor maior que 0,4 as empresas do 1, 2 e 3 grupos devem ser notificadas a
paralisarem suas atividades. Escrever um programa que leia o ndice de poluio medido e emita a
notificao adequada aos diferentes grupos de empresas.
31) Escrever um programa que l o nmero de um vendedor, seu salrio fixo e o total de vendas por ele
efetuado em um determinado ms. Cada vendedor recebe salrio fixo mais uma comisso,
proporcional s vendas por ele efetuadas. A comisso de 10% sobre o total de vendas at
R$1.000,00 e 20% sobre o que ultrapassa este valor. Escrever o total ganho em comisses juntamente
com o salrio fixo.
32) Escrever um programa que leia um nmero inteiro. Caso este nmero seja divisvel por 2, mostrar o
quadrado do nmero lido. Caso este nmero seja divisvel por 3, mostrar o cubo deste nmero e caso
o nmero seja divisvel por 4, mostrar a raiz quadrada do nmero. O nmero pode ser divisvel pelos
3 valores citados, (ex. 12), ento deve-se mostrar as 3 condies.
34) Escrever um programa que leia o nmero de identificao e as trs notas obtidas por um aluno nas trs
verificaes. Para o aluno calcular a mdia de aproveitamento segundo a frmula de mdia ponderada
descrita abaixo:
35) Escrever um programa que leia 5 nmeros, A, B, C, D e E. Mostrar o maior nmero e o menor
nmero.
36) Escrever um programa que leia um valor inteiro. Caso o valor seja menor que 100 e maior que -1,
escrever em qual dezena ele se encontra (8 est na 1a dezena, 23 est na 3a dezena, 91, est na 10a
dezena). Caso o nmero no esteja em nenhuma das 10 primeiras dezenas, escrever esta informao.
37) Ler quatro valores referentes a notas escolares de um aluno e imprimir uma mensagem dizendo que o
aluno foi aprovado, se o valor da mdia escolar for maior ou igual a 7.0. Se a mdia for menor que
7.0, solicitar a nota de exame, somar com a mdia e obter nova mdia. Se a nova mdia for maior ou
igual a 5.0, apresentar uma mensagem dizendo que o aluno foi aprovado em exame. Se o aluno no
foi aprovado, indicar uma mensagem informando esta condio. Apresentar junto com as mensagens
o valor da mdia do aluno, para qualquer condio.
38) Efetuar a leitura de quatro valores (variveis A, B, C e D) e apresentar os valores dispostos em ordem
decrescente.
39) Escrever um programa que leia uma hora inicial (horas e minutos) e uma hora final (horas e minutos).
Mostrar o tempo decorrido entre a hora inicial e a hora final, em horas e minutos.
40) Escrever um programa que leia 3 valores. Verificar se eles formam um tringulo. Caso eles no
formem um tringulo, indicar esta mensagem. Caso eles formem um tringulo, indicar o tipo de
tringulo que eles formam. Deve-se para cada tringulo informado, ser mostrado apenas 1 tipo.
7.1.1 CONTADOR
Varivel do tipo numrica inteira, que serve para, como diz o seu nome, contar quantas vezes algum
trecho de programa foi executado (quantas vezes alguma ao foi realizada). Por exemplo: para sabermos
quantas vezes foi executado um bloco de comandos, colocamos um comando a fim de incrementar1 a
varivel contadora, que j deve ter sido previamente inicializada (para no somarmos nada com algum
nmero). Quando o programa parar de executar o referido bloco de comandos, a varivel conter o
nmero de vezes que o referido bloco foi executado.
7.1.2 ACUMULADOR
Varivel que serve para acumular valores, geralmente numricos. Serve na prtica para obtermos
uma determinada soma. Por exemplo: para sabermos a soma de 30 nmeros a serem lidos, junto com o
trecho de leitura atualizamos a varivel acumuladora, que j deve estar inicializada. No final da 30a
leitura, teremos a soma dos 30 nmeros lidos. Ela til tambm para sabermos a mdia dos nmeros
lidos pois ela nada mais do que a soma dos nmeros divididos pela quantidade de nmeros lidos.
7.1.3 FLAG
Traduo do Ingls: bandeira, sinal. um tipo de varivel para controle do estado de um programa.
Usada em testes. Serve na prtica para sabermos se um lao pode ou no acabar, se uma frmula foi ou
no resolvida (o programador deve saber os motivos o porqu da frmula no ser resolvida). Nos
possibilita a comunicao entre diversas partes de um programa. Pode ser qualquer tipo de varivel, mas
no caso de necessitarmos de apenas dois estados, aconselhvel o uso de variveis do tipo boolean,
devido a sua facilidade no uso em testes e por que seu contedo so as constantes mnemnicas true
ou false.
1
ao de somar uma unidade a um valor
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
29
7.2 Lao com contador
Regra geral
Regra geral
repeat
comando; / bloco de comandos;
until <condio> ;
O bloco de comandos vai ser executado sempre pelo menos uma vez e s vai ser terminado
quando a condio de sada (FLAG) for verdadeira. Na prtica ocorre o seguinte:
a) bloco de comandos executado inteiro
b) Ao chegar ao final (until), a condio avaliada. Caso ela seja TRUE, a linha de execuo segue
para o prximo comando, logo aps o until. Caso a condio seja FALSE, a linha de execuo
retorna ao primeiro comando do bloco, onde recomea a execuo
A delimitao de incio e de fim do bloco de comandos, realizada pelas prprias partes do
comando: repeat marca o incio e until <condio> marca o fim.
A condio a ser colocada no final do comando, segue as regras de condies j comentadas,
podendo ser simples ou compostas.
Um exemplo muito comum da utilizao de lao com teste no final, a leitura de uma varivel
dentro de um certo domnio de valores vlidos. Isto acontece, por exemplo, em um programa que l
valores de notas para alunos. As notas vlidas esto no intervalo de 0.0 a 10.0 (in [0.0 .. 10.0]).
Nos programas anteriores, o usurio poderia digitar a nota que quisesse (por exemplo 312.6) que o
programa iria calcular a mdia, e, com certeza, estaria errada. Para solucionarmos esses problemas,
usamos o tipo de construo abaixo:
repeat
var_num := 0;
read(var_num);
until (var_num >= 0.0) and (var_num <= 10.0);
No exemplo anterior, a linha de execuo s vai sair de dentro do lao quando for digitada uma
nota vlida. Este tipo de construo tambm til quando trabalhamos com nmeros inteiros. Os nmeros
inteiros possuem limites de abrangncia de valores. Por outro lado, impossvel proibir o usurio de
tentar informar um nmero real em uma varivel inteira. Para isto devemos proteger a leitura da varivel
inteira.
Exemplo
repeat
num := 0;
read(num);
until (num >= -32768) and (num <= 32767)and (num = int(num) );
a := trunc(num);
No exemplo acima, a varivel de trabalho num utilizada apenas para evitar a ocorrncia de
um erro, caso o valor digitado pelo usurio seja do tipo real ( bvio que a varivel num do tipo real).
As duas primeiras condies verificam o escopo do valor, enquanto a ltima verifica se dentro da varivel
num existe um nmero inteiro (a varivel num real, mas a verificao para conferir se o seu
contedo inteiro).
Este comando tambm utilizado quando em um programa, se faz a verificao se dois nmeros
lidos so mltiplos. Para resolver o problema, no precisamos de lao de repetio. Mas, e se quisssemos
informar e verificar outra dupla de nmeros ? Teramos de executar novamente o programa e, assim,
sucessivamente. Com a utilizao do lao, podemos executar o mesmo programa quantas vezes
quisermos. A condio de parada (FLAG de sada) pode ser quando o valor da varivel a for zero.
Exemplo
while <condio> do
comando / bloco de comandos;
A condio a ser colocada no incio do comando, segue as regras j comentadas e podem ser
simples ou compostas.
A utilizao prtica deste comando se d, pela necessidade de que alguns comandos s se
repitam quando e enquanto uma condio for verdadeira. Este comando embute as funcionalidades de um
comando condicional simples, junto com um lao de repetio. Por j realizar o teste no incio, a(s)
varivel(eis) envolvida(s) na condio devem conter um valor antes do inicio do comando.
Um exemplo prtico a soma de valores (utilizao de um acumulador) enquanto este no for
maior do que um valor previamente estabelecido.
Exemplo
soma := 1;
final := 100;
while soma < final do
begin
soma := soma + (soma * 2);
end;
gotoxy(12,5);
write('O valor que est no acumulador vale : ',soma);
Os dois ltimos laos tem funo bastante semelhante. Em cada caso deve ser avaliada a
utilizao de um ou outro, segundo as necessidades. A diferena bsica entre eles que ...
42) Escrever um programa que leia 5 valores para A, um de cada vez, contar quantos destes valores so
negativos e escrever esta informao.
43) Escrever um programa que l 8 valores para a varivel B, um de cada vez. Mostrar a soma dos
valores lidos que sejam pares.
44) Escrever um programa que leia dois nmeros inteiros A e B, calcular e mostrar:
a soma dos inteiros entre eles;
a quantidade de nmeros mpares entre eles;
a quantidade de nmeros pares entre eles, inclusive eles.
45) Escrever um programa que leia um nmero inteiro M e um valor para a varivel N. Escrever o
valor da potncia de NM .
47) Montar um programa que leia um nmero inteiro, positivo menor ou igual a 10. Montar e mostrar a
tabuada deste nmero, como o exemplo abaixo.
Informe um nmero: _
Tabuada de 8
1 x 8 = 8
2 x 8 = 16
10 x 8 = 80
48) Escrever um programa que leia uma quantidade no determinada de vezes um nmero inteiro. Para
cada nmero lido calcular e mostrar seu quadrado, seu cubo e sua raiz quadrada. Parar de informar
quando o nmero lido for igual a zero. A exposio deve ser feita da maneira abaixo.
Informe um nmero: _
49) A srie de Fibonacci tem como os dois primeiros termos respectivamente 0 e 1. A partir deles, os
demais so construdos pela seguinte regra:
tn = tn-1 + tn-2
Escrever um programa que gere e mostre os 10 primeiros termos da srie, um abaixo do outro, indicando
a sua posio de ordem (se o 1o, ou o 2o ou o 7o da srie, etc) mostrando tambm a soma dos 10
primeiros termos.
51) Escrever um programa que gere e escreva os 4 primeiros nmeros perfeitos, juntamente com o seu
nmero de ordem. Um nmero perfeito aquele em que a soma dos seus divisores, exceto ele, seja
igual a ele prprio. Ex.: 6 = 1+2+3; 28=1+2+4+7+14.
52) Supondo que a populao de uma cidade A seja de 90.000, com taxa de crescimento de 3,1% ao
ms, e que a populao de uma cidade B seja de 200.000, com taxa de crescimento de 1,5% aos
ms. Escrever um programa que calcule e escreva com quantos meses a cidade A ultrapassaria em
populao da cidade B, mantendo as taxas atuais de crescimento. Mostrar as populaes das
cidades.
53) Escrever um programa que l um nmero no conhecido de valores inteiros, um de cada vez, e conta
quantos deles esto em cada um dos intervalos : [0..25], (25..50], (50..75] e (75..100]. Parar de
informar quando o nmero 1 for digitado. Mostrar quantos nmeros entraram em cada intervalo e
quantos no entraram em nenhum intervalo.
54) Escrever um programa que l 5 pares de valores A e B, todos inteiros e positivos, um par de cada
vez, e com A < B. Escrever os inteiros pares de A at B, incluindo A e B se forem pares.
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
34
55) Escrever um programa que l um nmero no determinado de valores inteiros e positivos, menores
que 5.000. A cada nmero lido, mostrar a quantidade de nmeros lidos, juntamente com a mdia
destes. Parar de informar quando o valor informado seja igual a 1.
57) Joo possui R$ 1.800,00. Gostaria de comprar um computador que custa R$ 2.000. Ele gosta de
aplicar seu dinheiro na caderneta de poupana, que paga sempre 1,5% ao ms. Supondo que o preo
do computador no mude, escreva um programa que calcule em quantos meses Joo ir poder
comprar o computador, mostrando a evoluo de seu saldo na poupana, conforme o modelo abaixo.
58) Escrever um programa que leia um valor x, e escreve os 20 primeiros termos da srie abaixo:
1o termo: 1
2o termo: 1 + 1/x2
3o termo: 1 + 1/x3
4o termo: 1 + 1/x4
Escolha o item:
Informe a quantidade do item:
Cdigo Especificao Quantidade Valor
100 Cachorro Quente 1 2,50
103 X Especial c/ bacon 3 9,90
104 Refrigerante 4 2,80
-------
Total--> 11,20
60) Repetir o programa acima para um nmero indeterminado de clientes. Ao final da conta de cada
cliente, realizar a seguinte pergunta: Informar mais um cliente (Sim/No). Quando no houverem
mais clientes a informar, mostrar o total do faturamento da lanchonete (o total geral das contas
vendidas).
Nenhuma relao existe entre uma varivel local e uma global, ainda que definidas com o
mesmo nome. totalmente desaconselhvel a definio de uma varivel local com o mesmo nome de
uma global, a fim de evitar confuso por parte do programador. O programa no faz confuso nenhuma,
porm o programador pode facilmente se confundir.
Dentro de um procedimento, as variveis locais tem preferncia sobre as globais, ou seja, caso
exista uma varivel x global, e uma x local (note-se que so duas variveis distintas, mas com igual
nome), quando for requisitado o valor da varivel x, ser mostrado o valor da varivel x local.
Vale lembrar ainda, que uma varivel local, existe somente dentro do procedimento que a
declarou. Mesmo que um procedimento seja chamado dentro de outro que possui variveis locais, estas
no existiro dentro do procedimento chamado, ou seja, o valor destas variveis no poder ser utilizado.
A grande vantagem das variveis locais que o espao de armazenamento destas na memria, s
efetivamente ocupado quando o procedimento executado. Ao final da execuo, esse espao liberado
para a memria livre. Com isso, os programas ficam mais leves, ou seja, ocupam menos memria.
Regra geral
programa var Valem em todo o
x : integer;
programa.
y : real;
{ procedimentos }
a : integer
Variveis Proc1 b : integer;
locais distintas c : real;
Variveis local e
global com o
mesmo nome.
a : integer; Dentro de proc2
Proc2 x : integer; vale a local.
d : char;
Exemplo
end;
begin
escreve(10,10, 'mensagem de teste');
col := 15;
lin := 15;
escreve(col, lin, 'outro teste');
end;
8.4 Funes
Funes, como j foi visto, so procedimentos que retornam um valor. Existem cdigos de
programas que so utilizados para chegar a um resultado que deve ser enviado de volta ao ponto onde o
bloco de cdigo foi chamado.
Por exemplo, havendo a necessidade de encontrar o maior valor entre 3 nmeros, deve-se
escrever o cdigo para solucionar o pedido (igual a um procedimento, que pode conter parmetros). De
posse do valor correto, basta envi-lo como resultado da funo. Como retorna um valor, na definio de
uma funo deve-se indicar o tipo de dado que ela retornar.
A forma de escrita de uma funo difere da de um procedimento em apenas 3 pontos:
a) nome, comea por function e no por procedure;
b) deve-se definir o tipo de dados que a funo retorna
c) deve-se explicitar o retorno da funo
Exemplo
a := 5;
b := 6;
c := a + b;
{ chamada de funo com atribuio }
ma := calcula(a,b,c);
{ chamada de funo com uso do valor de retorno em um if }
if calcula(a, b, c) = c then {
{ chamada de funo com o uso do valor de retorno em um
write}
write('o maior valor vale ',calcula(a,b,c) );
64) Elaborar uma funo que calcule a soma dos quadrados de 3 nmeros.
Dados de entrada : A, B, C (inteiros)
Dado de sada : soma (real)
68) Elaborar uma funo que calcule o quantos nmeros pares existem entre dois nmeros.
Dados de entrada : A, B (inteiros)
Dado de sada : Quantidade de nmeros (inteiro)
69) Elaborar uma funo que calcule uma determinada operao entre 2 nmeros (soma +, subtrao -,
diviso/, multiplicao *).
Dados de entrada : A, B (inteiros), operao (char)
Dado de sada : Resultado (real)
70) Elaborar uma funo que leia um nmero inteiro dentro de uma faixa..
Dados de entrada : COL, LIN, inicio, fim (inteiros), texto (string)
Dado de sada : nmero lido (inteiro)
var
ch, ch1 : char;
Vale lembrar, que o caracter a diferente do caracter A, devido a eles serem dois caracteres
diferentes, existem um cdigo ASCII para cada um deles.
var
st1 : string;
nome : string[30];
Os valores manipulados por variveis deste tipo, devem ser envoltos por aspas simples (nunca
acento agudo). Por ser um conjunto de caracteres, podemos acessar apenas um caracter da string. Os
caracteres em um string so numerados da esquerda para a direita, comeando em 1 e terminando no
valor do tamanho da string. Para fazer acesso a um caracter apenas, utilizamos o nome da
string, indicando qual a posio que queremos acessar, envolta entre colchetes.
Exemplo
st := ' P a s s o F u n d o '
posies -> 1 2 3 4 5 6 7 8 9 10 11
Exemplo
st := 'Passo Fundo';
gotoxy(10,10);
write(st[7]); { ira mostrar a letra F }
Como cada parte de uma string pode ser visualizada como um char, podemos
realmente manipular cada pedao da string como se fosse uma varivel do tipo char, valendo
para este pedao, todas as regras de um tipo de dados char.
Vale lembrar que o comprimento real de uma varivel do tipo string dinmico. O
tamanho mximo nela delimitado no significa que seja sempre o seu tamanho real. Este ser
determinado pelo nmero de caracteres que esto armazenados nela em um dado momento.
Uma string pode ser aumentada, diminuda, ter seus elementos trocados de ordem ou
mudados de contedo atravs de funes que a prpria linguagem Pascal j possui nela embutida (vide
relao de funes).
Por serem conjuntos ordenados de caracteres, as strings se assemelham muito a vetores
(variveis que armazenam vrios valores de um mesmo tipo) de char.
72) Escrever um procedimento que processe uma string de 8 valores binrios. Esta string contm apenas 7
posies preenchidas. O procedimento deve gerar a oitava posio da string, contendo o valor da
paridade mpar do nmero binrio compreendido nas suas 7 primeiras posies.
73) Escrever um procedimento que realize a soma binria de duas strings de 7 posies. A string
resultante poder ter 8 posies.
74) Escrever uma funo que receba como parmetro uma string contendo um valor binrio e o retorne no
formato decimal.
75) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato binrio e retornar o valor encontrado.
76) Escrever uma funo que receba como parmetro uma string contendo um valor octal e o retorne no
formato decimal.
77) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato octal e retornar o valor encontrado.
78) Escrever uma funo que receba como parmetro uma string contendo um valor hexadecimal e o
retorne no formato decimal.
79) Escrever uma funo que receba como parmetro um nmero inteiro. Gerar a string que contenha o
valor correspondente no formato hexadecimal. e retornar o valor encontrado.
80) Escrever um programa que leia uma string contendo apenas valores binrios (0 e 1). Mostrar a string
lida. Mostar o valor que ela representa em complemento de 2 e em sinal e magnitude.
Type
Inteiro = integer;
Alfanumerico = string;
Nas declaraes acima criamos dois novos tipos de dados, baseados em tipos primitivos do
Pascal. Se quisermos, no entanto, declarar variveis do tipo inteiro ou alfanumrico
podemos faz-lo, pois estes foram criados com o comando Type.
Exemplo
Var
i : inteiro;
nome : alfanumerico;
Type
novotp = array [1..10] of integer;
Toda a varivel dimensionada, OBRIGATORIAMENTE deve ser indexada. Ou seja, deve ser
acessada (manipulada) com a utilizao de seus ndices.
10.1.2 Vetores
Vetor um conjunto de dados do mesmo tipo (criado com o auxlio de um array). Possui
apenas uma dimenso, ou seja, para identificar um elemento qualquer dentro de um vetor, necessitamos
apenas de um valor para ndice. Outro conjunto de dados do mesmo tipo so as matrizes, que possuem
sempre mais do que uma dimenso (para acessar um elemento, necessrio mais do que um ndice). Os
vetores tambm so conhecidos como matrizes de uma dimenso.
Podemos especificar um vetor criando um novo tipo de dados, que armazenam variveis com as
mesmas caractersticas e aps definindo uma varivel deste tipo, ou ainda diretamente declarando a
varivel como se fosse um conjunto de dados de iguais caractersticas.
Exemplo
type
vetor = array[1..10] of integer;
var
a,b,c : vetor;
x,y : array[1..10] of integer;
No exemplo acima, todas as variveis definidas (a, b, c, x e y), armazenam cada uma
10 valores inteiros distintos. desaconselhvel a definio de variveis dimensionadas diretamente em
sua seo, pois desta forma impossvel a construo de procedimentos/funes com passagem de
parmetros manipulando estes tipos de variveis.
Os valores das posies dentro de um vetor, comeam sempre em 1 e vo at o limite de
tamanho do vetor. Em cada posio de um vetor possvel armazenar um valor distinto.
Exemplo
a = 54 3 -9 7 88 65 0 7 12 15
posies -> 1 2 3 4 5 6 7 8 9 10
Troca dos valores negativos do vetor B de 25 posies pelo ndice da posio atual
Exemplo
for m := 1 to 25 do
begin
if b[m] < 0 then
b[m] := m;
end;
j := 1;
for i := 1 to 10 do
begin
if a[i] < 0 then
b[i] := a[i] * i
else
begin
b[i] := a[j];
j := j + 1;
end;
end;
82) Escrever um programa que l um vetor A[10] e o escreve. Leia, a seguir, um nmero qualquer para a
varivel X. Contar quantas vezes a varivel X aparece no vetor.
83) Escrever um programa que leia um vetor B[50] de nmeros inteiros e o escreve. Encontrar o menor e
o maior valor lido. Mostrar os valores encontrados.
84) Escrever um programa que leia um vetor A[10] de nmeros inteiros. Mostrar o vetor lido. Ler um
nmero inteiro e multiplicar todo o vetor pelo nmero lido. Mostrar o vetor modificado.
85) Escrever um programa que leia um vetor de 80 posies. Encontrar o maior valor do vetor e sua
posio; mostra-lo juntamente com sua posio.
86) Escrever um programa que leia um vetor V[30] e o escreve. Contar quantos valores do vetor so pares
e quantos so mpares. Mostrar estas informaes, juntamente com a mdia dos valores do vetor.
87) Escrever um programa que leia um vetor V[30] e o escreve. Calcular a mdia dos valores do vetor, a
mdia dos valores do vetor das posies pares e a mdia dos valores do vetor das posies mpares.
Mostrar as mdias calculadas com uma mensagem adequada a cada uma.
88) Escrever um programa que leia um vetor A[20] de nmero reais. Mostrar o vetor lido. Trocar a seguir
o 1 elemento com o 11, o 2 com o 12 e, assim, sucessivamente at o 10 com o 20. Mostrar o vetor
modificado.
90) Escrever um programa que leia 2 vetores de 10 posies, A e B. Mostrar os vetores lidos. Gerar um
novo vetor Y, que seja a unio dos lidos. Mostrar o vetor Y.
91) Escrever um programa que leia 2 vetores de 10 posies A e B. Mostrar os vetores lidos. Gerar um
novo vetor Y, que seja a interseo dos lidos. Mostrar o vetor Y.
92) Escrever um programa que leia um vetor de 25 posies, de nmeros inteiros. Mostrar o vetor lido.
Orden-lo, a seguir, em ordem crescente. Mostrar o vetor modificado.
93) Escrever um programa que leia um vetor V[20]. Mostrar o vetor lido. Criar dois vetores: PAR para os
valores pares e IMPAR para os valores mpares, do vetor V. Mostrar os vetores gerados.
94) Escrever um programa que leia um vetor de 30 posies sem nmeros repetidos. Mostrar o vetor lido.
Mostrar tambm quantos nmeros o usurio digitou para preencher o vetor.
95) Escrever um programa que leia um vetor de 30 posies. Mostrar o vetor lido. Encontrar o valor
maior e o menor valor. Passar o maior para a ltima posio do vetor e passar o menor para a primeira
posio, transferindo os valores que estavam nas extremidades do para as posies do maior e do
menor.
96) Escrever um programa que leia 2 vetores X e Y de 10 posies de nmeros inteiros. Ordenar os
vetores em ordem crescente. Passar os vetores para um vetor Z e, a seguir, ordenar o vetor Z em
ordem decrescente.
97) Escrever um programa que leia 2 vetores X e Y de 10 posies de nmeros inteiros. Ordenar os
vetores em ordem crescente. Passar os valores dos dois para um vetor Z, mantendo a ordem crescente,
sendo proibido reordena-lo. Mostrar o vetor Z.
98) Escrever um programa que gere os 10 primeiros nmeros primos acima de 500 e os armazene no vetor
X[10]. Mostrar, ao final, o vetor criado.
99) Escrever um programa que leia um vetor de 30 posies. Mostrar o vetor lido. Mostrar em uma nica
tela, todos os seus valores, indicando quantas vezes cada um aparece. No repetindo os que aparecem
mais de uma vez.
100) Escrever um programa que leia para um vetor de V[30] as suas vinte primeiras posies. Ordena-
las em ordem crescente. Ler, a seguir, 10 valores e inseri-los no vetor V, mantendo a ordem crescente.
A cada valor inserido, mostrar a nova formao do vetor.
type
matriz = array[1..5,1..5] of integer
var
m, n, o : matriz;
O exemplo acima criou o tipo matriz (tipo de dados que armazena 25 valores inteiros) e
definiu as variveis m, n e o como sendo deste tipo.
De forma semelhante aos vetores, os ndices nas matrizes comeam sempre em 1 e vo at o
limite da dimenso.
Exemplo
Da mesma forma que ocorre com os vetores, o acesso aos elementos dentro de uma matriz feito
atravs das posies. Entretanto, como um vetor possui apenas um ndice, sua posio igual ao a este
mesmo ndice, enquanto, nas matrizes, a posio formada pela tupla < nmero da linha, nmero da
coluna > (por exemplo[2,3]).
Exemplo
1 2 3 4 5
1 [1,1] [1,2] [1,3] [1,4] [1,5]
ndices de uma 2 [2,1] [2,2] [2,3] [2,4] [2,5]
matriz quadrada 3 [3,1] [3,2] [3,3] [3,4] [3,5]
de ordem 5 4 [4,1] [4,2] [4,3] [4,4] [4,5]
5 [5,1] [5,2] [5,3] [5,4] [5,5]
A diferena entre uma posio de uma varivel dimensionada e o seu valor se torna mais
evidente nas matrizes. Enquanto a posio formada por dois valores distintos de ndices, o seu contedo
(seu valor) de apenas um.
Nos exemplos acima, as matrizes foram trabalhadas por linha, ou seja, foram manipulados
primeiro os valores de toda a 1a linha, e aps os da seguinte. Nada impede que uma matriz seja acessada
por colunas porm sua manipulao por linha de mais fcil compreenso.
Em alguns tipos de problemas, como encontrar somas, maiores ou menores elementos de uma
coluna da matriz, faz-se necessria a manipulao da mesma por colunas.
Apenas para facilitar o entendimento das matrizes, sero mostradas as referncias a cada um dos
pedaos em que geralmente dividida uma matriz.
i
j 1 2 3 4 5
SUP SUP SUP
1 DP DS SUP
SUP
2 INF DP DS SUP SUP
SUP SUP
3 INF INF DP DS
SUP
4 INF DS INF INF DP
5 DS INF INF INF INF DP
Significado Frmula
DP : Diagonal principal i = j
DS : Diagonal Secundria i + j = n* + 1
SUP
: Superior a DP i < j
INF : Inferior a DP i > j
102) Escrever um programa que leia uma matriz N[4,3]. Mostrar a matriz lida. Ler, a seguir, um valor
para a varivel X. Contar quantas vezes este valor aparece na matriz e mostrar a informao.
103) Escrever um programa que leia uma matriz M[3,3]. Mostrar a matriz lida. Encontrar o menor
elemento da matriz e mostr-lo.
104) Escrever programa que leia uma matriz M[5,5] e calcular as somas:
a) da linha 4 de M
b) da coluna 2 de M
c) da diagonal principal
d) da diagonal secundria
e) de todos os elementos da matriz
Escrever as somas e a matriz.
105) Escrever um programa que leia uma matriz M[5,5] e a escreve. Trocar, a seguir:
a) a linha 1 com a linha 4
b) a coluna 2 com a coluna 5
c) a diagonal principal com a diagonal secundria
d) a linha 2 com a coluna 5
A cada troca realizada, mostrar a matriz. Fazer com que a matriz em todos os estgios de trocas fique
visvel em uma nica tela.
106) Escrever um programas que l uma matriz M[5,5] de nmeros inteiros. Mostrar a matriz lida.
Criar dois vetores, SC e SL contendo, respectivamente, as somas das colunas e das linhas de M.
Mostrar os vetores criados.
Notas de aula: Prof. Marcelo Trindade Rebonatto Linguagem Pascal
52
107) Escrever um programa que leia um matriz M[4,6]. Mostrar a matriz lida e criar:
a) Uma matriz M1, transposta da matriz M
b) Uma matriz M2, com as posies em que a soma dos ndices seja par, preenchida com 2, e as demais
preenchidas com 1.
c) Uma matriz N1, como sendo uma matriz identidade de uma matriz quadrada de ordem 6.
Mostrar todas as matrizes envolvidas, de modo que sejam visveis em uma nica tela.
108) Montar um programa que leia uma matriz M[6,6] de nmeros inteiros. Mostrar a matriz lida.
Passar para o vetor V, os elementos da matriz M. Mostrar o vetor V
109) Montar um programa que leia um vetor V[32]. Mostrar o vetor lido. Passar o vetor V para uma
matriz M[8,4], preenchendo a matriz por linhas. Mostrar a matriz M.
110) Ler para uma matriz M[10,4], as 3 primeiras posies de cada linha. Completar a ultima posio
de cada linha, com a soma dos 3 primeiros elementos da linha. Mostrar a matriz.
111) Na teoria de sistemas define-se o elemento mnimax de uma matriz como sendo o menor elemento
da linha onde se encontra o maior elemento da matriz. Escrever um programa que l uma matriz
M[10,10] e determina o elemento mnimax desta matriz, mostrando a matriz, o elemento e a posio
do mnimax.
112) Escrever um programa que leia uma matriz [5,15] de nmeros inteiros. Criar uma matriz com
apenas 4 colunas, onde cada coluna conter, respectivamente, o menor e o maior valor da linha, a
mdia e a soma de todos os valores da linha. Mostrar as matrizes envolvidas.
113) Escrever um programa que leia uma matriz M[7,7] de nmeros inteiros. Passar para o vetor PAR,
todos os elementos das linhas pares e passar para o vetor IMPAR, todos os elementos das linhas
mpares da matriz. Mostrar os vetores gerados.
114) Escrever um programa que leia uma matriz M[7,7]. Mostrar a matriz lida. Dividir todos os
elementos de uma linha pelo maior elemento da linha em questo. Mostrar a matriz modificada.
115) Escrever um programa que leia trs valores A, B e C, todos inteiros, positivos e menores que 11.
Preencher uma matriz M[3,10], com os 10 primeiros mltiplos positivos de cada um dos nmeros
lidos.
116) Escrever um programa que gere um vetor V[6], contendo o resultado da mega-sena obtidos
nmeros aleatrios (os nmeros vlidos na mega-sena esto no intervalo [1..60]). Ler, a seguir, de
uma matriz M[10,7], apenas as 6 primeiras posies de cada linha os nmeros apostados em 10
cartes. Calcular o nmero de acertos em cada carto, e colocar esta informao na stima coluna de
cada linha.
117) Escrever um programa que leia uma matriz M[9,9]. Mostrar a matriz lida. Encontrar o maior
elemento de cada linha e pass-lo para a posio da diagonal principal na linha. Mostrar a matriz
modificada.
118) Escrever um programa que leia uma matriz M[4,4] sem elementos repetidos. Mostrar a matriz lida
119) Muitos problemas de clculo numrico utilizam o mtodo de Gauss para efetuar o clculo. O
mtodo de Gauss s pode ser usado quando todos os elementos da diagonal principal sejam diferente
de 0 (zero), no importando se a ordem das linhas da matriz for mudada. Escrever um programa que
leia uma matriz M[5,5], e a prepara para ser utilizada no mtodo de Gauss
type
<nome_de _tipo> = record
identificador_de_campo1 : tipo;
identificador_de_campo2 : tipo;
identificador_de_campo3 : tipo;
. . .
identificador_de_campon : tipo;
end; { Final da declaracao do registro }
Embora a matriz (lembre-se, vetor uma matriz de 1 dimenso) seja uma estrutura de dados
muito til, limitada, porque todos os seus elementos devem ser do mesmo tipo. Em alguns casos, so
necessrios conjuntos de informaes em que os dados no sejam de tipo uniforme. As estruturas de
dados, que armazenam um conjunto de dados, no tendo o mesmo tipo em Pascal chamam-se
REGISTROS.
A vantagem que um registro oferece como dado estruturado a sua flexibilidade. A estrutura dos
registros formada por campos e cada campo pode ser de um tipo diferente.
Exemplo
type
pessoa = record
nome : string[20];
idade : integer;
altura : real;
peso : real;
end;
A definio do registro acima criou um novo tipo chamado "pessoa". O novo tipo um registro.
Portanto quando uma varivel declarada como sendo do tipo "pessoa", poder armazenar dados
referentes a nome, idade, altura, endereo e peso de uma pessoa. A declarao de uma varivel como
sendo um registro, aps a criao do tipo registro (com o comando type) feita de forma semelhante a
qualquer outra varivel.
Exemplo
var
fulano : pessoa;
beltrano, ciclano : pessoa;
type
data = record
dia : integer;
mes : integer;
ano : integer;
end;
var
hoje : data;
amanha, ontem : data;
O acesso aos elementos de uma varivel, declarada a partir de um tipo registro, realizado
usando como prefixo o nome da varivel, seguido de um "." (ponto), e logo aps o nome do campo do
registro desejado. Todos os comandos e funes do Pascal que podem ser empregados sobre uma
varivel, podem ser empregados sobre um campo de um registro.
Exemplo
hoje.dia := 07;
hoje.mes := 12;
hoje.ano := 2000;
read(fulano.nome);
read(amanha.ano);
write(amanha.dia);
write(ciclano.endereco);
x := fulano.idade - hoje.ano;
Nada impede que se crie um conjunto de dados de mesmo tipo sendo este um registro. No caso,
teramos da mesma forma uma matriz (ou vetor) de dados de tipos semelhantes, porem, cada elemento
desta matriz ter vrios campos.
Exemplo
var
amigos : array[1..10] of pessoa;
semana : array[1..7] of data;
O acesso neste caso, dever ser realizado atravs do nome da varivel, seguido de seus ndices
(entre colchetes, claro) tendo, logo a seguir, um "." junto com o nome do campo desejado.
{ leitura de 10 amigos }
for i := 1 to 10 do
begin
read(amigos[i].nome);
read(amigos[i].idade);
read(amigos[i].altura);
read(amigos[i].peso);
end;
{ mostrar 10 amigos }
lin := 10;
for i := 1 to 10 do
begin
gotoxy(05,lin); write(amigos[i].nome);
gotoxy(30,lin); write(amigos[i].idade);
gotoxy(35,lin); write(amigos[i].altura:2:2);
gotoxy(55,lin); write(amigos[i].peso:4:2);
lin := lin + 1;
end;
121) Montar um programa em pascal que crie um registro para guardar as informaes de carros
(modelo, velocidade mxima, mdia de consumo, nmero de marchas e preo de mercado). Aps
criado o registro, definir 2 variveis como sendo do tipo carro. Ler informaes para as variveis e
mostr-las.
122) Usando o programa anterior, ler novamente 2 carros. Mostrar todos os dados do carro com a
menor mdia de consumo.
123) Montar um programa que informe dados referentes a 10 amigos seus. O programa dever mostrar
o nome de seu amigo mais velho.
124) Montar um programa que leia 20 datas aleatrias. O programa dever mostrar qual a maior e a
menor data. Mostrar ainda a mdia dos anos (levar em considerao apenas os anos) informados.
Exemplo:
var
idtexto : textfile;
arq_text : textfile;
Ao contrrio dos arquivos baseados apenas em texto, os arquivos com tipos definidos, devem
armazenar apenas dados dos tipos para os quais foram definidos (os arquivos texto podem guardar
qualquer tipo de dado, mas sempre no formato texto). Os arquivos com tipo definido, podem ser baseados
em registros, o que aumenta o leque de suas aplicaes. Nada impede que seja definido um arquivo que
ir armazenar informaes de apenas um tipo de dado padro do Pascal. Para definir um arquivo baseado
em registros, deve-se definir um identificador para o arquivo, usando as palavras reservadas "file of".
Exemplo:
type
pessoa = record
nome : string[20]
idade : integer;
. . .
end;
var
arq_pes : file of pessoa ;
arq_dias : file of integer ;
ciclano : pessoa;
Exemplo:
assign(idtexto, text.txt);
assign(arq_pes, pessoas.dat);
assign(arq_dias,A:dias.dat);
assign(arq_texto, C:\TP\BIN\exemplo.txt);
Aps ligar um identificador a um nome de arquivo, o mesmo deve ser aberto para que
informaes possam ser escritas/lidas. Existem basicamente duas formas de se abrir um arquivo: abrir um
arquivo j existente para uso de informaes contidas ou criando um arquivo que ainda no possui dados.
O comando "reset(<varivel de arquivo>)" abre um arquivo j existente em uma unidade de
disco. Aps aberto, pode-se ler as informaes nele contidas ou inserir novos dados.
O comando "rewrite(<varivel de arquivo>)", cria um novo arquivo em uma unidade de disco.
Caso j exista um arquivo com o mesmo nome na mesma unidade de disco e diretrio (ligao pela
<varivel de arquivo>), este arquivo ser apagado e um novo tomar o seu lugar. Esta opo deve ser
usada apenas na criao de arquivos, nunca em programas que iro ler os dados de um determinado
arquivo.
Exemplo:
read(arq_pes, ciclano);
{ transefere as informaes referentes a um registro de arq_pes para a varivel de
memria ciclano }
Exemplo:
seek(arq_pes, posicao);
{ posiciona o arquivo arq_pes, na posio indicada pela varivel }
As matrizes possuem sempre um tamanho pr-definido. No caso de uma matriz ser definida para
ter 50 linhas com 10 colunas, se sabia de antemo que a linha de nmero 50 seria a ltima. Com arquivos,
o tamanho em linhas (nmero de registros) teoricamente limitado pelo espao disponvel na unidade de
disco. Porm, quando estamos procurando dados em um arquivo, devemos saber quando chegamos ao
final do arquivo. A funo "eof(<variavel de arquivo>)", retorna um valor booleano (True ou False) se j
foi alcanado o final do arquivo. Sua utilizao imprescindvel para, por exemplo, percorrer todas as
linhas (registros) de um arquivo a fim de procurar um nmero qualquer.
Exemplo:
lin := 10;
while not eof(arq_pes) do
begin
read(arq_pes,fulano);
gotoxy(10,lin); write(fulano.nome);
gotoxy(40,lin); write(fulano.idade);
lin := lin + 1;
if lin > 23
begin
clrscr;
lin := 10;
end;
end;
Exemplo:
begin
. . .
{ comandos de manipulao de arquivos }
. . .
close(arq_pes);
end.
program cria_arquivo;
{ Este program cria um arquivo de nome EMPRESA.DAT no meio magntico}
uses crt;
type
registro = record
codigo : integer;
altura : real;
end;
var
cadastro : file of registro;
func : registro;
i, opcao, busca, flag : integer;
procedure parada;
begin
gotoxy(10,24);
write('Operacao concluida - pressione qualquer tecla');
readkey;
clrscr;
end;
procedure le_grava_dados;
begin
gotoxy(10,10);
write('Informe o codigo : ');
readln(func.codigo);
gotoxy(10,12);
write('Informe a altura: ');
read(func.altura);
write(cadastro, func);
end;
procedure mostra_dados;
begin
if flag = 1 then
begin
gotoxy(10,15);
write('Dados buscados do arquivo');
gotoxy(10,16);
write('Codigo : ', func.codigo);
gotoxy(10,18);
write('Altura : ', func.altura:4:2);
end
else
begin
gotoxy(10,15);
write('Registro nao encotrado');
end;
end;
procedure mostra_arquivo;
var
lin : integer;
begin
seek(cadastro, 0);
lin := 10;
gotoxy(10,lin-1);
write('Codigo Altura');
while not eof(cadastro) do
begin
read(cadastro, func);
gotoxy(10,lin);
write(func.codigo);
gotoxy(20,lin);
write(func.altura:4:2);
lin := lin + 1;
if lin > 22 then
begin
gotoxy(10,24);
write('Pressione qualquer tecla para continuar');
readkey;
clrscr;
lin := 10;
end;
end;
end;
procedure controla;
begin
clrscr;
repeat
escolhe_opcao;
if opcao = 1 then
le_grava_dados;
if opcao = 2 then
begin
busca_dados;
mostra_dados;
end;
if opcao = 3 then
mostra_arquivo;
if opcao <> 0 then
parada;
until opcao = 0;
end;
begin
clrscr;
assign(cadastro,'a:EMPRESA.DAT');
rewrite(cadastro);
controla;
close (cadastro);
end.
126) Montar um programa que mostre o contedo do arquivo criado no exerccio anterior.
127) Montar um programa que processa o arquivo PESSOAS.DAT e encontra seus o seu amigo mais
alto e o mais baixo.
128) Montar um programa que processe o arquivo PESSOAS.DAT e mostra a mdia de altura e de peso
de seus amigos.
129) Montar um programa que leia o cdigo de um amigo. Procurar no arquivo PESSOAS.DAT e
mostrar os dados referentes a esta pessoa. Caso o cdigo desta pessoa no exista no arquivo, mostrar
uma mensagem indicando este fato.
130) Montar um programa que leia um matriz M[10,5] de nmeros reais. O programa devera criar o
arquivo MATRIZ.DAT com os dados desta matriz. Usar o record abaixo para armazenar as
informaes.
type
linha = record
coluna1 : real;
coluna2 : real;
coluna3 : real;
coluna4 : real;
coluna5 : real;
end;
131) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,5]. Mostrar a matriz gerada.
132) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,5]. Mostrar a matriz gerada. Calcular as seguintes somas:
a) Soma das linhas pares (apenas 1 soma)
b) Soma das colunas mpares (apenas 1 soma)
c) Soma da diagonal principal
d) Soma da diagonal secundria
e) Soma de toda a matriz.
133) Montar um programa que leia o arquivo MATRIZ.DAT. Passar o seu contedo para uma matriz
M[10,6]. Mostrar a matriz gerada. Completar a ultima coluna de cada linha com a soma dos elementos
da linha e mostrar a matriz modificada.
134) Montar um programa que faa o mesmo do programa anterior, porm aps ser completada a sexta
coluna da matriz, gravar a matriz modificada com o nome de MATRIZ2.DAT.
Procedimento: clreol;
Significado: Limpa toda uma linha, da posio atual do cursor at o final da linha.
Exemplo de uso: gotoxy(20,10);
clreol; { limpa a linha 10, da coluna 20 at o
final }
Procedimento: Ramdomize;
Significado: Inicializa um gerador de nmeros aleatrios, baseado no relgio do
computador.
Exemplo de uso: Randomize;
repeat { vai ficar mostrando nmeros }
i:=Random(256); { [0..256] at que seja }
Write(i,' '); { pressionada uma tecla }
until KeyPressed;
Procedimento: Readkey
Significado: Provoca uma parada no processamento at que uma tecla seja pressionada
Exemplo de uso: write(Resultados obrtidos);
readkey;
Comando: exit
Significado: Aborta o processamento do lao atual
Exemplo de uso: cont := 0;
repeat
read(cod);
cont := cont + 1;
if cod = 0 then
exit; { Mesmo que cont no seja igual a 100}
{ o lao tera sua execucao finalizada}
until cont = 100;
Tabela de Cores
FIALHO, Lcio. Guia Rpido Turbo Pascal 6.0, Rio de Janeiro, Editora Cincia Moderna Ltda.
HERGET, Douglas. Dominado Turbo Pascal 5. Rio de Janeiro, Editora Cincia Moderna Ltda., 1989
LEITE, Dennis Cintra, PRATES, Rubens. Carto de referncia Turbo Pascal verso 5.0.
MANZANO, Jos Augusto N. G., FIGUEIREDO, Jayr. Algoritmos. So Paulo: rica, 1997.
OBRIEN, Sthephen K. Turbo Pascal 6: completo e total. So Paulo: Makron, McGraw-Hill, 1992.
SILVA, Jos Carlos G. da & ASSIS, Fitelis Sigmaringa G. de. Linguagem de programao: conceitos e
avaliao: FORTRAN, C, Pascal, Modula-2, Ada, Chill. So Paulo, Mc-Graw Hill, 1988.