Upcoming SlideShare
×

# Apostila pascal

485 views

Published on

0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

Views
Total views
485
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
20
0
Likes
0
Embeds 0
No embeds

No notes for slide

### Apostila pascal

1. 1. APOSTILA DE TÉCNICAS DEPROGRAMAÇÃOE LINGUAGEM PASCAL
3. 3. 38.2 PROCEDURES...........................................................................................................................478.2.1 Variáveis Globais e Locais.............................................................................................518.3 PARÂMETROS ..........................................................................................................................528.3.1 Passagem por Valor ......................................................................................................538.3.2 Passagem por Referência...............................................................................................548.4 FUNCTIONS .............................................................................................................................559 ARQUIVOS...............................................................................................................................589.1 DEFINIÇÃO DE UM ARQUIVO ....................................................................................................589.2 OPERAÇÕES DE UM ARQUIVO...................................................................................................589.3 FORMAS DE ACESSO EM UM ARQUIVO......................................................................................599.3.1 Acesso Seqüencial..........................................................................................................599.3.2 Acesso Direto ................................................................................................................609.3.3 Acesso Indexado ............................................................................................................609.4 ARQUIVOS DO TIPO TEXTO ......................................................................................................609.5 ARQUIVOS COM TIPO DEFINIDO ...............................................................................................619.6 ARQUIVO COM TIPO DEFINIDO DE REGISTRO ............................................................................63
8. 8. 8• Editor de Código-Fonte• Compilador• Link-Editor• Depurador• Ajuda On-Line da Linguagem e do próprio IDEPodemos citar alguns comandos principais do Turbo Pascal :• Compilar o programa : ALT + F9• Compilar e Executar o Programa : CTRL + F9• Acessar o Menu : ALT + Letra realçada.• Criar um novo programa : menu FILE | NEW• Salvar o programa atual : F2• Sair do Turbo Pascal : ALT + X• Ver tela com os resultados do programa executado : ALT + F5
16. 16. 16program Area_Circulo;{ Programa para calcular a área de um círculo. }constPI = 3.141519265;varArea, Comprimento, Raio : real;beginwriteln( ´Digite o Raio : ´ );readln( Raio );Area := PI * Raio * Raio;Comprimento := 2 * PI * Raio;writeln( ´Área = ´, Area );writeln( ´Comprimento da Circunferencia = ´, Comprimento );end.
19. 19. 19Vejamos um exemplo:varA, B : integer;C, D : real;beginA := 1;B := 3;C := 5;D := 10;A := 1 + B;A := B + D; { errado, D é real }B := 10 div 3;A := 10 mod 3;C := D / C;D := 10 div C; { errado, o operado div é só parainteiros }A := -1;B := 5 + A;B := -A;C := D * A;B := C * B; { errado, C é real }end.4.3.3 Operador de ConcatenaçãoO operador de concatenação efetua a junção de duas variáveis ou constantes dotipo string.Vejamos um exemplo:varPreNome, SobreNome, NomeCompleto : string[ 30 ];begin{ Suponhamos o nome Josias Lima Santos }PreNome := ´Josias´;SobreNome := ´Santos´;NomeCompleto := PreNome + SobreNome;writeln( NomeCompleto );NomeCompleto := ´Jose´ + ´Maria´;writeln( NomeCompleto );...end.
20. 20. 204.3.4 Operadores RelacionaisOs operadores relacionais são utilizados para efetuar a comparação entre dadosde mesmo tipo. Os operadores relacionais existentes em Pascal podem ser vistos natab.4.2.Operador SímboloMaior que >Menor que <Maior ou igual >=Menor ou igual <=Igual =Diferente <>TABELA 4.2 – OPERADORES RELACIONAISVejamos um exemplo:varNota1, Nota2 : real;NomeAluno1, NomeAluno2 : string[ 30 ];A, B, C : integer;beginA := 2;B := 3;C := 1;if B = A + C thenwriteln( B );Nota1 := 5.0;Nota2 := 10.0;if Nota1 < Nota2 thenwriteln( Nota1 );NomeAluno1 := ´Maria Jose´;NomeAluno2 := ´MariaJose´;if NomeAluno1 < NomeAluno2 thenwriteln( NomeAluno1 );end.
23. 23. 23Funções Literais:Nome Função Objetivo Tipo Parâmetro Tipo Retornolength( x ) Determina o número de caracteresde xstring inteiroconcat( x1, x2, x3,...) Concatena duas ou mais strings(máx 255 caracteres)string stringcopy( x, y, z ) Retorna uma subcadeia da cadeia x,com z caracteres, começando nocaracter y.string, inteiro,inteirostringUpCase( x ) Retorna x convertido paramaiúsculachar charFunções para Conversão:Nome Função Objetivo TipoParâmetroTipoRetornotrunc( x ) Trunca x para um número inteiro real inteiroint( x ) Retorna a parte inteira de x real realfrac( x ) Retorna a parte fracionária de x real realround( x ) Arredonda x para um inteiro real inteirochr( x ) Determina o caracter ASCII representado por x inteiro charFunções e Procedimentos de Uso Geral:Nome Função Objetivo Tipo Parâmetro Tipo do Retornosizeof( x ) Retorna o número de byte de x qualquer tipo inteirogotoxy(x,y) Move o curso para a coluna x e linha y inteiro
25. 25. 25Observe que o end é finalizado com um ponto-e-vírgula ( ; ) e não apenas ponto.O uso de ponto ao final de um end ocorre somente na finalização de um programa.Vejamos um exemplo de um trecho de programa com a utilização de um blocode instruções:...if (x > 10) thenbeginwriteln(“O valor da variavel X e 10”);x : = x + 1;writeln(“O valor da variavel X agora e11”);end;...Vejamos um exemplo completo de um programa com o uso da instruçãoif...then.“Ler dois valores inteiros e independentemente da ordem em que foraminseridos, estes deverão ser exibidos em ordem crescente, ou seja, se forem fornecidos 5e 3 respectivamente, deverão ser apresentados 3 e 5. O programa em questão deveráefetuar a troca dos valores entre as duas variáveis”Algoritmo1. Ler dois valores inteiros (estabelecer variáveis A e B);2. Verificar se o valor de A é maior que o valor de B:a. se for verdadeiro, efetuar a troca de valores entre as variáveis;b. se for falso, pedir para executar o que está estabelecido no passo 3;3. Apresentar os valores das duas variáveis.Programa em Pascalprogram ORDENA;varX, A, B : integer;beginwrite (‘Informe uma valor para a variavel A: ‘);readln(A);write (‘Informe uma valor para a variavel B: ‘);readln(B);writeln;if (A > B) thenbeginX := A;A := B;B := X;end;writeln(‘Os valores ordenados são: ‘);write(A, ‘ ‘, B);end.
27. 27. 27Programa em Pascalprogram ADICIONA_NUMEROS;varX, A, B : integer;beginwrite(‘Informe um valor para a variavel A: ‘);readln(A);write(‘Informe um valor para a variavel B: ‘);readln(B);writeln;X := A + B;write (‘O resultado equivale a: ‘);if (X>=10) thenwriteln(X+5)elsewriteln(X-5)end.Podemos trabalhar com o relacionamento de duas ou mais condições dentro dainstrução if...then. Para estes casos, é necessário trabalhar com os operador lógicos,vistos anteriormente. Vejamos alguns exemplos :Operador ANDprogram TESTA-LOGICA-AND;varNUMERO : integer;beginwrite(‘Informe um numero: ’);readln(NUMERO);writeln;if (NUMERO >= 20) and (NUMERO <=90) thenwriteln(‘O numero esta na faixa de 20 a 90’)elsewriteln(‘O numero esta fora da faixa de 20 a 90’);end.
28. 28. 28Operador ORprogram TESTA-LOGICA-OR;varA, B : integer;beginwrite(‘Informe um valor para a variavel A: ‘);readln(A);write(‘Informe um valor para a variavel B: ‘);readln(B);writeln;if (A>0) or (B>0) thenwriteln(‘Um dos numeros e positivo’);Operador NOTprogram TESTA-LOGICA-NOT;varA, B, C, X : integer;beginwrite(‘Informe um valor para a variavel A: ‘);readln(A);write(‘Informe um valor para a variavel B: ‘);readln(B);write(‘Informe um valor para a variavel X: ‘);readln(X);if not (X>5) thenC := (A + B) * XelseC := (A - B) * X;writeln(‘O resultado da variavel C corresponde a:’, C);end.
35. 35. 357 VETORES, MATRIZES E REGISTROSAo utilizamos variáveis, podemos armazenar apenas um valor por vez. Agora,imagine um programa onde precisa-se armazenar as notas de 5 provas realizadas por umaluno. Com os conhecimentos que você possui até agora, seria necessário criar cincovariáveis para armazenar as notas. Desta forma:NOTA1, NOTA2, NOTA3, NOTA4, NOTA5 : integer;Em Pascal existem estruturas que nos permitem agrupar várias informaçõesdentro de uma mesma variável. Estas estruturas são chamadas de vetores e matrizes.7.1 VetoresEste tipo de estrutura é também chamado de matriz unidimensional. Um vetoré representado por seu nome, tamanho e seu tipo.Sintaxe:<vetor> : array[tamanho] of <tipo_de_dado>;onde: vetor é o nome atribuído ao vetor, tamanho é o tamanho atribuído aovetor, em número de elementos e tipo_de_dado é o tipo de elemento armazenado(inteiro, real...).Como já visto, uma variável somente pode conter um valor por vez. No caso dosvetores, estes poderão armazenar mais de um valor por vez, pois são dimensionadosexatamente para este fim.Vejamos como poderíamos declarar um vetor para armazenar as cinco notas doaluno:NOTAS : array[1..5] of real;A leitura e exibição de vetores são feitas indicando individualmente quaiselementos se deseja ler ou imprimir. Vejamos como inserir as notas do aluno:NOTA[1] := 5.2;NOTA[2] := 8.0;NOTA[3] := 9.2;NOTA[4] := 7.5;NOTA[5] := 8.3;Observe que o nome é um só, o que muda é a informação indicada dentro doscolchetes. A esta informação dá-se o nome de índice, sendo este o endereço onde ovalor está armazenado, ou seja, a nota do aluno. Podemos imaginar o vetor como umatabela com cinco colunas:NOTA5.2 8.0 9.2 7.5 8.3
36. 36. 36Vamos analisar um programa com a utilização de vetores:“Desenvolver um programa que efetue a leitura de 10 elementos de um vetor AConstruir um vetor B de mesmo tipo, observando a seguinte lei de formação: se o valordo índice for par, o valor deverá ser multiplicado por 5; sendo ímpar, deverá sersomado com 5. Ao final, mostrar os conteúdos dos dois vetores. ”Algoritmo1. Iniciar o contador do índice de um vetor (A), com valor 1 até 10;2. Ler os 10 valores, um a um;3. Verificar se o índice é par:a. Se for, multiplica por 5 e atualiza no vetor B;b. Se não for par, soma 5 e atualiza no vetor B.4. Apresentar o conteúdo dos dois vetores.Programa em Pascalprogram EXEMPLO_VETOR;varA, B : array[1..10] of integer;I : integer;begin{ *** Entrada dos Dados ***}for I := 1 to 10 dobeginwrite(‘Informe o valor’, I);readln(A[I]);end;{ *** Teste Par ou Ímpar ***}for I := 1 to 10 doif (I mod 2 = 0) thenB[I] := A[I] * 5elseB[I] := A[I] + 5;writeln;{ *** Apresentação das matrizes ***}for I := 1 to 10 dowriteln(‘A[‘, I:2,’] = ’, A[I]:2, ‘ ’, ‘B[’, I:2, ‘] = ’, B[I]:2 );writeln;writeln(‘Tecle <ENTER> para encerrar: ’);readln;end.Vejamos um exemplo do uso de vetores de strings:
37. 37. 37“Ler e exibir o nome de 10 pessoas.”Algoritmo1. Definir a variável I do tipo inteira para controlar a repetição;2. Definir a matriz NOME do tipo string para 10 elementos;3. Iniciar o programa, fazendo a leitura dos 10 nomes; e4. apresentar, após a leitura, os 10 nomes.Programa em Pascalprogram LISTA_NOME;varNOME : array[1..10] of string;I: integer;beginwriteln(‘Listagem de nomes’);writeln;{ *** Entrada dos Dados *** }for I := 1 to 10 dobeginwrite(‘Digite o ’, I:2, ‘ o. nome: ’);readln(NOME[I]);end;writeln;{ *** Apresentação dos Nomes *** }for I := 1 to 10 dowriteln(‘Nome: ’ , I:2, ‘ --> ’, NOME[I]);writeln;writeln(‘Tecle <ENTER> para encerrar: ’);readln;end.Uma forma mais organizada de apresentar o programa acima, seria exibir osnomes das pessoas em ordem alfabética, contribuindo para uma pesquisa mais fácil.Vejamos como ficaria o programa desta forma:
38. 38. 38Programa em Pascalprogram LISTA_NOME_ORDENADO;varNOME : array[1..10] of string;I, J: integer;X : string;beginwriteln(‘Listagem de nomes’);writeln;{ *** Entrada dos Dados *** }for I := 1 to 10 dobeginwrite(‘Digite o ’, I:2, ‘ o. nome: ’);readln(NOME[I]);end;{ *** Ordenação dos Nomes *** }for I := 1 to 9 dofor J := I +1 to 10 doif (NOME[I] > NOME[J]) thenbeginX := NOME[I];NOME[I] := NOME[J];NOME[J] := X;end;{ *** Apresentação dos Nomes *** }writeln;for I := 1 to 10 dowriteln(‘Nome: ’ , I:2, ‘ --> ’, NOME[I]);writeln;writeln(‘Tecle <ENTER> para encerrar: ’);readln;end.Observe o algoritmo da troca, utilizado junto da instrução if NOME[I] >NOME[J] then. Após a verificação desta condição, sendo o primeiro nome maior que osegundo, efetua-se então a sua troca com a seqüência:X := NOME[I];NOME[I] := NOME[J];NOME[J] := X;
39. 39. 39Considere o vetor NOME[I] com o valor “CARLOS” e o vetor NOME[J] com ovalor “ALBERTO”. Ao final, NOME[I] deverá estar com “ALBERTO” e NOME[J]deverá estar com o valor “CARLOS”. Para se conseguir este efeito é necessária autilização de uma variável de apoio, no caso X.Para que o vetor NOME[I] fique livre para receber o valor do vetor NOME[J], Xdeverá receber o valor de NOME[I], assim sendo X passa a ter o valor “CARLOS”.Neste momento passa-se o valor de NOME[J] para NOME[I], no caso “ALBERTO”. Pofim, NOME[J] pode receber o valor de X para receber o valor “CARLOS”.7.2 MatrizesVamos imaginar que queremos rescrever o programa das notas do aluno, agoramantendo o controle para cinco alunos ao invés de apenas um. Com os conhecimentosadquiridos até agora seria necessário criar cinco vetores (matrizes unidimensionais), umpara cada aluno. Esta é uma solução, e funciona, porém, torna nosso trabalho maiscansativo.Para facilitar o trabalho com estruturas deste porte, existem as chamadasmatrizes (ou matrizes multidimensionais, se você pensar que vetores são matrizesunidimensionais).A mais comum é a matriz de duas dimensões.Uma matriz de duas dimensões estará sempre fazendo menção a linhas e colunase será representada por seu nome e seu tamanho.Sintaxe:<matriz> : array[dimensão_linha,dimensão_coluna] of<tipo_de_dado>;onde: matriz é o nome atribuído à matriz, dimensão_linha é o tamanho da matrizem número de linhas, dimensão_coluna é o tamanho da matriz em número de colunas etipo_de_dado é o tipo do elemento armazenado(inteiros, reais...).Vejamos como ficaria a matriz das notas dos nossos 5 alunos:8.5 9.0 7.8 8.95.0 6.8 8.7 6.57.0 7.5 7.8 6.58.5 8.0 9.2 7.95.5 8.0 7.2 7.0E como ficaria sua declaração em Pascal:NOTAS : array[1..5,1..4] of real;Vamos ver o programa em Pascal para este exemplo para entenderemos melhoro conceito de matriz:PedroAnaJoanaJoaoMauro
40. 40. 40Programa em Pascalprogram NOTA_ALUNO;varNOTAS : array[1..5,1..4] of real;I, J : integer;beginwriteln(‘Leitura e Apresentacao da Notas’);writeln;for I := 1 to 5 dobeginwriteln;writeln(‘Informe as notas do ’, I:2, ‘o. aluno: ’);for J:= 1 to 4 dobeginwrite(‘Nota’, J:2, ‘:’);readln(NOTAS[I, J]);end;end;writeln;for I:= 1 to 5 dobeginwrite(‘As notas do aluno ’, I:2, ‘ são: ’);for J := 1 to 4 dowrite(NOTAS[I, J] :2 :2, ‘ ’);writeln;end;writeln;writeln(‘Tecle <ENTER> para encerrar: ’);readln;end.Em um exemplo anterior, foi utilizada a variável I para controlar as posições doselementos dentro do vetor, ou seja, a posição em nível de linha. Neste exemplo, avariável I continua tendo o mesmo efeito e a segunda variável, J, está controlando aposição da coluna.Analisando o programa, temos a inicialização das variáveis I e J como 1, ouseja, a leitura será efetuada na primeira linha da primeira coluna. Primeiro é iniciado olooping das linhas e após, para cada linha é feito o looping para todas as colunas de umalinha. Quando todas as notas (colunas) de um aluno forem preenchidas, passa-se para opróximo aluno (linha), e novamente são preenchidas todas as notas(colunas) para osegundo aluno (linhas). Assim até o final.Vamos ver mais um exemplo para fixarmos nosso conhecimento:
45. 45. 45Até agora, os dois exemplos apresentados só servem para a leitura e exibição dasnotas de um aluno. E se quiséssemos apresentar as notas de cinco alunos, como fizemosutilizando matrizes? Vamos ver como ficaria um programa assim:Programa em Pascalprogram EXEMPLO_REGISTRO3;typeNOTAS = array[1..4] of real;CAD_ALUNO = recordNOME : string;NOTA : notas;end;varALUNO : array[1..5] of cad_aluno;I , J: integer;beginwriteln(‘Cadastro de Aluno’);writeln;for J := 1 to 5 dobeginwrite(‘Informe o nome do ’, J:2, ‘o. aluno...: ’);readln(ALUNO[J].NOME);writeln;for I := 1 to 4 dobeginwrite(‘Informe a ’ , I:2, ‘a. nota...............: ’);readln(ALUNO[J].NOTA[I]);end;writeln;end;writeln;writeln;for J := 1 to 5 dobeginwriteln(‘Nome aluno ’ , J:2, ‘...: ’, ALUNO[J].NOME);writeln;for I := 1 to 4 dowriteln(‘Nota ’ ,I, ‘............: ’, ALUNO[J].NOTA[I]:2:2);writeln;end;writeln(‘Tecle <ENTER> para encerrar: ’); readln;end.
49. 49. 49gotoxy(25,24);writeln(‘Tecle algo para voltar ao menu’);TECLA := readkey;end;{ ** Procedimento de Multiplicacao ** }procedure MULTIPLICA;varX, A, B : real;TECLA : char;beginclrscr; gotoxy(32,1);write(‘Procedimento de Multiplicacao’);gotoxy(5,6);write(‘Informe um valor para A: ’);readln(A);gotoxy(5,7);write(‘Informe um valor para B: ’);readln(B);X := A * B;gotoxy(5,10);write(‘O resultado e: ’, X:4:2);gotoxy(25,24);writeln(‘Tecle algo para voltar ao menu’);TECLA := readkey;end;{ ** Programa Principal **}beginOPCAO := ‘0’while (OPCAO <> 3) dobeginclrscr;gotoxy(33,1);write(‘Menu Principal’);gotoxy(28,6);write(‘1. Soma....................’);gotoxy(28,8);write(‘2. Multiplicacao.......’);gotoxy(28,10);write(‘3. Fim do Programa.’);gotoxy(28,12);write(‘Escolha uma opcao:’);readln(OPCAO);if (OPCAO = ‘1’) thenAdicao;if (OPCAO = ‘2’) thenMultiplica;end;end.