olimpíada brasileira de informática · número, referente à posição de uma determinada...

46
Treinamento Olimpíada Brasileira de Olimpíada Brasileira de Informática Informática Universidade Federal de Itajubá Prof. Roberto Affonso da Costa Junior

Upload: donhu

Post on 19-Jan-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

TreinamentoOlimpíada Brasileira de Olimpíada Brasileira de

InformáticaInformática

Universidade Federal de Itajubá

Prof. Roberto Affonso da Costa Junior

Page 2: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

AULA 05AULA 05

– Agregados Homogêneos

Bruno Otávio, George, Gabriel Taets, Bruno Otávio, George, Gabriel Taets, Gabriel Huhn,Thiago Carvalho, Tiago,Gabriel Huhn,Thiago Carvalho, Tiago,

Renan e Júnior AndradeRenan e Júnior Andrade

Page 3: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Agregados HomogêneosAgregados Homogêneos

● São aqueles que agregam informações de tipos iguais.

Page 4: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● O conceito que fundamenta o uso de tais agregados baseia-se no fato de que informações que tenham a mesma finalidade num programa, ao invés de serem armazenadas em diversas variáveis diferentes, poderiam ser armazenadas numa única variável, mas de tal forma que os valores para cada uma das instâncias desta variável fiquem disponíveis para o programa;

Page 5: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

5

Agregados HomogêneosAgregados Homogêneos Podemos definir um Vetor como uma variável

dividida em vários "pedaços", em várias "casinhas", onde cada pedaço desses é identificado através de um número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice.

Conceito: Vetor é um conjunto de variáveis, onde cada uma pode armazenar uma informação diferente, mas todas compartilham o mesmo nome. São associados índices a esse nome, que representam as posições do vetor, permitindo assim, individualizar os elementos do conjunto.

Page 6: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

6

Agregados HomogêneosAgregados Homogêneos

Podemos imaginar que na memória do computador o vetor seja mais ou menos da seguinte forma:

Page 7: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

7

Agregados HomogêneosAgregados Homogêneos

Exemplos de Manipulação de Vetores:

1) Escrever Nomes [3]

Esta instrução escreve na tela, o conteúdo da Posição 3 do Vetor chamado Nomes, ou seja, escreve a palavra ‘Maria’.

ATENÇÃO: Sempre que estivermos nos referindo a um Vetor, devemos colocar o Nome do Vetor e a Posição (o Índice) correspondente entre colchetes.

2) Nomes [5] ← 'André'

Esta instrução armazena (atribui) a palavra 'André' na posição 5 do Vetor chamado Nomes.

Page 8: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

8

Agregados HomogêneosAgregados Homogêneos

3) Escrever Nomes [X]

Esta instrução escreve o conteúdo da posição X do Vetor Nomes, ou seja, é possível utilizarmos variáveis para indicar a posição (o índice) do Vetor. Neste exemplo 3, o que será escrito depende do valor da variável X. Por exemplo, se antes da instrução Escrever, tivéssemos a instrução: X 4.

Então seria escrito o conteúdo da posição 4 do Vetor Nomes, neste caso, seria escrita a palavra ‘Ana’.

Page 9: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

9

Agregados HomogêneosAgregados Homogêneos

4) Escrever Nomes [X-2]Esta instrução é para mostrar que também pode-se utilizar cálculos (expressões) para indicar a posição (o índice). Digamos que o X tenha recebido o valor 4, como no exemplo 3 acima, então, neste caso, seria escrita a palavra ‘Alex’.

Page 10: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

10

Agregados HomogêneosAgregados Homogêneos

5) Como LER um Vetor (Preencher)Para Ler um vetor, ou seja, para preencher um vetor com informações (dados) é necessária uma estrutura de repetição, pois um vetor possui várias posições e temos que preencher uma a uma. A estrutura de repetição normalmente utilizada para vetores é o Para-Até-Faça. Veja no exemplo a seguir como preencher (ler) um vetor de 10 posições:

Page 11: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

11

Agregados HomogêneosAgregados Homogêneosinteiro cont real v[10]inicio

para cont ← 1 até 10 passo 1 façaleia (v [cont])

fim-parafim

Page 12: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

12

Agregados HomogêneosAgregados Homogêneos

cont ← 1 até 10 passo 1

INICIO

v [cont]

FIM

Page 13: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

13

Agregados HomogêneosAgregados Homogêneos

Anteriormente está demonstrado como preencher um vetor chamado v de 10 posições, ou seja, serão lidas 10 informações (valores reais) e cada uma armazenada em uma posição do vetor v. Sendo que utiliza-se a própria variável da repetição para variar a posição (índice) do vetor.

Page 14: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

14

Agregados HomogêneosAgregados Homogêneos

5)Como ESCREVER um VetorPara Escrever um vetor, ou seja, para escrever o conteúdo de cada posição de um vetor, também precisamos utilizar uma estrutura de repetição, já que os vetores possuem mais de um conteúdo (mais de uma posição). Como explicado anteriormente, normalmente utiliza-se a estrutura Para-Até-Faça também para escrever o vetor. Veja no exemplo a seguir, como escrever um vetor de 10 posições, isto é, como escrever o conteúdo de cada uma das 10 posições do vetor:

Page 15: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

15

Agregados HomogêneosAgregados Homogêneosinteiro contreal v[10]

iniciopara cont ← 1 até 10 passo 1 faça

imprima (v [cont])fim-para

fim

Page 16: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

16

Agregados HomogêneosAgregados Homogêneos

cont ← 1 até 10 passo 1

INICIO

FIM

v [cont]

Page 17: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

17

Agregados HomogêneosAgregados Homogêneos

Anteriormente está demonstrado como escrever um vetor chamado v de 10 posições, ou seja, ao executar essa instrução seria escrito o conteúdo de cada uma das 10 posições do vetor v na tela do computador.

Page 18: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

18

Exemplo 2Exemplo 2

➢ Escreva um algoritmo para ler a nota de 30 alunos, calcule a média geral da turma e escreva quantos alunos tiveram a nota acima da média calculada.

Page 19: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

19

Exemplo 2Exemplo 2

inteiro cont, ireal nota[30], soma, mediainicio cont ← 0 soma ← 0 para i ← 1 até 30 passo 1 faça leia (nota[i]) soma ← soma + nota [i] fim-para media ← soma / 30

Page 20: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

20

Exemplo 2Exemplo 2

para i ← 1 até 30 passo 1 faça se nota[i] > media então cont ← cont + 1 fim-se fim-para escreva (“Número de alunos acima da média é: ”, cont)fim

Page 21: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

21

i ← 1 até 30 passo 1

cont ← 0soma ← 0

INICIO

nota [i]

soma← soma + nota [i]

1

media← soma / 30

Page 22: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

22

F

FIM

“Número de alunos acima da média é: ”, cont

V

nota[i] > media

cont ← cont + 1

1

i ← 1 até 30 passo 1

Page 23: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● Deseja-se deseja obter o menor entre 10 números dados;

● A primeira solução seria armazenar os 10 números dados em 10 variáveis diferentes;

● Sabe-se que esta não é uma boa solução, pelos motivos já expostos e também pelo fato de se aumentarmos a quantidade de valores, a quantidade de variáveis também deverá ser aumentada, impossibilitando ainda mais a execução do programa.

Exemplo 3Exemplo 3

Page 24: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● A solução seria a utilização de uma única variável;

● Seja por exemplo a variável:

numeros

de tal forma que o programa possa acessar os diferentes valores que a variável pode armazenar.

Page 25: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Como isto pode ocorrer?

Page 26: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

A utilização de agregados A utilização de agregados homogêneoshomogêneos

● Ao definir-se uma variável do tipo agregado homogêneo, na verdade está se definindo uma variável do tipo conjunto, ou seja, uma variável subdividida em várias outras variáveis;

● Estas outras sub variáveis recebem o nome de células da variável principal; possuem o mesmo nome e o mesmo tipo dela;

● Daí o nome AGREGADO HOMOGÊNEO;

Page 27: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Definindo um agregado Definindo um agregado homogêneohomogêneo

● Em linguagem C, agregado homogêneo é definido da seguinte forma:

tipo NOME DA VARIAVEL [ dimensao ];

Onde : dimensao = quantidade de células do agregado

• deve ser sempre maior que zero• deve ser sempre inteiro• tem que ter um valor especificado ( não pode ser variável )

Page 28: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● Esta declaração deve iniciar o programa, pois só a partir dela é que o programa vai saber quais são as variáveis agregadas homogêneas e com quantas células elas foram definidas;

● Este tipo de variável é também chamado:– Conjunto

– Vetor

Page 29: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Exemplo 4Exemplo 4

● Seja a seguinte declaração:

int idade[30];

● Esta declaração define uma variável agregado homogênea, pois agrega 30 células que podem armazenar um valor inteiro cada uma;

Page 30: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Exemplo 5Exemplo 5● Seja a seguinte declaração:

float media_notas[100];

● Esta declaração define uma variável agregado homogênea, pois agrega 100 células que podem armazenar um valor flutuante cada uma;

Page 31: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Exemplo 6Exemplo 6● Seja a seguinte declaração:

char nome[80];

● Esta declaração define uma variável agregado homogênea, pois agrega 80 células que podem armazenar um caractere cada uma;

Page 32: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Acesso à variável agregadoAcesso à variável agregado

● O acesso a este tipo de variável é realizado através da definição do valor da posição da célula desejada na variável;

● Exemplo:– Sejam as declarações:

int idade[30];

float media_notas[100];

Page 33: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

0 1 2 2928

idade:

media_notas:

0 1 2 98 99

Estas são as formas que as variáveis IDADE e MEDIA_NOTAS são armazenadas na memória do computador, ou seja, um conjunto de células seqüenciais e adjacentes;

Page 34: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● O números representados acima dos conjuntos indicam as posições das células no conjunto;

● Eles são chamados de índices, e daí o nome destas variáveis de: indexadas

● Observar que o valor inicial de um índice é zero e portanto, seu valor final é igual ao valor da sua dimensão menos um;

Page 35: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● A declaração:

idade[5] = 30;

atribui à célula 5 ou 6a posição do vetor idade, o valor 30

30

0 62 3 4 51

Idade:

Page 36: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● As declarações:

numero = 45;

k = 10;

media_notas[k] = numero;

estas declarações atribuem à variável k o valor 10 e à variável numero o valor 45; como k é utilizada como índice da variável media_notas, a posição k de media_notas, ou seja, 10, recebe o valor da variável numero, no caso 45;

45

119 100

media_notas:

Page 37: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

ConceitosConceitos● A declaração responsável pela definição da quantidade

de células que uma variável indexada terá no programa é chamada declaração de dimensionamento da variável indexada;

● Como já explanado antes, o dimensionamento da variável indexada deve ser feito sempre no inicio do programa;

● O objetivo do dimensionamento de uma variável indexada é indicar quantas células estarão disponíveis para aquela variável durante a execução do programa;

Page 38: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● Ao se dimensionar uma variável não significa que todas suas células vão ser utilizadas durante a execução do programa;

● Por outro lado, quanto mais células forem reservadas para uma variável indexada, mais memória o computador gastará com esta variável;

● O valor da dimensão de uma variável indexada uma vez estabelecido no inicio do programa, não varia mais até o fim do mesmo;

● Daí o nome de DIMENSIONAMENTO ESTÁTICO dado a este tipo de evento num programa;

Page 39: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

● É responsabilidade do programador o gerenciamento na utilização dos índices de uma variável indexada, ou seja, se um índice for violado, tanto no lado inferior quanto no lado superior, os resultados são totalmente imprevisíveis, levando muitas vezes ao travamento do programa;

exemplo:

int valores[10];

valores[11] = valor;

● O grande problema neste tipo de erro é que ele não é detectado pelo compilador, sendo considerado então um dos mais difíceis de serem achados;

ERRO

Page 40: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Exemplo 7Exemplo 7

● Obter o menor dentre os valores de um conjunto de 50 números dados;

Page 41: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

1) Definição das variáveis

inteiro k, numeros[50], menor

INICIO

1) Entrada dos dados

imprima ( “entre com 50 numeros inteiros” )

para k = 0 até 49 passo 1 faça

leia ( numeros[k])

fim_para

1) Inicializando variáveis

menor ← numeros[0]

Page 42: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

4) Buscando o menor valor para k = 1 até 49 passo 1 faça se ( numeros[k] < menor ) então menor ← numeros[k] fim_se fim_para

5) Mostrando os resultados 5.1 ) mostrando os dados de entrada imprima ( “numeros dados” ) para k = 0 até 49 passo 1 faça imprima ( numeros[k])

fim_para

Page 43: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

5.2) mostrando o menor valor

imprima ( “menor valor : “, menor )

FIM

Page 44: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

Programa CPrograma C #include <bits/stdc++.h> using namespace std;

int main ( ) {

// definicao das variaveis

int k, t, r, numeros[50], menor;

// Entrada dos dados

printf ( “entre com 50 numeros inteiros\n” );

for ( k = 0; k < 50; k++ )

scanf ( “%d”, &numeros[k] );

// Inicializando variáveis

menor = numeros[0];

Page 45: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

// Buscando o menor valor

for ( t = 1; t <= 49; t++ ) {

if ( numero[t] < menor ) menor = numero[t];

}

// Mostrando os resultados

// mostrando os dados de entrada

printf ( “numeros dados\n” );

for ( r = 0; r < 50; r++ )

printf ( “%4d\n”, numeros[r] );

// mostrando o menor valor

printf ( “menor valor : %4d\n “, menor );

}

Page 46: Olimpíada Brasileira de Informática · número, referente à posição de uma determinada informação no vetor em questão. O número de cada posição do vetor é chamado de índice

TreinamentoTreinamento

http://br.spoj.com/problems/ENVEL09/

http://br.spoj.com/problems/LETRA14/

http://br.spoj.com/problems/FECHAD14/

http://br.spoj.com/problems/JFILA14/

http://br.spoj.com/problems/CARTAS14/

http://br.spoj.com/problems/CORRID13/

http://br.spoj.com/problems/RODOVI13/

URI – 1172 a 1180