













Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostilas de Informática sobre a Linguagem de Programação Pascal, Algoritmos, Conceitos básicos de programação, Linguagens de programação, A linguagem pascal, Tipos de dados, Expressões, Formato de um programa pascal.
Tipologia: Notas de estudo
1 / 21
Esta página não é visível na pré-visualização
Não perca as partes importantes!














R11.06. Dada uma matriz de 4 x 5 elementos inteiros, calcular a soma de cada linha, de cada coluna e de todos os seus elementos.
Obs: utilize um vetor para armazenar o resultado da soma de cada linha e outro para a soma de cada coluna.
program R9_06;
const NL = 4; {número de linhas} NC = 5; {número de colunas}
var M : array[1..NL,1..NC] of integer; L : array[1..NL] of integer; C : array[1..NC] of integer; I,J,SOMA : integer;
begin
{leitura da matriz} for I:=1 to NL do for J:=1 to NC do begin write('Elemento da linha ',I,' coluna ',J,' : '); readln(M[I,J]); end;
{cálculo da soma dos elementos de cada linha} for I:=1 to NL do begin L[I] := 0; for J:=1 to NC do L[I] := L[I] + M[I,J]; end;
{cálculo da soma dos elementos de cada coluna} for J:=1 to NC do begin C[J] := 0; for I:=1 to NL do C[J] := C[J] + M[I,J]; end;
{cálculo da soma de todos os elementos da matriz} SOMA := 0; for I:=1 to NL do for J:=1 to NC do SOMA := SOMA + M[I,J];
{exibição dos resultados} for I:=1 to NL do writeln('Soma da Linha ',I,': ',L[I]); for J:=1 to NC do writeln('Soma da Coluna ',J,': ',C[J]); writeln('Soma da Matriz: ',SOMA);
end.
O Pascal permite a criação de arrays multidimensionais, que necessitam de vários índices para serem manipulados. A maneira de utilizarmos este tipo de array segue a mesma lógica das matrizes, diferenciando apenas no número de índices.
R11.07. Faça um programa que monte e exiba um array tridimensional 5 x 7 x 3, onde o conteúdo de cada elemento é igual a soma de seus índices.
Program R9_07;
const NL = 5; {número de linhas} NC = 7; {número de colunas} NP = 3; {número de páginas}
var A : array[1..NL,1..NC,1..NP] of integer;
begin
{geração do array} for I:=1 to NL do for J:=1 to NC do for K:=1 to NP do A[I,J,K] := I + J + K;
{exibição do array} for K:=1 to NP do begin for I:=1 to NL do begin for J:=1 to NC do write(M[I,J],' '); writeln; end; writeln; end;
end.
P11.09. Dar o número de elementos de cada uma das matrizes abaixo dados abaixo:
a) MAT : array[1..3,1..4] of integer;
b) CONJ: array[0..2,1..3] of string;
c) TAB : array['A'..'E',-1..1] of integer;
d) NOTA: array[90..98,0..1] of real;
e) A : array[1..2,1..3,1..4] of char;
P11.17. A tabela abaixo demonstra a quantidade de vendas dos fabricantes de veículos durante o período de 1993 a 1998, em mil unidades.
Fabricante / Ano 1993 1994 1995 1996 1997 1998
Fiat 204 223 230 257 290 322
Ford 195 192 198 203 208 228
GM 220 222 217 231 245 280
Wolkswagen 254 262 270 284 296 330
Faça um programa que:
a) leia os dados da tabela;
b) determine e exiba o fabricante que mais vendeu em 1996;
c) determine e exiba o ano de maior volume geral de vendas.
d) determine e exiba a média anual de vendas de cada fabricante durante o período.
P11.18. Faça um programa que leia e armazene em um array tridimensional contendo os valores do faturamento anual de uma empresa, especificados mês a mês e também por filial. Veja a estrutura do array abaixo:
ANO DE 1997
ANO DE 1996 TOTAL
ANO DE 1995 TOTAL
ANO DE 1994 TOTAL
MESES FILIAL 1 FILIAL 2 FILIAL 3 TOTAL
Janeiro Fevereiro
Março Abril
Maio
Junho Julho
Agosto
Setembro
Outubro
Novembro
Dezembro
TOTAL
Após a leitura dos dados faça o seguinte:
a) calcule os totais das linhas e das colunas em cada ano;
b) crie uma nova página contendo a consolidação dos dados, isto é, a soma de todos os anos (mês a mês e por filial);
c) exiba todos os dados lidos e calculados.
A modularização consiste num método utilizado para facilitar a construção de grandes programas, através de sua divisão em pequenas etapas, que são os módulos ou subprogramas. A primeira delas, por onde começa a execução do trabalho, recebe o nome de programa principal , e as outras são os subprogramas propriamente ditos, que são executados sempre que ocorre uma chamada dos mesmos, o que é feito através da especificação de seus nomes.
Vantagens da utilização de subprogramas:
Há duas espécies de subprogramas: PROCEDIMENTO e FUNÇÃO.
Um subprograma do tipo PROCEDIMENTO é, na realidade, um programa com vida própria, mas que, para ser processado, tem que ser solicitado pelo programa principal que o contém, ou por outro subprograma, ou por ele mesmo.
Declaração:
PROCEDURE nome; declaração dos objetos locais ao Procedimento BEGIN comandos do Procedimento END;
onde: nome é o identificador associado ao procedimento.
O programa abaixo calcula a média aritmética entre duas notas, sem o uso de procedimentos.
Program CALCULA_MÉDIA; {sem o uso de procedimentos}
var NOTA1,NOTA2,MEDIA : real;
begin {lê as notas} write('Digite a primeira nota: '); readln(NOTA1); write('Digite a segunda nota: '); readln(NOTA2); {calcula a media} MEDIA := (NOTA1 + NOTA2) / 2; {escreve o resultado} writeln('Media = ',MEDIA,4:1) end.
Mostraremos agora o mesmo programa, utilizando um procedimento para ler os valores do vetor e uma função para efetuar o cálculo da média.
program SOMA_VETOR; {usando uma função e um procedimento}
const N = 30;
var VETOR : array[1..N] of integer;
{declaração do procedimento} procedure LER_DADOS; var I : integer; begin for I:=1 to N do readln(VETOR[I]); end;
{declaração da função} function MEDIA : integer; var I,SOMA : integer; begin SOMA := 0; for I:=1 to N do SOMA := SOMA + VETOR[I]; MEDIA := SOMA div N; end;
{Programa Principal} begin {ativa o procedimento LER_DADOS} LER_DADOS; {escreve o resultado, chamando a função MEDIA} writeln( MEDIA ) end.
Observe que, no exemplo anterior, declaramos uma variável no programa principal e outras nos subprogramas. Podemos dizer que a variável VETOR, que foi declarada no programa principal é uma variável global aos subprogramas, enquanto que a variável I é dita variável local ao procedimento LER_DADOS e as variáveis I e SOMA são locais à função MEDIA. É importante ressaltar que a variável I do procedimento LER_DADOS é diferente da variável I da função MEDIA, embora possuam o mesmo identificador.
O uso de variáveis globais dentro de procedimentos e funções serve para implementar um mecanismo de transmissão de informações de um nível mais externo para um mais interno.
As variáveis locais dos procedimentos e funções são criadas e alocadas quando da sua ativação e automaticamente liberadas quando do seu término.
A utilização de variáveis globais não constitui, no entanto, uma boa prática de programação. Assim, todos subprogramas devem apenas utilizar as variáveis locais , conhecidas dentro dos mesmos, e a transmissão de informações para dentro e fora dos subprogramas deve ser feita através dos parâmetros de transmissão, que serão apresentados a seguir.
Quando se deseja escrever um subprograma que seja o mais genérico possível, deve-se usar a passagem de parâmetros.
A passagem de parâmetros formaliza a comunicação entre os módulos. Além disto, permite que um módulo seja utilizado com operandos diferentes, dependendo do que se deseja do mesmo.
Dá-se a designação de parâmetro real ou de chamada ao objeto utilizado na unidade chamadora/ativadora e de parâmetro formal ou de definição ao recebido como parâmetro no subprograma.
Dentre os modos de passagem de parâmetros, podemos destacar a passagem por valor e a passagem por referência.
Na passagem de parâmetros por valor , as alterações feitas nos parâmetros formais, dentro do subprograma, não se refletem nos parâmetros reais. O valor do parâmetro real é copiado no parâmetro formal, na chamada do subprograma. Assim, quando a passagem é por valor, is to significa que o parâmetro é de entrada.
Na passagem de parâmetros por referência , a toda alteração feita num parâmetro formal corresponde a mesma alteração
feita no seu parâmetro real associado. Assim, quando a passagem é por referência, isto significa que o parâmetro é de entrada-saída.
Na linguagem Pascal, a declaração dos procedimentos e funções com parâmetros se diferencia da forma já apresentada apenas pela inclusão da lista de parâmetros formais no cabeçalho. Esta deve vir entre parênteses e cada parâmetro deve ter o seu tipo especificado. A forma geral é:
PROCEDURE nome (lista de parâmetros formais)
FUNCTION nome (lista de parâmetros formais) : tipo
A lista de parâmetros formais tem a seguinte forma:
parâmetro1 : tipo; parâmetro2 : tipo; ...; parâmetro n : tipo
Exemplos da lista de parâmetros:
procedure PROC (X,Y,Z:integer; K:real)
function FUNC (A,B:real; C:string) : integer
Na forma apresentada, a passagem dos parâmetros será por valor. Para se utilizar a passagem por referência, deve-se acrescentar a palavra VAR antes do nome do parâmetro.
procedure PROC(A:integer; var B,C:integer)
Na chamada de procedimentos ou funções utilizando parâmetros, devemos acrescentar após o nome do procedimento ou função uma lista de parâmetros reais (de chamada), os quais devem ser do mesmo tipo e quantidade dos parâmetros formais declarados.
O exemplo a seguir demonstra a diferença entre a passagem de parâmetros por referência e a passagem de parâmetros por valor:
R12.03. Escreva um procedimento que receba uma string S e converta o mesmo para letras maiúsculas.
procedure MAIUSC (var S:string); var I,TAM : byte; begin TAM := length(S); for I:= 1 to TAM do S[I] := upcase(S[I]); end;
R12.04. Escreva uma função que retorne o número de ocorrências de um substring SUB dentro de uma string S, passados como parâmetros.
function OCORRENCIAS (SUB,S:string) : byte; var I,CONT,TSUB,TS : byte; begin CONT := 0; TSUB := length(SUB) TS := length(S); for I:= 1 to (TS-TSUB+1) do if copy(S,I,TSUB) = SUB then CONT := CONT+1; OCORRENCIAS := CONT; end;
R12.05. Escreva um procedimento que receba uma string S como parâmetro e retire todos os brancos contidos no mesmo.
procedure TIRABRANCOS (var S:string); var I,TAM : byte; begin TAM := length(S); I := 1; while I<=TAM do if S[I]=' ' then begin delete(S,I,1); TAM := TAM-1; end else I := I+1; end;
R12.06. Escreva uma função que receba um número real e retorne uma string correspondente ao número recebido, com o mesmo convertido para string com tamanho mínimo e 2 casas decimais, e com uma vírgula no lugar do ponto decimal.
function CONVERSAO (X:real) : string; var P : byte; S : string; begin str(X:0:2,S); P := pos('.',S); S[P] := ','; CONVERSAO := S; end;
P12.01. Defina modularização.
P12.02. Cite as principais vantagens da utilização de subprogramas.
P12.03. Conceitue procedimento e função. Em que eles são semelhantes e em que eles são diferentes?
P12.04. Que tipo de informação deve ser incluído na declaração de um procedimento? E na declaração de uma função? Se houver diferenças, explique o motivo.
P12.05. Qual a diferença entre variável global e variável local?
P12.06. Como deve ser feita a transmissão de informações entre um subprograma e o programa principal?
P12.07. Qual a diferença entre parâmetro real e parâmetro formal?
P12.08. Cite os modos de passagem de parâmetros, explicando como funciona cada um deles.
P12.09. Escreva um procedimento que limpe a tela do micro e exiba o seu nome.
P12.10. Escreva um procedimento que receba uma string S e um inteiro positivo N e exiba a string S por N vezes seguidas na tela.
P12.11. Escreva uma função chamada CUBO que receba um valor do tipo real e retorne a potência elevado a 3 do mesmo.
P12.12. Escreva um procedimento chamado TROCA que receba duas variáveis inteiras (X e Y) e troque o conteúdo entre elas;
P12.13. Escreva uma função que receba uma string S e retorne o número de brancos existentes na mesma.
P12.14. Escreva uma função que receba uma string S e um valor inteiro N e retorne os N primeiros caracteres da string S.
P12.15. Supondo que no Turbo Pascal não existisse a função UPCASE, escreva uma função que simule a mesma.
P12.16. Idem para a função POS.
P12.17. Idem para o procedimento DELETE.
P12.18. Escreva um procedimento chamado SINAL que receba como parâmetro um valor N inteiro e escreva a palavra POSITIVO se N for um número maior que zero, NEGATIVO se N for menor que zero, ou ZERO se N for igual a zero.
Escreva um programa que leia um número inteiro e, usando o procedimento SINAL, mostre se ele é maior, menor ou igual a zero.
P12.19. Escreva um procedimento chamado METADE que divida um valor do tipo real (passado como parâmetro) pela metade.
Escreva um programa que leia um vetor A de 30 elementos reais e, usando o procedimento METADE, divida todos seus elementos pela metade.
P12.20. Escreva uma função chamada MEDIA que retorne a média de três valores reais (X, Y e Z) passados como parâmetros.
Escreva um programa que, para um número indeterminado de alunos, faça para cada uma deles:
⇒ ler o nome e as três notas do aluno (a leitura do nome FIM indica o fim dos dados - flag);
⇒ calcule a média do aluno (usando a função MEDIA);
⇒ exiba o nome e a média do aluno.
O Turbo Pascal não permite a declaração normal de um array como parâmetro formal em uma função ou procedimento. Porém, podemos utilizar o recurso da criação de novos tipos de dados disponível na linguagem Pascal. Veja o exemplo a seguir: type VETOR = array[1..20] of integer;
Essa declaração deve ser colocada na área de declarações do programa, preferencialmente antes da área de declarações de variáveis (var). Após essa declaração, caso você necessite declarar uma variável do tipo array com 20 elementos inteiros, basta fazer o seguinte:
var V : VETOR;
Assim, para utlizar um array como parâmetro formal em uma função ou procedimento, você deve declará-lo na lista de parâmetros com o nome do tipo criado na declaração type.
Da mesma forma, isto também será necessário se o parâmetro formal for uma string com tamanho especificado. Veja o exemplo: procedure PROC (s1:string; s2:string[10]);
Essa declaração causaria um erro de compilação por causa do tipo string[10]. Teríamos então que fazer o seguinte:
type STRING10 = string[10]; procedure PROC (s1:string; s2:STRING10);
R12.03. Escrever um programa para ler um vetor de 50 elementos inteiros e determinar o valor médio dos seus elementos (utilizando um procedimento para ler um vetor e uma função para calcular a soma dos elementos do vetor).
program CALCULA_MÉDIA;
const N = 50;
type VETOR = array[1..N] of integer;
var VET : VETOR; MEDIA : integer;
procedure LEIA_VETOR (var V:VETOR); var I : integer; begin for I:=1 to N do readln(V[I]); end;
function SOMA_VETOR (V:VETOR) : integer; var I,S : integer; begin S := 0; for I:=1 to N do S := S + V[I]; SOMA_VETOR := S; end;
begin LEIA_VETOR(VET); MEDIA := SOMA_VETOR(VET) div N; writeln(MEDIA); end.
P12.22. Escreva uma função que receba um vetor V de 30 elementos inteiros, e retorne o maior elemento do vetor V.
P12.23. Escreva uma função que receba um vetor V de 30 elementos inteiros, e retorne a moda do vetor, is to é, o elemento que mais ocorre dentro do vetor V.
P12.24. Escreva uma função que receba um vetor V de 30 elementos inteiros, e retorne a quantidade de números positivos do vetor V.
P12.25. Escreva uma função que receba um valor X do tipo inteiro e um vetor V de 80 elementos inteiros, e retorne o número de ocorrências de X dentro do vetor V.
P12.26. Escreva uma função que receba um valor X do tipo inteiro e um vetor V de 80 elementos inteiros, e retorne o valor lógico TRUE se X existir dentro de V ou o valor lógico FALSE caso contrário.
P12.27. Escreva um procedimento chamado PAR_IMPAR que receba um vetor de 100 elementos inteiros e retorne a quantidade de números pares e de números ímpares contidas no mesmo.
Faça um programa que leia 100 valores inteiros (armazenando em um vetor) e, usando o procedimento PAR_IMPAR, determine e exiba a quantidade de números pares e de números ímpares.
P12.28. Escreva um procedimento chamado LEIA que leia um vetor de 50 elementos inteiros (passado como parâmetro).
Escreva uma função chamada MAIOR que receba um vetor de 50 elementos inteiros e retorne o maior elemento do mesmo.
Escreva uma função chamada SOMA que receba um vetor de 50 elementos inteiros e retorne a soma dos elementos do vetor.
Faça um programa que:
⇒ Usando o procedimento chamado LEIA, leia a idade de 50 pessoas;
⇒ usando a função MAIOR criada, determine e exiba a maior idade;
⇒ usando a função SOMA criada, calcule e exiba a idade média das 50 pessoas;
P12.29. Modifique o programa da questão P8.08, criando os seguintes subprogramas:
a) um procedimento que leia o gabarito da prova;
b) um procedimento que leia as respostas de um aluno.
c) Uma função que receba as respostas de um aluno e retorne a sua nota;
d) Uma função que receba a freqüência de cada nota e retorne a nota que teve maior freqüência absoluta, ou seja, a nota que apareceu maior número de vezes (supondo a inexistência de empates).
O programa abaixo, localizado em outro arquivo, utiliza esta unit.
program TESTA_UNIT;
uses CRT,ROTINAS;
var RAIO,COMP,AREA : integer;
begin clrscr; write('Digite o raio da circunferência: '); readln(RAIO); COMP := COMP_CIRC(RAIO); AREA := AREA_CIRC(RAIO); writeln('Comprimento = ',COMP:0:2); writeln('Área = ',AREA:0:2); readkey; end.
Assim que este programa for executado, o Turbo Pascal irá gerar o arquivo ROTINAS.TPU, que nada mais é do que o arquivo objeto que contém a unit ROTINAS compilada.
Observação:
Problemas poderão ocorrer em virtude da localização do arquivo da unit. O Turbo Pascal permite definirmos o diretório (pasta) onde estarão armazenadas todas as units necessárias, através do comando Options...Compiler...Directories.
P12.30. Criar uma unit chamada BIBLIOT contendo os seguintes subprogrmas:
a) uma procedimento chamado LEIA que receba um string S e uma variável inteira V, exiba o string S e, em seguida, leia a variável V;
b) um procedimento chamado PAUSA que exiba a mensagem "Pressione qualquer tecla para continuar", seguida de um comando de espera por uma tecla digitada;
c) uma função chamada MENOR que receba 3 valores inteiros e retorne o menor deles;
d) uma função chamada MEDIA que receba 2 valores inteiros e retorne a média (inteira) deles.
P12.31. Faça um programa que leia as três notas (do tipo inteiro) dos 50 alunos de uma turma, elimine a nota mais baixa e calcule e exiba a média das duas notas restantes. Obs: faça uso dos subprogramas da unit BIBLIOT que você achar possível.
P12.32. Acrescente a unit BIBLIOT um procedimento chamado FINAL que exiba a mensagem "Pressione qualquer tecla para retornar ao Turbo Pascal", seguida de um comando de espera por uma tecla digitada. Substitua no seu programa o procedimento PAUSA pelo procedimento FINAL.
uses CRT
Detalharemos, a seguir, cada um destes comandos.
KEYPRESSED – Função que retorna o valor lógico TRUE caso tenha sido pressionada alguma tecla. Sua sintaxe é:
KEYPRESSED : boolean
READKEY – Função que retorna o valor (do tipo caracter) de uma tecla pressionada. Bastante utilizada quando queremos receber um caracter pelo teclado sem que o usuário precise teclar ENTER. Sua sintaxe é:
READKEY : char
DELAY – Procedimento que provoca uma pausa num determinado intervalo de tempo antes de ser executado o próximo comando. O intervalo de tempo especificado é sempre em milisegundo. Sua sintaxe é:
DELAY (tempo : word)
WINDOW – Procedimento que nos permite definir o tamanho útil da tela. Quando definimos uma window, as coordenadas de referência de linha e coluna ficam relativas à nova window e sempre o canto superior esquerdo da tela é a posição (1,1), estando os procedimentos de vídeo também vinculados a esta nova janela. Sua sintaxe é:
WINDOW (x1, y1, x2, y2 : byte) onde: x1,y1 – são as coordenadas do canto superior esquerdo da janela x2,y2 – são as coordenadas do canto inferior direito da janela
R13.01. Escreva um procedimento que receba um string S e dois valores inteiros X e Y, e exiba o string S na coluna X e linha Y da tela.
procedure EXIBA (S:string; X,Y:byte); begin gotoxy(X,Y); write(S); end;
R13.02. Escreva um procedimento que receba um string S e um valor inteiro LIN e exiba o string S centralizado na linha L da tela. Obs: suponha que a "window" ativa está ocupando toda a tela.
procedure CENTRA (S:string; LIN:byte); var TAM,COL : byte; begin TAM := length(S); COL := ((80-TAM) div 2) + 1; gotoxy(COL,LIN); write(S); end;
R13.03. Escreva um programa que leia uma frase (máximo de 30 caracteres) e faça a mesma "passear" pela tela do computador, isto é, faça a frase movimentar-se horizontalmente coluna a coluna, iniciando na coluna 1 e linha 1, e quando chegar à última coluna de cada linha, passar para a linha seguinte, até a última linha da tela. Crie também uma alternativa do programa parar ao se pressionar qualquer tecla.
program PASSEIO; uses CRT; const TEMPO = 100; var FRASE : string[30]; TAM,COL,LIN : byte; begin clrscr; write('Frase: '); readln(FRASE); TAM := length(FRASE); COL := 1; LIN := 1; repeat clrscr; gotoxy(COL,LIN); write(FRASE); delay(TEMPO); COL := COL+1; if COL >= (80-TAM+1) then begin LIN := LIN+1; COL := 1; end; until (LIN > 25) or keypressed; end.
P13.01. Escreva a finalidade e dê um exemplo de cada um dos comandos abaixo:
a) KEYPRESSED
b) READKEY c) DELAY
d) WINDOW e) CLRSCR f) GOTOXY
g) WHEREX h) WHEREY
i) CLREOL j) TEXTCOLOR k) TEXTBACKGROUND
P13.02. Escreva um procedimento que receba uma string S e um valor inteiro C, e exiba a string S com a cor da fonte C.
P13.03. Escreva um procedimento que limpe uma área retangular da tela, sendo passados como parâmetros as coordenadas (coluna esquerda, linha superior, coluna direita, linha inferior).
P13.04. Escreva um procedimento que exiba uma janela na tela, sendo passados como parâmetros as coordenadas da janela (coluna esquerda, linha superior, coluna direita, linha inferior), e a cor de preenchimento da janela.
P13.05. Escreva um procedimento que exiba uma janela centralizada na tela, sendo passados com parâmetro o número de colunas e o número de linhas da janela, e a cor de preenchimento da mesma.
P13.06. Escreva um procedimento para exibir uma janela com sombra, isto é, uma janela de uma cor sobreposta a outra janela de cor diferente, com um pequeno deslocamento entre as duas. São passados como parâmetro as coordenadas da janela, a cor de preenchimento da janela e a cor da sombra.
P13.07. Escreva um programa para transformar a tela do computador em um verdadeiro arco-íris, ou seja, colocar em cada linha uma cor de fundo diferente.
P13.08. Escreva um programa que exiba uma tabela de conversão de graus Celsius para Farenheit, no intervalo de 1 a 100, variando de 1 em 1, dispostos em 5 colunas na tela.