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


Pascal - Apostilas - Informática Part2, Notas de estudo de Informática

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

2013

Compartilhado em 28/08/2013

Garoto
Garoto 🇪🇸

4.6

(121)

1 / 23

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdução à Programação
24
8. ESTRUTURAS DE DECISÃO
As estruturas de decisão (condicionais) são utilizadas para tomar uma decisão baseada no resultado da avaliação de uma
condição de controle e seleciona uma ou mais ações possíveis (comandos) para serem executados pelo computador.
No Pascal, existem três tipos de estrutura de decisão: O comando IF, que pode ser utilizado de duas formas: simples ou
composto; e o comando CASE, que é utilizado para uma decisão seletiva.
8.1. COMANDO IF-THEN-ELSE
O comando IF é equivalente ao comando SE da linguagem algorítmica, e deve ser utilizada da seguinte forma:
IF <condição> THEN
<comando1>
[ ELSE
<comando2> ]
Neste caso, se a <condição> resultar no valor TRUE, será executado o <comando1>; caso contrário, será executado o
<comando2>, se o mesmo existir, já que é opcional.
A <condição> deve ser uma expressão lógica. O <comando1> e <comando2> podem ser um comando simples ou um
comando composto. Um comando composto é formado por dois ou mais comandos, separados por ponto-e-vírgula e
delimitados por BEGIN e END.
EXEMPLO 1:
program EXEMPLO_DE_IF_THEN;
{Ler um número inteiro e exibí-lo se for positivo}
var
N : integer;
begin
readln(N);
if N > 0 then
writeln(N)
end.
No exemplo acima, o comando WRITE só será executado se a condição N>0 for verdadeira. Caso contrário, nenhuma
ação será executada.
EXEMPLO 2:
program EXEMPLO_DE_IF_THEN_ELSE;
{Lê um número e determinar se é maior que zero ou não}
var
N : integer;
begin
readln(N);
if N > 0 then
writeln (N,' é maior que zero' )
else
writeln (N,' não é maior que zero')
end.
Neste exemplo, a mensagem que será exibida dependerá do resultado da expressão lógica N>0. Se for verdadeira, será
executado o comando WRITE que sucede a palavra THEN. Caso contrário, será executado o WRITE que sucede a
palavra ELSE. Em nenhuma hipótese serão executados os dois comandos.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Pré-visualização parcial do texto

Baixe Pascal - Apostilas - Informática Part2 e outras Notas de estudo em PDF para Informática, somente na Docsity!

8. ESTRUTURAS DE DECISÃO

As estruturas de decisão (condicionais) são utilizadas para tomar uma decisão baseada no resultado da avaliação de uma condição de controle e seleciona uma ou mais ações possíveis (comandos) para serem executados pelo computador.

No Pascal, existem três tipos de estrutura de decisão: O comando IF, que pode ser utilizado de duas formas: simples ou composto; e o comando CASE, que é utilizado para uma decisão seletiva.

8.1. COMANDO IF-THEN-ELSE

O comando IF é equivalente ao comando SE da linguagem algorítmica, e deve ser utilizada da seguinte forma:

IF <condição> THEN [ ELSE ]

Neste caso, se a <condição> resultar no valor TRUE, será executado o ; caso contrário, será executado o , se o mesmo existir, já que é opcional.

A <condição> deve ser uma expressão lógica. O e podem ser um comando simples ou um comando composto. Um comando composto é formado por dois ou mais comandos, separados por ponto-e-vírgula e delimitados por BEGIN e END.

EXEMPLO 1:

program EXEMPLO_DE_IF_THEN; {Ler um número inteiro e exibí-lo se for positivo} var N : integer;

begin readln(N); if N > 0 then writeln(N) end.

No exemplo acima, o comando WRITE só será executado se a condição N>0 for verdadeira. Caso contrário, nenhuma ação será executada.

EXEMPLO 2:

program EXEMPLO_DE_IF_THEN_ELSE; {Lê um número e determinar se é maior que zero ou não} var N : integer;

begin readln(N); if N > 0 then writeln (N,' é maior que zero' ) else writeln (N,' não é maior que zero') end.

Neste exemplo, a mensagem que será exibida dependerá do resultado da expressão lógica N>0. Se for verdadeira, será executado o comando WRITE que sucede a palavra THEN. Caso contrário, será executado o WRITE que sucede a palavra ELSE. Em nenhuma hipótese serão executados os dois comandos.

EXEMPLO 3:

program EXEMPLO_DE_IFS_ANINHADOS; {Determinar se um número é maior, menor ou igual a zero} var N : integer;

begin readln(N); if N > 0 then writeln (N,' é maior que zero' ) else if N < 0 then writeln (N,' é menor que zero') else writeln (N,' é igual a zero') end.

Pode-se observar que diversas linhas deste programa terminaram sem o ponto-e-vírgula, isto porque o ponto-e-vírgula só é utilizado para separar comandos e/ou estruturas.

Deve-se tomar cuidado quando da utilização de IF's aninhados, pois a cláusula ELSE é sempre relacionada ao último IF. Se, dentro de algum programa, precisarmos contornar este fato, podemos fazê-lo com os delimitadores BEGIN e END.

EXEMPLO:

LINGUAGEM ALGORITMICA LINGUAGEM PASCAL

se COND então se COND então comando senão comando

if COND1 then begin if COND2 then comando end else comando

8.2. COMANDO CASE-OF (DECISÃO MÚLTIPLA)

Utilizada quando se deseja executar um entre vários comandos (ou uma entre várias seqüências de comandos) dependendo do resultado de uma expressão.

A estrutura de seleção (decisão múltipla) do Pascal é o CASE, e obedece a seguinte sintaxe:

CASE <expressão> OF <lista-de-constantes-1> : <comando-1>; <lista-de-constantes-2> : <comando-2>; ... [ELSE <comando-n>] END

A <expressão> deve resultar um tipo escalar (outros tipos que não o REAL e o STRING). A <lista-de-constantes -x> devem conter uma ou mais constantes (separadas por vírgula), e devem ser do mesmo tipo da <expressão>. O <comando-x> pode ser um comando simples ou composto.

O resultado de <expressão> é comparado com cada constante da <lista-de-constante> para verificar igualdade. Caso a igualdade seja verificada, o correspondente é executado e a estrutura finalizada. Caso nenhuma igualdade seja verificada, o correspondente ao ELSE (optativo) será executado.

EXERCÍCIOS PROPOSTOS

P8.01. Qual a utilidade da estrutura de decisão?

P8.02. Qual a diferença entre a estrutura de decisão simples e a composta?

P8.03. Quais são os comandos de decisão existentes no Pascal?

P8.04. Em que situações é mais indicado o uso da estrutura CASE-OF? Quando não podemos utilizá-la?

P8.05. Os comandos (i) e (ii) são equivalentes? Explique sua resposta.

(i) A := B = C (ii) if B = C then A := TRUE else A := FALSE

P8.06. Observe o trecho de programa abaixo, considerando L1, L2 e L3 como variáveis booleanas. ... if L1 then write('A') else if L2 then if L3 then write('B') else begin write('C'); write('D'); end else write('E'); ...

Agora, responda as seguintes questões: a) Se forem lidos V, V e V, o que será escrito pelo algoritmo? b) Se forem lidos F, V e V, o que será escrito pelo algoritmo? c) Se forem lidos F, V e F, o que será escrito pelo algoritmo? d) Que valores deveriam ser lidos para que fosse escrito apenas "E"?

P8.07. Escreva um programa que leia dois números e exiba o maior deles.

P8.08. Escreva um programa que leia dois números e exiba-os em ordem crescente.

P8.09. Escreva um programa que leia um número inteiro e determine se ele é par ou ímpar.

P8.10. Deseja-se calcular a conta de consumo de energia elétrica de um consumidor. Para isto, escreva um programa que leia o código do consumidor, o preço do Kw e a quantidade de Kw consumido, e exiba o código do consumidor e o total a pagar.

  • total a pagar = preço x quantidade
  • total a pagar mínimo = R$ 11,

P8.11. Escreva um programa para ler três números inteiros distintos e determinar o menor deles.

P8.12. Faça um programa que, dado as três notas de um aluno, determine e exiba a sua média final e o seu conceito, sabendo-se que:

  • a média final é calculada pela média aritmética das 3 notas;
  • o conceito é determinado de com base na tabela abaixo:

MÉDIA FINAL CONCEITO

≥ 8,0 A

≥ 5,0 e < 8,0 B < 5,0 C

P8.13. Escreva um programa que determine o grau de obesidade de uma pessoa, sendo fornecido o peso e a altura da pessoa. O grau de obesidade é determinado pelo índice da massa corpórea (Massa = Peso / Altura^2 ) através da tabela abaixo: MASSA CORPÓREA GRAU DE OBESIDADE < 26 Normal ≥ 26 e < 30 Obeso ≥ 30 Obeso Mórbido

P8.14. O Botafogo Futebol Clube deseja aumentar o salário de seus jogadores. O reajuste deve obedecer a seguinte tabela: SALÁRIO ATUAL (R$) AUMENTO 0,00 a 1.000,00 20% 1.000,01 a 5.000,00 10% acima de 5.000,00 0% Escrever um programa que leia o nome e o salário atual de um jogador, e exiba o nome, o salário atual e o salário reajustado.

P8.15. Faça um programa para calcular a conta final de um hóspede de um hotel, considerando que:

a) serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou D), o número de diárias utilizadas pelo hóspede e o valor do consumo interno do hóspede; b) o valor da diária é determinado pela seguinte tabela:

TIPO DO APTO. VALOR DA DIÁRIA (R$)

A 150,

B 100,

C 75,

D 50,

c) o valor total das diárias é calculado pela multiplicação do número de diárias utilizadas pelo valor da diária; d) o subtotal é calculado pela soma do valor total das diárias e o valor do consumo interno; e) o valor da taxa de serviço equivale a 10% do subtotal; f) o total geral resulta da soma do subtotal com a taxa de serviço. g) escreva a conta final contendo: o nome do hóspede, o tipo do apartamento, o número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo interno, o subtotal, o valor da taxa de serviço e o total geral.

P8.16. Deseja-se calcular o imposto de renda de um contribuinte. Para isto, escreva um programa que:

a) leia os seguintes dados do contribuinte: CPF, nome, rendimento anual, imposto retido na fonte, contribuição previdenciária, despesas médicas, número de dependentes; b) é deduzido o valor de R$ 1.080,00 por cada dependente; c) cálculo do valor total das deduções: contribuição previdenciária + despesas médicas + dedução dos dependentes; d) cálculo da base de cálculo: rendimento anual – total das deduções; e) com base na tabela abaixo:

Base de Cálculo Alíquota Parcela a Deduzir até 10.800,00 Isento - De 10.800,01 até 21.600,00 15% 1.620, acima de 21.600,00 25% 3.780,

Cálculo do imposto devido: ( (base de cálculo * alíquota) - parcela a deduzir )

f) haverá imposto a pagar se a diferença entre o imposto devido e o imposto retido na fonte for positiva; caso contrário, haverá imposto a restituir. g) exiba todos os dados lidos e calculados.

Exemplo: este programa lê um conjunto 100 números inteiros e exibe a soma dos mesmos.

program LACO_CONTADO;

var NUM,SOMA,CONT : integer;

begin

SOMA := 0;

CONT := 1;

while CONT <= 100 do begin write('Digite um número inteiro: '); readln(NUM); SOMA := SOMA + NUM; end

writeln('A soma é ',SOMA);

end.

9.1.2. CONTROLE POR ENTRADA (FLAG)

Quando não conhecemos o número de repetições e este for determinado por um valor que será lido (que chamamos de flag ), devemos utilizar um controle de repetições por entrada, também conhecido como controle por sentinela.

Para controle por flag, a melhor estratégia é utilizar um "loop infinito" com a condição de parada sendo aplicada através do comando BREAK, dentro de um comando IF logo após a leitura da variável a ser comparada com o flag.

Obs: o comando BREAK funciona com uma "saída forçada" de qualquer comando de repetição. Porém, só é recomendado o seu uso dentro de um "loop infinito", senão pode quebrar a forma estruturada que é própria dos comandos de repetição.

Exemplo: este programa lê um conjunto de números inteiros e exiba o valor médio dos mesmos. Obs: a condição de saída do laço será a leitura do valor 0 (flag).

program LACO_COM_FLAG;

var NUM,CONT,SOMA,MEDIA : integer;

begin

SOMA := 0; CONT := 0;

while TRUE do {loop infinito} begin write('Digite um número inteiro (0 para encerrar): '); readln(NUM); if NUM = 0 then break SOMA := SOMA + NUM; CONT := CONT + 1; end;

MEDIA := SOMA div CONT; Writeln('Média = ',MEDIA);

end.

9.2. REPETIÇÃO COM TESTE NO FINAL ( REPEAT-UNTIL )

A estrutura de controle REPEAT permite que um comando simples ou composto seja executado repetidamente até que uma condição de controle seja FALSA. A forma geral do REPEAT é:

REPEAT UNTIL <condição>

A <condição> deve ser uma expressão lógica. O pode ser um comando simples ou um comando composto. Não há a necessidade dos delimitadores BEGIN e END no comando composto em um REPEAT.

Como o teste da <condição> é realizado no final do laço, o será executado uma ou mais vezes, dependendo da avaliação da <condição>.

EXEMPLO:

program EXEMPLO_DE_REPEAT; {escrever os núm. inteiros de 1 a 100}

var N : Integer;

begin N := 1; repeat writeln(N); N := N + 1 until N > 100 end.

O exemplo anterior é equivalente ao exemplo do WHILE, onde o comando WRITELN será executado repetidas vezes até que a variável N possua um valor superior a 100.

A estrutura REPEAT também é bastante utilizada para repetirmos um programa diversas vezes, até que o usuário deseje sair do mesmo.

EXEMPLO:

program EXEMPLO_DE_REPEAT_2; {calcula a média de 2 números dados repetidas vezes}

uses CRT;

var N1,N2,MEDIA : real; RESP : char;

begin clrScr; repeat write('Digite os dois números: '); readln (N1,N2); MEDIA := (N1+N2)/2; writeln (MEDIA); write ('Deseja repetir o programa (s/n)? '); RESP := readkey; until (RESP='N') or (RESP='n') end.

EXERCÍCIOS PROPOSTOS

P9.01. Qual a utilidade da estrutura de repetição?

P9.02. Em que consiste o controle de repetições por contador?

P9.03. Em que consiste o controle de repetições por flag?

P9.04. Quais são as estruturas de repetição existentes no Pascal?

P9.05. Qual a principal diferença entre o WHILE-DO e o REPEAT-UNTIL?

P9.06. Em que situações é mais indicado o uso da estrutura FOR?

P9.07. Em que situações não podemos utilizar a estrutura FOR?

P9.08. Dado o trecho de programa abaixo:

... readln(N) R := 1; I := 2; while I <= N-1 do begin R := R * 2; I := I + 1; end; write(R); ...

Reescreva-o utilizando: a) o comando FOR b) o comando REPEAT

P9.09. Faça o acompanhamento da execução do programa abaixo e preencha a Tabela de Variáveis:

TRECHO DE PROGRAMA TABELA DE VARIÁVEIS

... N L Saída N := 0; L := 1; while N <> 6 do begin L := L * (-1); N := N + 1; if L > 0 then writeln(N); end; ...

P9.10. Faça um programa que mostre todos os números inteiros pares de 2 a 100.

P9.11. Faça um programa para gerar e exibir os números inteiros de 20 até 10, decrescendo de 1 em 1.

P9.12. Faça um programa que leia um número N, some todos os números inteiros de 1 a N, e mostre o resultado obtido.

P9.13. Sendo

H 1

N

, faça um programa p/ calcular H. O número N é lido.

P9.14. Faça um programa que leia N e uma lista de N números e mostre a soma de todos os números da lista.

P9.15. Escreva um programa que leia um conjunto de 100 números inteiros positivos e determine o maior deles.

P9.16. Escreva um programa que leia um número inteiro N e uma lista de N números inteiros positivos e determine o maior número da lista.

P9.17. Escreva um programa que leia um conjunto de números inteiros positivos e determine o maior deles. A leitura do valor 0 (zero) indica o fim dos dados (flag).

P9.18. Faça um programa que leia uma lista de números inteiros positivos terminada pelo número 0 (zero). Ao final, o programa deve mostrar a média aritmética de todos os números lidos (excluindo o zero).

P9.19. Faça um programa que leia uma lista de letras terminada pela letra Z. Ao final, o programa deve mostrar a quantidade lida de cada vogal.

P9.20. Escreva um programa que calcule o fatorial de um número inteiro lido, sabendo-se que: N! = 1 x 2 x 3 x ... x N-1 x N 0! = 1

P9.21. Faça um programa que leia 3 números inteiros (N, X, Y) e mostre todos os números múltiplos de N entre X e Y.

P9.22. Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele próprio. Escreva um programa que leia um número e determine se ele é ou não primo.

P9.23. Faça um programa que leia dois valores inteiros (X e Y) e mostre todos os números primos entre X e Y.

P9.24. Faça um programa que leia um número N, calcule e mostre os N primeiros termos da seqüência de Fibonacci (0, 1, 1, 2, 3, 5, 8, 13, ...). O valor lido para N sempre será maior ou igual a 2.

P9.25. Faça um programa que, para um número indeterminado de pessoas:

  • leia a idade de cada pessoa, sendo que a leitura da idade 0 (zero) indica o fim dos dados (flag) e não deve ser considerada;
  • calcule e escreva o número de pessoas;
  • calcule e escreva a idade média do grupo;
  • calcule e escreva a menor e a maior idade;

P9.26. Faça um programa que leia a altura de um grupo de 20 pessoas, calcule e exiba:

  • a maior altura do grupo;
  • a altura média;
  • o número de pessoas com altura superior a 2 metros.

P9.27. Num frigorífico existem 90 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Faça um programa que escreva o número e o peso do boi mais gordo e do boi mais magro (supondo que não haja emp ates).

P9.28. Foi feita uma pesquisa de audiência de canal de TV em várias casas de uma certa cidade, num determinado dia. Para cada casa visitada, é fornecido o número do canal (5, 7, 10 ou 12) e o número de pessoas que o estavam assistindo naquela casa. Fazer um programa que:

  • leia um número indeterminado de dados, sendo que o flag corresponde ao canal igual a 0 (zero);
  • calcule e escreva a porcentagem de audiência de cada emissora.

P9.29. O cardápio de uma casa de lanches, especializada em sanduíches, é dado abaixo. Escreva um programa que leia o código e a quantidade de cada item comprado por um freguês, calcule e exiba o total a pagar. Obs: A leitura do código "X" indica o fim dos itens.

CÓDIGO PRODUTO PREÇO (R$)

H Hamburger 1, C Cheeseburger 1, Q Queijo Prato 1,

10. MANIPULAÇÃO DE STRINGS

10.1. O TIPO DE DADO STRING

Strings, como trechos de texto, são os tipos de dados mais familiares aos seres humanos. Podemos utilizá-lo de forma completa ou apenas um caracter por vez. Nesse caso, usamos colchetes com um valor indicando a posição do caracter que queremos acessar. Observe o exemplo abaixo:

S := 'COMPUTADOR'; write(s[3]); {será exibida a letra M (3ª^ letra da string S)}

O tamanho de uma string pode variar entre 0 e 255 caracteres. Se na declaração de uma variável string não especificarmos o tamanho máximo da string, será assumido o valor 255. Por exemplo:

var S1 : string; S2 : string[10];

No exemplo acima, a variável S1 pode conter até 255 caracteres, enquanto a variável S2 pode conter no máximo 10 caracteres. Esse tamanho máximo nós denominamos de comprimento físico da string, que é o que determina o espaço reservado para a variável.

Se na variável S2 for armazenado um string de 4 caracteres, por exemplo, o comprimento físico continua sendo de 10 caracteres, enquanto que o espaço ocupado, no caso 4 caracteres, é o que denominamos comprimento lógico do string. O comprimento lógico de uma string pode variar conforme o valor recebido pela variável durante o programa.

Resumindo, temos então que um string pode ter o seu comprimento físico variando de 1 a 255 caracteres, e o seu comprimento lógico variando de 0 até o valor do comprimento físico.

10.2. FUNÇÕES E PROCEDIMENTOS PREDEFINIDOS

O Turbo Pascal dispõe de algumas funções e procedimentos que visam em essência, à otimização do trabalho do programador na parte que se refere à utilização de strings:

– LENGTH

– UPCASE

– CONCAT

– POS

– COPY

– DELETE

– INSERT

– VAL

– STR

– CHR

– ORD

LENGTH – Função que retorna o número de caracteres de uma string. Sua sintaxe é:

LENGTH (str : string) : byte;

Exemplo: tam := length('TURBO PASCAL'); writeln (tam); {será exibido o valor 12}

UPCASE – Função que retorna o caractere contido no parâmetro em maiúsculo. Sua sintaxe é:

UPCASE (ch : char) : char;

Exemplo: letra := 'a'; maiusc := upcase (letra); writeln (maiusc); {será exibida a letra 'A' (maiúscula) }

CONCAT – Função que retorna a união de duas ou mais strings passadas como parâmetros. Sua sintaxe é:

CONCAT (str1 , str2 , ... , strn : string) : string;

Exemplo: pal1 := 'TURBO'; pal2 := 'PASCAL'; uniao := concat (pal1,' ',pal2); writeln (uniao); {será exibido o string 'TURBO PASCAL'}

A função CONCAT tem efeito semelhante ao operador + (operador de concatenação).

Exemplo: pal1 := 'TURBO'; pal2 := 'PASCAL'; uniao := pal1 + ' ' + pal2; writeln (uniao); {será exibido o string 'TURBO PASCAL'}

POS – Função que retorna a posição que uma substring ocupa dentro de uma string passadas como parâmetro. Sua sintaxe é:

POS (substr , str : string) : byte;

Exemplo: frase := 'VAMOS ESTUDAR MAIS'; pesq := 'ESTU'; posicao := pos (pesq,frase); writeln (posicao); {será exibido o valor 7}

COPY – Função que retorna uma substring de uma string passadas como parâmetro, de acordo com sua posição e quantidade de caracteres especificados. Sua sintaxe é:

COPY (str:string; pos:byte; quant:byte) : string;

Exemplo: frase := 'VAMOS ESTUDAR MAIS'; pedaco := copy(frase,7,4); writeln (pedaco); {será exibido o string 'ESTU'}

DELETE – Procedimento que exclui um pedaço de uma string passada como parâmetro, de acordo com uma posição e quantidade de caracteres especificados. Sua sintaxe é:

DELETE (var str:string; pos:byte; quant:byte);

Exemplo: frase := 'TURBO PASCAL 7.0'; delete (frase,7,7); writeln (frase); {será exibido o string 'TURBO 7.0'}

EXERCÍCIOS RESOLVIDOS

R10.01. Escreva um programa que leia uma string S e a exiba em letras maiúsculas.

program R8_01;

uses CRT;

var S : string; I,TAM : byte;

begin clrscr; writeln('Digite uma frase:'); readln(S); TAM := length(S); writeln('A frase em maiúsculas é:'); for I := 1 to TAM do write(upcase(S[I])); readkey; end;

R10.02. Escreva um programa que leia uma palavra e uma frase S, e calcule e exiba o número de ocorrências da palavra dentro da frase.

program R8_02;

uses CRT;

var PAL, FRASE : string I,CONT,TPAL,TFRASE : byte;

begin

clrscr; CONT := 0;

writeln('Digite uma frase:'); readln(FRASE);

writeln('Digite uma palavra:'); readln(PAL);

TPAL := length(PAL) TFRASE := length(FRASE);

for I := 1 to (TFRASE-TPAL+1) do if copy(FRASE,I,TPAL) = PAL then CONT := CONT + 1;

writeln('A palavra ',PAL,' aparece ',CONT,' vezes na frase'); readkey;

end;

EXERCÍCIOS PROPOSTOS

P10.01. O que é uma string?

P10.02 Qual o tamanho que uma string pode assumir?

P10.03. Qual a diferença entre comprimento físico e comprimento lógico? Qual o tamanho mínimo e máximo de cada um deles?

P10.04. Escreva a finalidade e dê um exemplo de cada um dos comandos abaixo: a) LENGTH b) UPCASE c) CONCAT d) POS

e) COPY f) DELETE g) INSERT h) VAL

i) STR j) CHR k) ORD

P10.05. Escreva um programa que lê uma frase pelo teclado e diz quantos caracteres foram digitados na mesma.

P10.06. Escreva um programa que receba uma frase pelo teclado e determina a quantidade de cada vogal contida na mesma.

P10.07. Escreva um programa que receba uma string do teclado e a exiba invertida. Exemplo: Entrada ‡ MARIA BONITA Saída ‡ ATINOB AIRAM

P10.08. Escreva um programa que leia o nome de uma pessoa e exiba-o conforme o exemplo abaixo. Obs: Suponha que o nome lido não possua nenhuma preposição, artigo, etc. Exemplo: Entrada ‡ FLAVIO RIBEIRO COUTINHO Saída ‡ COUTINHO, F. R.

P10.09. Escreva um programa que leia três strings: FRASE, S1 e S2. Em seguida, substitua a primeira ocorrência de S dentro de FRASE por S2. Depois da modificação, exiba FRASE.

P10.10 Escreva um programa que leia uma frase de no máximo 20 caracteres e o exiba de acordo com o exemplo seguinte. Exemplo: Entrada ‡ ABCDE Saída ‡ ABCDE BCDEA CDEAB DEABC EABCD

P10.11. Escreva um programa que, a partir da digitação do infinitivo de um verbo regular, faça a conjugação do mesmo no presente do indicativo para as pessoas do singular e plural. Exemplo: Entrada ‡ CANTAR Saída ‡ Eu canto Tu cantas Ele canta Nós cantamos Vós cantais Eles cantam

Outros exemplos de declarações de vetores:

var IDADE : array[1..20] of integer; NOME : array[1..30] of string; QUANT : array['A'..'Z'] of integer; RECEITA, DESPESA : array[90..96] of real; VETOR : array[-5..5] of char;

Para processarmos individualmente todos os componentes de um vetor, é aconselhável o uso da estrutura FOR, para que possamos variar o índice do vetor.

EXERCÍCIOS RESOLVIDOS

R11.01. Dado um vetor A definido com A : array[1..100] of integer;

a) preenchê-lo com o valor 30;

for I:=1 to 100 do A[I]:=30;

b) preenchê-lo com os números inteiros 1,2,3,...,100.

for I:=1 to 100 do A[I]:=I;

R11.02. Fazer um programa que leia um vetor A contendo 30 números inteiros, calcule e exiba:

a) o maior elemento;

b) a posição (índice) do maior elemento.

program R9_02;

const N = 30; {número de elementos do vetor}

var A : array[1..N] of integer; I, POS, MAIOR : integer;

begin {leitura do vetor} for I:=1 to N do readln(A[I]); {inicialização das variáveis} MAIOR := A[1]; POS := 1; {comparação dos elementos com a variável MAIOR} for I := 2 to N do if A[I] > MAIOR then begin MAIOR := A[I]; POS := I; end; {exibição dos resultados} writeln(MAIOR,POS); end.

R11.03. Fazer um programa para ler 20 números, calcular a média dos mesmos e exibir os números que estiverem acima da média.

program R9_03;

const N = 20; {número de elementos do vetor}

var NUM : array[1..N] of real; I,SOMA : integer; MEDIA : real;

begin {inicialização da variável SOMA} SOMA := 0; {leitura e soma dos números} for I:=1 to N do begin readln(NUM[I]); SOMA := SOMA + NUM[I]; end; {cálculo da média} MEDIA := SOMA / N; {exibição dos números maiores que a média} for I:=1 to N do if NUM[I] > MEDIA then writeln(NUM[I]); end.

R11.04. Fazer um programa que:

a) leia um vetor VET de 100 números inteiros;

b) leia um valor inteiro NUM;

c) determine e exiba a posição de NUM dentro de VET. Caso NUM não seja encontrado dentro de VET, exiba o valor 0 (zero).

Program R9_04;

const N = 100; {número de elementos do vetor}

var VET : array[1..N] of integer; NUM,I,POS : integer;

begin {leitura dos dados} for I:=1 to N do readln(VET[I]); readln(NUM); {determinação da posição} POS := 0; for I:=1 to N do if VET[I] = NUM then POS := I; {exibição do resultado} writeln(POS); end.