Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Apostila - Pascal - 2osem, Notas de estudo de Informática

otima apostila sobre pascal

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 15/09/2008

roberto-carvalho-3
roberto-carvalho-3 🇧🇷

14 documentos

Pré-visualização parcial do texto

Baixe Apostila - Pascal - 2osem e outras Notas de estudo em PDF para Informática, somente na Docsity! APOSTILA DE PASCAL II Profa. Gilene E. S. Borges Gomes gilenegomeshp.com http://www: gomeshp.com APOSTILA DE PASCAL II Gilene Borges Gomes. Índice . ESTRUTURA DE DADOS HOMOGÊNEA UNIDIMENSIONAL (VETOR LA. Exercicios (VETOR) 6 2. ESTRUTURA DE DADOS HOMOGÊNEA MULTIDIMENSIONAL (MATRIZ ). 2.4 MATRIZES TRIDIMENSIONAIS. 13 2.B, Exercícios (MATRIZ) 15 3 ESTRUTURA DE DADOS HETEROGÊNEA (REGISTRO ). 3.4. COMANDO WITH.. DO. 2 3.B, Exercícios (REGISTRO) 2 SUBROTINA: CONCEITOS . . SUBROTINA: PROCEDURE (PROCEDIMENTO ) .. 5.4, EXERCÍCIOS (PROCEDIMENTO ) 31 6. SUBROTINA: FUNCTION (FUNÇÃO 6.4 Exercicios (Função) 35 7. PASSAGEM DE PARÂMETROS POR VALOR E POR REFERÊNCIA 7.A. EXERCÍCIOS (PASSAGEM DE PARÂMETROS ) 37 8. UNITS (BIBLIOTECAS ).. 8.4 Exercícios (UNTTS). as 9. BIBLIOGRAFIA — http Avwmy.gomeshp.com 2 APOSTILA DE PASCAL II Gilene Borges Gomes. 1. Estrutura de dados homogênea unidimensional ( Vetor) Este tipo de estrutura permite trabalhar com o agrupamento de várias informações dentro de uma mesma variável. Vale salientar que este agrupamento ocorrerá obedecendo sempre ao mesmo tipo de dado, e é por esta razão que recebe à denominação de estrutura de dados homogênea unidimensional O tipo de dado homogêneo recebe diversos outros nomes, tais como: variáveis indexadas, variáveis compostas, variáveis subscritas, arranjos, vetores (matrizes unidimensionais), matrizes ou arrays. Os vetores são tipos de dados que podem ser “construídos” à medida que se fazem necessários, pois não é sempre que os tipos básicos (real, inteiro, caracter e lógico) e/ou variáveis simples são suficientes para representar a estrutura de dados utilizada em um programa. A utilização de um vetor se tona necessária quando é preciso armazenar os valores lidos para futuras comparações e/ou cálculos. Por exemplo, quando é realizada a leitura de vários números e depois deseja-se saber quantos números estão acima da média destes números. Somente com os valores armazenados é possível acessá-los novamente. E como são do mesmo tipo, são armazenados em um vetor. O vetor é representado por seu nome, tamanho (dimensão) entre colchetes e seu tipo: lista-de-identificadores : array [ li .. Is ]of tipo; onde: li é o limite inferior; Is é o limite superior; lie Is só podem ser valores ordinais; tipo é um dos tipos básicos já conhecidos O vetor caracteriza-se por ser definida uma única variável dimensionada com um determinado tamanho. Sua dimensão é constituída por constantes inteiras e positivas. Os nomes dados aos vetores seguem as mesmas regras de nomes utilizados em variáveis simples Exemplos VET : array [ 1... VET: array [1.. Uma variável somente pode conter um valor por vez. No caso dos vetores, estes poderão armazenar mais de um valor por vez, pois são dimensionados exatamente para este fim. Lembrando ainda que a manipulação dos elementos de um vetor ocorrerá de forma individualizada, pois não é possível efetuar a manipulação de todos os elementos do conjunto ao mesmo tempo. — http Avwmy.gomeshp.com 3 APOSTILA DE PASCAL II Gilene Borges Gomes. Observe no exemplo a seguir (a), que o nome do vetor é um só, o que muda é a informação indicada dentro dos colchetes. A esta informação dá-se o nome de indice, sendo este o endereço onde o elemento está armazenado. Tanto a entrada como a saída dos dados de um vetor são processadas passo a passo, um elemento por vez. A instrução de leitura (read / readln) ou escrita (write / writeln) deve ser seguida da variável mais o índice. Estes processos são executados com o auxílio de um looping (b). Exemplo: Fazer um programa para ler dez números inteiros, calcular e mostrar a média destes números. Mostrar também, quantos números digitados estão acima da média Program Listala; uses crt; var q c, sm: integer; md : real; v: array [ 1..10 ] of integer; begin clrser; sm ; writeln ("Digite dez números: “); for c 1 to 10 do (Db) begin write ("Digite o *, c, '“o. valor: “); readln ( V[c] ); (a) end; | Note que não é necessário begin end |) for c:=1 to 10 do sm := sm + V[c]; md sm / 10; writeln ('A média dos números: ", md); for c:=1 to 10 do if v[c) > md then inc (9); writeln ( q, ! números acima da média. '); readkey; end. — http Avwmy.gomeshp.com 4 APOSTILA DE PASCAL II Gilene Borges Gomes. 16. Construir um programa para ler dois vetores (X e Y) de sete elementos inteiros cada e criar um 3º. vetor acumulando a multiplicação dos elementos desses dois vetores, sempre utilizando o mesmo índice, Mostrar os valores do 3º. vetor somente. Exemplo: 71] € X[1]* Y[1].Ler um vetor de cada vez e mostrar o vetor Z resultante. x 1 4 6 nu 9 0 6 8 91 3 Y 2 3 1 9 87 5 4 2 10 Z 2 12 6 ” 81 0 30 32 182 30 1 2 3 4 5 6 7 8 9 10 17. Escrever um programa para: à) lertodo o conjunto C de cinco elementos reais; b) construir um outro conjunto D formado da seguinte maneira: * os elementos inteiros de C são multiplicados por 5; * os elementos não inteiros de C são somados com 100; c) mostrar os valores dos vetores C e D formatados para ocupar dez espaços com duas casas decimais. Exemplo: c 1 2 3 4 5 D 1 2 3 4 5 18. DESAFIO; Fazer um programa para ler oito valores inteiros, os quais devem ser armazenados em um vetor. Gerar outro vetor com os elementos do primeiro vetor em ordem crescente. 19. DESAFIO; Fazer um programa para: a) ler 40 elementos inteiros; os 20 primeiros devem ser armazenados no vetor VETI e os outros no vetor VET2; b) “intercalar os elementos dos dois vetores em um novo vetor VET3 de 40 elementos; c) mostrar o vetor VETI na coluna 10 a partir da linha 05; d) mostrar o vetor VET2 na coluna 30 a partir da linha 05; e) mostrar os primeiros 20 elementos do vetor VET3 na coluna 50 a partir da linha 05; f) mostrar os últimos 20 elementos do vetor VET3 na coluna 60 a partir da linha 05; 10 30 so 60 o2 VETI VET2 VET3 VET3 05 10 4s 10 : 06 13 25 45 o7 4 o1 13 os 80 23 25 23 03 09 2 3 02 — http Avwmy.gomeshp.com 9 APOSTILA DE PASCAL II Gilene Borges Gomes. 20. DESAFIO: Intercalação é o processo utilizado para construir uma tabela ordenada, de tamanho n + m, a partir de duas tabelas já ordenadas de tamanhos n e m. Por exemplo, a partir das tabelas: B Téo pI B PL po EI] construímos a tabela c A B [ I 4 [5 [6 [7 ] Fazer um programa que: a) leia NA, número de elementos do conjunto A (NA < = 10); b) leia em seguida, os elementos do conjunto A; ) leia NB, número de elementos do conjunto B (NB <= 10); d) leia em seguida, os elementos do conjunto B; 6) crie e imprima o conjunto C ordenado de tamanho 20, a partir dos conjuntos originais A e B. Observações: 1. Considerar os elementos de A e B como inteiros; 2. Os elementos de A e B já são lidos ordenados. 21. DESAFIO: Fazer um programa que: a) leia o valor deM (M<=4) e os M valores inteiros de um vetor A; b) leia o valor de N (N <=4) e os N valores inteiros de um vetor B; €) determine o conjunto C=A UB (união de A com B), onde C não deverá conter elementos repetidos (A e B não contém elementos repetidos); d) mostre os elementos contidos em C. — http Avwmy.gomeshp.com 10 APOSTILA DE PASCAL II Gilene Borges Gomes. 2. Estrutura de dados homogênea multidimensional ( Matriz ) Verificou-se a utilidade do modelo de vetor na solução de diversos problemas, os quais envolviam estrutura de dados homogênea unidimensional (o vetor). No entanto, podemos encontrar diversos problemas que envolvem na sua solução estrutura de dados homogênea multidimensional (a matriz), particularmente de duas e três dimensões, bidimensional e tridimensional, respectivamente. A mais comum é a matriz bidimensional por se relacionar diretamente com a utilização de tabelas. Matrizes com mais de duas dimensões são utilizadas com menos frequência, mas poderão ocorrer momentos em que se necessite trabalhar com um número maior de dimensões, porém estas serão fáceis de ser utilizadas se houver domínio na utilização de uma matriz bidimensional A matriz é representada por seu nome, tamanhos (dimensões) entre colchetes e seu tipo: lista-de-identificadores : array [ir «sy, liz.. |s2, lin. [sn] Of tipo; onde: lir e Isz são os limites inferior e superior das linhas da matriz; lp e Is, são os limites inferior e superior das colunas da matriz; ly € Isy são os limites inferior e superior das quantidades de matrizes; tipo é o tipo dos componentes da matriz Por exemplo MaT : array [1..3,1..4]of real; 1 2 3 4 1 x 2 3 Para referenciar um elemento da matriz são necessários tantos índices quantas são as dimensões da matriz. Numa matriz bidimensional (duas dimensões) o primeiro índice indica a linha e o segundo, a coluna. No exemplo anterior, MAT [ 1, 3 ] se refere ao elemento da linha número 1 (primeira linha, no caso) e coluna número 3 (terceira coluna, no caso) (*) O número de dimensões da matriz será igual ao número de vírgulas () da declaração mais 1. O número de elementos é igual ao produto do número de elementos de cada dimensão, isto é: (Is/ — li + 1) * (152 — li> + 1) * 0. * (Is, — lin + 1) Um importante aspecto a ser considerado é que na manipulação de um vetor é utilizada uma única estrutura de looping. No caso de matrizes, deverá ser utilizado o número de loopings relativo ao tamanho de sua dimensão. Desta forma, uma matriz de duas dimensões deverá ser controlada com dois loopings, sendo que de três dimensões deverá ser controlada por três loopings e assim por diante. Observe o exemplo a seguir: — http Avwmy.gomeshp.com “ APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa para ler vinte números inteiros que devem ser armazenados em uma matriz de 4 x 5. Mostre o maior elemento. Program listata; uses rt; var Ma, L, C : integer; M: array [1..4, 1..5] of integer; (matriz bidimensional) begin clrser; na ; write (' Digite os valores da matriz (4 x 5) '); for L:=1 to 4 do ( início do primeiro loop ) for C:=1 to 5 do ( início do segundo loop ) begin readln (M[L,C]); (tal if MIL,C] > Ma then Ma := M[L,C]; end; writeln ('Maior valor: ", Ma); readkey; end. Observe no exemplo acima a), que o nome da matriz é um só, o que muda são as informações indicadas dentro dos colchetes. Estas informações são chamadas de índices, sendo este o endereço onde o elemento está armazenado Assim como pode-se copiar todos os elementos de um vetor para outro sem usar seus índices, é possível copiar todos os elementos de uma matriz para outra de mesmo tamanho e tipo sem fazer referência a seus índices Para a definição: var xy:array[1.3,1.4] of integer; é possível o comando: ou seja, todos os elementos armazenados na matriz y serão copiados para a matriz x. Ainda é possível copiar somente os elementos da 1" linha da matriz com o comando abaixo, note que não há referência ao indice da coluna: x [1] y [1]; Ou ainda copiar a 1" linha da matriz y para a 2 linha da matriz x. x [2] :=y [1]; — http Avwmy.gomeshp.com 12 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa para ler doze números reais que devem ser armazenados em uma matriz de 3 x 4. Mostre a soma dos elementos da 13 coluna Program lista?b; uses rt; var L, C: integer; Soma real; M: array [1..3, 1..4] of real; begin clrser; write (' Digite os valores da matriz (3 x 4) '); for 1 to 3 do 1 to 4 do readln (M[L,C]); for L:=1 to 3 do Soma := Soma + M[L,1]); (tal writeln ('Soma dos elementos da 1º coluna: !, Soma:4:2); readkey; end. Observe no exemplo acima (a), que a referência ao elemento ML, 1] é realizada porque são os elementos da coluna 1; então utiliza-se o comando for somente para a linha. 2.4. Matrizes Tridimensionais Para matrizes com três dimensões, repete-se a estrutura bidimensional tantas vezes quantos são os elementos da terceira dimensão, numerando-as de acordo com os limites especificados na declaração do tipo. Por exemplo MaT1 : array [1..3,1..4,1..2]0f real; O x assinalado na figura a seguir corresponde ao elemento: MAT1 [2, 3, 1] 1 2 3 4 1 2 3 4 1 1 2 x 2 3 3 1 2 MATI — http Avwmy.gomeshp.com 13 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer a declaração de 4 matrizes do tipo inteira de 3 linhas e 2 colunas. T modo: MAT : array [ 1..3, 1..2, 1..4 ] of integer; 2 modo: MATI : array [ 1..3, 1..2 ] of integer; MAT2 : array [ 1..3, 1..2 ] of integer; MAT3 : array [ 1..3, 1..2 ] of integer; MATA : array [ 1..3, 1..2 ] of integer; Exemplo: Preencher o elemento da coluna 2, linha 1 da 4º matriz com o valor 100. T modo: MAT [ 1, 2, 4 ] := 100; 2 modo: MATA [1,2] 100; Exemplo: Preencher toda a 3' linha da 2º matriz com o valor 0. T modo: for to 2? do MAT [3, c 2] :=0; 2 modo: for to 2 3,0] Exemplo: Preencher todas as 2” colunas das 4 matrizes com o valor 10. T modo: for li :=1 to 3 do (li linha ) for ma :=1 to 4 do ( ma = matriz ) MAT [ li, 2, ma ] := 10; 2 modo: for 1 to 3 do begin MAT1 [ 11, 2 ] := 10; MAT2 [ 11,2] 10; MAT3 [ 11, 2] 10; MAT4 [ 11, 2 ] := 10; end; — titp:/Avuw gomeshp.com 4 APOSTILA DE PASCAL II Gilene Borges Gomes. os 06 ! E 41 46 51 os B(xm) 06 - Digite o valor de m (1-3): 3 4 6 OS Digite o valor den (1-4): 1 5 2 15 A(mxn) C(mxm) 16 9 4 31 [56 [6 18 8 6 30 [62 | 6 20 0 7 7 35 [| 44 A[LI]*B[11] +A[1,2]*B[2,1] 94 3 4 4 41 = 31 20. DESAFIO; Criar um programa que simule o jogo Batalha Naval. O programa deve: a) ler as coordenadas onde o 1" jogador vai inserir 10 navios no mapa, que possui 10 linhas por 5 colunas; b) ler as coordenadas onde o 2” jogador vai atirar dez bombas; c) escrever o nome e o total de pontos obtidos por cada jogador, onde cada navio afundado por uma bomba equivale a 100 pontos para o 2 jogador e cada navio não afundado equivale a 70 pontos para o 1' jogador; d) apresentar o caracter * (asterisco) na posição do tabuleiro onde o navio foi afundado; o caracter . (ponto) para cada tiro que não acertar nenhum navio; e ao final mostrar com o caracter V a posição dos navios não afundados. 21. DESAFIO; Fazer um programa para: a) Ler uma matriz A, de dimensão 3x3. Cada coluna da matriz é fomecida como entrada. b) Mostrar o valor da determinante desta matriz — http Avwmy.gomeshp.com 19 APOSTILA DE PASCAL II Gilene Borges Gomes. 3. Estrutura de dados heterogênea ( Registro ) Já foi demostrado que vetores e matrizes são utilizados para armazenamento de dados do mesmo tipo, e quando há a necessidade de armazenar dados de tipos diferentes, utilizamos registros Para que se possa definir o nome do professor, seu salário e seus possíveis três telefones numa mesma estrutura, deve-se usar o registro, ou seja, uma estrutura heterogênea, onde cada variável simples ( inteiro, real, lógico ou caracter ) ou composta ( vetor ou matriz ) são chamadas de campo. Sintaxe para definir um registro: type identificador = record nome campo : tipo campo; end; var variavel : identificador; Sempre que for referenciar os campos de um registro, deve-se seguir a sintaxe abaixo: variavel.nome, campo Exemplo (criação): Criar uma estrutura que contenha o nome do professor, seu endereço residencial completo e seus três telefones type END COMP = record rua, num, bairro, cidade, uf, cep : string; end; REG PROF = record - nome : string; ender : END COMP; fone : array [ 1.. 3 ] of string; end; var PROF : REG PROF; E o nome rua num bairro cidade ur cep fone fone fone 1 2 3 — http Avwmy.gomeshp.com 20 APOSTILA DE PASCAL II Gilene Borges Gomes. A criação do tipo END COMP, poderia ser utilizado na definição de um endereço para os alunos no caso de um sistema escolar, economizando assim, repetição nas duas estruturas Exemplo (atribuição): Atribuir os dados abaixo à estrutura definida anteriormente. Professora: MARIA JOSÉ DA SILVA. Endereço: SSN 89, Bloco K, Loja 07, Setor Sul - Brasilia — DF, 72.000-000. Telefones: 273.9846 / 243.0891 / 9941.2304, respectivamente. PROF.nome := 'MARIA JOSÉ DA SILVA" ; PROF. ender. rua *SSN 89, Bloco K'; PROF. ender. num “Loja 07"; PROF. ender.bairro *setor sul”; PROF. ender. cidade *Brasilia”; PROF. ender.uf := “DF!; PROF. ender. cep *72.000-000" ; PROF. fone[1] := "273.9846'; PROF. fone [2 *243.0891"; PROF. fone[3] := "9941.2304"; 1 1 1 Pode-se definir uma quantidade fixa de registros, sendo utilizado um vetor de registros, que tem a seguinte sintaxe: type nome registro = record nome campo : tipo campo; end; var nome vetor : array [ 1.. 100 ] of nome registro; Note que o vetor, por definição, somente armazena elementos do mesmo tipo, e o registro pode definir elementos (campos) de tipos diferentes. Sempre que for referenciar os campos de um vetor de registros, deve-se seguir a sintaxe abaixo: nome vetor [ indice ].nome campo — http Avwmy.gomeshp.com 2 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo (criação): Criar um registro com o nome do professor e seus dois principais telefones, para cada um dos 45 professores do curso de computação. type FR PROF = record nome : string; fone : array [1.. 2] of string; end; var PROF: array [1.. 45] of R PROF; nome nome nome fone fone fone fone a fone fone 1 2 1 2 1 2 1 2 45 Exemplo (atribuição): Atribuir os dados, abaixo relacionados, de dois professores aos dois últimos registros. Nome: Maria da Silva Fones: 456.2190 / 9832.0216 PROF [44] .nome : PROF [44] .fone[1] PROF [44] .fone[2] “Maria da Silva”; *456.2190" ; *9832.0216"; Nome: José da Silva Fones: 223.6933 / 9983.9019 PROF [45] .nome € “José da Silva"; PROF [45] .fone[1] PROF [45] . fone[2] *223.6933' ; *9983.9019"; nome Maria da Silva José da Silva fone | fone 456.2190 [9832.0216] 223.6933 | 9983.9019 1 44 45 —— http:/hvenugomeshp.com 22 APOSTILA DE PASCAL II Gilene Borges Gomes. 3.4. Comando with .. do O comando with possibilita acessar os campos de um registro de maneira mais curta, ou seja, não referenciando o nome do registro. Com o comando with, os campos de um ou mais registro podem ser acessados somente pelo nome do campo sem referência ao nome do registro. Se houver mais de um comando dentro do comando with, são necessários os comandos begin / end para delimitá-los, como apresentado no exemplo abaixo. Program JlistaJa; uses crt; type registro = record nome, ender : string; end; var x: integer; reg : array [ 1..10 ] of registro; begin clrser; Exemplo do programa normal for x :=1 to 10 do begin write ( 'Digite o nome: “ ); readln ( reg [ x ].nome ); write ( 'Digite o endereço: * ); readln ( reg [ x ].ende ); end; Exemplo do programa com with for x :=1 to 10 do begin with reg [x] do begin write ( 'Digite o nome: “ ); readln ( nome ); write ( 'Digite o endereço: - readin ( ende ); end; end; readkey; end. — http Avwmy.gomeshp.com 23 APOSTILA DE PASCAL II Gilene Borges Gomes. 3.B. Exercícios ( Registro) 1. Declarar o registro cuja representação gráfica é dada a seguir: Ficha NOME € caracter SALÁRIO € numérico CPF € 1 inúmeros e 3 caracteres IDADE | SEXO " " mumérico caracter 2. Utilizando o registro criado no exercício anterior, atribuir os valores apresentados abaixo aos campos correspondentes: Ficha JOSÉ DA SILVA 850,00 531.987.001-41 32 M 3. Declarar o registro cuja representação gráfica é dada a seguir, definir os campos com os tipos básicos necessários: Cadastro NOME ENDEREÇO SALÁRIO IDENTIDADE CPF ESTADO CIVIL TELEFONE IDADE SEXO O ENDEREÇO é composto de: RUA BAIRRO CIDADE ESTADO CEP — http Avwmy.gomeshp.com APOSTILA DE PASCAL II Gilene Borges Gomes. 5. Subrotina: Procedure ( Procedimento ) Subrotina é o nome dado a um trecho menor do programa que é utilizado quando o programa se torna muito complexo, necessitando assim, de uma divisão para facilitar sua compreensão e sua manutenção. As sub-rotinas são: Procedure (procedimento) e Function (função). E é, na verdade, um bloco de programa, contendo início e fim (begin / end), identificado por um nome, através do qual será referenciado em qualquer parte do programa principal ou da subrotina chamadora. Ou seja, pode-se chamar uma subrotina de dentro de uma subrotina As declarações dos procedimentos ou funções são feitas logo após as declarações de variáveis globais do programa, antes do programa principal. Uma procedure pode ou não retornar valores após seu processamento Um procedimento é assim definido por completo: procedure nome ( lista-de-paráâmetros ); ( variáveis locais |) begin comandos; end; nome é o nome simbólico pelo qual o procedimento é invocado; variáveis locais consistem nas definições das variáveis locais ao procedimento. Sua forma é análoga à da definição de variáveis, e segue as mesmas regras estabelecidas; comandos é o conjunto de instruções do corpo do procedimento, que é executado toda vez que o mesmo é invocado lista-de-parâmetros são os parâmetros formais do procedimento, declarados se forem necessários A comunicação entre o programa principal e o procedimento ocorre através de uma chamada, descrita a seguir: Chamada de um procedimento: nome-do-procedimento ( lista-de-parâmetros ) ; — http Avwmy.gomeshp.com 29 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa para ler um número inteiro e chamar um procedimento que mostra se o número lido é positivo, negativo ou zero. Program Lista05a; uses crt; var num : integer; ( Declaração de variáveis globais | Procedure ENZ ( x: integer ); ( Procedimento ) begin if x=0 then vwriteln ( ' Zero ') elseif x<0 then writeln ( ' Negativo ') else writeln ( ' Positivo ! ); end; begin ( Programa principal ) clrscr; write ( ' Digite um número inteiro: ' ); readln ( num ); ENZ ( num ); ( Chamada ao procedimento ) readkey; end. OBSERVAÇÕE: Os parâmetros (formais e reais) devem ser do mesmo tipo. 2. O procedimento deve ser chamado com a quantidade e o tipo de parâmetros definidos em seu cabeçalho. A variável x é um parâmetro formal e também uma variável local 4. Todos os procedimentos devem ser declarados antes do programa principal vo — http Avwmy.gomeshp.com 30 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa para ler dois números reais e chamar um procedimento que mostra a soma dos números lidos. Program Lista05b; uses crt; var a, b: real; [ Declaração de variáveis globais ) Procedure Soma (x,y: real); ( Procedimento ) begin writeln ( ' Soma =", (x+y ):31); end; begin ( Programa principal ) elrser; write ( ' Digite dois números: ' ); readln (a, Db); Soma (a, b); [ Chamada ao procedimento |) readkey; end. 5.4. Exercícios ( procedimento ) 1. Fazer um programa para ler um número e chamar um procedimento que mostra se o número lido é par ou impar. 2. Criar um programa para ler um número e chamar um procedimento que mostra sua tabuada de soma. Garantir que o número é válido. 3. Fazer um programa para ler um número (N) e chamar um procedimento que mostra o somatório de 1 até N. Garantir que o número seja positivo. 4. Escrever um programa que, utilizando de procedimentos, leia um valor e mostre: a) seu fatorial; b) seu quadrado; Garanta que o número lido seja positivo. 5. Elaborar um programa que, utilizando de procedimentos, leia um valor e mostre: a) se é divisível por 3 ou não; b) seu cubo; Garanta que o número lido seja positivo, maior que zero 6. Escrever um programa para ler um número (N) e chamar um procedimento que mostra a série de Fibonacci dos N termos. A série de Fibonacci é formada pela sequência: 1, 1, 2,3,5,8, — http Avwmy.gomeshp.com 3 APOSTILA DE PASCAL II Gilene Borges Gomes. 6. Subrotina: Function ( Função ) Uma function deverá retomar pelo menos um valor após seu processamento A função é assim definida por completo function nome ( lista-de-parâmetros ) : tipo; ( variáveis locais ) begin comandos ; nome := valor; end; nome é o nome simbólico pelo qual a função é invocada; tipo é o tipo de dado retomado pela função; variáveis locais consistem nas definições das variáveis locais a função. Sua forma é análoga à da definição de variáveis; e segue as mesmas regras definidas; nome := valor é usado para retornar o valor calculado pela função valor deve ser do mesmo tipo de tipo. lista-de-parâmetros são os parâmetros formais da função, declarados se forem necessários; A comunicação entre o programa principal e a function ocorre através de uma chamada, descrita a seguir: Chamada de uma função: variável := nome-da-função ( lista-de-parâmetros ) ; ou writeln ( nome-da-função ( lista-de-parâmetros ) ) ; — http Avwmy.gomeshp.com 32 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa para ler um número inteiro e chamar uma função que retoma uma mensagem, dizendo se o número lido é: Par, Ímpar ou Zero. Mostrar o retorno da função Program Lista06a; uses crt; var num : integer; ( Declaração de variáveis globais |) Function PIZ ( x: integer) : string; ( Função | begin if x=0 then PIZ:=' Zero ( Retorno da função ) elseif x mod 2=0 then PIZ ( Retorno da função |) else PIZ ( Retorno da função |) end; begin ( Programa principal ) clrscr; write (' Digite um número inteiro: '); readln ( num ); writeln (* Número é: *, PIZ ( num ) ); ( Chamada a função |) readkey; end. OBSERVAÇÕES: 1. Os parâmetros (formais e reais) devem ser do mesmo tipo. 2. A função deve ser chamada com a quantidade e o tipo de parâmetros definidos em seu cabeçalho. 3. A variável x é um parâmetro formal e também uma variável local 4. Todas as funções devem ser declaradas antes do programa principal 5. O retomo da função e seus parâmetros formais podem ser de tipos diferentes. — http Avwmy.gomeshp.com 33 APOSTILA DE PASCAL II Gilene Borges Gomes. Exemplo: Fazer um programa que leia dois números inteiros e chame uma função para retorna a divisão do primeiro número pelo segundo número. Mostrar o resultado no programa principal Program Lista06b; uses crt; var divisor, dividendo : integer; result : real; Function Divisao ( dd, ds : integer ) : real; var res : real; begin res := dd / ds; Divisao := res; ( Retorno da função |) end; begin ( Programa principal ) clrscr; write (' Digite o dividendo: '); readln ( dividendo ); write (' Digite o divisor: '); readln ( divisor ); result Divisao ( dividendo, divisor ); ( Chamada a função |) writeln ( dividendo, ' / *, divisor, "= *, result:2:2); readkey; end. OBSERVAÇÕE: 1. A variável que recebe o retorno da função (result) e o tipo da função devem ser do 2 mesmo tipo. Compare a chamada da função deste exemplo com a do exemplo anterior. São as duas formas de chamada a uma função. — http Avwmy.gomeshp.com 3 APOSTILA DE PASCAL II Gilene Borges Gomes. Program LTPI 0503; Uses crt; var pesol, pes integer; Function var P: real; Begin do End; Procedure Begin For c ll to do s +. End; Procedure Med Ponderada Var medpond : real; Begin medpond :— o + End; Begin write ( ' Digite um número: ') readin (a ); write ( ' Digite outro número: ' ); readln (Db ); write ( ' Digite o lo. peso: ' ); readin ( pesol ); write ( ' Digite o 20. peso: ' ); readin ( peso? ); End. http rw. gomeshp.com 39 APOSTILA DE PASCAL II Gilene Borges Gomes. Faça a chamada as subrotinas de forma que a tela apresente os resultados como apresentados abaixo: Exemplo de entrada de dados: 2, 6, 4, 3 Exemplo de entrada de dados: 2,5, 3,1 Soma dos pares entre 2 e 6= 12 Soma dos pares entre 2 e 5= 6 2 elevado a 6 = 64 2 elevado a 5= 32 6 elevado a 2 = 36 5 elevado a 2 = 25 Média ponderada = 3.71 Média ponderada = 2.75 3. Fazer um programa para ler dois números e chamar um procedimento que retorna a soma, à divisão, o produto e a subtração entre números. O programa principal deve mostrar os valores retomados. 4. Desenvolver um programa para ler um número e chamar um procedimento que retoma: o cubo do número; o fatorial do número e uma mensagem (Par, Ímpar ou Zero). O programa principal deve mostrar os valores retomados. 5. Elaborar um programa para ler os coeficientes dos valores de uma equação do segundo grau e chamar um procedimento que retoma o valor de delta. Se o delta for positivo, chamar outro procedimento que retorna as raizes da equação (x” e x”), senão mostrar uma mensagem. Mostre todos os valores retornados no programa principal. 6. Escrever um programa que leia as medidas das arestas a, b, c de um paralelepípedo, calcule e escreva o valor de sua diagonal. Crie uma função para calcular e retornar o resultado do cálculo, desta forma, esta função deverá ser chamada duas vezes, sendo que os parâmetros reais são diferentes. o] ND L=(a +?) E DF) 5 — http Avwmy.gomeshp.com 40 APOSTILA DE PASCAL II Gilene Borges Gomes. 7. Desenvolver uma calculadora que apresente um menu de seleções no programa principal Este menu fornecerá ao usuário à possibilidade de escolher uma entre quatro operações aritméticas. 5, Depois de selecionada a opção do menu, deve ser solicitada a entrada de dois números. De acordo com a opção selecionada deve [7 Uxigax| u- v ser chamada a subrrotina apropriada, passando os valores lidos | ju] [7] [5] 7a] como parâmetros. Cada uma das quatro sub-rotinas deve receber os dois valores como parâmetros, executar o cálculo apropriado com | [88] [SIDE E[ 15 variáveis locais e mostrar o valor resultante. E depois retomar o controle ao programa principal. O programa principal deve ser executado até que o usuário selecione a opção do menu que é à saída do programa. 8. Elaborar um programa para: à) ler quatro notas; b) mostrar a média das duas primeiras notas e depois das duas últimas; o) utilizar um procedimento para leitura das notas, tendo à nota como parâmetro por referência e garanta que a nota é válida; d) utilizar uma função para calcular a média, recebendo duas notas como parâmetro por valor. 9. Fazer um programa para: à) ler dois vetores A e B com 10 elementos cada, através de um único procedimento com passagem de parâmetros por referência, ler um de cada vez; b) chamar um procedimento que cria um vetor C, que é a junção dos dois outros vetores, passados como parâmetros. Desta forma, C deverá ter o dobro de elementos de A e B; €) chamar outro procedimento que mostra os dados do vetor C. 10. Elaborar um programa para: à) ler dois vetores A e B com 8 elementos cada, através de um único procedimento com passagem de parâmetro por referência, ler um de cada vez; b) chamar um procedimento que ordena os vetores lidos, um de cada vez; 6) chamar um procedimento para construir um vetor C, onde cada elemento de C é a soma do elemento correspondente de A com B; d) chamar um procedimento que mostra os valores do vetor passado como parâmetro na linha, também passada como parâmetro; o procedimento será executado três vezes — http Avwmy.gomeshp.com M APOSTILA DE PASCAL II Gilene Borges Gomes. 11. DESAFIO; Para evitar erros de digitação de sequências de números de importância fundamental, como a matrícula de um aluno, o número de conta bancária, geralmente se adiciona ao número um digito verificador. Por exemplo, o número de matrícula 811057 é usado como 8110573, onde 3 é o dígito verificador, calculado da seguinte maneira: à) cada algarismo do número é multiplicado por um peso começando de 2 e crescendo de 1, da direita para a esquerda: 8x7,1x6,1x5,0x4,5x3,7x2 b) somam-se as parcelas obtidas: 56+645+0+15+14=96; o) calcula-se o resto da divisão desta soma por 11: 96 dividido por 11 dá resto 8 d) subtrai-se de 11 o resto obtido: nN-8=3 e se o valor encontrado for 10 ou 11, o digito verificador será O; nos outros casos, o digito verificador é o próprio valor encontrado. Construir uma função que receba como parâmetro de entrada um número e devolva um dígito verificador conforme o processo de cálculo descrito acima Escrever um programa capaz de: a) ler um conjunto indeterminado de linhas contendo, cada uma, o nome de uma pessoa e seu número de CPF; b) imprimir, para cada pessoa, os seus dados de entrada mais a mensagem “VÁLIDO”, ou “INVÁLIDO”, conforme a situação do número do CPF; Utilize a função acima para calcular os dígitos verificadores. Obs.: Um número de CPF é validado através de seus dois últimos dígitos (digitos verificadores, denominados controle). Por exemplo, o CPF de número 23086025620 é validado pelos dígitos verificadores 20. O esquema de verificação é o seguinte: função 230860256 —> >» digito verificador igual a 2 função 2308602562 —>>>—>» digito verificador igual a O — http Avwmy.gomeshp.com 42 APOSTILA DE PASCAL II Gilene Borges Gomes. 8. Units ( Bibliotecas ) Units ou Unidades são a base da programação modular em Pascal. As units são usadas para criar bibliotecas e para dividir grandes programas em módulos logicamente relacionados. Uma unidade é uma coleção de declarações de constantes, tipos, variáveis, funções e procedimentos, compilada separadamente. Algumas destas declarações são de uso interno da unidade, enquanto outras são visíveis, isto é, podem ser usadas por programas ou outras unidades. Uma unidade é dividida em três partes: a interface, a implementação e os comandos de execução inicial Sintaxe: unit nome da unit; interface uses ( Cláusula Uses ) const ( Constantes ) type 1( Tipos ) var ( Variáveis ) procedure 1 Procedimentos ) function ( Funções ) implementation uses ( Cláusula Uses ) const ( Constantes ) type 1( Tipos ) var ( Variáveis ) procedure 1 Procedimentos ) function ( Funções ) begin ( Inicialização ) comandos ; end. Cabeçalho da Unit - especifica o nome da unit, o qual é usado quando se refere a unit dentro da cláusula uses do programa principal Seção Interface - declara constantes, tipos, variáveis, procedimentos e funções que são públicas (disponíveis para os usuários da unit). Procedimentos e funções são listadas somente como cabeçalhos nesta seção. O corpo dos procedimentos e funções estão na seção implementation. A cláusula uses, colocada na interface, permite que uma unidade faça uso de outras unidades, em qualquer uma de suas partes. Seção Implementation — Todas as declarações da seção Interface são visíveis nesta seção. Ela define o corpo de todos os procedimentos e funções públicas. Esta seção pode ter constantes, tipos, variáveis, procedimentos e funções adicionais que não são visíveis para nenhum programa que use à unit. A cláusula uses, colocada na implementation, permite este uso apenas na implementação e nos comandos de execução inicial — http Avwmy.gomeshp.com 43 APOSTILA DE PASCAL II Gilene Borges Gomes. Seção Initialization - é a última seção da unit. Ela consiste: - da palavra reservada end ( sem código de inicialização ), ou -— parte de programa a ser executado quando a unit é inicializada. Observações gerais: * A unit deve ser gravada com o nome da unit e extensão .PAS. Ao ser compilada será gerado o arquivo -TPU com o mesmo nome da ut, o qual é utilizado pelo programa principal quando for executado * Coloque a unidade dentro do diretório onde está o executável do Turbo Pascal, juntamente com o seu programa principal. Se desejar outro diretório, este deve ser especificado na configuração de ambiente: Menu Options, opção Directories e preencha o nome do diretório na caixa de diálogo de Unit Directories. Na seção interface, as funções e os procedimentos aparecem apenas com seu cabeçalho. Na seção implementation, estas funções e procedimentos devem aparecer completas (cabeçalho e corpo) * Os comandos de execução inicial são ativados antes do primeiro comando do programa que usar a unit * Para usar uma ou mais unit, um programa deve começar com a cláusula uses Exemplo: Program Principal: Unit Unidade: Uses Crt, Unidade: Var x: integer: Interface Function semana (a : integer ): string; Begin Clrser; Implementation Write (' Digite um número: '): Function semana (a : integer ): string; Readin (x): Begin Writeln: Case a of Writeln (' Dia da semana: *, semana (x ) ): 1: semana := * Domingo Readkey: 2: semana := * Segunda”; End. 3: semana 4: semana 5: semana 6: semana 7: semana else semana End: End: End — http Avwmy.gomeshp.com 44
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved