























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Material sobre Lógica de Programação
Tipologia: Notas de aula
1 / 31
Esta página não é visível na pré-visualização
Não perca as partes importantes!
























Material Didático do Instituto Metrópole Digital - IMD Versão 2.0 - Todos os Direitos reservados
Nas aulas anteriores, estudamos as estruturas de controle. Vimos que tais estruturas são utilizadas para definir o fluxo de execução dos comandos nos algoritmos. Vimos também as estruturas sequenciais, com comandos básicos e ordem simples na execução desses comandos; as estruturas de decisão, que estabelecem desvios na execução dos comandos, de acordo com condições específicas, e as estruturas de repetição, em que determinados comandos são executados em laço.
Até agora, na execução dos comandos com as estruturas de controle, utilizamos tipos de dados básicos, com variáveis simples: real, inteiro, literal, caractere e lógico. Nesta aula, veremos que há situações em que os tipos de dados básicos não são suficientes para resolver os problemas que se apresentam. Em muitos momentos, precisaremos, para atingir a solução de tais problemas, utilizar o que chamamos de estruturas de dados homogêneas. Iremos, ao longo da aula, entender o conceito dessas estruturas e ver que, utilizando-as, podemos armazenar diversos dados de um mesmo tipo em uma única variável. Estudaremos a utilidade dessas estruturas e as classificaremos em vetores (unidimensionais) e matrizes (bidimensionais), contemplando a sintaxe e a construção de algoritmos utilizando as duas estruturas.
Vídeo 01 - Apresentação
Imagine, por exemplo, que você quer escrever um programa que solicita ao usuário a entrada dos nomes de 50 alunos de uma turma de sua escola. Parece simples, não? E é. Basta você utilizar uma das estruturas de repetição que vimos nas aulas anteriores. Veja:
algoritmo "50 nomes"
var
nome:literal
contador:inteiro
inicio
escreval ("Digite os nomes dos alunos:")
para contador de 1 ate 50 passo 1 faca
escreval ("Aluno",contador,":")
leia (nome)
escreval ("Aluno",contador,": ",nome)
fimpara
fimalgoritmo
O algoritmo anterior solicita que o usuário digite os nomes e lê um a um, conforme o usuário os digita. Nesse caso, precisamos apenas de uma variável inteira que servirá como contador e uma variável do tipo literal para armazenar o nome que será digitado.
O nome é digitado, armazenado na variável, exibido ao usuário, e a variável é liberada para armazenar o próximo nome. Se você solicitar ao programa que exiba o conteúdo da variável nome, verá que somente o último nome digitado será exibido.
Faça o teste: adicione a seguinte linha após o final da estrutura de repetição: escreva ("Nome:",nome). Execute no VisuAlg e observe a saída.
Mas se quisermos que todos os nomes digitados sejam exibidos em uma lista imediatamente após a digitação dos mesmos? Como fazer isso?
Para que os nomes dos alunos do nosso exemplo sejam exibidos em uma lista, eles precisam primeiro ser acessados. E para serem acessados, é necessário que todos eles estejam armazenados nessa lista. Para esse fim, existem as estruturas de dados homogêneas.
Estruturas de dados homogêneas são estruturas que permitem armazenar conjuntos de dados de um mesmo tipo (daí o nome "homogêneas") em uma única variável. São também chamadas de variáveis compostas homogêneas ou variáveis compostas indexadas.
As estruturas de dados homogêneas são classificadas em dois tipos:
a. a. os vetores (ouarrays), estruturas que armazenam os dados em uma única linha e várias colunas (dizemos que são unidimensionais); b. as matrizes, estruturas que armazenam os dados em forma de tabela, com várias linhas e várias colunas (são bidimensionais).
Assim como as variáveis simples, os vetores precisam ser declarados antes de serem utilizados. A declaração de um vetor, porém, é um pouco diferente da declaração de uma variável comum, pois se trata de uma variável indexada. É como se estivéssemos declarando diversas variáveis dentro de uma só, diferenciadas apenas por um índice.
Essas "variáveis" correspondem aos elementos do vetor (em nosso exemplo, os nomes dos alunos). Já o índice é um valor numérico do tipo inteiro, que sempre começa em 1 e corresponde à posição de cada elemento no vetor. Veja a Tabela 1.
Maria João Fátima Francisco Fernanda
Tabela 1 - Exemplo simples de um vetor
A Tabela 1 representa um vetor de 5 elementos. Os elementos são os nomes (Maria, João, Fátima, Francisco, Fernanda). Os números de 1 a 5 representam os índices, que são as posições de cada elemento no vetor. Por exemplo, o elementoFátima ocupa a posição 3 do vetor.
Ao declarar um vetor, o seu "tamanho" deve ser informado. O "tamanho" de um vetor é a quantidade de dados que será armazenada na variável. Na Tabela 1, o tamanho do vetor é 5. No nosso exemplo (dos nomes dos alunos), o tamanho do vetor é 50, pois queremos armazenar os nomes de 50 alunos.
Veja a sintaxe da declaração de um vetor:
onde
[tamanho] = [Vi..Vf], onde: Vi = valor inicial e Vf = valor final
Nosso exemplo:
nomes : vetor [1..50] de literal
No nosso exemplo, ao invés de declararmos diversas variáveis (nomes1, nomes2...nomes50), estamos declarando diversos elementos (os nomes) em uma variável.
Assim como as variáveis comuns, os elementos de um vetor também podem ser inicializados, ou seja, ter seus valores atribuídos no momento da declaração.
Ao atribuir valores a um elemento do vetor, deve ser obedecida a seguinte sintaxe:
Exemplos:
algoritmo "Nomes dos Alunos"
var
nomes: vetor[1..50]de literal// declaramos, aqui, o vetor (veja o tamanho entre colchetes)
contador:inteiro//declaração da variável contador
inicio
escreval ("Digite os nomes dos alunos:")
para contador de 1 ate 50 passo 1 faca// inicio da primeira estrutura de repetição
escreval ("Aluno ",contador,":")
leia (nomes[contador]) // os dados são armazenados um a um, no vetor
fimpara//fim da primeira estrutura de repetição
para contador de 1 ate 50 passo 1 faca// inicio da segunda estrutura de repetição
escreval (nomes[contador]) // os dados são exibidos
fimpara//fim da segunda estrutura de repetição
fimalgoritmo
Perceba que há uma estrutura de repetição para armazenar os dados e outra para exibi-los. Execute o algoritmo no VisuAlg.
algoritmo “50 Médias”
var
nota1: real
nota2: real
nota3: real
contador: inteiro
inicio
escreval (“Digite as notas dos alunos:”)
para contador de 1 ate 5 passo 1 faca
escreval(“Digite a primeira nota do aluno “,contador,”:”)
leia (nota1)
escreval(“Digite a segunda nota do aluno “,contador,”:”)
posição e o maior na segunda posição (se a ordenação for crescente). Veja abaixo.
01 02 Posição na memória
A = 5 B = 2 Elementos a ordenar
A > B, então
01 02 Posição na memória
B = 2 A = 5 Elementos ordenados
Quando há uma quantidade maior de elementos a serem ordenados, há a necessidade de técnicas específicas de ordenação. Vamos conhecer uma delas.
Observe a tabela a seguir.
Os números 01 a 05 na primeira linha da tabela representam as posições na memória (os índices do vetor) de cada elemento. Na linha de baixo, estão os elementos fora de ordem.
Para ordenar os elementos, é necessário fazer a comparação entre todos eles da seguinte maneira: primeiro, comparamos o número do índice 01 com cada um dos outros. O menor é colocado na posição 01.
Depois, é realizada a comparação do segundo elemento com os restantes e assim por diante.
Porém, como cada elemento ocupa um espaço na memória, precisamos reservar um espaço auxiliar (uma variável temporária) para armazenar um dos elementos da comparação, quando ele tiver que trocar de posição. Veja:
I – Criamos uma variável auxiliar e comparamos o número do primeiro índice com todos os demais, até encontrar o menor, armazenando-o na primeira posição.
(i) Comparamos o 5 com o 2. Como o 5 é maior, trocamos os dois números de posição. O 5 vai para a variável auxiliar (ii) e o 2 vai para a primeira posição (iii). Depois, o 5 vem para a posição onde o 2 estava anteriormente (iv).
II - Como houve troca de posições entre os elementos, realizamos a comparação entre o primeiro elemento (que agora é o 2) com os demais, até achar um menor.
para i de 1 ate 5 faca
escreval ("Numero?")
leia (num[i])
fimpara
// solicita entrada dos números
para i de 1 ate 5 faca
para j de 1 ate 5 faca
// são duas estruturas de repetição, pois dois números serão comparados repetidamente
se num[i] < num[j] entao// compara dois números
temp <- num[j]// coloca o maior na variável temporária
num[j] <- num[i]// coloca o menor no lugar do maior
num[i] <- temp// coloca o maior(que estava na variável temporária) no lugar em que estava o menor
fimse
fimpara
fimpara
para i de 1 ate 5 faca
escreva (num[i])
// Exibe os números ordenados
fimpara
fimalgoritmo
Vídeo 05 - Matrizes de Duas Dimensões
Vimos, há pouco, que nem sempre os tipos de dados básicos são suficientes para representar as estruturas de dados necessárias para resolver os problemas que se apresentam.
Vimos também a necessidade de, em algumas situações, exibir dados em listas. E, para atender a essa necessidade, conhecemos os vetores como estruturas de dados unidimensionais, com variáveis indexadas referenciadas por um único índice.
Aprendemos que armazenando os dados em um vetor e acessando-o em seguida, podemos exibir suas informações em uma lista.