47608-Apostila-Pascal
Texto
(2) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 1. Estrutura de dados homogênea unidimensional ( Vetor ). 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 índice, sendo este o endereço onde o elemento está armazenado.. 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 a denominação de estrutura de dados homogênea unidimensional.. 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}.. 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.. 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.. 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 torna 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.. Program Lista1a; uses crt; var q, c, sm : integer; md : real; V : array [ 1..10 ] of integer; begin clrscr; sm := 0; writeln (‘Digite dez números: ‘);. O vetor é representado por seu nome, tamanho (dimensão) entre colchetes e seu tipo: lista-de-identificadores. :. array [ li .. ls ] of. for c := 1 to 10 do { b } begin write (‘Digite o ‘, c, ‘o. valor: ‘); readln ( V[c] ); { a } end;. tipo;. onde: li é o limite inferior; ls é o limite superior; li e ls só podem ser valores ordinais; tipo é um dos tipos básicos já conhecidos.. { Note que não é necessário begin end } for c := 1 to 10 do sm := sm + V[c];. 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.. md := sm / 10; writeln ('A média dos números: ', md);. Exemplos:. for. VET : array [ 1 .. 10 ] of real; VET : array [ 1 .. 50 ] of string; 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://www.gomeshp.com ______________________________________________________________________________. 3. c := 1 to 10 do if V[c] > md then inc (q);. writeln ( q, ' números acima da média. '); readkey; end.. ____ http://www.gomeshp.com ______________________________________________________________________________. 4.
(3) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. Exemplo: Fazer um programa para ler oito números inteiros e mostrar quantos números são maiores que o último número informado pelo usuário.. 1.A. Exercícios ( Vetor ) 1. Dado o valor dos elementos do vetor e das variáveis (x := 3 / y := 5); identifique o resultado das operações aritméticas abaixo:. Program Lista1b; uses crt; var ind, qtd : integer; Vet : array [ 1..8 ] of integer;. VET. begin clrscr; qtd := 0;. 100. 90. 80. 10. 20. 50. 2. 3. 4. 5. 6. 7. 8. b) VET [ x ] = _______ c) VET [ x + y ] = _______ d) VET [ y – 2 ] = _______ e) VET [ x ] + 10 = _______ f) VET [ x + y ] + y = _______ g) VET [ VET [ y + 1 ] ] = _______. ind := 1 to 7 do if Vet [ ind ] > Vet [ 8 ] then qtd Å qtd + 1;. h) VET [ VET [ 4 ] – 1 ] = _______. writeln ( qtd, ‘ números são maiores que ‘, Vet [ 8 ] ); readkey;. 2. Quais serão os valores apresentados na tela, pela execução do programa abaixo:. end. Existe uma exceção à regra de que é sempre necessário o uso de índices para referenciar cada elemento de um vetor, quando se deseja fazer a cópia de todos os elementos de um vetor para outro, mas ambos devem ser do mesmo tipo e tamanho. Para a definição:. 70. 1. a) VET [ 4 ] = _______. for ind := 1 to 8 do begin write (‘Digite o ‘, ind, ‘o. valor: ’); readln ( Vet [ind] ); end; for. 60. var. a, b : array [ 1..10 ] of integer;. é possível o comando: b := a; ou seja, todos os elementos armazenados no vetor a serão copiados para o vetor b.. Se não forem do mesmo tipo e tamanho, deve-se utilizar o comando for para acessar cada elemento do vetor com seu índice.. ____ http://www.gomeshp.com ______________________________________________________________________________. 5. Program Ex02; uses crt; var a : integer; x : real; Vet : array [ begin Vet[1] := 2; Vet[2] := 4; Vet[3] := 1; Vet[4] := 5; Vet[5] := 3; x := Vet[1] + writeln (x); x := Vet[2] writeln (x); x := Vet[4] * writeln (x); a := 3; x := Vet[a]; writeln (x); x := Vet[a] / writeln (x); end.. 1..5 ] of real;. Vet[5]; Vet[5]; Vet[1] - x;. Vet[Vet[a]];. ____ http://www.gomeshp.com ______________________________________________________________________________. 6.
(4) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 3. Como estará o vetor ao final da execução do programa com o vetor inicializado como abaixo: 60. 70. 100. 90. 80. 10. 20. 50. 40. 30. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. Fazer um programa para ler as notas de dez alunos de uma turma (que devem ser armazenadas em um vetor), calcular e mostrar a média das notas e o número de alunos que tiraram nota abaixo da média. Exemplo:. Program Ex03; var x, y, aux : integer; ORG : array [ 1..10 ] of integer;. Digite dez notas 10.0 4.5 3.0 1. begin for x := 1 to 2 do begin aux := ORG[x]; ORG[x] := ORG[x+5]; ORG[x+5] := aux; end; y := 7; for x := 10 downto 8 do begin aux := ORG[x]; ORG[x] := ORG[x-y]; ORG[x-y] := aux; y := y – 2; end; end.. 3. 7.5. 9.0. 6.5. 7.5. 9.5. 5.0. 6.0. 4. 5. 6. 7. 8. 9. 10. Média da turma: 6.85 5 alunos tiraram nota abaixo da média. 13. Construir um programa para ler dois vetores (A e B) de dez elementos cada e criar um 3o. vetor acumulando a soma dos elementos desses dois vetores, sempre utilizando o mesmo índice. Mostrar os valores do 3o. vetor somente. Exemplo: C[ 1 ] Å A[ 1 ] + B[ 1 ]. Ler um vetor de cada vez e mostrar o vetor C resultante. A B C. 4. Fazer um programa para ler dez números e depois mostra-los em ordem inversa. 5. Criar um programa para ler um vetor de dez números reais; e mostrar os números contidos nos índices pares. 6. Construir um programa para ler um vetor de oito números inteiros; e mostrar os números ímpares. 7. Elaborar um programa para ler um vetor de cinco elementos inteiros e verificar se existem elementos iguais a 30. Se existir, escrever as posições em que estão armazenados. 8. Fazer um programa para ler um vetor de vinte números inteiros positivos e um número qualquer. Mostrar quantas vezes o número lido por último aparece no vetor. 9. Escrever um programa para ler um vetor de seis números inteiros; e mostrar a quantidade de números ímpares. 10. Criar um programa para ler um vetor de dez números reais; e mostrar o menor número. 11. Construir um programa para ler um vetor de oito números. Calcular e mostrar a quantidade de elementos iguais a 100; e a quantidade de elementos menores que 50.. ____ http://www.gomeshp.com ______________________________________________________________________________. 2. 7. 1 4 5. 3 5 8. 4 3 7. 5 2 7. 6 1 7. 7 7 14. 4 8 12. 98 9 107. 0 9 9. 7 7 14. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 14. Escrever um programa para: a) ler todo o conjunto A de seis elementos inteiros nos locais indicados; b) construir um outro conjunto B formado da seguinte maneira: • os elementos de índice par têm o valor de A somado com 20; • os elementos de índice ímpar têm o valor de A multiplicado por 3; c) mostrar os valores dos vetores A e B formatados para ocupar cinco espaços. Exemplo: A B. 10. 20. 50. 35. 7. 5. 1. 2. 3. 4. 5. 6. 30. 40. 150. 55. 21. 15. 1. 2. 3. 4. 5. 6. 15. Criar um programa para: a) ler dez números inteiros que devem ser armazenados em um vetor; b) verificar se existem elementos iguais a 40. Se existirem, escrever os índices de suas posições; c) informar quantos elementos iguais a 10 existem; d) informar qual é o elemento de maior valor e o seu índice.. ____ http://www.gomeshp.com ______________________________________________________________________________. 8.
(5) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 16. Construir um programa para ler dois vetores (X e Y) de sete elementos inteiros cada e criar um 3o. vetor acumulando a multiplicação dos elementos desses dois vetores, sempre utilizando o mesmo índice. Mostrar os valores do 3o. vetor somente. Exemplo: Z[ 1 ] Å X[ 1 ] * Y[ 1 ]. Ler um vetor de cada vez e mostrar o vetor Z resultante. X Y Z. 1 2 2. 4 3 12. 6 1 6. 11 7 77. 9 9 81. 0 87 0. 6 5 30. 8 4 32. 91 2 182. 3 10 30. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Exemplo:. D. 10.50. 20.00. 50.00. 3.70. 5.00. 1. 2. 3. 4. 5. 110.50. 100.00. 250.00. 103.70. 25.00. 1. 2. 3. 4. 5. A. 1. 3. 6. B. 2. 4. 5. 2. 3. 7. e. 17. Escrever um programa para: a) ler todo 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.. C. 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:. construímos a tabela C 1. 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; c) leia NB, número de elementos do conjunto B (NB < = 10); d) leia em seguida, os elementos do conjunto B; e) 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.. 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.. 21. DESAFIO: Fazer um programa que: a) leia o valor de M (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; c) determine o conjunto C = A ∪ B (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.. 19. DESAFIO: Fazer um programa para: a) ler 40 elementos inteiros; os 20 primeiros devem ser armazenados no vetor VET1 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 VET1 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; 02 05 06 07 08 : 23 24. 10 VET1. 30 VET2. 50 VET3. 60 VET3. 10 13 04 80 : 03 34. 45 25 01 23 : 09 02. 10 45 13 25 : : :. : : : : : 34 02. ____ http://www.gomeshp.com ______________________________________________________________________________. 9. ____ http://www.gomeshp.com ______________________________________________________________________________. 10.
(6) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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.. 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 freqüê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.. Program lista2a; uses crt; var Ma, L, C : integer; M : array [1..4, 1..5] of integer; begin clrscr; Ma := 0;. 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]); { a } if M[L,C] > Ma then Ma := M[L,C]; end;. A matriz é representada por seu nome, tamanhos (dimensões) entre colchetes e seu tipo: lista-de-identificadores : array [ li1 .. ls1 , li2 .. ls2 , lin .. lsn ] of tipo; onde: li1 e ls1 são os limites inferior e superior das linhas da matriz; li2 e ls2 são os limites inferior e superior das colunas da matriz; lin e lsn são os limites inferior e superior das quantidades de matrizes; tipo é o tipo dos componentes da matriz. end.. Por exemplo: MAT : 1 1 2 3. array [ 1 .. 3, 1 .. 4 ] of 2. 3 *. real ;. writeln ('Maior valor: ', Ma); readkey;. 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.. 4. 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 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 é: (ls1 – li1 + 1) * (ls2 – li2 + 1) * ... * (lsn – 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://www.gomeshp.com ______________________________________________________________________________. {matriz bidimensional}. 11. Para a definição:. var. é possível o comando:. x := y;. x, y : array [ 1..3, 1..4 ] of integer;. 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 índice 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://www.gomeshp.com ______________________________________________________________________________. 12.
(7) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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 1ª coluna. Program lista2b; uses crt; var L, C : integer; Soma : real; M : array [1..3, 1..4] of real;. { a }. 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: array [ 1 .. 3, 1 .. 4, 1 .. 2 ] of. real ;. 4. 1. 2. 3. 4. 1 2 3. x 1. 1..2 1..2 1..2 1..2. ] ] ] ]. of of of of. integer; integer; integer; integer;. c := 1 to 2 do MAT [ 3, c, 2 ] := 0; c := 1 to 2 do MAT2 [ 3, c ] := 0;. Exemplo: Preencher todas as 2as colunas das 4 matrizes com o valor 10. 1º 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 li := 1 to begin MAT1 [ li, 2 MAT2 [ li, 2 MAT3 [ li, 2 MAT4 [ li, 2 end;. O x assinalado na figura a seguir corresponde ao elemento: MAT1 [2, 3, 1]. 3. 1º modo: for 2º modo: for. 2.A. Matrizes Tridimensionais. 2. 1..3, 1..3, 1..3, 1..3,. Exemplo: Preencher toda a 3ª linha da 2ª matriz com o valor 0.. Observe no exemplo acima {a}, que a referência ao elemento M[L,1] é realizada porque são os elementos da coluna 1; então utiliza-se o comando for somente para a linha.. 1. [ [ [ [. 2º modo: MAT4 [ 1, 2 ] := 100;. end.. 1 2 3. array array array array. 1º modo: MAT [ 1, 2, 4 ] := 100;. writeln ('Soma dos elementos da 1ª coluna: ', Soma:4:2); readkey;. MAT1 :. : : : :. Exemplo: Preencher o elemento da coluna 2, linha 1 da 4ª matriz com o valor 100.. write (' Digite os valores da matriz (3 x 4) '); for L := 1 to 3 do for C := 1 to 4 do readln (M[L,C]); L := 1 to 3 do Soma := Soma + M[L,1]);. 1º modo: MAT : array [ 1..3, 1..2, 1..4 ] of integer; 2º modo: MAT1 MAT2 MAT3 MAT4. begin clrscr;. for. Exemplo: Fazer a declaração de 4 matrizes do tipo inteira de 3 linhas e 2 colunas.. 2. 3 ] ] ] ]. do := := := :=. 10; 10; 10; 10;. MAT1. ____ http://www.gomeshp.com ______________________________________________________________________________. 13. ____ http://www.gomeshp.com ______________________________________________________________________________. 14.
(8) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 2.B. Exercícios ( Matriz ). 8. Fazer um programa para: criar uma matriz (3x4); ler os valores a serem armazenados na matriz (a cada linha); mostrar os elementos da 2ª linha; mostrar os elementos da 3ª coluna; mostrar o menor elemento. Mostrar a matriz de forma organizada.. 1. Dado o valor dos elementos da matriz (3x3) e das variáveis (L := 2 / C := 1); identifique o resultado das operações aritméticas abaixo: MAT. 1. 2. 3. 1 2 3. 10 3 81. 4 1 23. 2 0 20. Exemplo: 1 5 9. a) MAT [1, 2] = _______. e) MAT [L, L] = _______. b) MAT [3, 2] = _______. f) MAT [C, C] = _______. c) MAT [L, C] = _______. g) MAT [L+1, C] = _______. d) MAT [C, L] = _______. h) MAT [L, C+2] = _______. 4 8 12. 9. Elaborar um programa para: criar uma matriz (5x3); ler os valores a serem armazenados na matriz (a cada coluna); mostrar os elementos da 4ª linha; mostrar os elementos da 1ª coluna; mostrar o maior elemento; e mostrar a matriz de forma organizada:. j) MAT [L, C] + MAT [C, L] = _______. Exemplo: 1 2 3 4 5. 2. Fazer um programa para ler uma matriz (4 x 5) e mostrar os elementos onde os seus índices são pares. 3. Fazer um programa para ler uma matriz (4 x 3) e mostrar o produto dos elementos ímpares.. 5. Fazer um programa para ler uma matriz (7 x 3) e mostrar a média dos elementos da 3ª e 5ª linhas. 6. Fazer um programa para ler uma matriz (5 x 6) e mostrar a quantidade de elementos da 5ª coluna que estão abaixo da média dos elementos da 4ª linha. 7. Fazer um programa para ler uma matriz A (4 x 3), onde cada linha da matriz é fornecida como entrada; criar a matriz T que é a matriz transposta de A; mostrar as matrizes organizadas. Exemplo: Digite os valores da matriz A. Transposta de A. 1 2 4 7. 1 6 3. 2 9 4. 4 0 2. 6 7 8 9 10. 11 12 13 14 15. 9 14 Elementos da 4ª linha: 4 1 2 3 Elementos da 1ª coluna: Maior elemento: 15. 4. Fazer um programa para ler uma matriz (5 x 6) e mostrar a soma dos elementos pares da 3ª coluna.. 3 4 2 3. 3 7 11. Elementos da 2ª linha: 5 6 7 8 Elementos da 3ª coluna: 3 7 11 Menor elemento: 1. i) MAT [C, L+C] * 3 = _______. 6 9 0 7. 2 6 10. 4. 5. 10. Escrever um programa que leia a matriz A (4 x 4), multiplique os elementos da diagonal principal por uma variável z, também lida, e escreva a matriz resultante B. Exemplo: Sejam A a matriz descrita a seguir e z = 5: 1 A= 2 3 4. 5 6 7 8. 9 10 11 12. 13 14 15 16. A*z =. 5 2 3 4. 5 30 7 8. 9 10 55 12. 13 14 15 80. 7 7 3. ____ http://www.gomeshp.com ______________________________________________________________________________. 15. ____ http://www.gomeshp.com ______________________________________________________________________________. 16.
(9) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 11. Criar um programa para ler os valores das matrizes A (2 x 4) e B (2 x 4), calcular e mostrar a matriz C, onde C [ i, j ] = A [ i, j ] + B [ i, j ].. 15. Desenvolver um programa para ler dois vetores X e Y de 10 elementos. Construir e mostrar uma matriz Z de duas dimensões, onde a primeira coluna deverá ser formada pelos elementos do vetor X e a segunda coluna deverá ser formada pelos elementos do vetor Y.. Exemplo: A. 5 25. 10 30. 15 35. 20 40. C. 645 345. 170 110. 55 55. 30 45. B. 640 320. 160 80. 40 20. 16. Fazer um programa para ler os elementos de uma matriz M de 4 x 3 e gerar um vetor MULT com a multiplicação dos elementos de cada linha da matriz. Em seguida, somar os elementos do vetor MULT na variável T. Mostre os valores do vetor MULT e da variável T.. 10 5. Exemplo: Matriz M (4x3). 12. Criar um programa para ler uma matriz (4 x 4) e mostrar a soma dos valores de sua diagonal principal e o produto dos valores de sua diagonal secundária.. 1 3 15 4. 5 0 2 5. Exemplo:. Total:. Valores da Matriz A (4x4). 10 4 30 3. 5 6 2 2. 7 1 0 9. 8 5 6 4. 13. Desenvolver um programa para ler os elementos de uma matriz M de 3 x 4, somar os elementos de cada coluna gerando o vetor S. Em seguida, somar os elementos do vetor S na variável T. Mostrar o vetor S e a variável T. Exemplo: Matriz M (3x4). 4 5 6. 0 9 8. 7 6 5. 15. 17. 18. T. 56 14. Elaborar um programa para ler as cinco notas de cada um dos 4 alunos de uma sala. O total de linhas corresponde a quantidade de alunos. Calcule e mostre a média de cada aluno e a média geral da turma. Organize a saída dos dados na tela.. 18. DESAFIO: Fazer um programa para: a) declarar cinco matrizes do tipo real que contém quatro linhas e três colunas (MAT). Faça a leitura dos elementos da primeira matriz. b) ler os elementos da 2ª e 3ª matrizes; c) preencher a quarta matriz com o elemento 20; d) calcular cada elemento da quinta matriz, somando o elemento correspondente da primeira com o elemento correspondente da terceira.. Dica: Existe uma lei matemática que estabelece que uma multiplicação entre matrizes poderá ocorrer quando o número de colunas da primeira matriz é igual ao número de linhas da segunda matriz, e que o valor resultante da terceira matriz é o somatório da multiplicação de cada elemento da coluna da primeira matriz com cada elemento de linha da segunda matriz. Regra: C [ i, j ] = A [ i, 1 ] * B [ 1, j ] + A [ i, 2 ] * B [ 2, j ] + ... + A [ i, m ] * B [ n, j ] Observação: A matriz A deve estar na cor verde; a matriz B deve estar na cor amarela; e a matriz C deve estar na cor vermelha. Exemplo: A ( 3 x 2 ). ____ http://www.gomeshp.com ______________________________________________________________________________. 80. 19. DESAFIO: Leia uma matriz A, de dimensão m x n (m < = 5; n < = 3). Cada linha da matriz é fornecida. Fazer um programa que efetue um produto matricial. Seja A (m x n) e B (n x m) as matrizes-fatores, sendo m < = 3 e n < = 4. A matriz-produto obtida C ( m x m ) deverá ser impressa.. Vetor S (4). 6. 10 0 30 40. 17. Fazer um programa para ler dois vetores A e B de 10 elementos. Construir e mostrar uma matriz C de duas dimensões, onde a primeira linha deverá ser formada pelos elementos do vetor A multiplicados por 2 e a segunda linha deverá ser formada pelos elementos do vetor B subtraídos de 5.. Soma dos elementos da diagonal principal.....: 20 Produto dos elementos da diagonal secundária.: 48. 1 2 3. Mult. 2 10 1 2. 17. B(2x3). C(3x3). ____ http://www.gomeshp.com ______________________________________________________________________________. 18.
(10) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 05 05 06 08 15 16 18 20. 06. 11. 40. 41. 46. 51. 3 1. 4 5. 6 2. B (n x m) Digite o valor de m (1-3): Digite o valor de n (1-4): A (m x n). C [ 1, 1 ] = = =. 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.. C (m x m) 9 8 0. 4 6 7. 31 30 7. 56 62 35. 62 60 14. 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.. A [ 1, 1 ] * B [ 1, 1 ] + A [ 1, 2 ] * B [ 2, 1 ] 9 * 3 + 4 * 1 31. Sintaxe para definir um registro: type. 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 eqüivale a 100 pontos para o 2º jogador e cada navio não afundado eqüivale 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.. var. identificador. =. record nome_campo : tipo_campo; end;. 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;. 21. DESAFIO: Fazer um programa para: a) Ler uma matriz A, de dimensão 3x3. Cada coluna da matriz é fornecida como entrada. b) Mostrar o valor da determinante desta matriz.. REG_PROF = record nome : string; ender : END_COMP; fone : array [ 1.. 3 ] of string; end; var. Neste exemplo foi criado um registro somente, com o nome PROF.. PROF : REG_PROF; nome. ____ http://www.gomeshp.com ______________________________________________________________________________. 19. rua. num. bairro. cidade. uf. cep. fone. fone. fone. 1. 2. 3. ____ http://www.gomeshp.com ______________________________________________________________________________. 20.
(11) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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 (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. 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.. var. 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’;. var. nome_registro. =. nome. 45 ] of. R_PROF;. nome. nome. fone. fone. fone. fone. 1. 2. 1. 2. 1. .... 2. fone. 1. 2 45. .... Exemplo (atribuição): Atribuir os dados, abaixo relacionados, de dois professores aos dois últimos registros.. PROF[44].nome := ‘Maria da Silva’; PROF[44].fone[1] := ‘456.2190’; PROF[44].fone[2] := ‘9832.0216’;. 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.. Nome: José da Silva Fones: 223.6933 / 9983.9019. Sempre que for referenciar os campos de um vetor de registros, deve-se seguir a sintaxe abaixo:. PROF[45].nome Å ‘José da Silva’; PROF[45].fone[1] := ‘223.6933’; PROF[45].fone[2] := ‘9983.9019’;. nome_vetor [ indice ].nome_campo. nome fone. fone 1. ____ http://www.gomeshp.com ______________________________________________________________________________. fone. Nome: Maria da Silva Fones: 456.2190 / 9832.0216. record nome_campo : tipo_campo; end;. nome_vetor : array [ 1.. 100 ] of. PROF : array [ 1 ... string;. Neste exemplo foram criados 45 registros com o nome PROF, diferenciados pelo número do índice do vetor.. Pode-se definir uma quantidade fixa de registros, sendo utilizado um vetor de registros, que tem a seguinte sintaxe: type. R_PROF = record nome : string; fone : array [ 1.. 2 ] of end;. 21. ... .... Maria da Silva. José da Silva. 456.2190 9832.0216 223.6933 9983.9019 44. 45. ____ http://www.gomeshp.com ______________________________________________________________________________. 22.
(12) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 3.A. Comando with .. do. 3.B. Exercícios ( Registro ). O comando with possibilita acessar os campos de um registro de maneira mais curta, ou seja, não referenciando o nome do registro.. 1. Declarar o registro cuja representação gráfica é dada a seguir: Ficha. 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 lista3a; uses crt; type registro = record nome, ender : string; end; var x : integer; reg : array [ 1..10 ] of registro; begin clrscr; Exemplo do programa normal. Í caracter. NOME. Í numérico. SALÁRIO. Í 11 números e 3 caracteres. CPF IDADE Ï numérico. SEXO Ï 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. 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;. M. 3. Declarar o registro cuja representação gráfica é dada a seguir, definir os campos com os tipos básicos necessários: Cadastro. 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: ‘ ); readln ( ende ); end; end;. NOME. ENDEREÇO. SALÁRIO. IDENTIDADE. CPF. ESTADO CIVIL. TELEFONE. IDADE. SEXO. O ENDEREÇO é composto de: RUA BAIRRO ESTADO. CIDADE. CEP. readkey; end.. ____ http://www.gomeshp.com ______________________________________________________________________________. 23. ____ http://www.gomeshp.com ______________________________________________________________________________. 24.
(13) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 4. Utilizando o registro criado no exercício anterior, atribuir os valores apresentados abaixo aos campos correspondentes:. 9. Utilizando o vetor de registros criado no exercício anterior, faça a atribuição dos valores apresentados abaixo aos campos correspondentes:. Cadastro JOÃO MIGUEL. 1. Î. XYZA5. ECONÔMICA. 395,00. 115. ENDEREÇO. 467,90. 2. Î. ABCW9. 1ª CLASSE. 710,00. 28. 34591.89432. 190.945.523-90. Casado. :. :. :. :. :. 3438.9021. 45. M. O ENDEREÇO é composto de: Rua 106-A, Bloco W, Bairro Santo Amaro Qd. 05, Ap.908 SP. 10. Para cada um dos exemplos a seguir, crie o seu registro equivalente. Bauru. 90.875-903. 5. Utilizando a estrutura do exercício anterior, fazer um programa para ler os dados de 50 funcionários e mostrar uma listagem de todos os funcionários(as) cujo SALÁRIO seja maior que R$ 500,00, ESTADO CIVIL “CASADO(A)” e reside em SP. 6. Declarar o registro cuja representação gráfica é dada a seguir, definir os campos com os tipos básicos necessários. As notas devem ser armazenadas em um vetor. Cadastro de Notas de Alunos NOME NOTA1 NOTA2. TURMA NOTA3. NOTA4. 7. Utilizando o registro criado no exercício anterior, atribuir os valores apresentados abaixo aos campos correspondentes: Cadastro de Notas de Alunos ANA LÚCIA 8.5 7.0. A01 9.0. 3 :. :. Î. NVOO. c) MÉDICOS DE PLANTÃO Horário Horário Nome Inicial Final Rilmar Gomes 18:00 0:00 Fernando Soares 0:00 6:00 Manoel Soares 6:00 18:00. Especialidade Clínico Geral Dermatologia Cardiologia. 11. Para cada uma das situações a seguir, declare o que se pede: a) para um concurso de beleza precisa-se armazenar os dados das 30 candidatas, que são: número da inscrição, nome, altura, peso, naturalidade e estado;. d) para uma locadora de vídeo deve-se armazenar os dados de 500 filmes, que são: código, título, gênero, categoria e valor da locação.. AVIAO {. Matrícula 18.001-9 27.653-1 19.753-8. b) FILME EM CARTAZ Título: Amores Eletrônicos Duração: 120’ Seções: 10:00 - 13:30 15:40 - 18:00 - 21:30. c) um comerciante deseja armazenar os dados de 50 produtos, que são: código, descrição, quantidade em estoque, quantidade mínima, preço;. VOOS 2. a) DADOS PESSOAIS Nome: Miguel João da Cruz Telefone: 714.3914 Aniversário: 01 / 01 / 1951 Cidade: Brasília Estado: DF. b) um apicultor necessita armazenar os dados de 100 colmeias, que são: código, região, estado, qualificação (forte, médio, fraco), número de abelhas;. 8.5. 8. Declarar um vetor de registros cuja representação gráfica é dada a seguir:. 1. :. TIPO. PRECO. LUGARES. Ï. Ï. Ï. Ï. caracter. caracter. numérico. numérico. 10. ____ http://www.gomeshp.com ______________________________________________________________________________. 25. ____ http://www.gomeshp.com ______________________________________________________________________________. 26.
(14) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 12. DESAFIO: Fazer um programa para cada um dos itens abaixo:. 4. Subrotina: Conceitos a) cadastrar imóveis a serem alugados ou vendidos, contendo os seguintes dados: tipo (loja, apartamento, casa, kit), endereço, bairro, valor, situação (aluguel ou venda). Ao final, solicitar ao usuário a situação a ser pesquisada e mostrar todos os dados dos imóveis enquadrados na solicitação;. Parâmetros Formais são declarados através de variáveis juntamente com a identificação do nome da subrotina, os quais serão tratados da mesma forma que são tratadas as variáveis globais ou locais.. b) cadastrar os produtos de uma loja com os seguintes dados: código, descrição, estoque mínimo, estoque atual e preço. Mostrar todos os dados dos produtos que contenham o estoque atual menor que o estoque mínimo para efetuar compra; c) cadastrar o horário de partida de vôos, com os dados: código, horário de partida, quantidade de passageiros, valor da passagem, origem e destino. Solicitar ao usuário a origem e mostrar todos os dados dos vôos que possuem esta origem. Mostrar, também, todos os vôos que possuem horário de partida pela manhã; d) cadastrar o nome do município, seu estado e sua população. Mostrar todos os municípios cadastrados do estado de Goiás e os dados do município que contém a maior população.. Parâmetros Reais substituem os parâmetros formais, quando da utilização da subrotina por um programa principal ou por uma rotina chamadora. Passagem de parâmetro por referência caracteriza-se pela ocorrência da alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da subrotina. Desta forma, qualquer modificação feita no parâmetro formal implica em alteração no parâmetro real correspondente. A alteração efetuada é devolvida para a rotina chamadora. Passagem de parâmetro por valor caracteriza-se pela não alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. Assim sendo, o valor passado pelo parâmetro real é copiado para o parâmetro formal, que no caso assume o papel da variável local da sub-rotina. Desta forma, qualquer modificação que ocorra na variável local da sub-rotina não afetará o valor do parâmetro real correspondente, ou seja, o processamento é executado somente dentro da subrotina, ficando o resultado obtido "preso" dentro da sub-rotina. Variável global é declarada no início de um programa, podendo ser utilizada por qualquer sub-rotina subordinada. Toda variável global é automaticamente inicializada. Variável local é declarada dentro de uma sub-rotina e é somente válida dentro da sub-rotina à qual está declarada; ou seja, depois que a subrotina é finalizada, a variável local se torna inacessível. Toda variável local deve ser inicializada, pois isto não acontece automaticamente ao ser criada, como a variável global.. ____ http://www.gomeshp.com ______________________________________________________________________________. 27. ____ http://www.gomeshp.com ______________________________________________________________________________. 28.
(15) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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.. 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.. Program Lista05a; uses crt; var num : integer;. { Declaração de variáveis globais }. Procedure PNZ ( x : integer ); { Procedimento } begin if x = 0 then writeln ( ' Zero ' ) else if x < 0 then writeln ( ' Negativo ' ) else writeln ( ' Positivo ' ); end; begin { Programa principal } clrscr; write ( ' Digite um número inteiro: ' ); readln ( num ); PNZ ( num ); { Chamada ao procedimento } readkey; end.. Um procedimento é assim definido por completo: procedure nome ( lista-de-parâmetros ); { variáveis locais } begin comandos; end;. OBSERVAÇÕES:. 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.. 1. 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. 3. 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.. 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://www.gomeshp.com ______________________________________________________________________________. 29. ____ http://www.gomeshp.com ______________________________________________________________________________. 30.
(16) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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;. 6. Subrotina: Function ( Função ) Uma function deverá retornar pelo menos um valor após seu processamento.. { Declaração de variáveis globais }. Procedure Soma ( x, y : real ); { Procedimento } begin writeln ( ' Soma = ' , ( x + y ):3:1 ); end;. A função é assim definida por completo: function nome ( lista-de-parâmetros ) : tipo; { variáveis locais } begin comandos; nome := valor; end;. begin { Programa principal } clrscr; write ( ' Digite dois números: ' ); readln ( a, b ); Soma ( a, b ); { Chamada ao procedimento } readkey; end.. 5.A. 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 ímpar. 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.. nome é o nome simbólico pelo qual a função é invocada; tipo é o tipo de dado retornado 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 ) ) ;. 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 seqüência: 1, 1, 2, 3, 5, 8, .... ____ http://www.gomeshp.com ______________________________________________________________________________. 31. ____ http://www.gomeshp.com ______________________________________________________________________________. 32.
(17) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. Exemplo: Fazer um programa para ler um número inteiro e chamar uma função que retorna uma mensagem, dizendo se o número lido é: Par, Ímpar ou Zero. Mostrar o retorno da função.. 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 Lista06a; uses crt; var num : integer;. Program Lista06b; uses crt; var divisor, dividendo : integer; result : real;. { Declaração de variáveis globais }. Function Divisao ( dd, ds : integer ) : real; var res : real; begin res := dd / ds; Divisao := res; { Retorno da função } end;. Function PIZ ( x : integer) : string; { Função } begin if x = 0 then PIZ := ' Zero ' { Retorno da função } else if x mod 2 = 0 then PIZ := ' Par ' { Retorno da função } else PIZ := ' Ímpar ' ; { 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.. 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: 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 retorno da função e seus parâmetros formais podem ser de tipos diferentes.. ____ http://www.gomeshp.com ______________________________________________________________________________. 33. 1. A variável que recebe o retorno da função (result) e o tipo da função devem ser do mesmo tipo. 2. 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://www.gomeshp.com ______________________________________________________________________________. 34.
(18) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 6.A. Exercícios ( Função ). 7. Passagem de parâmetros por valor e por referência. 1. Fazer um programa para ler um número e chamar uma função que retorna o cubo do número. 2. Fazer um programa para ler três números e chamar uma função que retorna a soma dos números.. Desta forma, é necessário que o programa ou a subrotina chamadora devem passar o valor da variável global para a variável local, quando necessário; e isso se procede com a passagem de parâmetros. Os parâmetros têm por finalidade servir como um ponto de comunicação bidirecional entre a subrotina chamada e a chamadora.. 3. Escrever um programa que, utilizando de funções, leia um valor e retorne: a) se é múltiplo de 5 ou não – retorno string; b) fatorial (1 * 2 * ... * n) - retorno inteiro. 4. Desenvolver um programa para ler dois números e chamar uma função que retorna a potência do 1º número elevado ao 2º número. Mostrar o retorno da função no programa principal. Por exemplo, se forem informados os valores 2 e 3 a subrotina deverá ser retornado o valor 8. 5. Criar um programa para ler dois números e chamar uma função que retorna se os valores recebidos são iguais ou diferentes. O programa será finalizado quando for digitado um valor negativo para o primeiro número. 6. Escrever um programa para ler dois valores inteiros e chamar uma função que retorna a soma dos números inteiros entre os números lidos, inclusive – retorno real. Garanta que os números são positivos e que o 1º valor seja menor que o 2º. 7. Elaborar um programa para ler uma frase e chamar uma função que retorna a quantidade de A’s ou a’s – retorno inteiro. 8. Fazer um programa para ler uma frase e uma letra; e chamar uma função que retorna a quantidade de letras na frase – retorno inteiro. 9. DESAFIO: Desenvolver um programa para ler um número e chamar uma função que retorna se o número recebido é primo ou não (verdadeiro ou falso). O programa será finalizado quando for digitado zero. Garanta que o número lido é positivo ou zero.. ____ http://www.gomeshp.com ______________________________________________________________________________. Apesar de ser permitido, não se deve utilizar as variáveis globais dentro das subrotinas, para se evitar erros futuros e facilitar a manutenção dos programas.. 35. A passagem de parâmetros ocorre quando é feita uma substituição dos parâmetros formais pelos reais no momento da execução da subrotina. Estes parâmetros serão passados por variáveis de duas formas: por valor ou por referência. A passagem de parâmetros por valor foi exemplificada nos itens anteriores. Quando se utilizar a passagem de parâmetros por referência deve-se colocar a palavra reservada var antes do parâmetro no cabeçalho do procedimento ou da função. Exemplo: Fazer um programa para ler um número, chamar um procedimento (que deve receber o número como parâmetro e retornar seu fatorial) e mostrar o fatorial. Program Lista07a; uses crt; var num, retorno : integer; Procedure Fatorial (n : integer; var x : integer; begin fat := 1; for x := 1 to n do fat := fat * x; end;. var. fat : integer);. begin clrscr; writeln (' Programa fatorial '); writeln (' Informe o valor inteiro: '); readln ( num ); Fatorial ( num, retorno ); { num é um parâmetro real } writeln ( 'O fatorial de ', num, ' = ', retorno ); writeln (' Fim do programa '); readkey; end.. ____ http://www.gomeshp.com ______________________________________________________________________________. 36.
(19) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. OBSERVAÇÕES: 1. A variável global retorno é enviada ao procedimento com valor zero; e será atualizada no mesmo momento que a variável local fat.. 7.A. Exercícios ( passagem de parâmetros ) 1. Complete o programa abaixo de acordo com o que se pede: Program LTPI_0502; Uses crt; Procedure. 2. Complete o programa abaixo de acordo com o que se pede:. Somatorio. Begin S := 0; For x := 1 to ____ S := S + ____ ;. a) Declare a variável global a e b do tipo inteiro; b) Declare uma variável global media; c) Garanta que o valor de b seja maior que o valor de a; do. d) Declare o nome da função Potencia, a qual calcula e retorna a potência do 1º parâmetro formal elevado ao 2º parâmetro formal; e) Declare dois parâmetros formais da função x e y como passagem de parâm. por valor; f) Complete os comandos da função de forma que realize sua função; g) Retorne o valor de p da função ao programa principal; h) Pela análise do programa declare o tipo de retorno da função; i) Declare as variáveis locais da função;. End; Function. a) Declare a variável global num e somat do tipo inteiro; b) Declare as variáveis locais ao procedimento x e s. Descubra o tipo das variáveis; c) Declare o primeiro parâmetro formal do procedimento som do tipo inteiro como passagem de parâm. por referência; d) Declare o segundo parâmetro formal do procedimento n do tipo inteiro como passagem de parâm. por valor; e) Complete os comandos do procedimento; f) Retorne o valor de s ao programa principal pela variável som; g) Declare o parâmetro formal da função x do tipo inteiro como passagem de parâm. por valor; h) Pela análise do programa declare o tipo de retorno da função; i) Complete os comandos da função; j) No programa principal, faça a chamada ao procedimento com os parâmetros adequados; k) No programa principal, faça a chamada a função passando o número lido.. PIZ. j) Declare o nome do procedimento Soma_Pares, o qual soma e mostra os números pares entre os números lidos inclusive; k) Declare os dois parâmetros formais do procedimento x e y como passagem de parâm. por valor; l) Complete os comandos do procedimentos de forma que realize sua função; m) Declare as variáveis locais do procedimento;. Begin If ______________ Then PIZ := ‘Zero’ Else If _____________ Then PIZ := ‘Par’ Else PIZ := ‘Impar’ ;. n) Declare o 1º parâmetro formal (mp ) do procedimento Med_Ponderada, como passagem de parâm. por referência; o) Declare o 2º e 3º parâmetros formais do procedimento x e y como passagem de parâm. por valor; p) Declare o 4º e 5º parâmetros formais do procedimento p1 e p2 do tipo inteiro como passagem de parâm. por valor; q) Crie a linha de comando do procedimento que calcula a média ponderada ( mp ) do 1º valor pelo 1º peso e do 2º valor pelo 2º peso; r) Retorne o valor da medpond ao programa principal;. End; begin write ( ' Digite um número: ' ); readln ( num ); writeln ( ‘Somatório: ‘, somat ); end.. ____ http://www.gomeshp.com ______________________________________________________________________________. 37. ____ http://www.gomeshp.com ______________________________________________________________________________. 38.
(20) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. Program LTPI_0503; Uses crt; Var peso1, peso2 : integer;. Faça a chamada as subrotinas de forma que a tela apresente os resultados como apresentados abaixo:. Function Var P : real; Begin For. c := ____ to P := P * ____;. ____. do. 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 2 elevado a 6 = 64 6 elevado a 2 = 36 Média ponderada = 3.71. Soma dos pares entre 2 e 5 = 6 2 elevado a 5 = 32 5 elevado a 2 = 25 Média ponderada = 2.75. End; Procedure. 3. Fazer um programa para ler dois números e chamar um procedimento que retorna a soma, a divisão, o produto e a subtração entre números. O programa principal deve mostrar os valores retornados.. Begin For. c := S := S. ____ +. to. ____. do. 4. Desenvolver um programa para ler um número e chamar um procedimento que retorna: o cubo do número; o fatorial do número e uma mensagem (Par, Ímpar ou Zero). O programa principal deve mostrar os valores retornados.. ___;. End; Procedure Med_Ponderada Var medpond : real; Begin medpond := _______________________________________;. 5. Elaborar um programa para ler os coeficientes dos valores de uma equação do segundo grau e chamar um procedimento que retorna o valor de delta. Se o delta for positivo, chamar outro procedimento que retorna as raízes da equação (x’ e x’’), senão mostrar uma mensagem. Mostre todos os valores retornados no programa principal.. End;. 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.. Begin write ( ' Digite um número: ' ); write ( ' Digite outro número: ' );. readln ( a ); readln ( b );. write ( ' Digite o 1o. peso: ' ); write ( ' Digite o 2o. peso: ' );. readln ( peso1 ); readln ( peso2 );. D. c b. L. L = √ ( a2 + b2 ) D = √ ( L2 + c2 ). a. End.. ____ http://www.gomeshp.com ______________________________________________________________________________. 39. ____ http://www.gomeshp.com ______________________________________________________________________________. 40.
(21) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ Gilene Borges Gomes ___. 7. Desenvolver uma calculadora que apresente um menu de seleções no programa principal. Este menu fornecerá ao usuário a possibilidade de escolher uma entre quatro operações aritméticas. 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 ser chamada a sub-rotina apropriada, passando os valores lidos como parâmetros. Cada uma das quatro sub-rotinas deve receber os dois valores como parâmetros, executar o cálculo apropriado com variáveis locais e mostrar o valor resultante. E depois retornar o controle ao programa principal. O programa principal deve ser executado até que o usuário selecione a opção do menu que é a saída do programa.. 11. DESAFIO: Para evitar erros de digitação de seqüê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 dígito verificador. Por exemplo, o número de matrícula 811057 é usado como 8110573, onde 3 é o dígito verificador, calculado da seguinte maneira: a) cada algarismo do número é multiplicado por um peso começando de 2 e crescendo de 1, da direita para a esquerda: 8 x 7, 1 x 6, 1 x 5, 0 x 4, 5 x 3, 7 x 2 b) somam-se as parcelas obtidas: 56 + 6 + 5 + 0 + 15 + 14 = 96; c) calcula-se o resto da divisão desta soma por 11: 96 dividido por 11 dá resto 8. 8. Elaborar um programa para: a) ler quatro notas; b) mostrar a média das duas primeiras notas e depois das duas últimas; c) utilizar um procedimento para leitura das notas, tendo a 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: a) 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; c) chamar outro procedimento que mostra os dados do vetor C.. d) subtrai-se de 11 o resto obtido: 11 – 8 = 3 e) se o valor encontrado for 10 ou 11, o dígito verificador será 0; nos outros casos, o dígito 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.. 10. Elaborar um programa para: a) 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; c) 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://www.gomeshp.com ______________________________________________________________________________. 41. Obs.: Um número de CPF é validado através de seus dois últimos dígitos (dígitos 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. dígito verificador igual a 2 função. 2308602562. dígito verificador igual a 0. ____ http://www.gomeshp.com ______________________________________________________________________________. 42.
(22) APOSTILA DE PASCAL II. APOSTILA DE PASCAL II. ____________________________________________________________________ Gilene Borges Gomes ___. ____________________________________________________________________ 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.. 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 const type var procedure function. { { { { { {. Cláusula Uses } Constantes } Tipos } Variáveis } Procedimentos } Funções }. implementation uses const type var procedure function. { { { { { {. Cláusula Uses } Constantes } Tipos } Variáveis } Procedimentos } Funções }. begin comandos; end.. 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 unit, 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; Uses Crt, Unidade; Var x : integer;. { Inicialização }. 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 a unit. A cláusula uses, colocada na implementation, permite este uso apenas na implementação e nos comandos de execução inicial. ____ http://www.gomeshp.com ______________________________________________________________________________. 43. Begin Clrscr; Write ( ‘ Digite um número: ‘ ); Readln ( x ); Writeln; Writeln ( ‘ Dia da semana: ‘, semana ( x ) ); Readkey; End.. Unit Unidade; Interface Function semana ( a : integer ) : string; Implementation Function semana ( a : integer ) : string; Begin Case a of 1 : semana := ‘ Domingo ’; 2 : semana := ‘ Segunda ’; 3 : semana := ‘ Terça ’; 4 : semana := ‘ Quarta ’; 5 : semana := ‘ Quinta ’; 6 : semana := ‘ Sexta ’; 7 : semana := ‘ Sábado ’; else semana := ‘ Erro ‘; End; End; End.. ____ http://www.gomeshp.com ______________________________________________________________________________. 44.
Documentos relacionados
O destaque é dado às palavras que abrem signi- ficados e assim são chaves para conceitos que fluem entre prática poética na obra de arte e sua reflexão em texto científico..
- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar
Incidirei, em particular, sobre a noção de cuidado, estruturando o texto em duas partes: a primeira será uma breve explicitação da noção de cuidado em Martin Heidegger (o cuidado
Como o m´etodo de avalia¸c˜ao proposto nesta tese est´a limitado a ambientes de IaaS, a avalia¸c˜ao do desempenho computacional das m´aquinas virtuais ´e realizado com benchmark
Ao rever todas as análises e discussões que realizamos neste trabalho, embasadas nos preceitos funcionalistas aplicados à tradução e nos paradigmas bakhtinianos,
Durante as nictemerais, os valores do fósforo total e do fosfato total nos dois viveiros apresentaram também valores acima do recomendado pela GAA, exceto para o fosfato total na
Distribuição espectral dos sistemas de iluminação LED e do controle Observa-se na Figura 12A, a análise de componentes principais, relacionado à biometria das mudas pré-brotadas
A respeito das propostas de desregulamentação nas relações de trabalho e da seguridade social no Brasil, percebidas tanto nas defesas do Banco Mundial quanto nas