Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Lógica de Programação, Notas de aula de Lógica Matemática

Material sobre Lógica de Programação

Tipologia: Notas de aula

2017

Compartilhado em 08/11/2017

m_douglas1607
m_douglas1607 🇧🇷

4.7

(7)

26 documentos

1 / 31

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Material Didático do Instituto Metrópole Digital - IMD
Versão 2.0 - Todos os Direitos reservados
Lógica de Programação
Aula 13 - Estruturas de dados homogêneas
– vetores e matrizes
Apresentação
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Pré-visualização parcial do texto

Baixe Lógica de Programação e outras Notas de aula em PDF para Lógica Matemática, somente na Docsity!

Material Didático do Instituto Metrópole Digital - IMD Versão 2.0 - Todos os Direitos reservados

Lógica de Programação

Aula 13 - Estruturas de dados homogêneas

  • vetores e matrizes

Apresentação

Apresentação

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).

Atividade 01

  1. Explique o conceito de estruturas de dados homogêneas.
  2. Para que são utilizadas tais estruturas?
  3. Como são classificadas? Explique o conceito de cada uma.

Declaração de um vetor

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:

: vetor [tamanho] de

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.

Atribuição em vetor

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:

[posição] <-

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.

Atividade 02

  1. De que forma é declarado um vetor? Explique sua sintaxe e exemplifique.
  2. O que é o tamanho de um vetor? Explique para que serve a indexação.
  3. Nas aulas anteriores, vimos, exaustivamente, o exemplo do cálculo da média. Aprendemos a criar um algoritmo que calcula a média aritmética de um aluno na aula de estruturas sequenciais; vimos como dizer se o aluno foi ou não aprovado, com as estruturas de decisão, e calculamos a média para vários alunos, com as estruturas de repetição. Veja o algoritmo a seguir, que calcula e exibe a média de 50 alunos de uma turma:

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

Atividade 03

  1. Para que serve a variável temporária, no método de ordenação de vetores?
  2. Execute o algoritmo de ordenação que vimos no VisuAlg.
  3. Faça a ordenação desse algoritmo em ordem decrescente.

Matrizes

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.