Você está na página 1de 24

Escola Nacional de Ciências Estatísticas

Curso de Graduação em Estatística


(Bacharelado)

Computação

Unidade VII:

 Comandos de Repetição
(parte II): for
 loops aninhados

 Conceitos Básicos sobre


Vetores

Professor: Eduardo Corrêa


Data: 24/09/2007

1
Escola Nacional de Ciências Estatísticas

Introdução
.
Dentre os recursos disponibilizados pelas linguagens de programação para a
manipulação de conjuntos de informações, os vetores destacam-se por sua simplicidade e
eficiência. Esta unidade tem como objetivo principal apresentar dois temas: os conceitos
básicos vetores (declaração, acesso aos elementos, atribuição, etc) e o comando for (outro
comando de repetição). A opção por “misturar” os dois temas é justificada pelo fato de que,
na maioria das situações práticas, torna-se necessário utilizar um comando de repetição
para trabalhar com um vetor (e o comando for é o mais utilizado para isso).

VII.1 A Estrutura For-Do

A estrutura FOR-DO é uma estrutura de repetição bastante simples. Ela serve para
executar um conjunto de comandos por um número fixo de vezes. Por exemplo: se você
escreve a linha for I:=1 to 15 do, você está instruindo o Pascal a executar por 15
vezes os comandos que forem colocados no bloco subordinado ao for. A Figura VII.1
ilustra o modelo de utilização do FOR-DO.

for VARIÁVEL_INTEIRA := VALORinicial to VALORfinal do


begin
c1;
c2;

cn;
end;

Figura VII.1– modelo de utilização da estrutura for-do.

Para poder utilizar um loop FOR-DO é preciso, inicialmente, especificar uma


variável inteira que será utilizada como variável de controle (esta variável deve ser
declarada na seção de declarações do programa). Em seguida devemos especificar o valor
inicial e o valor final para a variável de controle. Durante a execução do laço, a cada
iteração a variável de controle assume o valor inicial na primeira iteração. Ela tem seu valor
automaticamente incrementado em 1 a cada iteração. O laço termina quando o seu valor
atingir o valor final.
O exemplo da Figura VII.2 (página a seguir) ilustra a forma de implementar um
programa que calcula a média de 50 notas com o uso do comando for. Compare esta
implementação com aquelas que utilizam os comandos repeat e while, apresentadas na
Unidade VI.

2
Escola Nacional de Ciências Estatísticas

program ProgComFor;
var NOTA, SOMA, MEDIA: real;
I: integer;
begin
SOMA :=0;
writeln(‘Digite 50 notas: ‘);
for I:=1 to 50 do
begin
readln(NOTA);
SOMA := SOMA + NOTA;
end;
MEDIA := SOMA / 50;
writeln(‘A media eh: ‘,MEDIA);
readln;
end.

Figura VII.2– Programa que calcula a média de 50 notas com o comando de repetição for.

O programa acima funciona da seguinte forma. Na linha 5 o valor 0 é atribuído à


variável SOMA (ela será usada para armazenar a soma das notas dos 50 alunos). A linha 6
imprime uma mensagem na tela, que informa ao usuário que ele terá que digitar 50 notas.
As linhas 7 a 11 formam o laço que será executado 50 vezes. Quando o Pascal
executar este loop pela primeira vez ele vai determinar que I (variável de controle) é igual a
1 e vai executar o bloco de código subordinado ao for (linhas 9 e 10). Quando alcançar a
linha 11 (o end; do for) ele somará automaticamente 1 a I e o controle será retornado
para a linha 7. Isso será feito repetidamente até o valor de I ultrapassar o limite máximo
(nesse caso, 50). Quando isso acontecer o loop será encerrado e o controle passará para a
linha 12 (cálculo da média). Depois executará a linha 13 (o valor da média será impresso) e,
em seguida, encerrará sua execução.
As Figuras VII.3 e VII.4 ilustram, respectivamente, um exemplo simples de
programa que utiliza a estrutura FOR-DO e a tela que apresenta o resultado de sua
execução.

program TesteDoFor_1;
var K: integer;
begin
for K:=1 to 15 do
begin
writeln('LINHA ',K);
end;
readln;
end.
Figura VII.3– Programa que imprime 15 linhas com o uso do comando for.

3
Escola Nacional de Ciências Estatísticas

Figura VII.4– Resultado da Execução do Programa “TesteDoFor_1”

O programa-exemplo usa um laço montado com FOR-DO para imprimir 15 vezes a


palavra LINHA, seguida do valor da variável K (variável de controle do FOR). Observe
que o valor de K muda (aumenta em 1) para cada iteração do loop.

Algumas considerações importantes sobre o uso do comando for:

• O comando for executa um laço por um número fixo de vezes. Para fazer isso,
basta especificar uma variável controladora, seu limite inferior e o seu limite
superior.

• O programador não tem a necessidade de mexer no valor da variável de controle


dentro do laço (na verdade, ele não deve fazer isso). A valor da variável de
controle é incrementado automaticamente em 1 ao final de cada iteração do
loop. Na primeira iteração do loop o valor da variável de controle será igual ao
do limite inferior. Na segunda iteração será igual ao limite inferior mais um. E
na última, o valor será igual ao do limite superior.

• Não é preciso atribuir nenhum valor para a variável controladora antes da


execução do comando for (ao contrário do que ocorre com o comando while)

• Os comandos subordinados ao for devem estar localizados entre as palavras


begin e end.

• Com o uso do for o programa nunca entra em loop infinito, pois ele será
repetido por um número fixo de vezes. O programa só corre risco de entrar em
loop infinito se o programador alterar de forma equivocada o valor da variável
de controle dentro dos comandos subordinados ao for (neste curso,
recomendamos que você não faça isso!).

4
Escola Nacional de Ciências Estatísticas

VII.2 Quando usar o For? Quando usar o Repeat e o While?

Tudo que é feito com a estrutura FOR-DO pode ser implementado com as
estruturas WHILE-DO e REPEAT-UNTIL. Mas a recíproca não é verdadeira: existem
certos tipos de laço que só podem ser implementados com WHILE-DO ou REPEAT-
UNTIL. Resumidamente, o que ocorre é o seguinte:

• Se você vai implementar um laço que será executado por um número previsível
(fixo) de vezes, você pode utilizar a estrutura FOR-DO (já que ela é mais
simples e não nos obriga a incrementar a variável de controle!). Alguns
exemplos de programas que podem ser implementados com o comando for:

o Programa que recebe as notas de 50 alunos e calcula a média (o laço é


executado por um número fixo de vezes: 50).

o Programa que determina se um número N é primo (basta executar o laço N


div 2 vezes ou sqr(N) vezes).

• Se você vai implementar um laço que será executado por um número


imprevisível de vezes, não é possível utilizar a estrutura FOR-DO. Alguns
exemplos:

o Programa que calcula o M.D.C. de dois inteiros pelo método de Euclides


(não sabemos em que iteração que o resto da divisão será igual a zero –
OBS: ver Lab. V)

o Programa que deve ser mantido em execução enquanto o usuário desejar


(por exemplo, até que usuário digite –1. Não podemos prever em que
iteração o usuário fará isso!).

VII.3 O For-Do “reverso”

A linguagem Pascal também permite que você monte um for “reverso”. Isto
significa criar um laço for onde o valor da variável de controle comece no limite superior e
seja decrementado em 1 a cada iteração até atingir o valor do limite inferior. Neste caso é
preciso utilizar a palavra chave downto. Observe as Figuras VII.5 e VII.6. Elas ilustram,
respectivamente, um exemplo simples de programa que utiliza a estrutura FOR-DOWNTO-
DO e a tela que apresenta o resultado de sua execução.

5
Escola Nacional de Ciências Estatísticas

program TesteDoFor_2;
var K: integer;
begin
for K:=15 downto 1 do
begin
writeln('LINHA ',K);
end;
readln;
end.
Figura VII.5– Programa que imprime 15 linhas com o uso da estrutura for-downto-do.

Figura VII.6– Resultado da Execução do Programa “TesteDoFor_2”

VII.4 Loops Aninhados

Muitos problemas só podem ser resolvidos com a utilização de loops aninhados, o


que significa um laço dentro de outro laço. Isso significa utilizar um for dentro do outro,
um while dentro de um for, um while dentro de um repeat, etc. Em muitos casos, é preciso
até mesmo utilizar mais de 2 laços aninhados (ex: for dentro de um for dentro de outro for).
A Figura VII.7 apresenta um exemplo de programa com loops aninhados. Este
programa solicita com que o usuário digite um número entre 1 e 10 e, em seguida, mostra a
“tabuada” deste número. O programa é mantido em execução até que o usuário deseje
encerrar (uma pergunta é feita sempre que uma tabuada é mostrada).
Os dois laços do programa funcionam da seguinte forma: o laço externo (repeat) é
usado para manter o programa em execução enquanto o usuário desejar. O laço interno
(for) computa e mostra na tela a tabuada do número.

6
Escola Nacional de Ciências Estatísticas

program ProgTabuada;
var I, N: integer;
RESP: char;
begin
repeat
writeln('Digite um numero entre 1 em 10: ');
readln(N);
for I:=1 to 10 do
begin
writeln(N,'x',I,' = ',N*I);
writeln;
end;
writeln;
write('Deseja mais um numero (S=Sim, N=Nao)? ');
readln(RESP);
until (RESP = 'N') or (RESP = 'n');
writeln('OBRIGADO POR USAR O PROGRAMA TABUADA');
readln;
end.
Figura VII.7– Programa Tabuada – Exemplo de Loops Aninhados.

VII.5 Problemas Resolvidos

Esta seção apresenta uma série de exercícios resolvidos que exemplificam o uso do
comando for. Alguns conceitos novos serão apresentados na explicação de cada exercício.

EXEMPLO VII.1 Escreva um programa que imprima a palavra ‘ENCE’ 30 vezes na tela,
usando o comando FOR.

RESOLUÇÃO:

program EscreveENCE;
var I:integer;
begin
for I:=1 to 30 do
writeln('ENCE');
readln;
end.

Este programa ilustra um exemplo de uma estrutra FOR-DO com apenas um


comando subordinado: write(‘ENCE’). Neste caso (assim como ocorre com IF-
THEN e ELSE) não é preciso usar o BEGIN e END, pois o compilador saberá que é para
executar 30 vezes apenas o comando que estiver localizado abaixo do comando for. Mas se

7
Escola Nacional de Ciências Estatísticas

você quiser usar o BEGIN e END não tem problema! O programa também funcionará
normalmente, conforme ilustra a resolução abaixo.

program EscreveENCE2;
var I:integer;
begin
for I:=1 to 30 do
begin
writeln('ENCE');
end;
readln;
end.

Em resumo: sempre que você tiver mais de um comando subordinado ao FOR-DO,


você precisa usar BEGIN e END. De maneira oposta, se você tiver apenas um comando
subordinado ao FOR-DO o uso do BEGIN e END é opcional.

EXEMPLO VII.2 Escreva um programa que receba a nota de 20 alunos como entrada e que
imprima qual delas é a maior.

RESOLUÇÃO:

program MaiorDe20;
const MAX = 20;
var I:integer;
N, MAIOR: real;
begin
writeln('Programa Maior Nota');
writeln('===================');
writeln('Digite ',MAX, ' Notas:');
MAIOR:=0;
for I:=1 to MAX do
begin
write('Nota ',I,': ');
readln(N);
if (N > MAIOR) then MAIOR := N;
end;

writeln('A maior nota digitada foi ',MAIOR:3:2);


readln;

end.

Observe que neste programa utilizamos a constante MAX (de valor 20) como limite
superior do for. Desta maneira fica muito simples mudar o programa para que ele passe a

8
Escola Nacional de Ciências Estatísticas

aceitar como entrada 10 notas ou 50 notas (basta mexer no valor de MAX, especificado na
linha 2).

EXEMPLO VII.3 Construir um programa PASCAL que leia um número inteiro positivo N como
entrada e calcule e exiba na tela o valor de N! (ou seja, o fatorial de N).

Obs: o programa não deve aceitar um valor negativo como entrada.

program Fatorial;
var N, I: integer;
F: real;
begin
writeln('FATORIAL');
writeln('========');
write('Digite um numero inteiro positivo: ');
readln(N);
if (N < 0) then
writeln('O numero digitado nao e positivo.')
else
begin
F:=1;
for I:=1 to N do F:=F*I;
writeln(N,'! = ',F:5:0);
end;
readln;
end.

Neste exemplo, um laço montado com I variando entre 1 e N (número digitado pelo
usuário) é utilizado para o cálculo do fatorial. O resultado, embora inteiro, é armazenado
na variável real F, já que as variáveis reais possuem maior capacidade de armazenamento
(o fatorial geralmente resulta em um número muito grande).

EXEMPLO VII.4 Construir um programa PASCAL que leia um número inteiro positivo N como
entrada e determine se o número é primo ou não

Observações :

• O programa não deve aceitar um valor negativo como entrada.

• O programa deve ser mantido em execução enquanto o usuário desejar.

9
Escola Nacional de Ciências Estatísticas

program Primo_com_For;
var N, I: longint;
PRIMO: boolean;
FICAR: char;
begin
writeln('PROGRAMA PRIMO');
writeln('==============');
repeat
write('Digite um numero inteiro positivo: ');
readln(N);
if (N < 0) then
writeln('O número digitado não é positivo.')
else
begin
{aqui eu determino se N é primo!}
PRIMO:=TRUE;
for I:=2 to (N div 2) do
if (N MOD I) = 0 then PRIMO := FALSE;
{aqui eu já determinei! Rápido, não é?}

{imprime resultado}
if (PRIMO = true) then
writeln(N, ' eh primo')
else
writeln(N, ' nao eh primo');
end;

{pergunta se usuario quer encerrar}


writeln;
write('TECLE "X" PARA ENCERRAR');
write('OU QUALQUER OUTRA TECLA PARA CONTINUAR');
readln(FICAR);
writeln;
until (FICAR = 'X') or (FICAR='x');

end.

Neste exemplo, um laço externo montado com o comando repeat mantém a rotina
que recebe N e determina se ele é primo em execução até que o usuário digite a tecla X
(tecla escolhida pelo programador para servir de flag de saída). Para determinar se N é
primo ou não, bastou usar 3 linhas de código.

10
Escola Nacional de Ciências Estatísticas

EXEMPLO VII.5 Construir um programa PASCAL com dois comandos for aninhados para
imprimir na tela a tabuada de 1,2,3,4,5,6,7,8,9 e 10.

program ProgTabuada;
var I, J: integer;
begin
for I:=1 to 10 do
begin
writeln('Tabuada de ',I);
for J:=1 to 10 do
writeln(I,'x',J,'=',I*J);
writeln;
end;
readln;
end.

VII.6 Introdução aos Vetores

Na Unidade IV aprendemos que uma variável pode armazenar apenas um valor de


cada vez. Levando esta informação em consideração, imagine que você precisasse fazer um
programa que inicialmente lê o nome, a idade e o bairro de 1000 clientes de uma loja.
Considere que esse programa tem um menu de opções: se o usuário teclar 1 o programa
emite um relatório dos clientes ordenados por bairro; se teclar 2 o relatório é emitido com a
ordenação por nome. Caso este programa fosse implementado apenas com o uso de
variáveis, seria preciso declarar nada menos do que 3000 delas (1000 para os nomes, 1000
para as idades e 1000 para os bairros), o que é completamente inviável. Este é o típico caso
para a utilização de um outro recurso da linguagem Pascal: os vetores (arrays).
Enquanto uma variável pode armazenar apenas um valor de cada vez, os vetores são
estruturas capazes de armazenar diversos valores de cada vez. Todos os valores
armazenados devem ser do mesmo tipo (ou seja, um conjunto de inteiros ou um conjunto de
reais, string, char, etc). A Figura VII.8 ilustra um exemplo de vetor declarado em Pascal.

Figura VII.8– Vetor com 10 posições.

11
Escola Nacional de Ciências Estatísticas

O vetor apresentado na Figura VII.8, chamado VET_MEDIA, é do tipo real e


possui 10 posições. Isso significa que ele é capaz de armazenar até 10 informações de uma
só vez (neste caso, a média de 10 alunos).

VII.6.1 Definição Formal

Um vetor é um grupo de posições contíguas em memória que possuem o mesmo


nome e o mesmo tipo. Também é chamado de array unidimensional ou variável composta
unidimensional. Para usar um vetor é preciso declará-lo na seção de declarações de
variáveis, seguindo a especificação apresentada a seguir:

var NOME_DO_VETOR: array[LI..LS] of TIPO_DE_DADO;

Onde:

• NOME_DO_VETOR: identificador do vetor.

• LI: limite inferior (geralmente 1).

• LS: limite superior (dimensão máxima do vetor).

• TIPO_DE_DADO: integer, real, char, string, boolean, byte, etc...

Alguns exemplos:

var X: array[1..1000] of integer;


NOMES: array[1..200] of string;
NOTAS: array[1..60] of real;

No exemplo acima, o vetor X é capaz de armazenar 1000 números inteiros. O vetor


NOMES pode armazenar 200 valores do tipo string. E, por fim, o vetor NOTAS é capaz de
armazenar 60 números reais.

VII.6.2 Acesso aos Dados de um Vetor

Agora que sabemos declarar um vetor, vamos aprender como podemos armazenar e
recuperar informações armazenadas no mesmo. Para isto, considere o vetor VET_MEDIA,
cuja declaração foi especificada na Figura VII.8 (página 11). Este vetor é um vetor de
tamanho 10 do tipo real. Ele pode armazenar a média de 10 alunos. A Figura VII.9 ilustra
que este vetor (assim como qualquer outro) possui dois componentes:

12
Escola Nacional de Ciências Estatísticas

• ÍNDICE, SUBSCRITO ou POSIÇÃO: identifica uma posição do vetor.

• VALOR: corresponde ao conteúdo do vetor.

Figura VII.9– Índices e Valores.

Na figura acima, tem-se que o índice (ou subscrito) 1 do vetor possui o valor 7.5
armazenado. O subscrito 2, por sua vez, possui o valor 5.5. Já o subscrito 3 possui o valor
10.0 e assim por diante. Para armazenar um valor em um determinado subscrito do vetor,
basta referenciar o subscrito em questão entre colchetes [] e utilizar normalmente o
comando readln ou o operador de atribuição ( := ).

Exemplos:

VET_MEDIA[8] := 9.2 {armazena o valor 9.2 no


índice 8 do vetor VET_MEDIA}

Readln(VET_MEDIA[10]); {lê um valor via teclado e o


armazena na posição 10 do vetor}

VET_MEDIA[1] := VET_MEDIA[3]; {torna o conteúdo da posição 1


do vetor igual ao conteúdo da
posição 3 – os dois passam a
armazenar o valor 10.0}

13
Escola Nacional de Ciências Estatísticas

De maneira análoga, se desejamos ler o valor de uma posição do vetor, basta


especificar seu índice. Veja alguns exemplos:

If VET_MEDIA[8] > 7 then ... {retorna TRUE}

writeln (VET_MEDIA[6]); {imprime 4.6 na tela}

VET_MEDIA[8] <= VET_MEDIA[5] {retorna FALSE}

Em resumo, um vetor funciona da mesma forma que uma variável. No entanto, a


variável é uma “caixinha” ou “gaveta” que só pode armazenar um valor de cada vez. Um
vetor pode guardar muitos valores de uma vez porque é um “conjunto de gavetas” (cada
uma dessas gavetas pode ser acessada através de seu índice).

VII.6.3 Um Exemplo

A Figura VII.10 ilustra um exemplo básico de uso de um vetor.

program Vetor;
{declaração do vetor}
var C: array[1..8] of integer;
begin
{atribuições}
C[1] := -45;
C[2] := 6;
C[3] := 0;
C[4] := 72;
C[5] := 1543;
C[6] := -89;
C[7] := 0;
C[8] := 62;
{impressão dos elementos de índice 1 e 5}
writeln('C[1] = ',C[1]);writeln('C[5] = ',C[5]);
{novas atribuições}
C[3] := C[3] + 1; {agora C[3] vale 1!}
C[7] := C[5]; {agora C[7] vale 1543}
{impressão dos elementos de índice 3 e 7}
writeln('C[3] = ',C[3]);writeln('C[7] = ',C[7]);

readln;
end.
Figura VII.10 – Atribuição e Acesso a Elementos de um Vetor

14
Escola Nacional de Ciências Estatísticas

O programa da página anterior declara um array de 8 posições chamado C (linha 3).


Em seguida atribui valores iniciais para as 8 posições de C (linhas 6 a 13). Depois imprime
na tela o conteúdo armazenado nos subscritos 1 e 5 (linha 15). A seguir, nas linhas 17 e 18,
o conteúdo armazenado nos subscritos 3 e 7 é modificado. Esses valores modificados são
impressos na linha 20. O resultado da execução do programa é apresentado na Figura
VII.11.

Figura VII.11 – Execução do Programa “Vetor”

VII.6.4 Propriedades dos Vetores

Finalizando esta unidade, são apresentadas algumas das principais propriedades dos
vetores.

• Nem todos os elementos de um vetor precisam estar preenchidos. No exemplo


da Figura VII.12, o vetor VET_CARROS (de 5 posições) está com os elementos
de índice 1,2,4 e 6 preenchidos, enquanto os elementos de índice 3 e 5 estão
vazios.

Figura VII.12 – Vetor com os elementos de subscrito 3 e 5 vazios e os demais preenchidos

• É um erro tentar acessar um elemento que não esteja localizado entre os limites
inferior e superior do vetor. Fazer, por exemplo, VET_CARROS[7] := ‘FOX’,
gera um erro de compilação, pois o limite superior de VET_CARROS é 6.

• O limite inferior do vetor não precisa ser necessariamente 1 (embora na maioria


das vezes o seja), conforme ilustra a Figura VII.13. O vetor VET_ENCE tem 5
posições. O limite inferior é 5 e o superior é 9.

15
Escola Nacional de Ciências Estatísticas

Figura VII.13 – Vetor com limite inferior diferente de 1.

• Para imprimir todo o conteúdo de um vetor é preciso construir um laço (com


while, repeat ou for). Ou seja: não é possível imprimir o vetor inteiro de uma
“tacada só”, mas apenas um elemento por vez (compare o programa certo e o
programa errado, mostrados na Figura VII.14).

Figura VII.14 – O Jeito Certo e o Jeito Errado de Imprimir de um vetor.

• Para comparar dois vetores é preciso construir um laço. Dentro do laço os


elementos de cada vetor devem ser comparados um por um. A Figura VII.15
mostra as formas certas e erradas de fazer essa comparação.

16
Escola Nacional de Ciências Estatísticas

Figura VII.15 – O Jeito Certo e o Jeito Errado de Comparar dois vetores.

• Por fim, observe a Figura VII.16. Ela ilustra exemplos de operações possíveis e
de operações que não podem ser realizadas com os vetores.

Figura VII.16 – Operações com Vetores

17
Escola Nacional de Ciências Estatísticas

VII.7 Problemas Resolvidos

Esta seção apresenta alguns exercícios resolvidos envolvendo o uso de vetores.

EXEMPLO VII.6 Criar um programa que armazene cinco nomes em um vetor. Depois solicite
um número entre 1 e 5 e imprima o nome da pessoa que está armazenado no índice cujo
valor é igual a esse número.

program Vetor1;
var I: integer;
VET: array[1..5] of string;
begin
for I:=1 to 5 do
begin
write('Digite o nome ',I, ': ');
readln(VET[I]);
end;

write('Digite um numero entre 1 e 5: ');


readln(I);
if (I > 0) and (I < 6) then
writeln(VET[I])
else
writeln('Numero invalido');

readln;

end.

EXEMPLO VII.7 Faça um programa que armazene 30 matrículas em um vetor MATRICULA e


30 médias finais em um vetor MEDIA. Em seguida imprima um relatório contendo apenas a
matrícula dos alunos com média igual ou superior a 7.

program VetorMedias;
const TAM = 30;
var I: integer;
MATRICULA: array[1..TAM] of string;
MEDIA: array[1..TAM] of real;

Begin
{parte 1 – lê os dados}
for I:=1 to TAM do
begin
write('Digite a matricula ',I, ': ');
readln(MATRICULA[I]);
write('Digite a media final ',I, ': ');

18
Escola Nacional de Ciências Estatísticas

readln(MEDIA[I]);
end;

{parte 2 – imprime o relatório}


writeln('RELATORIO DE APROVADOS');
for I:=1 to TAM do
if (MEDIA[I] >= 7.0) then
writeln(MATRICULA[I]);

readln;

end.

EXEMPLO VII.8 Faça um programa que leia dois vetores A e B, cada um com 10 posições de
números reais. A partir destes dois vetores, gere um terceiro vetor de reais C da seguinte
forma: o primeiro elemento de C deve ser obtido a partir a soma do primeiro elemento de A
com o último (décimo) de B. O segundo elemento de C deve representar a soma do segundo
elemento de A com o penúltimo de B, e assim por diante.

program VetorSoma;
const TAM = 10;
var I: integer;
A, B, C: array[1..TAM] of real;
begin
{parte 1 – lê os dados do vetor A}
for I:=1 to TAM do
begin
write('A[',I, ']: '); readln(A[I]);
end;
{parte 2 – lê os dados do vetor B}
for I:=1 to TAM do
begin
write('B[',I, ']: ');readln(B[I]);
end;

{parte 3 – gera C}
for I:=1 to TAM do
C[I] := A[I] + B[11-I];

{parte 4 – imprime C (poderia ter sido feito no passo 3)}


for I:=1 to TAM do
writeln('C[',I, '] = ', C[I]:6:2);

readln;

end.

19
Escola Nacional de Ciências Estatísticas

EXEMPLO VII.9 Faça um programa que, inicialmente, leia 50 números inteiros e armazene
num vetor A. Em seguida, o programa deve determinar e imprimir o maior e o menor dos 50
números.

program MaiorMenor;
const TAM = 50;
var I, MAIOR, MENOR: integer;
A: array[1..TAM] of integer;
begin
{parte 1 – lê os dados do vetor A}
for I:=1 to TAM do
begin
write('A[',I, ']: '); readln(A[I]);
end;

{parte 2 – determina o maior e o menor}


MAIOR := A[1]; MENOR := A[1]; {parte da hipótese que maior
e menor estão no primeiro índice}
for I:=2 to TAM do
begin
if A[I] > MAIOR then MAIOR := A[I];
if A[I] < MENOR then MENOR := A[I];
end;

{parte 3 – imprime resultado}


writeln('MAIOR = ',MAIOR);
writeln('MENOR = ',MENOR);

readln;

end.

EXEMPLO VII.10 Criar um programa que leia um vetor A de 10 valores inteiros e construa
outro vetor B da seguinte forma.

Vetor A 3 8 4 2 ... 5
Vetor B 9 4 12 1 ... 15

20
Escola Nacional de Ciências Estatísticas

program GeraB;
const TAM = 10;
var j: integer;
A, B: array[1..TAM] of integer;
begin
{parte 1 – lê os dados do vetor A e, ao mesmo tempo, gera B}
for j:=1 to TAM do
begin
write('A[',j, ']: ');
readln(A[j]);

if (j MOD 2 = 0) then
B[j] := A[j] DIV 2
else
B[j] := A[j] * 3;
end;

{parte 2 – imprime resultado}


for j:=1 to TAM do
writeln('B[',j, '] = ', B[j]);

readln;
end.

Exercícios Propostos – Comando For

(1) Crie um programa que apresente a soma de todos os números ímpares menores do que
10.000.

(2) Um arranjo de um conjunto de n objetos, em dada ordem, é chamado de permutação dos


objetos (tomados todos ao mesmo tempo). Um arranjo de quaisquer r ≤ n destes objetos, em dada
ordem é chamado de r-permutação ou permutação dos n objetos tomados r a r.

Exemplo: considerando as letras A, B, C e D, tem-se que:

• BAD, ADB, CBD e BCA são permutação das 4 letras tomadas 3 a 3;


• BDCA, DCBA, ACDB são permutações das 4 letras tomadas 4 a 4;
• AD, CB, DA e BD são permutações das 4 letras tomadas 2 a 2.

O número (quantidade) de permutações de n objetos tomados r a r pode ser calculado através da


seguinte fórmula:

P(n,r) = n! / (n – r)!

Elabore um programa que receba como entrada os valores de n e r e calcule e imprima a


quantidade de permutações de n objetos tomados r a r (basta usar a fórmula acima!!!).

21
Escola Nacional de Ciências Estatísticas

(3) (Triplas Pitagóricas) Um triângulo retângulo pode ter lados que são todos inteiros. O conjunto
de três inteiros que representam os lados de um triângulo retângulo é chamado de tripla pitagórica.
Estes três lados devem satisfazer a relação de que a soma dos quadrados de dois dos lados é
igual ao quadrado da hipotenusa. Crie um programa que ache todas as triplas pitagóricas para
lado1, lado2 e hipotenusa, todos menores do que 500. Use um laço for triplamente aninhado
que testa todas as possibilidades. Este é um exemplo de calcular pela “força bruta” (você
aprenderá, ao longo do curso de Estatística, que existem muitos problemas interessantes para os
quais a única solução é testar todas as possibilidades!)

Exercícios Propostos – Vetores

(4) Faça um programa que carregue um vetor com dez números reais (ou seja, que leia 10 valores
digitados pelo usuário e armazene num vetor).

Depois de carregar o vetor calcule e imprima a quantidade de números negativos e a soma dos
números positivos desse vetor.

(5) Faça um programa que leia 7 letras do teclado, uma de cada vez, e armazene as letras
digitadas num vetor do tipo char.

Em seguida exiba numa linha do vídeo o vetor na ordem direta (ou seja exiba primeiro o elemento
1, depois o 2, ..., até o 7) usando o comando write , para que as letras sejam exibidas uma do lado
da outra.

Na linha seguinte, exiba o vetor na ordem inversa (ou seja, valores do índice 7 ao 1), também
utilizando o comando write.

A figura abaixo ilustra o processamento do programa:

22
Escola Nacional de Ciências Estatísticas

(6) Uma escola deseja saber se existem alunos cursando, simultaneamente, as disciplinas
Programação PASCAL e Programação Java.

Coloque os números das matrículas dos alunos que cursam Programação Pascal em um vetor (no
máximo 20 alunos). Coloque os números das matrículas dos alunos que cursam Programação C
em outro vetor (no máximo 20 alunos). Gere, em seguida, um relatório que mostre o número das
matrículas que aparecem nos dois vetores.

(7) Crie um programa que leia 20 números inteiros e armazene em um vetor. Em seguida imprima
um relatório que apresente o número e o índice (posição no vetor) dos números que forem
múltiplos de seu índice.

(8) Crie um programa que leia 10 números inteiros e armazene em um vetor. Em seguida imprima
um relatório que exiba apenas os números que são quadrados perfeitos.

OBS: Um número é quadrado perfeito quando tem um número inteiro como raiz quadrada.

DICA: As funções TRUNC ou ROUND (Unidade 4) podem ser utilizadas na resolução deste
problema.

(9) O valor de π pode ser obtido com o uso da série:


π = 4 – (4/3) + (4/5) – (4/7) + (4/9) – (4/11) + ...
Crie um programa que armazene o valor dos 50 primeiros termos da série em um vetor. O primeiro
índice deve conter o primeiro termo (4), o segundo índice o segundo termo (4/3), e assim por
diante.

Em seguida, o programa deve calcular e exibir na tela o valor de π (mostre na tela com 20 casas
decimais).

(10) (Crivo de Eratóstenes) Um inteiro primo é qualquer número inteiro que só pode ser dividido
exatamente por si mesmo e por 1. O “Crivo de Eratóstenes” é um método fácil e prático de se
encontrar números primos até um certo valor limite. Esse método deverá ser utilizado nesta
questão, para que sejam determinados todos os números primos menores do que 1000. Para isto,
escreva um programa composto pelos 3 passos descritos a seguir:

(a) Crie um vetor de inteiros com 1000 posições. Depois atribua o valor 1 para todas as posições
deste vetor.

1 1 1 1 1 1 1 1 1 1 1 ... 1 1
1 2 3 4 5 6 7 8 9 10 11 ... 999 1000

(b) Em seguida, começando da posição 2 do vetor, sempre que for encontrado um elemento
com valor igual a 1, faça um laço pelo restante do vetor e defina como zero todos os elementos
cujo subscrito seja múltiplo do subscrito com valor 1.

23
Escola Nacional de Ciências Estatísticas

Exemplo: para o subscrito 2 do vetor, todos os elementos posteriores à posição 2 que


estiverem armazenados em subscritos múltiplos de 2 serão definidos como zero (subscritos 4,
6, 8, 10, etc.). Idem para o subscrito 3 do vetor (subscritos 6, 9, 12, 15, 18, etc). E assim, para
os demais subscritos.

Ao final do processamento, os elementos do vetor com subscritos primos, permanecerão 1.


Todos os outros elementos do vetor estarão com o valor 0, conforme ilustra a figura abaixo.

1 1 1 0 1 0 1 0 0 0 1 ... 0 0
1 2 3 4 5 6 7 8 9 10 11 ... 999 1000

(c) Continue o programa, criando uma rotina que percorra o vetor de 1000 elementos e imprima na
tela os números primos que existem entre 1 e 1000 (basta imprimir todos os subscritos dos
elementos que contêm o valor 1).

24

Você também pode gostar