Baixe o app para aproveitar ainda mais
Prévia do material em texto
NÍVEL Graduação DISCIPLINA Estrutura de Dados PROFESSOR Orlei José Pombeiro DESIGNER EDUCACIONAL Giselle Pupo Conversa Inicial Olá, seja bem-vindo a mais uma aula da disciplina Estrutura de Dados! Nesta aula, veremos as estruturas Vetores, Matrizes e Registros. Também iremos acompanhar a questão da declaração de novos tipos de variáveis. Bons estudos! Quando interpretamos Vetores e Matrizes como Estruturas, é pelo fato de que estamos agrupando em uma “única nova variável” um conjunto de várias variáveis de um determinado tipo único. Por exemplo, se precisamos armazenar a idade de uma pessoa, declaramos uma variável do tipo “inteiro” que pode se chamar “idade”. Mas se precisamos armazenar a idade de uma turma de cinquenta alunos, fica inviável declararmos cinquenta variáveis, para este caso declaramos um único “vetor” com “cinquenta posições de inteiros”. Para iniciar a nossa aula, confira a primeira parte da videoaula preparada pelo professor Orlei José para o encontro de hoje no material online, ele nos apresentará os temas que serão abordados. Contextualizando Confira a seguir a imagem de uma representação de um possível vetor de dez posições. Fique atento para um fato muito importante, o primeiro elemento de um vetor está na posição ‘Zero’, o segundo elemento do vetor está na posição ‘Um’, e assim sucessivamente. Isso acontece porque quando declaramos um vetor, o endereço de memória deste vetor é o endereço do primeiro elemento, assim, todos os demais são inseridos a partir deste primeiro endereço. O exemplo que você acabou de conferir é para uma turma, mas e se tivéssemos dez turmas? Para este caso, utilizamos o conceito de Matriz, que nada mais é que a relação “linhas por colunas”. Então, se necessitamos levantar as idades de dez turmas com cinquenta alunos cada, criamos uma única matriz com dez linhas e cinquenta colunas do tipo “Inteiro”. Multiplicando 10 x 50, significa que podemos armazenar quinhentas idades. A representação física pode ser visualizada na imagem a seguir, onde temos uma possível matriz de dez colunas e quatro linhas, totalizado quarenta posições de armazenamento de dados. Similar ao conceito de vetor onde o primeiro elemento está na posição ‘0’, aqui também trabalhamos com o fato que o primeiro elemento da matriz está na posição ‘0 0 ’, ou seja, na linha ‘0’ e coluna ‘0’. Para referenciarmos onde está, ou foi armazenado o valor na matriz, utilizamos a nomenclatura “linha” e “coluna”. Assim, observando a tabela a seguir, podemos dizer que o número quatro está armazenado na linha 0 e coluna 0, posição (0, 0) da matriz. Já o número 13 está na linha 1, coluna 4, posição (1, 4) da matriz. E assim sucessivamente. Todas estas nomenclaturas são referência para a mesma estrutura, para os mesmos comandos da inguagem . Tanto no caso de vetor quanto de matriz, quando declarados, podem ser apenas de um único tipo, seja de números inteiros ou reais, seja de caracteres ou strings. Outra questão, é que não podemos declarar um vetor ou matriz onde cada posição é de um tipo diferente de dado. Confira a seguir algumas questões que devem ser levadas em consideração em relação à vetores e matrizes: Outra questão a ser levantada aqui com relação a Vetores e Matrizes, diz respeito as literaturas. Algumas literaturas não abordam a nomenclatura “Vetor”. Para referenciar o Vetor utilizam a nomenclatura “Matriz Unidimensional”, ou seja, de uma dimensão. Já a “Matriz” com mais de uma dimensão é referenciada como “Matriz Multidimensional”, isto porque ela pode ter duas ou mais dimensões. Sim, uma matriz pode ter quantas dimensões quisermos 2, 3, 4, 5. O difícil é conseguir abstrair a quantidade e não se perder na hora de escrever as linhas de código. Outro detalhe importante é que, quando declaramos em um programa uma Matriz, os espaços reservados na memória para os elementos desta Matriz estão em sequência, não importando qual dimensão tenhamos criado. Sendo que o endereço desta Matriz passa a ser o endereço de memória do primeiro elemento da matriz. Para esta aula, vamos trabalho com o conceito de “Vetor” para matrizes de uma dimensão e “Matriz” para matrizes com duas ou mais dimensões. Este: foram desenvolvidas em inglês, todos os comandos utilizam palavras em inglês para referenciar as ações nos programas, e em sua quase totalidade, em letras minúsculas. Mas há casos onde desejamos armazenar tipos de dados diferentes para uma turma de trinta pessoas, por exemplo. Podemos querer armazenar características como o nome, a idade, a altura e o peso. Para estes casos, temos a possibilidade de criar Registros. E, associando a Vetores, podemos criar “Vetores de Registros”. Podemos definir Registros como “variáveis de tipos diferentes de dados agrupadas em um único novo tipo de variável”. Ainda sobre Registros, na literatura é possível encontrar as nomenclaturas “Estruturas” e “Variáveis Compostas Heterogêneas”, para referenciar “Registros”. Agora, acompanhe a contextualização preparada pelo professor Orlei no material online! Pesquise Vetor Vamos começar analisando o Vetor, onde cada elemento (variável) está em sua posição previamente definida. Vamos imaginar uma fila de alunos de uma turma com trinta alunos na sala, onde cada aluno possui uma idade que pode ou não ser a mesma dos demais colegas da fila. Se quisermos armazenar em um Vetor de números inteiros a idade destes alunos em um algoritmo, obteremos a média das idades. Clique no botão para conferir a aplicação! Utilizado somente variáveis inteiras, uma variável ‘x’ para contar a quantidade utilizada, a variável ‘soma’, para conter a somatória das idades e por último uma variável ‘idade’ que é declarada como com vetor com trinta posições. A variável soma, como vai conter o somatório dos valores, deve ser inicializada com ‘0’. Observe que a estrutura de repetição ‘for’ é executada trinta vezes, e que a cada loop é solicitada a idade, armazenando em uma posição específica do vetor e, já é acrescentada a variável que vai conter a somatória total. Quando solicitamos a idade do aluno, utilizamos a variável ‘x’ para nos auxiliar no número do aluno, que é somado de uma unidade, pois iniciou em zero (ou seja, sempre com um a menos). No vetor utilizamos esta variável ‘x’ para posicionar no vetor cada idade de acordo com a ordem de entrada. No primeiro loop o x vale ‘0’, no segundo ele passa a valer ‘1’, no terceiro ‘2’ e assim sucessivamente, devido ao incremento de uma unidade que ocorre no comando “x++”, até atingir a condição de fim do loop ”x<30”. Ao final, apresentaremos o resultado da soma dividindo direto por trinta. Matriz Como ficaria a mesma situação para 10 turmas? Neste caso, utilizaremos matrizes, assim, teremos em cada linha (com trinta colunas) uma turma. Confira: Como o exemplo observado, você pôde concluir que o vetor idade passa a ser uma matriz com duas dimensões e, nossa variável soma, que tinha o propósito de armazenar a somatória das idades da turma, agora, passa a ser um vetor, pois precisamos de dez somatórias distintas. Podemos observar que, na declaração do vetor soma, já inicializamos com ‘0’ todos os elementos do vetor. Como temos uma matriz de duas dimensõese necessitamos passar por todas as linhas e colunas, agora precisamos de dois loops para percorrer a matriz. O primeiro ‘y’ nos auxiliará a percorrer as linhas, já o segundo ‘x’ continua a nos ajudar a percorrer as colunas. Observe que, a cada nova linha, as colunas são novamente inicializadas com o índice ‘0’. Da mesma forma que utilizamos o ‘x’ para nos auxiliar a identificar o número de alunos que deve fornecer a idade, utilizamos a variável ‘y’ para nos auxiliar a identificar a turma que deve fornecer as respectivas idades. A somatória das idades de cada turma, agora estará em um vetor com dez posições e mesmo números de turmas, onde em cada posição, estará contida a somatória da respectiva turma. Para mostrar a média de cada turma agora, necessitamos de outro loop para percorrer o vetor das somatórias e mostrar um a um. Registro E como ficaria se resolvêssemos trabalhar não só com a idade, mas com o peso e a altura do aluno também? Em um primeiro momento podemos pensar em ter três vetores, ou três matrizes, uma para cada tipo de dado que necessitamos. Mas vamos ver como funciona utilizando “Registros”. Registros são estruturas que criamos em programação e a esta estrutura criada, colocamos campos de diferentes tipos que variam de acordo com a nossa necessidade. Deste modo, teremos uma variável que pode armazenar diferentes tipos de dados. Aqui também podemos associar o conceito de “Vetor” e de “Registro”, criando um “Vetor de Registros”. Em vez de termos um único valor em cada posição do Vetor (por exemplo, um número inteiro), teremos um registro com todos os campos que nos interessa. ..... Para trabalharmos com registros, temos primeiro que declarar a nova estrutura para depois declarar as variáveis e, então, finalmente trabalhar com a estrutura. Vale lembrar que, somente as variáveis é que podem armazenar conteúdos. Para criarmos uma nova Estrutura de Dados, é necessário declarar uma “Struct” ou “Registro” (é possível encontrar as duas nomenclaturas na literatura). Há apenas uma forma de declarar a estrutura, mas as variáveis da estrutura podem ser declaradas de diferentes modos. A declaração da nova estrutura, deve vir precedida da palavra “struct”, seguida do nome que vai se dar a estrutura, no nosso caso, declaramos como “Dados”. Ela é limitada por chaves {} e dentro, colocamos os tipos de dados que nos interessa. É possível colocar, inclusive, outras estruturas previamente criadas. Uma coisa é criar a nova estrutura, outra coisa é criar variáveis deste novo tipo. É necessário declarar variáveis do novo tipo, podendo inclusive ser vetores e matrizes. Para o nosso caso, criamos a variável “dados”, que passa a ser um vetor de cinquenta posições do tipo “aluno”. Como são três dados que queremos a média, criamos também três variáveis para conter as somatórias para a realização do cálculo da média. Confira a seguir a aplicação: Modo 1 struct Dados { char nome[45]; int idade; float peso, altura; }; struct Dados pessoa, vet_pessoas[10]; Modo 2 struct Dados { char nome[45]; int idade; float peso, altura; } pessoa, vet_pessoas[10]; É importante que, primeiro a estrutura seja declarada, para depois declararmos as variáveis. A estrutura apresentará um campo nome, do tipo “char”, um campo idade do tipo “int” e dois campos do tipo “float”, um para armazenar o peso e, o outro para armazenar a altura. Como estrutura é um novo “tipo de dado”, temos que criar variáveis para trabalhar. No primeiro modo, a declaração da variável está fora da estrutura, deste modo, temos que colocar a frente do nome da variável “pessoa”. Já no segundo modo, podemos colocar já na estrutura, as variáveis que vão trabalhar com ela. Estas, devem estar entre o “}” e o “;”. O diferencial está no trabalho com os dados da estrutura! Para armazenar os dados em um registro, utilizamos o ponto “.” para indicar em qual campo vamos armazenar os dados. Confira o exemplo: gets(pessoa.nome); pessoa.idade = 37; pessoa.peso = 73; Para o caso de “vetores de registros”, temos que informar também em qual posição do vetor serão armazenados os dados. Podemos aqui imaginar que cada posição se refere aos dados de uma pessoa distinta. Confira os exemplos a seguir: gets(vet_pessoa[2].nome); strcpy(pessoa[7].nome, ‘Alberto Roberto’); vet_pessoa[2].idade = 37; vet_pessoa[7].idade = 21; vet_pessoa[2].peso = 73; vet_pessoa[7].peso = 65; Agora, aproveite para revisar todo o conteúdo e confira o vídeo preparado pelo professor Orlei, disponível no material online, com as explicações sobre cada tema da aula de hoje! Preste bastante atenção! Na Prática Aplicação Prática Para conferir se você fixou o conteúdo, considere a seguinte necessidade: Criar um programa que armazena a idade, o peso e a altura de cinquenta pessoas. Após armazenados os dados, informar quantos estão com o peso acima da média deste grupo. Observação: não deixe de conferir o vídeo com a orientação do professor Orlei para a realização do exercício, disponível no material online! Síntese Nesta aula, pudemos acompanhar a aplicabilidade dos vetores, matrizes e registros em estruturas computacionais. É constante a necessidade de agrupamento de um mesmo tipo de dado para um conjunto de indivíduos ou objetos, assim como, o agrupamento de tipos diferentes de dados para conjuntos de indivíduos. Para encerrar, não deixe de conferir a síntese da aula de hoje, preparada pelo professor Orlei, disponível no material online!
Compartilhar