Aula 14 - O tipo vetor
  • Resumo
  • Exercício 1
  • Exercício 2
  • Exercício 3
  • Exercício 4
  • Exercício 5
  • Soluções
Avalie esta aula

O tipo vetor

Considere o Exercício 2 da Aula 1 (quando ainda não tínhamos escrito nem o primeiro programa!):

Dada uma lista com a nota de cada aluno da classe na prova de Geografia, determine o número de alunos cuja nota foi igual ou superior à média da turma.

Sabemos fazer um programa para calcular a média das notas. Mas como verificar quantos alunos têm nota igual ou acima da média? Ao ler cada nota, ainda não sabemos o valor da média para comparar, e depois de calcular a média não temos mais acesso às notas lidas para comparar! Poderíamos pensar em armazenar as notas em variáveis, mas se a lista tiver 1000 notas não vai ser prático declarar 1000 variáveis.

Ou seja: com os comandos que conhecemos até agora, não conseguimos resolver esse problema.

Seria necessário:

  1. Ler novamente a entrada (o que não é possível); ou
  2. Armazenar as notas lidas para serem consultadas depois de calcular a média

E a opção (2) acima é o que o uso de vetores nos proporciona.

Um vetor é uma é uma coleção de valores que podem ser acessados individualmente, com um mesmo nome de variável. A figura abaixo mostra, esquematicamente, um vetor de nome notas com cinco elementos:

A cada elemento do vetor é associado um número: o índice do elemento. A figura abaixo mostra, para o vetor notas, os elementos e os índices associados:

O índice do primeiro elemento do vetor é sempre 0. No vetor notas mostrado na figura

  • o elemento de índice 0 tem valor 7
  • o elemento de índice 1 tem valor 8
  • o elemento de índice 2 tem valor 5
  • o elemento de índice 3 tem valor 8 e
  • o elemento de índice 4 tem valor 10.

Uso de vetores

O acesso a um valor do vetor é feito usando o nome do vetor e, entre colchetes, o índice do elemento desejado. Por exemplo, para acessar o elemento de índice 2 do vetor notas (cujo valor é 5) usamos

notas[2]

Podemos usar qualquer elemento do vetor como se fosse uma variável simples. Assim, para escrever na saída uma linha com o valor do elemento de índice 2 do vetor notas, usamos o comando

printf("%d\n", notas[2]);

Esse comando escreve o valor 5 na saída.

Elementos do vetor podem ser usados em expressões:

x = notas[0]+notas[2];

Após esse comando, a variável x armazena o valor 12 (7+5).

Podemos também atribuir um novo valor a um elemento do vetor com um comando de atribuição:

notas[0] = 9;

E podemos ainda atribuir um novo valor a um elemento do vetor com um comando de leitura:

scanf("%d","notas[0]");

Após esse comando, o vetor notas armazena os elementos 9,8,5,8,10.

Declaração de vetores

Para declarar uma variável de tipo vetor, inicializamos a variável com um "vetor vazio", indicado por um "abre colchete" e um "fecha colchete" consecutivos ([]). Ou seja, para declarar uma variável de nome notas, de tipo vetor, usamos:

var notas=[];

Essa declaração cria um vetor de nome notas vazio, ou seja, sem nenhum elemento.

Adicionando elementos a um vetor

Para criar um novo elemento de um vetor, basta atribuir um valor a um elemento de índice ainda inexistente. Por exemplo,

var notas=[];            // declara e cria um vetor vazio

notas[0] = 10;           // cria o elemento de índice 0, com valor 10
notas[1] = 7;            // cria o elemento de índice 1, com valor 7

scanf("%d", "notas[2]"); // lê um valor inteiro da entrada e 
                         // cria o elemento de índice 2 com o valor lido

Por exemplo, podemos criar um vetor de dez elementos, lendo os valores da entrada:

var i,                   // um contador
    notas=[];            // declara e cria um vetor vazio

for (i=0; i<10; i++)
    scanf("%d", "notas[i]"); // lê um valor para o vetor

Elementos podem ser de qualquer tipo

Os elementos de um vetor podem ser de qualquer tipo, como número, cadeia de caracteres ou booleano.

Vejam um exemplo de vetor com elementos de diferentes tipos:

var misto=[];

misto[0] = 123;
misto[1] = “X”;
misto[2] = “Saci Pererê”;
misto[3] = misto[1]===“X”;

printf(“%d\n”, misto[0]);
printf(“%s\n”, misto[1]);
printf(“%s\n”, misto[2]);
printf(“%s\n”, misto[3]);

Na saída, serão escritas as linhas

123
X
Saci Pererê
true

Note que para escrever um valor booleano usamos o especificador %s na cadeia formatadora do comando printf.

 

 

Avalie este exercício

Média ou melhor

A professora de Geografia fez uma lista com a nota da prova de cada aluno da turma. Ela precisa de um programa de computador para calcular a média das notas da turma e determinar quantos alunos tiveram nota igual ou superior à média.

Entrada

A entrada consiste de duas linhas. A primeira linha contém um número inteiro N que indica o número de alunos da turma. A segunda linha descreve as notas dos alunos. Ela contém N números Xi, indicando a nota de cada aluno.

Saída

Seu programa deve escrever duas linhas na saída. A primeira linha deve conter apenas um número com precisão de uma casa decimal, a média da turma. A segunda linha deve conter apenas um inteiro, o número de alunos que tiveram nota igual ou superior à média.

Restrições

  • 1 ≤ N ≤ 1000
  • 0.0 ≤ Xi ≤ 10.0

Exemplos

Entrada
5
10.0 9.0 7.0 9.0 10.0
Saída
9.0
4

Entrada
2
5.6 5.6
Saída
5.6
2

Entrada
4
10.0 1.4 3.6 1.0
Saída
4.0
1

 

 

Avalie este exercício

Sorteio de prêmios

Na festa junina da escola foi organizado um sorteio de prêmios, usando o número do tíquete da entrada para a festa. Havia muitos prêmios, e a diretora foi sorteando os números dos tíquetes ganhadores de um em um, anotando os números sorteados em uma lista. Os prêmios de valor mais baixo foram sorteados primeiro, de forma que o último número sorteado ganhou o grande prêmio.

A diretora agora quer divulgar a lista dos números dos tíquetes dos ganhadores na página da escola na internet. Mas ela precisa inverter a lista, colocando o último sorteado em primeiro lugar, o penúltimo sorteado em segundo lugar, e assim por diante.

Entrada

A entrada consiste de duas linhas. A primeira linha contém um número inteiro N que indica o número de tíquetes. A segunda linha descreve os tíquetes na ordem em que foram sorteados. Ela contém N números inteiros Xi, indicando os números dos tíquetes sorteados.

Saída

Seu programa deve escrever uma linha na saída, contendo a lista de números sorteados, na ordem inversa em que foram sorteados. Os números devem ser separados por um único espaço em branco (atenção e cuidado: não deve haver outros espaços em branco além dos que separam os números sorteados; em particular, não pode haver um espaço antes do primeiro número ou após o último número da lista).

Restrições

  • 1 ≤ N ≤ 1000
  • 1 ≤ Xi ≤ 1000
  • Xi distintos entre si

Exemplos

Entrada
5
10 20 30 40 50
Saída
50 40 30 20 10
	

Entrada
2
1000 99
Saída
99 1000

 

 

Avalie este exercício

Os últimos serão os primeiros

A escola está realizando uma cerimônia de premiação para os melhores colocados da OBI. A Diretora copiou da página da OBI na Internet os melhores classificados da escola, que lista os competidores em ordem, do melhor classificado para o menos bem classificado. Mas a diretora decidiu que o melhor é chamar os competidores ao palco na ordem invertida da classificação dada na página. Ou seja, ela quer chamar ao palco inicialmente os menos bem classificados, e assim chamar por último o melhor classificado.

A cerimônia já está começando, e a diretora está aflita. Você pode ajudá-la?

Entrada

A entrada consiste de duas linhas. A primeira linha contém um número inteiro N que indica o número de competidores. A segunda linha descreve os nomes dos competidores. Ela contém N nomes Xi, indicando os nomes dos competidores, em ordem de classificação, do melhor classificado para o menos bem classificado.

Saída

Seu programa deve escrever uma linha na saída, contendo a lista de competidores, na ordem inversa de classificação, do menos bem classificado para o melhor classificado. Os nomes devem ser separados por um único espaço em branco (atenção e cuidado: não deve haver outros espaços em branco além dos que separam os nomes; em particular, não pode haver um espaço antes do primeiro nome ou após o último nome da lista).

Restrições

  • 1 ≤ N ≤ 1000
  • Xi são cadeias de caracteres, com no mínimo 1 e no máximo 10 letras maiúsculas ou minúsculas, sem acento
  • Xi distintos entre si

Exemplos

Entrada
5
Fatima Alberto Pedro Katia Eva
Saída
Eva Katia Alberto Fatima
	

Entrada
2
Henrique Isabela
Saída
Isabela Henrique

 

 

Avalie este exercício

Sequência palíndrome

Uma sequência palíndrome é uma sequência que é a mesma se lida do início para o final ou do final para o início. Por exemplo, as sequências X, X e A, B, C, B, A são palíndromes, mas as sequências X, Y e A, B, B não são.

Dada uma sequência de letras, você deve escrever um programa para determinar se a sequência é palíndrome.

Entrada

A entrada consiste de duas linhas. A primeira linha contém um número inteiro N que indica o número de letras da sequência. A segunda linha descreve a sequência, e contém N letras Li, separadas entre si por um espaço em branco.

Saída

Seu programa deve escrever uma linha na saída, contendo apenas o caractere S se a sequência dada é palíndrome, ou o caractere N caso contrário.

Restrições

  • 1 ≤ N ≤ 1000
  • Xi é uma letra maiúscula não acentuada

Exemplos

Entrada
A B C B A
Saída
S

Entrada
X Y
Saída
N

Entrada
Z A A Z
Saída
S

 

 

Avalie este exercício

Número Palíndrome

Um número palíndrome é um número inteiro positivo, sem zeros à esquerda, que é o mesmo se lido da esquerda para a direita ou da direita para a esquerda. Por exemplo, os números 11 e 65256 são palíndromes, mas os números 10 e 123 não são.

Dado um número inteiro, você deve escrever um programa para determinar se o número é um palíndrome.

Entrada

A entrada consiste de uma única linha, que contém um único número inteiro N.

Saída

Seu programa deve escrever uma linha na saída, contendo apenas o caractere S se o número dado é um palíndrome, ou o caractere N caso contrário.

Restrições

  • 1 ≤ N ≤ 100000000

Exemplos

Entrada
1234321
Saída
S

Entrada
11111112
Saída
N

Entrada
99
Saída
S

 

 

Avalie esta aula

Soluções para os exercícios

Nesta seção você encontra exemplos de soluções para os exercícios. Mas antes de ver a solução para um exercício tente resolvê-lo, criando a sua própria solução.

Solução do Exercício 1
Solução do Exercício 1
// Solução para o exercício 1, Aula 14
// Média ou Melhor
// Autor: Ricardo Anido

var N,          // número de alunos
    i,          // contador para repetição
    notas=[],   // as notas dos alunos
    soma,       // soma das notas, para calcular a média
    media,      // média da turma
    acima;      // número de alunos acima da média

scanf("%d", "N"); // comprimento da lista
soma = 0;         // inicializa soma das notas

for (i=0; i<N; i++) {
    scanf("%f", "notas[i]"); // lê uma nota
    soma = soma + notas[i];  // acumula em soma
}

media = soma/N;              // calcula a média
acima = 0;                   // inicializa número de alunos acima da média
for (i=0; i<N; i++) {        // percorre novamente as notas
    if (notas[i] >= media)
        acima++;             // mais uma nota maior ou igual à média
}

//escreve o resultado
printf("%.1f\n%d\n", media, acima);

 

Solução do Exercício 2
Solução do Exercício 2
// Solução para o exercício 2, Aula 14
// Sorteio de prêmios
// Autor: Ricardo Anido

var N,            // número de alunos
    i,            // contador para repetição
    tiquete=[];   // números dos tíquetes

scanf("%d", "N"); // comprimento da lista

for (i=0; i<N; i++) {
    scanf("%d", "tiquete[i]"); // lê um número de tíquete
}

// escreve o resultado, tomando o cuidado de não
// colocar um espaço em branco a mais na linha
for (i=N-1; i>0; i--) {        // percorre o vetor, do último lido para o segundo lido
    printf("%d ", tiquete[i]); // escreve número de tiquetes,
                               // seguido de espaço em branco
}
// por último, escreve o primeiro sorteado, seguido de final-de-linha
printf("%d\n", tiquete[0]);

 

Solução do Exercício 3
Solução do Exercício 3
// Solução para o exercício 3, Aula 14
// Os últimos serão os primeiros
// Autor: Ricardo Anido

var N,            // número de alunos
    i,            // contador para repetição
    nomes=[];     // nomes dos alunos

scanf("%d", "N"); // comprimento da lista

// vamos ler a lista e guardar no vetor nomes
for (i=0; i<N; i++) {
    scanf("%s", "nomes[i]"); // lê um nome
}

// escreve o resultado, tomando o cuidado de não
// colocar um espaço em branco a mais na última linha
for (i=N-1; i>0; i--)          // percorre o vetor, do último lido para o segundo lido
    printf("%s ", nomes[i]);   // escreve nome, seguido de espaço em branco

// escreve nome do último colocado, lido em primeiro lugar, seguido de final-de-linha
printf("%s\n", nomes[0]);

 

Solução do Exercício 4
Solução do Exercício 4
// Solução para o exercício 4, Aula 14
// Sequência palíndrome
// Autor: Ricardo Anido

var N,            // o número dado
    i,            // contador para repetição
    seq=[];       // letras da sequência

scanf("%d", "N"); // lê o número de letras


for (i=0; i<N; i++)
    scanf("%s", "seq[i]");         // lê a sequência

j=0;
i=N-1;
// vamos percorrer o vetor comparando o elemento i com o elemento j
while (j <= i) {
    if (seq[i]!=seq[j])
	break;
    j++; i--;                 // avança j e retrocede i
}

// escreve o resultado
// se é i menor ou igual a j, ocorreu um break, e a resposta é N
// caso contrário, a sequência é palíndrome
if (j<=i)
    printf("N\n");
else
    printf("S\n");

 

Solução do Exercício 5
Solução do Exercício 5
// Solução para o exercício 5, Aula 14
// Número Palíndrome
// Autor: Ricardo Anido

var N,            // o número dado
    i,            // contador para repetição
    digitos=[];   // dígitos do número

scanf("%d", "N"); // lê o número

// vamos inicialmente construir um vetor com os dígitos do número N
i=0;
while (N > 0) {
    digitos[i] = Math.floor(N % 10);     // um dígito do número
    N = Math.floor(N/10);
    i++;
}
// ao final do while, i tem o número de dígitos do número N
i--;
// i agora tem o índice do último elemento do vetor
j=0; 
// vamos percorrer o vetor comparando o elemento i com o elemento j
while (j <= i) {
    if (digitos[i]!=digitos[j])
	break;
    j++; i--;
}

// escreve o resultado
// se é i menor ou igual a j, ocorreu um break, e a resposta é N
// caso contrário, o número é palíndrome
if (j <= i)
    printf("N\n");
else
    printf("S\n");

 

 

 
Área de Trabalho
Entrada
Programa
Saída