You are on page 1of 8

Nas aulas anteriores j imos como armazenar alguns tipos de dados na mem do computador.

r. Como fazer para armazenar um conjunto de dados do mesmo tipo? Nesta aula vamos tratar deste problema. Em Pascal, para declarar uma varil que armazena um conjunto de dados do mesmo tipo tilizado a palavra array. Vamos supor que desejamos declarar uma varil para armazenar o nome de uma pessoa. Sabemos que um nome onstituido de caracteres, portanto a declara seria:
Var nome: array [1..100] of char

Vetores (Aula 6)

Esta declara informa ao computador para reservar 100 caxinhas do tipo char para armazenar o nome de uma pessoa. Na declara entre parenteses olocado o n? mmo de elementos do array, neste caso, como n sabemos antecipadamente qual vai ser o tamanho do nome, colocamos um n? grande. Vamos resolver um problema aplicando arrays.

Problema:
Dado o nome de uma pessoa, determinar o n? de vogais contidos no nome.

Solu
Para determinar o n? de vogais vamos utilizar um contador. A cada passo vamos comparando os caracteres um por um e quando achar uma vogal vamos acrescentar 1 ao contador. Para acessar cada caractere dentro do array, vamos tamb precisar de um contador. Vejamos como seria o algoritmo. Algoritmo
Inicializar o contador=0; Inicializar o indice: i=1; Ler o nome Enquanto indice<=100 se nome[i] for igual a 'a' se nome[i] for igual a 'e' se nome[i] for igual a 'i' se nome[i] for igual a 'o' se nome[i] for igual a 'u' acrecentar o indice i Fim enquanto

acrecentar acrecentar acrecentar acrecentar acrecentar

o o o o o

contador contador contador contador contador

Programa
Program Vogais; Var nome : array [1..100] of char; contador, i : integer; Begin contador:= 0; i:= 1; Readln (nome); While (i <=100) do Begin if (nome[i] = 'a') then contador:=contador if (nome[i] = 'e') then contador:=contador if (nome[i] = 'i') then contador:=contador if (nome[i] = 'o') then contador:=contador if (nome[i] = 'u') then contador:=contador

+ + + + +

1; 1; 1; 1; 1;

i:=i+1; End; Writeln ('O n? de vogais presentes no nome , contador); end.

Alguns compiladores de Pascal j ncluem o tipo string definido como um array de carateres. Portanto o a varil nome pode ser declarado tamb da seguinte forma:
Var nome:string[100];

Como um vetor ma pilha de caixas, para acessar a uma determinada caixa precisamos de um i e. O i e m n? que vai de 1 at n? de elementos i i c c do vetor. Se quisermos acessar a todas as caixas vamos alterando em cada passo o valor do ice, como mostra o programa. i Para ler ou alterar o conte?a caixa i de um vetor, simplemente escrevemos o nome seguido do ice entre chaves. Por exemplo, no i programa a linha
If (nome[i]='a') contador:=contador+1;

indica que vamos comparar o conte?a caixa i no vetor nome com o caractere 'a' e se forem iguais acrecentamos o contador.

Usando o comando FOR


Temos visto que em muitos casos conhecemos o n? de repeti s de um bloco de comandos, para tanto temos usado o comando while juntament com um contador. Por exemplo, no programa anterior o bloco dentro do comando while epitido enquanto o indice i enor ou igual a 100 e em cada passo acrecentamos o valor do indice. Para estas situa s em Pascal existe o comando FOR que deixa o trabalho mais simples. O formato do comando seguinte:
FOR i:=valor inicial TO valor final DO BEGIN comandos END

Este comando pode ser utilizado somente se i for declarado como n? inteiro e conhecermos seus valores inicial e final. Vejamos como seria o programa anterior usando o comando FOR. Programa
Program Vogais; Var nome : string[100]; contador, i : integer; Begin contador:= 0; Readln (nome); For i:=1 to 100 do Begin if (nome[i] = 'a') then if (nome[i] = 'e') then if (nome[i] = 'i') then if (nome[i] = 'o') then if (nome[i] = 'u') then End;

contador:=contador contador:=contador contador:=contador contador:=contador contador:=contador

+ + + + +

1; 1; 1; 1; 1;

Writeln ('O n? de vogais presentes no nome , contador); end.

O comando for astante usado principalmente para acessar aos elementos de um vetor.

Problema: Temperatura Lunar

Sem as prote s da atmosfera e do cintur magn co que existem na Terra, a Lua fica exposta ao ataque do Sol, que m astro em constante explos at?a. As explos?do Sol emitem ondas letais de part ls. Uma l a pessoa que ficasse desprotegida na superf e da Lua, num e lugar onde o Sol incidisse diretamente, sofreria um bombardeio radioativo t intenso quanto se estivesse nas imedia s da usina russa de Chernobyl no momento do acidente que matou 31 pessoas em 1986. Al da radia solar, outro efeito desta falta de prote contra o Sol que existe na Lua enorme varia de temperatura. Nas regi?pr do equador lunar, a varia de as temperatura rutal, passando de cerca de 130 graus positivos durante o dia a 129 graus negativos oite. Para estudar com mais precis as varia s de temperatura na superfe da Lua, a NASA enviou ua uma sonda com um sensor que mede a temperatura de 1 em 1 minuto. Um dado importante que os pesquisadores desejam descobrir omo se comporta a m a da temperatura, considerada em intervalos de uma dada dura (uma hora, meia hora, oito horas, etc.). Por exemplo, para a seq? de medi s 8, 20, 30, 50, 40, 20, -10, e intervalos de quatro minutos, as m as s respectivamente 108/4=27, 140/4=35, 140/4=35 e 100/4=25. Tarefa Voc recentemente contratado pela NASA, e sua primeira tarefa a partir oi de algumas seq?s de temperaturas medidas pelo sensor e do tamanho do intervalo, informar qual a maior e qual a menor temperatura m a observadas, considerando o tamanho do intervalo dado. Dados de entrada e sa Os dados de entrada tem o seguinte formato A primeira linha cont dois n?s inteiros positivos N e M, que indicam respectivamente o n? total de medi s de temperatura de uma seq? obtida pelo sensor, e o tamanho dos intervalos, em minutos, em que as m as devem ser calculadas. As N linhas seguintes cont n? inteiro cada, representando a seq? de medidas do sensor. um Exemplo de entrada de dados:
4 2 -5 -12 0 6

o resultado de sa para o teste de entrada


-8 3

Solu

Como n sabemos com anteced o n? m ia mo de medi s vamos reservar um n? bem grande de caixas para o vetor (por exemplo, 100). As medi s vamos lendo e armazenando no vetor. Em primeiro lugar devemos calcular a

m a a cada M medi s e guardar em outro vetor TM. Depois, no vetor de medias TM vamos procurar qual maior e o menor valor. Vejamos como seria o algoritmo inicial. Algoritmo
Ler o n? de medi s N Ler o tamanho do intervalo M Para i=1 at =N repetir Ler a medi i e guardar em T[i] Fim Para Calcular a media a cada intervalo Calcular o valor mmo do vetor m Calcular o valor m m do vetor o Mostrar resultados

Para calcular a m a a cada M medi s podemos fazer o seguinte: Vamos utilizar um la para ler cada elemento do vetor e vamos ir sumando os valores em uma variavel S. Um contador dentro do la sera utilizado para contar o n? de leituras. Quando o contador chegar a M vamos calcular a m a, guardar o resultado no vetor TM e zerar o contador. Vejamos como fica o algoritmo. Algoritmo
Ler o n? de medi s N Ler o tamanho do intervalo M Para i=1 at =N repetir Ler a medi i e guardar em T[i] Fim Para Inicializar: S=0,contador=0,j=1 Para i=1 at =N repetir acrecentar o contador somar a medi i: S=S+T[i] Se contador = M Entao Calcular a media: TM[j]=S/M acrecentar j zerar o contador zerar a soma Fim Se Fim Para Calcular o valor mmo do vetor m Calcular o valor mmo do vetor Mostrar resultados

O m do mais simples de calcular o valor mmo de um vetor nicialmente considerar o primeiro valor como mmo e logo ir comparando com os demais valores, caso encontrar alguem maior, o valor do maximo sera substitutido pelo novo maior valor, assim sucessivamente at hegar ate o final do vetor. O valor m m do vetor pode ser calculado de forma similar. m o Vejamos como fica o algoritmo final. Algoritmo
Ler o n? de medi s N Ler o tamanho do intervalo M Para i=1 at =N repetir Ler a medi i e guardar em T[i] Fim Para Inicializar: S=0,contador=0,j=1

Para i=1 at =N repetir acrecentar o contador somar a medi i: S=S+T[i] Se contador = M Entao calcular a media: TM[j]=S/M acrecentar j zerar o contador zerar a soma Fim Se Fim Para Max=TM[1], Min=TM[i] Para i=2 at =j-1 fazer Se (TM[i] > Max) Entao Max = TM[i] Se (TM < Min) Entao Min = TM[i] Fim Para Mostrar Max e Min

Programa
Program Temp; Var T: array [100] of integer TM: array [100] of integer M,N: integer i,j,contador: integer S,Max,Min: integer Begin Readln(N); Readln(M); For i=1 to N do Begin Readln(T[i]); End S:=0;contador:=0;j:=0; For i=1 to N do Begin contador=contador+1; S=S+T[i]; if(contador=M) Begin j:=j+1; TM[j]:=S/M; contador:=0; S:=0; End End Max=TM[1]; Min=TM[1]; For i=1 to i=j do Begin If(TM[i]>Max) Max:=TM[i]; If(TM[]<Min) Min:=TM[i] End Writeln(Max, Min); End.

Exerc o o s

1. Um CPF tem nove d t e mais dois para verifica . A verifica se t os d a seguint forma: Primeiro, multiplicamos cada um dos nove dtos por um peso: t
2. 3. 4. 5. d1 d2 d3 d4 d5 d6 d7 d8 d9 x 10 9 8 7 6 5 4 3 2 -------------------------a1 a2 a3 a4 a5 a6 a7 a8 a9 <--- digitos <--- pesos

E depois calculamos S1, a soma de todos os n?s resultantes. O d mo dto, d10, ser 11-(resto de S1/11) ] (ou zero, se esta conta der mais que nove). t Para calcular d11, fazemos como antes, mas levamos em conta tamb d10:
d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 x 11 10 9 8 7 6 5 4 3 2 -----------------------------a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 <--- digitos <--- pesos

Somamos agora todos os n?s obtidos. O dto d11 ser 11-(resto de S2/11) ], ou t zero se esta conta der mais que nove. Fa um programa que verifique se um CFP est orreto.

6. Temos um vetor com 20 n?s. Queremos reorganizar o vetor de forma que dois n?s pares n sejam vizinhos. Fa um programa que reorganize o vetor desta forma, ou diga que n ossl.

7.

Palindromes

Uma cadeia de caracteres itar r pal ome se a seq? dos caracteres da cadeia de esquerda para direita gual a seq? de caracteres da direita para esquerda. Por exemplo as seguintes cadeias de caracteres s palromes: ARARA, RADAR, AKASAKA, ANNA. Fa um programa que r reconhe se uma cadeia de caracteres alindrome. Use a fun Length(s) para saber o tamanho da cadeia s.

8.

Quermesse.

Os alunos do ?o ano resolveram organizar uma quermesse para arrecadar fundos para a festa de formatura. A festa prometia ser um sucesso, pois o pai de um dos formandos, Te o, dono de uma loja de informca, decidiu doar um computador para ser sorteado entre os que comparecessem. Os alunos prepararam barracas de quent pipoca, doces, ensaiaram a quadrilha e colocaram enda ingressos numerados sequencialmente a partir de 1. O n? do ingresso serviria para o sorteio do computador. Ficou acertado que Teo decidiria o m do de sorteio; em princo o sorteio seria, claro, computadorizado. O local escolhido para a festa foi o gin da escola. A entrada dos participantes foi o pela porta principal, que possui uma roleta, onde passa uma pessoa por vez. Na entrada, um funcion inseriu, em uma lista no computador da escola, o n? do o ingresso, na ordem de chegada dos participantes. Depois da entrada de todos os participantes, Teo come a trabalhar no computador para preparar o sorteio. Verificando a lista de presentes, notou uma caracterica notl: havia apenas um caso, em toda a lista, em que o participante que possuia o ingresso numerado com i, havia sido a i- ma pessoa a entrar no gino. Teo ficou t encantado com a coincid que decidiu que o sorteio n seria necesso: esta pessoa seria o ia ganhador do computador.

Tarefa
Conhecendo a lista de participantes, por ordem de chegada, sua tarefa eterminar o n? do ingresso premiado, sabendo que o ganhador ? participante que tem o n? do ingresso igual ua posi de entrada na festa.

Entrada
como entrada o programa recebe o n? de participantes N (N<=1000), e a seq?, em ordem de entrada, dos N ingressos das pessoas que participaram da festa. ejemplo de entrada:
8 3 5 9 4 6 2 10 1

Sa
4

9.

Sorvete

Jo inho m menino que costuma ir raia todos os finais de semana com seus pais. Eles freq? sempre a mesma praia, mas cada semana o pai de Jo inho estaciona o carro em um local diferente ao longo da praia, e instala sua fam a em um ponto na praia em frente ao carro. Jo inho uito comil e a adora de tomar sorvete na praia. Contudo, alguns dias acontece de nenhum sorveteiro passar pelo local onde eles est Intrigado com isto, e n querendo mais ficar sem tomar seu sorvete semanal, Jo inho foi at Associa dos Sorveteiros da Praia (ASP), onde ficou sabendo que cada sorveteiro passa o dia percorrendo uma mesma regi da praia, indo e voltando. Al disto, cada sorveteiro percorre todos os dias a mesma regi J?inho conseguiu ainda a informa dos pontos de in o e fim da regi percorrida por cada um dos o sorveteiros. Com base nestes dados, Jo inho quer descobrir os locais da praia onde o pai dele deve parar o carro, de forma que pelo menos um sorveteiro passe naquele local. S o volume de dados uito grande, e Jo inho est ensando se seria e possl utilizar o computador para ajud nesta tarefa. No entanto Jo inho n o sabe programar, e est edindo a sua ajuda.

Tarefa
Voc eve escrever um programa que leia os dados obtidos pelo Jo inho e imprima uma lista de intervalos da praia por onde passa pelo menos um sorveteiro.

Entrada
Seu programa deve ler vos conjuntos de teste. A primeira linha de um conjunto de teste cont dois inteiros n negativos, P e S, que indicam respectivamente o comprimento em metros da praia e o n? de sorveteiros. Seguem-se S linhas, cada uma contendo dois n?s inteiros U e V que descrevem o intervalo de trabalho de cada um dos sorveteiros, em metros contados a partir do ino o da praia (U < V, 0 U P e 0V P). O final da entrada ndicado por S=0 e P=0.

Exemplo de entrada

200 2 0 21 110 180 1000 3 10 400 80 200 400 1000 10 2 1 4 5 6 0 0

Sa
Para cada conjunto de teste da entrada seu programa deve produzir uma lista dos intervalos da praia que s servidos por pelo menos um sorveteiro. A lista deve ser precedida de uma linha que identifica o conjunto de teste, no formato "Teste n", onde n umerado a partir de 1. Cada intervalo da lista deve aparecer em uma linha separada, sendo descrito por dois n?s inteiros U e V, representando respectivamente o ino e o final do intervalo (U < V). O final oo da lista de intervalos deve ser indicado por uma linha em branco. A grafia mostrada no Exemplo de Sa , abaixo, deve ser seguida ,, rigorosamente.

Exemplo de sa
Teste 1 0 21 110 180 Teste 2 10 1000 Teste 3 1 4 5 6

You might also like