Вы находитесь на странице: 1из 25

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=-=-=-=-[Programao em Pascal]-=|d4rwin|-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Programao em Pascal
=========== == ======
E a galera, blz? So eu(tio d4rwin) mais uma vez, =). Bom, resolvi escrever
sobre pascal, pq visto que o pblico alvo do e-zine so newbies(como eu),
seria legal para pessoas que esto comenando, ou mesmo os j
iniciados, aprender ou aprimorar seus conhecimentos em programao. O
pascal, alm de ser uma linguagem de alto nvel, no difcil de se
aprender, basta dedicao e programaao. Programao se aprende
programando. Lgico que a parte terica importante, mas praticar
sempre foi e sempre ser a melhor forma de se aprender. Agora vamos
deixar de bl bl bl e vamos ao que interessa...

Index
~~~~~
1.0 ..... Introduo
1.1 Lgica de Programao
1.2 Quem criou o Pascal?
2.0 ..... Compiladores
2.1 Borlando Pascal 7.0
2.2 FreePascal
2.3 Outros compiladores
3.0 ..... Estrutura do programa em Pascal
3.1 Cabealho
3.2 Comentrio
3.3 Ttulo
3.4 Bibliotecas
3.5 Constantes
3.6 Tipo
3.7 Variveis
3.7.1 Declarando Variveis
3.8 Corpo do Programa
3.9 O uso do ;
4.0 ..... Sinais
5.0 ..... Comandos Bsicos
6.0 ..... Estruturas
6.1 Estruturas de Atribuio
6.2 Estruturas Condicionais
7.0 ..... Laos
7.1 Lao FOR
7.2 WHILE
7.3 Repeat
8.0 ..... Vetores
9.0 ..... Matrizes
10.0 .... Registros
11.0 .... Tratamento de Arquivos
12.0 .... Procedimentos e Funes
13.0 .... Agenda Eletrnica em Pascal
14.0 .... Exerccios
15.0 .... Agradecimentos
16.0 .... Links
1.0 - Introduo
~~~~~~~~~~
Vc deve estar se perguntando: "Porque eu, em pleno ano 2004, uma poca em que
j lanaram o Delphi 8, vou aprender Pascal, uma linguagem antiga e
orientada a eventos?". A eu te respondo meu amigo, a primeira linguagem que
aprendemos, ns nunca esquecemos. como andar de bicicleta. Com base nisso, o
Pascal uma tima linguagem para se comear. O Pascal daria uma boa base
pra vc, depois, aprender uma outra linguagem. E tem aquela histria, todo
conhecimento bem vindo.
1.1 - Lgica de Programao
~~~~~~ ~~ ~~~~~~~~~~~
Entende-se por lgica de programao, uma sequncia de passos a serem tomados
para resolver determinado problema(no nosso caso, construir um programa). No
adianta o cara saber colocar textos e figurinhas na tela, se este no tiver uma
boa lgica de programao, e, isto que difere o bom programador do
programador ruim. Ter uma boa lgica, significa conseguir resolver os
problemas(construir os programas), para que o resultado final seja
satisfatrio. Portanto, v com calma. No v com muita sede ao pote...primeira
aprenda a andar, pra depois correr.(Filosofei bonito agora, hein, =)).
1.2 - Quem criou o Pascal?
~~~~ ~~~~~ ~ ~~~~~~~
O Pascal foi criado por Niklaus Wirth, em 1972, em Genebra-Suia. O nome da
linguagem foi uma homenagem ao matemtico e filsogo Blaise Pascal(inventor da
primeira calculadora mecnica). O objetivo de Niklaus Wirth, era o de
desenvolver uma linguagem simples, clara e fcil de programar.
2.0 - Compiladores
~~~~~~~~~~~~
No vou entrar em detalhes sobre o que so compiladores, pois j falei sobre
eles na Zine MOTD GUIDE 01, no texto "Introduo Programao". O que
basicamente os compiladores fazem so transformar o cdigo de alto nvel(cdigo
em Pascal), para linguagem de mquina.
2.1 - Borland Pascal 7.0
~~~~~~~ ~~~~~~ ~~~
O Borlando Pascal ou Turbo Pascal(so os mesmos) surgiu em 1985, com a Borland.
Isto provocou um verdadeiro avano para a linguagem. Desde as suas primeiras
verses o Turbo Pascal j possuia ambiente para digitao e depurao do
cdigo, e fazia a compilao e linkedio em um nico processo. A ltima
verso do Turbo Pascal lanado foi o Turbo Pascal 7.0. Porm a
Borland parou o desenvolvimento do Turbo Pascal, fazendo com que ele se torna
-se ultrapassado, mas ainda muito utilizado, para os tempos atuais.
2.2 - FreePascal
~~~~~~~~~~
O FPC(FreePascal Compiler) um projeto OpenSource que visa continuar com o
desenvolvimento da linguagem Pascal. Alm de ser compatvel com o Turbo Pascal
7.0, possui vrios projetos em andamentos. Possui mais recursos que o Turbo
Pascal 7.0, e ainda permite interagirmos com alguns GUIs(Graphics User
Internface) e APIs. O site do projeto : www.freepascal.org | Em portugus:
http://www.freepascal.eti.br.
2.3 - Outros Compiladores
~~~~~~ ~~~~~~~~~~~~
Alm dos dois compiladores citados acima, tem outros que tambm merecem
respeito. Abaixo segue a lista de alguns, com seus respectivos sites:
Compilador | Site
^^^^^^^^^^ ^^^^
---------------------------------------------------------------------------
| Pascaler | www.pascaler.hpg.com.br / www.infoxbr.com.br |
|---------------------------------------------------------------------------|
| PascalZIM! | www.superdownloads.com.br / autor: pascalzim@yahoo.com.br|
---------------------------------------------------------------------------


3.0 - Estrutura do Programa em Pascal
~~~~~~~~~ ~~ ~~~~~~~~ ~~ ~~~~~~
Um programa em Pascal possui bsicamente a seguinte estrutura:
{ Nome do Programa ...............:
Funo .........................:
Plataforma .....................:
Linguagem ......................:
Data de criao ................:
Data de ltima alterao .......:
Autor ..........................:
}
Program Nome_do_Programa;
Uses <bibliotecas/units>;
Const
<identificador> = 'valor_da_constante';
Type
<identificador> : <tipo_da_varivel>;
Var
<identificador> : <tipo_da_varivel>;
Begin
comandos;
comandos;
comandos;
.
.
.
comandos;
End.
3.1 - Cabealho
~~~~~~~~~
O cabealho no uma parte fundamental para o funcionamento do programa. Mas
bom voc adotar o costume de utiliz-lo, pois assim ter um melhor controle de
seu programa, e sentir menos dificuldade na hora de atualiz-lo. Um exemplo de
Cabealho:
{ Nome do Programa ...............:
Funo .........................:
Plataforma .....................:
Linguagem ......................:
Data de criao ................:
Data de ltima alterao .......:
Autor ..........................:
}
3.2 - Comentrio
~~~~~~~~~~
Comentrios so frases ou pequenos pargrafos auto-explicativos que visam
deixar mais claro ao programador o funcionamento de seu programa, assim como
ajud-lo na hora de atualiz-lo. Um exemplo de comentrio em Pascal:
{ Este um exemplo de comentrio em Pascal. Tudo o que for escrito entre
CHAVES, desconsiderado pelo compilador. O comentrio pode continuar por
vrios linhas, at a segunda chave. }
(* Este outro exemplo de comentrio em Pascal. Tanto este como o exemplo
acima so vlidos. *)
3.3 - Ttulo
~~~~~~
Ttulo o nome que o seu programa vai ter. No tem segredo, ele declarado da
seguinte forma:
Program <Titulo>;
3.4 - Bibliotecas
~~~~~~~~~~~
Em pascal, damos o nome de Units as Bibliotecas. nas bibliotecas/units onde
ficam armazenadas as rotinas e funes a serem utilizadas no programa. Assim
como em C, temos a Bibliteca stdio.h como "padro", no Pascal, temos a unit
CRT, utilizado em quase todos os programas feitos em Pascal. Um exemplo de
declarao de Units:
Uses <nome_da_unit>;
por exemplo:
Uses CRT,DOS,Graph;
3.5 - Constantes
~~~~~~~~~~
Constantes so "variveis" que nunca mudam. Uma vez declarado um valor para uma
constante, esse valor jamais mudar. Um exemplo de declarao de constantes:
Const <identificador> = 'valor_da_constante';
por exemplo:
Const d4rwin = 'lindao';
3.6 - Tipo
~~~~
Em Pascal, podemos declarar nossas prprias variveis, desde que especifiquemos
o tipo desta varivel. Um exemplo de um declarao de tipo:
Type <identificador> = <tipo_do_identificador>;
por exemplo:
Type d4rwin = string;
3.7 - Variveis
~~~~~~~~~
As variveis em Pascal, so dividas em quatro grupos, sendo elas:
Numricas -> Podem ser nmeros inteiros ou reias, pelos dgitos de 0 a 9,
sinais + ou - e "." para casas decimais.
Alfanumricas -> Podem ser formadas por qualquer caractere da tabela ASCII.
Lgicas -> Podem assumir apenas dois valores: TRUE(Verdadeiro) e
FALSE(Falso).
Ponteiros -> Podem armazenar apenas endereos de memria.
Tipos de variveis:

--------------------------------------------------------------------------------
---------
| Classe | Tipo | Valores Comportados | Bytes que Ocupa
na Memria |
|
------------|--------------|-----------------------------|----------------------
--------|
| Boolean | Lgico | TRUE ou FALSE | 1 byte
|
| -----------
|--------------|-----------------------------|------------------------------|
| Byte | Num. Inteiro | 0 a 255 | 1 byte
|
| -----------
|--------------|-----------------------------|------------------------------|
| Char | Caracter | Tabela ASCII | 1 byte
|
| -----------
|--------------|-----------------------------|------------------------------|
| Comp | Num. Real | -9.2E18 a 9.2E18 | 8 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Double | Num. Real | 5.0E-324 a 1.7E308 | 8 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Extended | Num. Real | 3.4E-4932 a 1.1E4932 | 10 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Integer | Num. Inteiro | -32768 a 32767 | 2 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Longint | Num. Inteiro | -2147483648 a 2147483647 | 4 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Real | Num. Real | 2.9E-39 a 1.7E38 | 6 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| Shortint | Num. Inteiro | -128 a 127 | 1 byte
|
| -----------
|--------------|-----------------------------|------------------------------|
| Single | Num. Real | 1.5E-45 a 3.4E38 | 4 bytes
|
| -----------
|--------------|-----------------------------|------------------------------|
| String | Caracter | Cadeia de Caracteres | Varia de 2 a
256 |
| -----------
|--------------|-----------------------------|------------------------------|
| Word | Num. Inteiro | 0 a 65535 | 2 bytes
|

--------------------------------------------------------------------------------
---------
3.7.1 - Declarando Variveis
~~~~~~~~~~ ~~~~~~~~~
Bem, existem variveis globais e locais. Mas no vamos entrar nisso por
enquanto. A declarao de uma varivel em Pascal segue a seguinte sintaxe:
Var <identificador> : tipo da varivel;
<identificador> : tipo da varivel;
<identificador> : tipo da varivel;
por exemplo:
Var d4rwin : string[15];
num1,num2 : integer;
contador : word
Resposta : char;
{Repare no string[15]. O nmero entre parnteses indica que a varivel ter no
mximo 15 caracteres. Quando no se coloca o valor entre parnteses, o
programa considera a varivel com o limita mximo de 256 caracteres.}
3.8 - Corpo do Programa
~~~~~ ~~ ~~~~~~~~
Vimos at agora, Constantes,Tipo e Variveis. Esses trs campos servem para
dizermos ao compilador quais recursos iremos utilizar, para que assim ele
reserve um espao na memoria para tais recursos. Depois de declarados o que
iremos utilizar no programa, vamos ao bloco principal ou corpo do programa. O
bloco principal comea no momento em que digitamos BEGIN, e acaba quando
digitamos END. Veja um exemplo:
Begin
comandos;
comandos;
comandos;
comandos;
End.
3.9 - O uso do ;(ponto-e-vrgula)
~ ~~~ ~~ ~~~~~~~~~~~~~~~~~~
importante ressaltar o uso do ";". O ";" muito importante, pois ele quem
indica que a linha terminou. Se nos esquercermos de por o ";" o programa na
compilar, por isso sempre preste muita ateno.
4.0 - Sinais
~~~~~~
Assim como na matemtica ns utilizamo-nos de sinais para efutuar clculos e
operaes, em Pascal no podera ser diferente. Abaixo, segue os sinais e para
que servem:
+ -> Soma
- -> Subtrao
/ -> Diviso entre nmeros reais
* -> Multiplicao
Div -> Diviso entre nmeros inteiros
Mod -> Retorna o resto de uma diviso entre inteiros
5.0 - Comando Bsicos
~~~~~~~ ~~~~~~~
Agora a coisa est comenando a ficar legal...=). Vamos aprender agora alguns
comandos bsicos, que nos auxiliaro na criao do programa, e tambm deix-lo
com uma cara mais bonita. So eles:
Write -> O comando write utilizado para imprimir alguam coisa na tela. Sua
sintaxe :
write ('Hello World');
{Observe a aspa simples, tudo o que estiver dentro de aspas simples,
considerados texto pelo compilador }
WriteLN -> Faz a mesma coisa que o write, mas depois de impresso o texto ele
posiciona o cursor na primeira coluna da linha abaixo. LN = Line. Sua
sintaxe igual a do Write.
Read -> O comando read serve para lermos dados vindos do teclado. Por
exemplo, eu fao uma pergunta, ento utilizo o read para ler a resposta e
armazenar esta resposta numa variavel(declarada na rea Var, antes do
bloco principal). Sua sintaxe :
read(varivel);
{Sendo varivel aonde vai ser armazenado o valor lido}
ReadLN -> A exemplo do writeln, o readln l os dados e aps a leitura,
posiciona o cursor na primeira coluna da linha abaixo. LN = Line. Sua sintaxe
igual a do read.
ClrScr -> Este comando limpa a tela e posiciana o cursor na primeira
linha,primeira coluna. Sua sintaxe :
ClrScr;
Delay -> O comando delay serve para pausar a execuo do programa por um
tempo determinado. O tempo determinado em milisegundos, portanto
1000 milisegundos equivalem a 1 segundo. Sua sintaxe :
Delay(milisegundos);
Trunc -> Este comando pega a parte inteira de um clculo ou nmero real. Sua
sintaxe :
Trunc(num_real);
por exemplo
Trunc(9.5 / 2.2);
{Pega a parte inteira do resultado da diviso de 9.5 com 2.2}
GotoXY -> Em pascal, a tela divida em 80 colunas e 25 linhas. Com o comando
GotoXY, voc pode ir para qualquer lugar que esteja entre essas 80 colunas e
25 linhas. Sua sintaxe :
Gotoxy (coluna,linha);
UpCase -> Este comando pega caracteres em letras minsculas e os converte
para caixa alta. Sua sintaxe :
var_do_tipo_string := UpCase(var_do_tipo_string);
ReadKey -> Este comando pausa o programa at que alguma tecla seja
pressionada. Sua sintaxe :
Readkey;
ou
var_do_tipo_char := readkey;
textbackground -> Este comando defini a cor de fundo. Sua sintaxe :
textbackground(numero_da_cor);
ou
textbackground(nome_da_cor);
textcolor -> Este comando defini a cor da letra. Sua sintaxe :
textcolor(numero_da_cor);
ou
textcolor(nome_da_cor);
Cores Disponveis:
BLUE
GREEN
CYAN
RED
MAGENTA
BROWN
LIGHTGRAY
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
LIGHRED
LIGHMAGENTA
YELLOW
WHITE
BLACK
{Ns podemos tambm somar duas cores, por exemplo : "textcolor (RED +
BLUE);". Adicionando a string "Blink" a cor, temos um efeito
piscante, por exemplo: "textcolor (RED + Blink);" .}
6.0 - Estruturas
~~~~~~~~~~
Aqui vamos estudar duas estruturas: As estruturas condicionais e as de
atribuio.
6.1 Estruturas de Atribuio
~~~~~~~~~~ ~~ ~~~~~~~~~~
Bom, como o prprio nome j diz, estruturas de atribuio so utilizadas para
atribuir valores a variveis. Por exemplo, eu tenho uma varivel A, uma
varivel B e uma varivel chamada Resultado. Eu quero que os valores da soma de
A + B sejam atribudos a varivel Resultado. Isso ficaria da seguinte forma:
Resultado := A + B;
{Note o ":=". Diferente de outras linguagens, o sinal de atribuio em Pascal
dois ponto e um igual. Toda vez que utilizarmos este sinal, o valor da
esquerda recebe o valor da direita.}
6.2 Estruturas Condicionais
~~~~~~~~~~ ~~~~~~~~~~~~
As estruturas condicionais so utilizadas quando nos deparamos com determinadas
situaes em que temos que tomar decises. Por exemplo. Estou andando na rua,
mas pode chover, ento se chover, eu devo pegar um guarda-chuva, seno, devo
continuar andando. O mesmo acontece com programao, por exemplo, estou fazendo
um programa que l duas notas bimestrais, calcula a mdia e diz se o aluno foi
aprovado ou reprovado. Consideremos a mdia como 70. Portanto, SE a mdia for
menor que 70, imprimir reprovado, SENO imprimir aprovado. Veja um exemplo pra
entender melhor:
media := A + B / 2; {O sinal "/", indica divisao de numeros reais}
if media < 70 then
writeln ('Reprovado!')
else writeln ('Aprovado');
OBS.: IF = Se | THEN = Ento | Else = Seno
{No exemplo acima, calculmos a mdia do aluno, e de acordo com a mdia, maior
ou menor que 70, damos o resultado.}
Sintaxes para IF:
IF condio THEN IF condiao THEN IF condio THEN IF condio THEN
comandos Begin Begin comando;
ELSE comandos; comandos; comandos;
comandos; comandos;
... ...
comandos; comandos;
End; End
IF condio THEN ELSE Begin
Begin comandos;
comandos comandos;
End; End;
OBS2.: Quando temos um ou mais IFs dentro de um estrutura condicional(outro
IF), denominamos tal estrutura de IF Aninhando/Se Aninhando.
Existe tambm outra estrutura condicional, a estrutura CASE. Abaixo segue sua
sintaxe:
CASE escolha of
begin
1..100 : begin
writeln ('Voc digitou um nmero.');
end;
'A'..'Z' : begin
writeln ('Voc digitou uma letra maiscula');
end;
'a'..'z' : begin
writeln ('Voc digitou uma letra minscula');
end;
else ;
{Quando utilizarmos apenas uma writeln, um readln, ou qualquer outro comando,
no h a necessidade de se usar o begin e end; (eu usei de tongo mesmo,
hehehe).}
7.0 - Laos
~~~~~
Laos de repetio so utilizados quando queremos que determina situao se
repita at que algo acontea, fazendo com que a situao pare de ser executada.
Por exemplo, estou fazendo um programa que cadastra clientes. Para que o
usurio no tenha de abrir mais um vez o programa toda vez que quiser cadastrar
um novo cliente, criamos um lao de repetio. O lao ficaria se repetindo at
o momento em que o usurio no desejasse mais cadastrar usurios.
7.1 - Lao FOR
~~~~ ~~~
O lao FOR permite que determinemos a quantidade de vezes que tal bloco do
programa ser executado. Sua sintaxe :
OBS.: FOR = De | TO = a | DO = Faa
FOR contador := 1 to <numero_a_definir> do
begin
comandos;
comandos;
comandos;
end;
por exemplo:
FOR contador := 1 to 5 do
begin
writeln ('MotdLabs');
writeln (' by d4rwin');
end;
{Este lao acima repetiria(imprimiria) 5 vezes na tela as frases MotdLabs e by
d4rwin.}
O lao FOR tambm nos permite determinar o nmero de vezes de forma
descrescente. Por exemplo:
FOR contador := 5 downto 3 do
begin
comandos;
comandos;
comandos;
end;
{O lao acima executaria 2 vezes, contando regressivamente de 5 at chegar em
3, o que est entre begin e end;}
7.2 - WHILE
Aqui est mais uma estrutura ou lao de repetio. Utilizamos o WHILE quando
queremos que determinado bloco do programa se repetia at que algo acontea.
Sua sintexe :
OBS.: WHILE = Enquanto | DO = Faa
WHILE condio DO
Begin
comandos;
comandos;
comandos;
...
End;
por exemplo:
WHILE num > 10 DO
Begin
writeln ('Eu estou aprendendo Pascal');
writeln ;
writeln ;
writeln ('d4rwin eh l33t0, =)');
num := 8;
End;
{No exemplo acima temos a seguinte condiao, num > 10. Enquanto essa condio
for verdadeira(maior que 10), o programa executar aquilo que estiver dentro
do bloco de repetiao. Quando o programa encontra num := 8, ele sai do lao,
pois a condio se tornou falsa.}
7.3 - Repeat
~~~~~~
Podemos dizer que o Repeat o contrrio do WHILE. Ele executa o que est no
bloco de repetio at que a condio seja verdadeira. Enquanto a condio for
falsa, ele executa o bloco de repetio. Sua sintaxe :
Repeat
comandos;
comandos;
comandos;
...
comandos;
Until (condio_for_verdadeira);
por exemplo
Repeat
write ('Digite um num: ');
readln (num);
write ('Digite outro num: ');
readln (num2);
result := num + num2;
writeln ('Resultador: ',result);
Until (result < 0);
{No exemplo acima, o programa fica somando,somando...somando, at que o
resultado seja negativo/menor que 0. Repare que o Repeat dispensa o uso do
Begin e End;}
8.0 - Vetores
~~~~~~~
A partir do momento em que precisamos declarar um nmero muito grande de
variveis, faz-se necessrio o uso de vetores, denominado em Pascal como
"array", para que no tenhamos o desconforto de declarar todas as variveis.
Por exemplo, estou fazendo um programa que cadastre os 300 clientes de um
empresa. Imagina o trabalho que daria declarar 300 variveis do mesmo tipo, e
pior, o desconforto que seria criar a estrutura para ler essas 300 variveis.
Por isso ns utilizamos arrays. Sua sintaxe :
Var <identificador> : array [1..n] of integer;
por exemplo
Var clientes : array [1..300] of string[15];
{A estrutra acima a forma como declaramos arrays em Pascal.}
Para acessar essas variveis no programa, utilizamos o nome do array mais seu
indice. Por exemplo: clientes[1], clientes[2], clientes[3] ... cliente[n];
Mesmo utilizando-se de arrays, o processo de ler os 300 clientes seria penoso.
Por isso, utilizando-se de um lao FOR, podemos ler todos os clientes, com
apenas algumas linhas. Segue o exemplo:
FOR contador := 1 to 300 do
begin
readln (clientes[contador]);
end;
{No Lao acima, o programa l do cliente 1 ao 300. Note que entre parenteses
encontra-se "contador". Portanto, o programa ficar lendo os nomes dos
clientes, at chegar em 300.}
Para imprimir o nome de um cliente, faramos assim:
writeln ('Cliente: ',cliente[76]);
E se quisessemos imprimir o nome de todos os clientes, utilizaramos mas uma
vez o lao FOR:
FOR contador := 1 to 300 do
begin
writeln ('Cliente Numero: ',contador);
writeln ('Nome: ',clientes[contador]);
writeln ;
end;
9.0 - Matrizes
~~~~~~~~
As matrizes se assemelham aos vetores, mas possibilitam armazenar um nmero
maior de variveis. Abaixo segue um desenho de como seriam mais ou menos uma
matriz:
1 2 3 4 5
------------------------
1 | 1,1| 1,2| 1,3| 1,4| 1,5|
|----|----|----|----|----|
2 | 2,1| 2,2| 2,3| 2,4| 2,5|
------------------------
{Em cada "cazinha" armazenada uma varivel}
Como voc pode observer no desenho acima, temos 5 colunas e 2 linhas. Quando
estamos mechendo com matrizes, sempre nos referimos primeiro a linha, depois a
coluna. Abaixo segue um exemplo de declarao de matrizes:
<identificador> : array [1..10,1..10] of integer;
por exemplo:
numero : array [1..10,1..10] of integer;
{No exemplo acima, declaramos uma matriz que possui 10 linhas e 10
colunas. Quando queremos acessar alguma varivel armazenada numa matriz,
utilizamos um ndice com as coordenadas.}
Por exemplo:
writeln ('Numero: ',numero[2,6]);
{No exemplo acima, ser impresso na tela o nmero que est na linha 2, coluna
6.}
Para ler(read) um ou imprimir uma matriz, utilizamos os seguitens laos FOR:
for linha := 1 to 10 do
begin
for coluna := 1 to 10 do
begin
write ('Digite um numero: ');
readln (numero[linha,coluna]);
end;
end;
{Vamos analisar o lao acima, o programa pede para o usurio digitar um nmero.
Este nmero armazenado na linha 1,coluna 1. Depois o laa se repetir,
ento o prximo nmero a ser lido ser armazenado na linha 1, coluna 2, e
assim por diante. Quando a coluna chega a 10, o lao passa para a linha 2, e
tudo se repete, =)}
10.0 - Registros
~~~~~~~~~
Registros so utilizados para armazenas vrias variveis de tipos diferentes.
Por exemplo, estou criando um programa para o CENSO. Eu preciso do nome da
pessoa, sua idade, telefone e endereo. Nome,idade,telefone e endereo so
variveis de tipos diferentes. Por isso, veja como ficaria este exemplo
utilizando registros:
Type registro = record
nome :string[15];
idade :integer;
telefone :integer;
endereo :string;
end;
{Analisando a estrutura acima, vemos que registro igual a record. Portanto,
toda vez que quisermos nos referir a um registro que tenha nome,idade,telefone
e endereo, utilizaremos : "var <variavel> : registro". Isto declararia
<variavel> do tipo registro, isto significa que na varivel
<variavel> poderamos gravar nome,idade,telefone e endereo.}
Como se referenciar a um registro?
Para nos referenciar a um registro, utilizamos a seguinte sintaxe:
<nome_do_registro>.variavel;
por exemplo:
registro.nome;
registro.idade;
registro.telefone;
registro.endereo;
Um exemplo de leitura com o registro seria:
write ('Digite um nome: ');
readln (registro.nome );
write ('Digite sua idade: ');
readln (registro.idade);
write ('Digite seu tel: ');
readln (registro.telefone);
write ('Digite seu endereo: ');
readln (registro.endereo);
11.0 - Tratamento de Arquivos
~~~~~~~~~~ ~~ ~~~~~~~~
Em pascal, ns podemos mecher, mesmo que inderetamente, com arquivos binrios e
.txt. Para comearmos a trabalhar com tratamento de arquivos, necessrio
declarar a varivel-arquivo. Abaixo segue a sintaxe da declarao de arquivos
binrios:
Type ArqInt = File of Integer;
Var Numeros : ArqInt;
ou
Var Numeros : File of Integer;
Declarao de arquivos texto:
Type ArqTexto = Text;
Var Texto : ArqTexto;
ou
Var Texto : Text
{Note que s utilizamos "File of" para arquivos binrios}
Abaixo segue os comandos e suas sintaxes. No final eu darei um programa-exemplo,
utilizando tais comandos.
ASSIGN -> Este comando serve para informar ao programa, onde localiza-se o
arquivo (binrio ou texto), no HD. Sempre que formos trabalhar com
tratamento de arquivos em Pascal, devemos utilizar este
comando. Sua sintaxe :
Assign(Variavel,'C:\MotdLabs\Texto.txt');
Assing(Variavel,'C:\MotdLabs\Numeros.bin');
RESET -> Abre o arquivo para somente leitura. Sintaxe:
Reset(nome_do_arquivo);
APPEND -> Abre o arquivo para insero de mais coisas. Somente para arquivos
texto. Sintaxe:
Append(nome_do_arquivo);
REWRITE -> Este programa verifica a existncia do arquivo. Se o arquivo
existir, ele apaga tudo o que tem dentro do arquivo. Se o arquivo no
existir, ele cria o arquivo no local especificado pelo Assign. Sintaxe:
ReWrite(nome_do_arquivo);
CLOSE -> Fecha o arquivo. Sintaxe:
Close(nome_do_arquivo);
READ -> Recebe o valor lido. Sintaxe:
Read(nome_do_arquivo,varivel);
WRITE -> Escreve no arquivo. Sintaxe:
Write(nome_do_arquivo,valor_a_ser_escrito);
Exemplo de um Programa utilizando tratamento de arquivos: OBS.: Execute o
programa, e depois verifique o arquivo C:\Arquivo.txt
--------------------------------Corte Aqui--------------------------------------
{ Nome do Programa ......................: Tratamento de Arquivos
Funo ...............................: Programa exemplo usando tratamento de
arquivos
Plataforma ...........................: Windows / 32 bits
Linguagem ............................: Pascal
Data de criao ......................: 07/12/2003
Data de ltima alterao .............: 07/12/2003
Autor ................................: d4rwin
}
Program exemplo_01;
Uses CRT,DOS;
Const Arq_real = 'C:\Arquivo.txt';
Type ArqTexto = Text;
Var List : ArqTexto;
nome : string[15];
Begin
clrscr;
textbackground (blue);
textcolor (white);
clrscr;
gotoxy (14,2);
writeln ('Programa Exemplo 01'); gotoxy (14,3);
writeln ('-------- ------- --');
writeln ;
writeln ;
delay (500);
Assign (List,Arq_real);
{$i-}
Reset(List);
{$i+}
if IOResult <> 0 then
rewrite (List);
write ('Digite seu nome: ');
readln (nome);
write (List,nome);
Close(List);
writeln ;
writeln ;
writeln ('--------------------------EoF--------------------------');
writeln;
writeln;
readkey;
End.
--------------------------------Corte Aqui--------------------------------------
12.0 - Procedimentos e Funes
~~~~~~~~~~~~~ ~ ~~~~~~~
Agora veremos rapidamente o que so procedimentos e funes, e como utiliz-los
no programa.
Procedimentos
^^^^^^^^^^^^^
Procedimentos so identificados em Pascal como "procedures". Procedures
so programas, iguais ao bloco principal, mas que no faz parte do mesmo. No
entendeu? Deixa eu explicar melhor, nos procedimentos ns podemos declarar
variveis, imprimir, ler, tudo aquilo que fazemos no bloco principal. A
diferena est que estes so seperados. O procedimentos so declarados entre o
Var e o Begin do bloco principal. Vamos ver um exemplo de procedimentos:
Program procedimentos;
Uses CRT;
Var num1,num2 : integer;
nome : string[10];
Procedure <nome_da_procedure> ;
Var var1,var2 : integer
var3,var4 : word;
aux : byte;
begin
clrscr;
writeln ('Pascal is rlz!');
writeln ('=)');
end;
Begin {Aqui comea o bloco principal}
comandos;
comandos;
comandos;
...
comandos;
End.
{Com este exemplo j da pra ter um idia de como funcionam os procedimentos}
Acho que chegou a hora de falar de variveis globais e locais, fundamental para
o entendimento de procedimentos. Como vc pode reparar no exemplo acima,
foram declaradas variveis dentro do procedimento e variveis fora
dele, como fazamos antes. A que est, todas as variveis declaradas no
escopo VAR, so globais, portanto, podemos utiliz-las em qualquer lugar do
programa, inclusive dentro do procedimento. Se uma varivel global recebe
um valor dentro do procedimento, ela ficar com o valor recebido na
procedure. J as variveis locais, so aqueles declaradas dentro da
procedure. Estas variveis sero utilizadas apenas pelo procedimento.
Portanto, podemos sim ter duas variveis com o mesmo nome em um programa,
desde que uma seja global e outra local. Mas da voc me pergunta: "E se eu
tiver uma varivel global com o mesmo nome de uma varivel local, dentro do
procedimento, qual vai ser utilizada?". A resposta que sempre as variveis
locais vo ter preferncia sobre as globais.
Mais uma coisa a se dizer com relao a procedimentos que dentro de um
procedimento, vc pode chamar outro. Mas isso s possvel se o procedimento
chamado estiver em cima do procedimento que chamou. Mas pq isso? Isso deve-se
ao fato de o Pascal ser linear, isto , o compilador vai lendo linha por linha,
at chegar no End. Se vc chamar um procedimento dentro de outro, e o
procedimento chamado estiver em baixo dele, quando o compilador passar pelo
procedimento, no vai reconhecer o comando, pois o procedimento que foi chamado
est abaixo e ainda no foi compilado, portanto desconhecido pelo compilador.
Para chamar um procedimento utilizamos a seguinte sintaxe:
<nome_do_procedimento>;
Funes
^^^^^^^
Funes so a mesma coisa que os procedimentos, a nica diferena entre os dois
que as funes retornam um valor. Geralmente, mais por uma questo de
organizao, a funes so declaradas abaixo dos procedimentos. Um exemplo
de declarao de funo:
Function <nome_da_funo> (var1,var1 :tipo) :tipo;
Begin |
comandos; Tipo o tipo de varivel que a
comandos; funo ir retornar.
comandos;
...
comandos;
End;
{Analisando a funo acima, podemos concluir o seguinte: utilizaremos na funo
o var1 e var2, que so do mesmo tipo. Tambm podemos ver que a funo
retornar um valor do tipo a ser definido.}
Passagem de Parmetros
Os procedimentos tambm suportam passagem de parmetros, mas eu aproveitei o
tpico funoes para exeplicar isso. Para exemplificar a passagem de
parmetros, abaixo segue um cdigo:
--------------------------------Corte Aqui--------------------------------------
{ Nome do Programa ....................... Funo
Funo ................................. Exemplo de passagem de parmetros
Plataforma ............................. Windows / 32 bits
Linguagem .............................. Pascal
Data de criao ........................ 08/12/2003
Data de ultima alterao ............... 08/12/2003
Autor .................................. d4rwin
}
Program funcoes;
Uses CRT;
Var num1,num2,result,contador : integer;
Function funcao (A,B :integer) : integer;
begin
Result := A + B;
end;
Begin
clrscr;
writeln ('Programa Exemplo de Funes');
writeln ;
writeln;
textcolor (white);
write ('Digite um num: ');
readln (num1);
write ('Digite outro num: ');
readln (num2);
{Agora ns vamos passar os parmetros - valores de num1 e num2 - a funo}
funcao(num1,num2); {Aqui os parmetros so passados nesta ordem. Na funo, A
receber num1 e B num2}
writeln ;
textcolor (red + blink);
delay (400);
writeln ('Resultado: ',result);
writeln ;
textcolor (cyan);
writeln (' -----------------------------EoF---------------------------');
readkey;
End.
--------------------------------Corte Aqui--------------------------------------
13.0 - Agenda Eletrnica em Pascal
~~~~~~ ~~~~~~~~~~ ~~ ~~~~~~
Bom, j que est acabando o txt, eu coloquei um agenda eletrnica feita em
pascal por mim. Ele permite adicionar, ver e pesquisar amigos. Estou colocando
ela aqui, pois acho que ela seria uma boa alternativa para estudo. Talvez voc
no entenda isso ou aquilo, mas importante que voc estude o cdigo, e
principalmente pratique, pratique... pratique.
--------------------------------Corte Aqui--------------------------------------
{ Nome do Programa ....................... Agenda
Funo ................................. Agenda Eletronica
Plataforma ............................. Windows
Linguagem .............................. Pascal
Data de criao ........................ 06/12/2003
Data de ultima alterao ............... 08/12/2003
Autor .................................. d4rwin }
Program Agenda_Eletronica;
Uses CRT,DOS;
Const Arq_real = 'C:\Agenda.txt';
Type Amigo = record
codigo : integer;
nome : string[15];
idade : integer;
telefone : string[12];
end;
Var agenda : file of amigo;
contador : integer;
opcao : char;
Procedure Menu;
begin
clrscr;
writeln ; gotoxy (14,3);
writeln ('#################################'); gotoxy (14,4);
writeln ('## Agenda Eletronica ##'); gotoxy (14,5);
writeln ('#################################'); gotoxy (14,6);
writeln ('## ##'); gotoxy (14,7);
writeln ('## Incluir Amigo (I) ##'); gotoxy (14,8);
writeln ('## Listar Amigos (L) ##'); gotoxy (14,9);
writeln ('## Pesquisar Amigo (P) ##'); gotoxy (14,10);
writeln ('## Sair (S) ##'); gotoxy (14,11);
writeln ('## ##'); gotoxy (14,12);
writeln ('#################################'); gotoxy (14,13);
writeln ; gotoxy (14,14);
write ('Opcao: '); gotoxy (21,14);
readln (opcao);
opcao := upcase(opcao);
end;
Procedure Incluir_amigos;
var X : amigo;
resposta : char;
Total_amigos : integer;
begin
{$i-}
reset (agenda);
{$i+}
Total_amigos := 0;
if IOResult <> 0 then
rewrite (agenda);
while Not EoF(Agenda) do
begin
read (Agenda,X);
Total_amigos := Total_amigos + 1;
end;
repeat
clrscr;
Total_amigos := Total_amigos + 1;
gotoxy (14,3);
write ('Inclusao de Amigo'); gotoxy (14,4);
writeln('^^^^^^^^ ^^ ^^^^^'); gotoxy (14,5);
writeln ;
writeln ;
with X do
begin
gotoxy (14,7);
writeln ('Codigo: ',Total_amigos); gotoxy (14,8);
codigo := Total_amigos;
write ('Nome: '); readln (nome); gotoxy (14,9);
write ('Idade: '); readln (idade); gotoxy (14,10);
write ('Telefone: '); readln (telefone); gotoxy (14,11);
end;
write (Agenda,X);
writeln ; gotoxy (14,13);
write ('Inserir outro(S/N): ');
readln (resposta);
resposta := upcase(resposta);
until (resposta = 'N');
close (Agenda);
end;
Procedure Listar_amigos;
var X : amigo;
begin
clrscr;
reset(agenda); gotoxy (14,3);
writeln ('Listagem de Amigo(s)'); gotoxy (14,4);
writeln ('^^^^^^^^ ^^ ^^^^^^^^'); gotoxy (14,5);
while Not EoF(Agenda) do
begin
read (agenda,X);
with X do
begin
writeln ;
writeln (' Codigo ..........: ',codigo);
writeln (' Nome ............: ',nome) ;
writeln (' Idade ...........: ',idade) ;
writeln (' Telefone.........: ',telefone);
writeln ;
end;
end;
readln;
end;
Procedure Pesquisar_amigo;
var X : amigo;
nome_amigo : string[15];
begin
reset(agenda);
clrscr;
gotoxy (14,3);
writeln ('Pesquisa de Amigo'); gotoxy (14,4);
writeln ('^^^^^^^^ ^^ ^^^^^'); gotoxy (14,6);
write ('Nome do Amigo: ');
readln (nome_amigo);
writeln ;
while Not EoF(Agenda) do
begin
read (Agenda,X);
with X do
begin
if nome = nome_amigo then
begin
gotoxy (14,8);
writeln ('Codigo ..........: ',codigo) ; gotoxy (14,9);
writeln ('Nome ............: ',nome) ; gotoxy (14,10);
writeln ('Idade ...........: ',idade) ; gotoxy (14,11);
writeln ('Telefone ........: ',telefone); gotoxy (14,12);
writeln ;
readkey;
end;
end;
end;
end;
Begin
clrscr;
textbackground (blue);
textcolor (white);
clrscr;
gotoxy (14,3);
writeln ('====================================='); gotoxy (14,4);
writeln ('= ='); gotoxy (14,5);
writeln ('= Agenda Eletronica ='); gotoxy (14,6);
writeln ('= ='); gotoxy (14,7);
writeln ('= $$$$ #### $$$$ ='); gotoxy (14,8);
writeln ('= $$$$ #### $$$$ por d4rwin ='); gotoxy (14,9);
writeln ('= ='); gotoxy (14,10);
writeln ('====================================='); gotoxy (14,11);
writeln ;
writeln ;
gotoxy (14,12);
writeln ('Carregando agenda...');
for contador := 1 to 100 do
begin
gotoxy (14,13);
writeln (contador,'% concluido');
delay (100);
end;
Assign (agenda,Arq_real);
repeat
Menu;
if opcao = 'I' then
Incluir_amigos;
if opcao = 'L' then
Listar_amigos;
if opcao = 'P' then
Pesquisar_amigo;
until (opcao = 'S');
End.
--------------------------------Corte Aqui--------------------------------------
14.0 - Exerccios
~~~~~~~~~~
Exerccio 01
^^^^^^^^^ ^^
Escreva um algoritmo/programa para ler 2 valores (se o segundo valor
informado for ZERO, deve ser lido um novo valor at que seja
diferente de zero) e imprimir o resultado da diviso do primeiro pelo
segundo. Utilizar a estrutura REPEAT-UNTIL (Repita - At).
Exerccio 02
^^^^^^^^^ ^^
Reescreva o exerccio anterior utilizando a estrutura WHILE...DO
(Enquanto...Faa).
Exerccio 03
^^^^^^^^^ ^^
Escreva um algoritmo/programa para ler as notas da 1 e 2 avaliaes de um
aluno, calcule e imprima a mdia(simples). S devem ser aceitos valores
vlidos durante a leitura entre 0 e 10 para cada nota. Acrescente uma
mensagem 'NOVO CLCULO (S/N)?' ao final do exerccio. Se for respondido 'S'
deve retornar e executar um novo clculo, caso contrrio dever encerrar o
algoritmo/programa.
Exerccio 04
^^^^^^^^^ ^^
Escreva um algoritmo/programa que solicite ao usurio N nmeros. Faa a soma
destes N nmeros e imprima na tela. Utilize a estrutura FOR...TO...DO
(De...At...Faa).
Exerccio 05
^^^^^^^^^ ^^
Ler 10 valores e escrever quantos destes valores so NEGATIVOS.
15.0 - Agradecimentos
~~~~~~~~~~~~~~
Agradeo primeiramente a Deus, por ter criado o mundo, a meu pai, minha me, o
troxa do meu irmo e minha vizinha gata. Agradeo tbm a todos os caras do
MotdLabs que tem me dado a maior fora. Espero que com este txt eu tenha
alcanado meu objetivo, que ajudar a dar um ponta-p inicial no aprendizado
de programao para newbies. Sei que o texto no est l aquelas coisas, mas
acredito que a partir dele, voc j vai saber pelo que e onde procurar(vide
seo LINKS). Bom, me despeo aqui, um abraao a todos e at a prxima...
[d4rwin]
16.0 - Links
~~~~~
http://www.freepascal.org
http://www.freepascal.eti.br
http://www.pascaler.hpg.com.br
http://www.infoxbr.com.br
http://www.geocities.com/SiliconValley/Bay/6512/index.htm
http://www.pascalhome.cjb.net/
http://www.pascaltotal.hpg.ig.com.br/
http://www.delphix.com.br
http://d4rwin.cjb.net
-=-d4rwin@bol.org-=-

-----------------------------------EoF------------------------------------------

Вам также может понравиться