Baixe o app para aproveitar ainda mais
Prévia do material em texto
PENSAMENTO COMPUTACIONAL OBJETIVOS DE APRENDIZAGEM > Definir nomes e listas no contexto de dados. > Descrever grafos. > Reconhecer hierarquias. Introdução A partir da aplicação de pensamento computacional, dados podem ser armaze- nados e organizados com extrema eficiência na memória dos computadores. Para isso, estruturas são desenvolvidas para solucionar problemas de armazenamento, organização e processamento de dados, o que também encontra aplicação no mundo real. Neste capítulo, você vai estudar como são organizados os dados a partir do pensamento computacional, quer para a resolução e análise de problemas pre- sentes no mundo real, quer em estruturas computacionais. Também conhecerá as regras de identificação e organização de dados para evitar que ocorram dúvidas na recuperação de informações, além de diversos tipos de estruturas de dados que permitem seu gerenciamento eficiente na memória dos computadores. Por fim, ainda examinará nomes e listas no contexto de dados, as características e a usabilidade de grafos e exemplos de hierarquias. Organização de dados Luis Gustavo Maschietto Nomes e listas no contexto de dados Sistemas de computação são capazes de gerenciar bilhões de informações, e a cada ano que passa essa capacidade aumenta de forma considerável. Sistemas voltados ao gerenciamento de dados devem manter todas as informações à medida que elas são armazenadas a partir de outros sistemas computacio- nais. Essa rotina requer atenção dos desenvolvedores, pois todos os dados de um sistema devem ser bem organizados e devidamente identificados para poderem ser utilizados quando necessário (RILEY; HUNT, 2014). Numa base de dados, a escolha das atribuições de nomes deve ser cuidadosamente prevista, pois, caso ocorra atribuição de um nome con- fuso, será muito difícil acessar ou raciocinar sobre os dados. Este princípio vale não apenas no contexto da computação, mas também na vida real. Embora dê algum trabalho determinar um nome assertivo para cada item, esse procedimento deve ser sempre executado para que sejam evitados problemas que trazem confusão ou dificuldades no entendimento das informações. Felizmente, existem diretrizes que nos ajudam a escolher nomes para itens numa base de dados. Essas diretrizes, listadas a seguir, promovem um melhor entendimento dos dados armazenados quando é preciso identificá-los, localizá-los e analisá-los de forma abrangente (RILEY; HUNT, 2014). 1. A escolha dos nomes deve ser única para cada item na base de dados, garantindo que um nome refira-se a apenas uma coisa. Assim, sempre que esse nome for utilizado, não haverá confusão sobre qual item está sendo referido. 2. Itens devem apresentar apenas um nome. Itens com nomes duplicados podem gerar confusão no momento da análise dos dados por uma pessoa ou por um sistema computacional. 3. Nomes devem ser descritivos, ou seja, devem descrever o papel ou função de um item dentro do sistema de armazenamento. Nomes descritivos ajudam a descrever as funções ou o conteúdo de um item. 4. Os nomes dos itens armazenados devem ter relação com sua loca- lização. Dessa forma, sistemas computacionais responsáveis pelo gerenciamento e organização de um grande volume de dados são capazes de localizar de forma rápida esses itens. A internet é um exemplo de sistema computacional que possui grande volume de dados, e nesse cenário é extremamente importante que seu processo de localização seja ágil. Organização de dados2 A World Wide Web (WWW) apresenta diversas nomenclaturas para designar uma variedade de páginas presentes em sua plataforma. Os nomes atribuídos a cada endereço na internet são fundamentais para a localização do conteúdo dessas páginas e são conhecidos como Localizadores Uniformes de Recursos (Uniform Resource Locator — URLs). O URL de uma página web não é tecnicamente o nome do item em si, e sim uma forma de localizar esse item. Esse sistema URL obedece às quatro diretrizes examinadas anteriormente para atribuir uma nomenclatura (RILEY; HUNT, 2014). Pelo critério da unicidade de nomes, por exemplo, o endereço de uma página refere-se a um único site específico. Pelo segundo critério, as pági- nas normalmente recebem apenas uma URL, mas existem situações em que dois endereços direcionam para a mesma página, embora essa não seja a tendência natural de nomenclatura para a internet. Pelo terceiro critério, URLs são compostos de uma descrição das informações presentes em uma página web. Caso exista, por exemplo, um endereço http://www.empresax.com.br/cadastro_assinante, é possível deduzir que ele é um local específico do site da Empresa X para a realização de cadastro de assinantes. Por fim, cada URL indica não apenas o conteúdo de uma página, mas também o local onde a página pode ser localizada. Um computador ligado à internet e que hospeda uma página possui um nome único que o identifica. Portanto, a primeira parte de um URL identifica esse computador que contém a página web. Cada computador também possui um sistema de arquivos cujo caminho é identificado pelo restante do endereço URL. O URL http://www.empresax.com.br/ cadastro_assinante/meus_dados, por exemplo, indica que o computador chamado empresax.com.br possui uma pasta chamada cadastro_assinante, dentro da qual encontra-se um arquivo chamado meus_dados. Conforme uma base de dados vai aumentando, é imprescindível que os dados possuam uma identificação adequada e com um nome apropriado para sua localização. Na vida real, essa prática também deve ser executada, principalmente para evitar confusões desnecessárias ao tentar inferir a verdadeira função de um item analisado. As formas mais usuais de organizar as informações são por meio de árvores, grafos e listas (RILEY; HUNT, 2014). Diversos dados do mundo real são organizados em forma de lista. Ao tentar organizar um grupo de amigos, por exemplo, é muito comum o uso de listas com dados sobre eles. Uma lista de tarefas, por sua vez, pode definir o que deverá ser realizado em determinada data. Já uma lista de compras indica o que deve ser adquirido na próxima ida ao supermercado. É necessária uma reflexão profunda para entender como as listas podem ser armazenadas e manipuladas pelos sistemas computacionais (RILEY; HUNT, 2014). Uma lista é uma sequência de itens organizados numa ordem específica. Qualquer item de uma lista pode ser identificado por sua posição. Quando Organização de dados 3 se emprega números para identificar itens numa lista, é utilizada a técnica conhecida como indexação. A indexação associa um único número a cada item de um conjunto de dados. Dessa forma, os itens são identificados por seu índice, o qual pode ser entendido como um nome exclusivo para um dos itens em uma lista. Na computação, um índice inicial normalmente é representado pelo número 0. Porém, em listas que representam o mundo real é possível considerar o índice inicializando com o número 1. Um índice é representado entre colchetes, sendo possível encontrar a representação do índice [0] ou índice [1] como valores iniciais em uma lista (RILEY; HUNT, 2014). Uma lista de itens pode ser armazenada na memória de um computador, que nada mais é que um arranjo unidimensional de itens, de forma que cada item seja atribuído a um endereço de memória. Todos os dados de um computador são armazenados em um local da memória e são identificados por um índice. Cada localização de memória pode armazenar uma palavra de dados, em que uma palavra representa a menor unidade de dados. A Figura 1 ilustra a forma como uma palavra é armazenada em um endereço de memória de um computador (RILEY; HUNT, 2014). Figura 1. Disposição das palavras nos endereços da memória de um computador. Fonte: Adaptada de Riley e Hunt (2014). A memória central de um computador é uma zona de armazenamento organizada em centenas ou milhares de unidades de armazenamento individual, ou células. A memória central é um conjunto de células de memória (essas célulasou posições de memória também são chamadas de palavras, Organização de dados4 mesmo não guardando analogia com as palavras da linguagem). O número de células da memória central depende do tipo e do modelo de computador. Cada célula de memória contém certo número de bits (dígitos binários), geralmente 8, formando um byte. Assim, a unidade elementar de memória se chama byte (octeto). Um byte tem a capacidade de armazenar um caractere de informação (AGUILAR, 2008). Todos os dados armazenados em dispositivos que possuem uma estrutura em forma de disco — como ocorre em HDs, CDs e DVDs — também são orga- nizados de forma linear. As divisões existentes nesses tipos de dispositivos são conhecidas como faixas. As trilhas existentes em cada faixa são divididas em setores onde os dados são armazenados (RILEY; HUNT, 2014). Outra maneira de armazenar dados de forma organizada em um compu- tador é por meio de estruturas de dados chamadas array (vetor). Um array representa um conjunto de endereços de itens na memória de um computador, dispostos de forma unidimensional ou bidimensional. Uma array bidimen- sional, por exemplo, consegue armazenar um conjunto de informações que representa um item de uma lista. Numa lista de pessoas, digamos, além de cada nome, seria possível armazenar endereço, CPF, RG, altura, peso, entre outros detalhes de cada um incluso na lista. Nesse caso, teríamos dois ín- dices, um que representaria a pessoa em um endereço de memória e outro para identificar que o local daquele espaço de memória foi alocado a uma determinada característica daquela pessoa. Assim, seus índices poderiam ser [0][0], [0][1], [0,2], em que 0 do primeiro colchete representaria a primeira pessoa da lista, e os números presentes do segundo colchete (0,1,2), seus atributos como nome, endereço e CPF (RILEY, 2014). O endereço de memória do primeiro item presente em um vetor é cha- mado de âncora do vetor. A partir da sua localização, é possível localizar todos os itens que fazem parte desse vetor. O acesso aos dados a partir da âncora do vetor pode ser feito por meio dos índices do vetor. Dessa forma, ao localizar a âncora do vetor em memória, os próximos índices pertencerão ao mesmo vetor. Normalmente, com o uso de uma linguagem de programação um vetor é acessado com o uso de uma variável contadora (que representa os índices do vetor) dentro de uma estrutura de dados em loop. Na Figura 2, existem duas listas distintas que são armazenadas na memória como um vetor. No local 3, é possível identificar a âncora do vetor que representa os dados sobre Pinturas e no local 8, a âncora do vetor de dados sobre Filmes. Num computador, as informações são orientadas pelos locais onde as âncoras de cada vetor se encontram. Portanto, os dados sobre Pinturas estão no local 3 da memória e os dados sobre Filmes, no Organização de dados 5 local 8 da memória. Após a alocação de um vetor na memória, não existe a possibilidade de expansão ou redução dos espaços reservados para os dados desse vetor (RILEY; HUNT, 2014). Figura 2. Duas listas com seus âncoras correspondentes. Fonte: Adaptada de Riley e Hunt (2014). Qualquer lista pode ser armazenada na memória como um array, e sua principal vantagem é que qualquer elemento em um array pode ser facilmente acessado pela posição do item na lista. As principais desvantagens são que o tamanho de um array é fixo e que a inclusão e exclusão de itens em uma lista exige um número significativo de etapas. Grafos Os grafos são utilizados para solucionar diversos problemas existentes no mundo real. Sua estrutura é composta por elementos conhecidos como bordas e nós. As bordas são representadas pelas conexões existente entre dois nós e os nós representam objetos do mundo real. Um grafo direcionado é uma coleção de nós distintos e uma coleção de arestas distintas. Uma aresta (ou Organização de dados6 arco) é definida como um par ordenado de nós que estabelece uma conexão unilateral do primeiro até o segundo nó. Tomando um exemplo de representação (X, Y), ele indicará que um grafo contém uma aresta de nó X ao nó Y, mas não implicará a existência de uma conexão de Y para X. Numa representação geral G = (V, E), temos que G é composto por um conjunto de nós (V) e um conjunto de arcos (E). Vamos supor que V possui os vértices {A, B, C, D, E} e E possui o conjunto de arcos {(A, E), (A, B), (B, A), (B, D), (C, E), (D, C), (E, B), (E, C), (E, D)}. Para a representação dos grafos, são utilizados diagramas em que os nós são representados por círculos e os arcos são representados por setas que apontam para outros nós. A Figura 3 apresenta um grafo G que contém cinco círculos (nós) com seus respectivos nomes. Esses nós apontam, com o uso dos arcos, para outros nós. O diagrama do grafo G é composto por cinco nós e nove arcos. Figura 3. Exemplo de um grafo G. Fonte: Riley e Hunt (2014, p. 207). É possível representar um grafo solucionar diversos problemas no mundo real. Num modelo de rota de linha aérea, por exemplo, o grafo poderia mostrar as diferentes rotas possíveis entre localidades no mundo. Na Figura 4, os nós de um grafo são representados por aeroportos e as arestas como voos de um aeroporto para outro. É possível associar o nó A com Cuiabá, B com Brasília, E com São Paulo, C com Belo Horizonte e D com Rio de Janeiro. Ao analisar o grafo, é possível verificar que existem voos diretos de Cuiabá para Brasília e para São Paulo, mas que não existe voo direto de Cuiabá para Rio de Janeiro. Outra informação que o grafo apresenta é que, ao analisarmos somente os nós destacados com as letras, existem duas possibilidades de rotas de ida e volta de Cuiabá ao Rio de Janeiro, uma passando por São Paulo e outra passando por Brasília e Belo Horizonte. Organização de dados 7 Figura 4. Grafos de linhas aéreas. Fonte: Adaptado de Mapa de Rotas (2020). Os grafos são constantemente empregados no mundo real e representam fortemente o pensamento computacional na solução de diversos problemas. A própria internet pode ser representada com o uso de grafos. Assim, podem ser identificados os computadores (nós) e as conexões (arcos) existentes em sua estrutura. Além da internet, grafos podem servir de representações para ações em jogos de tabuleiros, estruturas químicas com átomos e suas ligações, circuitos elétricos com conexões entre componentes, artigos publicados, em que o assunto está relacionado a diversos estudos do conhecimento humano, etc. Os grafos são caracterizados por um conjunto de recursos que descrevem sua estrutura geral. Entre eles estão adjacência, loop, grau de entrada e saída, ordem, tamanho, caminho, comprimento do caminho e ciclo. Esses recursos possuem características próprias, examinadas a seguir: Organização de dados8 � Adjacência: dado que U e V são vértices, o vértice U é adjacente ao vértice V se houver um arco (U, V) no grafo. Na Figura 3, por exemplo, o vértice D é adjacente ao vértice C em G, uma vez que o arco (D, C) aparece em G. Porém, o vértice C não é adjacente a D, pois o arco (C, D) não está em G. � Loop: é qualquer arco tal que o primeiro e o segundo nós do arco são os mesmos. Não existe caso de loop na Figura 3. � Grau de entrada: o grau de entrada de um vértice V é determinado pelo número de arcos no grafo tendo V como o segundo vértice. Na Figura 3, o grau do vértice E é 2, pois G tem arcos (A, E) e (C, E) como os únicos arcos onde o vértice E é o segundo vértice. � Grau de saída: o grau de saída de um vértice V é determinado pelo número de arcos tendo V como primeiro vértice. Na Figura 3, o grau de saída do vértice E é 3, pois G tem arcos (E, B), (E, C) e (E, D) como os únicos arcos onde o vértice E é o primeiro vértice. � Ordem: é representada pelo número de vértices existentes. Na Figura 3, o grafo G possui ordem 5 (cinco vértices). � Tamanho: é determinado pelo número de arcos existentes. Portanto, na Figura 3 o tamanho de G é 9 (nove arcos). � Caminho: sequênciade vértices em que, para cada par de vértices adjacentes na sequência, existe um arco correspondente no grafo. Uma sequência que contém um único vértice é considerada um caminho. Na Figura 3, a sequência [A, E, C] é considerada um caminho, já que (A, E) e (E, C) são arcos no grafo. Porém, o conjunto de nós [A, B, E] não podem ser considerado uma sequência, pois (B, E) não é um arco no grafo. � Comprimento do caminho: é o número de arcos presentes no caminho. Na Figura 3, o comprimento do caminho [A, E, C] é 2. � Ciclo: é um caminho cujo comprimento é maior que zero e o primeiro e o último vértices são iguais. Grafos acíclicos não possuem ciclo algum. Na Figura 3, o grafo G possui um ciclo que ocorre nos nós [A, B, A]. Listas podem ser consideradas grafos. Isso é possível se cada elemento for considerado, exceto o primeiro, com grau em 1 e cada elemento, exceto o último, com um grau fora de 1. A diferença central entre uma lista e um grafo está nos vértices. Nos grafos, os vértices podem ter um grau de saída maior em relação às listas. Em relação ao armazenamento de listas, cada elemento que a compõe é imediatamente seguido na memória por um único link. Em relação ao armazenamento de grafos, não é possível fazer essa Organização de dados 9 suposição, pois um vértice pode ser adjacente a diversos vértices existentes. Dessa forma, como não é possível assumir que um vértice está fora do grau 1, deve-se armazenar o grau de saída de cada vértice junto com o valor do vértice. Portanto, é possível armazenar um grafo primeiramente pelo valor do vértice (o nome) e posteriormente pelo grau externo do vértice na próxima localização da memória. Assim, é possível armazenar N (número do grau externo do vértice) links. A Figura 5 mostra a forma correta de armazenamento do grafo apresentado na Figura 3. Para o exemplo, foi considerado o vértice A como o nó âncora. Na Figura 5, esse vértice encontra-se na posição 10 do endereço de memória. Sabendo-se que o número do grau externo de A é 2 (vide Figura 3), ele é colo- cado no endereço exatamente após a localização do nó A, ou seja, na posição 11 da memória. Os próximos dois valores na memória são links para os dois vértices adjacentes a A. Sabendo-se que os vértices B e E são adjacentes a A, então os próximos valores recebem a posição desses vértices, ou seja, 1 (referente à localização do vértice B na memória) e 14 (referente à localização do vértice E na memória). É importante observar também que o vértice E tem um grau externo de 3 e é adjacente aos nós B, C e D. Essa representação só é possível se todos os vértices no grafo puderem ser alcançados começando da âncora e seguindo para uma cadeia de arcos. Figura 5. Armazenamento de um grafo em memória. Fonte: Adaptada de Riley e Hunt (2014). Organização de dados10 Hierarquias Hierarquias são arranjos de elementos dispostos em níveis. Numa hierar- quia, cada elemento pode apresentar muitos elementos que estão dire- tamente abaixo, mas existe apenas um elemento que está diretamente acima. No mundo real, existem diversas representações de hierarquias, incluindo organogramas, árvores genealógicas, taxonomias, classifica- ção linguística e classificação por estrutura de dados em árvores. Um organograma é um diagrama que representa a estrutura hierárquica composta por cargos e funções designados entre funcionários de uma organização. A Figura 6 apresenta um organograma da empresa Amazon. A raiz de um organograma representa o cargo ou função de maior destaque na empresa. Nesse exemplo, é possível verificar o cargo de presidente, atribuído a Jeffrey (Jeff) Bezos, como sendo o de maior controle na or- ganização. A função de vice-presidente é atribuída a quatro indivíduos, que são subordinados diretos ao presidente da organização. Além disso, existem quatro diretores e um gerente sênior. Nesse exemplo, é possível verificar que Tim Stone deve reportar-se diretamente a Thomas Szkutak. Por outro lado, Thomas Szkutak tem autoridade supervisora sobre Tim Stone. Outro detalhe verificado é que Thomas Szkutak reporta-se dire- tamente a Jeffrey Bezos. Figura 6. Exemplo organograma. Fonte: Adaptada de Riley e Hunt (2014). Organização de dados 11 Uma árvore genealógica, por sua vez, representa a relação de parentesco entre ancestrais e seus descendentes. Os níveis superiores da hierarquia são compostos por ancestrais de gerações remotas e os níveis inferiores, por familiares de gerações recentes. As árvores genealógicas não podem ser consideradas puramente hierárquicas, pois em situações em que são incluídas informações dos ancestrais maternos e paternos uma pessoa terá dois indivíduos acima dele. Dessa forma, o princípio da hierarquia é vio- lado, pois estabelece que cada elemento na hierarquia deve ter apenas um elemento diretamente acima dele. Assim, para não haver tal violação, uma árvore genealógica deve limitar-se a mostrar ou os ancestrais paternos ou os maternos. Na Figura 7, é mostrado um exemplo de árvore genealógica limitada a cinco gerações da família Baggins, criada pelo autor J.R.R. Tolkien em seu livro O Senhor dos Anéis. Figura 7. Exemplo de árvore genealógica. Fonte: Adaptada de Riley e Hunt (2014). Em estudos voltados à educação, existe uma representação hierárquica conhecida como taxonomia de Bloom. Uma taxonomia é definida com uma hierarquia cumulativa em que a categoria anterior é pré-requisito para a posterior. O estudo de Benjamin S. Bloom, idealizador de tal taxonomia, com- preende seis categorias principais do domínio cognitivo, que são ordenadas da mais simples (conhecimento) até a mais complexa (avaliação) (Figura 8). Dessa Organização de dados12 forma, a taxonomia de Bloom pretende enfatizar que um aluno conseguirá avançar para uma próxima categoria somente após dominar o nível atual em que se encontra (SILVA, 2019). Figura 8. Ordenação da taxonomia de Bloom. Fonte: Silva (2019, p. 20). Outro exemplo de hierarquia pode ser encontrado no estudo científico e formal da linguagem humana conhecido como linguística. Na linguística, a gramática concentra-se em como elementos da linguagem estão relacionados entre si, além das regras pelas quais essas relações são estabelecidas. Como forma de esclarecer o significado dos elementos na linguagem, é criada uma árvore de análise. Os níveis inferiores presentes nessa árvore contêm grupos menores de palavras. Os níveis mais altos da árvore expressam como os elementos abaixo são classificados e organizados. Na Figura 9, é mostrado um exemplo de agrupamento a partir de uma frase-matriz “O aluno instruído aprendeu o pensamento computacional". Nesse exemplo, é possível agrupar a palavra “pensamento” como substantivo e “computacional” como adje- tivo. O sintagma “pensamento computacional” é classificado como nominal (sintagma que tem um substantivo como cabeça ou desempenha a mesma função gramatical que um substantivo). Num nível superior, é possível verifi- car que a sequência de palavras “O aluno instruído aprendeu o pensamento computacional” forma uma frase. Organização de dados 13 Figura 9. Exemplo de análise linguística a partir de uma frase. Fonte: Adaptada de Riley e Hunt (2014). Esses sistemas de árvores são úteis para as linguagens de pro- gramação, pois quando um programador escreve um programa, as propriedades e o significado do programa são compreendidos pelo computador a partir da criação de uma árvore de análise. Noam Chomsky, apesar de sua carreira ser voltada para o estudo da filosofia e linguística, foi um pesquisador extremamente importante para a área da computação. Chomsky foi o responsável pelo desenvolvimento da hierarquia de Chomsky, que apresentava um modelo matemático gramatical, que auxiliou o campo de estudo da teoria da linguagem de programação. Uma árvore é um tipo de grafo para modelagem de dados hierárquicos. A árvore apresenta as seguintes características: uma raiz, que é representada por um vértice de grau de entrada zero;demais vértices, que possuem grau de entrada; e um caminho da raiz a todos os outros vértices. A Figura 10, apresenta um exemplo de árvore com 8 vértices e 7 arcos. Todos os vértices têm grau 1, exceto o vértice R, que possui grau 0. Existe um caminho que sai de R a todos os outros vértices da árvore. Embora possua um único nó-raiz, uma árvore pode apresentar várias folhas. Uma folha é um nó com grau de saída igual a zero. Na Figura 10, essas folhas estão presentes nos nós T, E, C e A. A representação da árvore é sempre exibida ao contrário, ou seja, a raiz (parte de maior importância) sempre ficará na parte superior, e suas folhas (parte de menor importância) na parte inferior. Organização de dados14 Figura 10. Exemplo de uma árvore. Fonte: Riley e Hunt (2014, p. 216). Em 1847, Gustav Kirchhoff (físico alemão responsável pela criação das leis de Kirchhoff) utilizou modelos de grafos no estudo de cir- cuitos elétricos e, ao fazê-lo, criou a teoria das árvores (uma classe de grafos) para caracterizar conjuntos de ciclos independentes. Uma década mais tarde, o matemático britânico Arthur Cayley seguiria a mesma trilha, embora tendo em mente outras aplicações, dentre as quais se destacava a enumeração dos isômeros dos hidrocarbonetos alifáticos saturados (que têm estrutura de árvore, na nomenclatura de grafos), em química orgânica (NETTO, 2003). Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. Porto Alegre: AMGH , 2008. MAPA de Rotas - LATAM e TAM. Aviação comercial, dez. 2020. Disponível em: https:// www.aviacaocomercial.net/rotastam.htm. Acesso em: 29 jan. 2021. NETTO, P. O. B. Grafos: teoria, modelos, algoritmos. São Paulo: Blucher, 2003. RILEY, D. D.; HUNT, K. A. Computational thinking for the modern problem solver. Boca Raton, EUA: CRC Press, 2014. SILVA, L. C. L. A relação do pensamento computacional com o ensino de matemática na educação básica. 2019. 131 f. Dissertação (Mestrado em Matemática) — Programa de Pós-Graduação PROFMAT, Universidade Estadual Paulista Júlio de Mesquita Filho, São Paulo, 2019. Disponível em: https://repositorio.unesp.br/handle/11449/191251. Acesso em: 29 jan. 2021. Organização de dados 15 Leituras recomendadas ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da programação de computadores: algoritmos, Pascal, C/C++ (Padrão ANSI) e Java. 3. ed. São Paulo: Pearson, 2012. BROOKSHEAR, J. G. Ciência da computação: uma visão abrangente. 11. ed. Porto Alegre: Bookman, 2013. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu funcionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Organização de dados16
Compartilhar