Escolar Documentos
Profissional Documentos
Cultura Documentos
Unidade IV
7 VETORES, MATRIZES E ESTRUTURAS
7.1 Matrizes
Manzano (2015, p. 181) ressalta que “uma variável simples de certo tipo ocupa um bloco de
memória onde tal valor será armazenado, enquanto uma variável composta ocupa um conjunto
de blocos do tipo definido”.
A mais simples de todas as estruturas de dados é a matriz. Ela é suportada pela linguagem C e
define uma sequência contígua de elementos na memória, agrupando um conjunto de variáveis do
mesmo tipo e permitindo a iteração sobre o conjunto.
Observação
144
ALGORITMOS
No exemplo a seguir, vamos implementar um programa para calcular a média geral de oito
médias de cada aluno. Dessa forma, será necessário criar uma única variável indexada (a matriz)
contendo todos os valores das oito médias (cada posição de armazenamento de uma matriz é
conhecida como slot).
A)
B)
Exemplo de aplicação
145
Unidade IV
O próximo exemplo tem como objetivo ler oito elementos de uma matriz A do tipo vetor. Para
isso, é preciso construir uma matriz B de mesmo tipo, observando a seguinte lei de formação: se
o valor de um elemento da matriz A estiver numa posição de índice par, ele deve ser multiplicado
por 5; se o valor de um elemento da matriz A estiver numa posição de índice ímpar, ao elemento
de A deve-se somar 5.
A)
B)
146
ALGORITMOS
Saiba mais
No exemplo a seguir, temos uma matriz com duas dimensões. O programa realiza a entrada e a
saída das quatro notas bimestrais de dez alunos.
147
Unidade IV
A)
B)
Figura 68 – Matriz bidimensional (imagem do programa Dev C++)
Exemplo de aplicação
148
ALGORITMOS
No caso a seguir, o programa apresenta os dados dos alunos de forma sequencial. Assim, só é
possível visualizar as notas dos últimos alunos.
A)
B)
Lembrete
Uma matriz é a coleção de tipos de dados semelhantes ou coleção de
entidades semelhantes armazenadas em local de memória contígua.
149
Unidade IV
A seguir, temos um programa que apresentará os valores da matriz denominada Valores, além
do tamanho que tal matriz ocupa na memória e a quantidade de elementos armazenados.
A)
B)
150
ALGORITMOS
Exemplo de aplicação
A)
B)
151
Unidade IV
7.2 Estruturas
Observação
Para declarar uma variável do tipo struct Data [...] basta indicar qual o tipo
(struct Data) seguido do nome das variáveis struct Data d, datas[100],
*ptr_data, em que :
O código a seguir apresenta uma função que permite escrever na tela os valores existentes em
uma estrutura recebida como argumento.
152
ALGORITMOS
A)
B)
Exemplo de aplicação
No próximo exemplo, iremos realizar o carregamento de uma estrutura através de uma função.
Como será possível alterar os valores presentes na estrutura, teremos que passar a essa função o
endereço da estrutura que queremos ler.
153
Unidade IV
A)
B)
Para Damas:
Saiba mais
• a saída está em ordem não decrescente (cada elemento não é menor que o elemento anterior, de
acordo com o pedido total desejado);
Lembrete
155
Unidade IV
Diz Manzano:
Observação
O código a seguir ordena cinco valores inteiros. Observe que é utilizado o processo de integração
dos comandos quando for encadeado.
157
Unidade IV
A)
B)
158
ALGORITMOS
Os algoritmos de classificação podem ser agrupados com base nos seguintes parâmetros:
• Bubble Sort;
• Selection Sort;
• Insertion Sort;
• Merge Sort;
• Quick Sort.
Bubble Sort
A classificação Bubble Sort tem O (n) como o melhor caso de desempenho e O (n * n) como
o desempenho de pior caso. A classificação Bubble Sort deve realizar uma comparação de
159
Unidade IV
grande número quando há mais elementos em uma lista e aumenta à medida que aumenta o
número de itens que precisam ser classificados. Embora a classificação por bolha seja muito fácil
de implementar, é ineficiente em comparação com todos os outros algoritmos de classificação.
Trata-se do algoritmo de classificação mais simples que funciona frequentemente com a troca dos
elementos vizinhos se eles estiverem na ordem errada.
Selection Sort
Esse algoritmo também mantém duas submatrizes em uma determinada matriz: a primeira submatriz
que já está classificada e a segunda restante (denominada submatriz) que não está classificada. A cada
iteração de classificação de seleção, o menor elemento do secundário não classificado da matriz é
escolhido e movido para a matriz secundária classificada.
Insertion Sort
A classificação por inserção é uma classificação de comparação simples, mas eficiente, para
pequenos dados. A classificação por inserção é reduzida ao seu número total de etapas; se fornecida
uma lista parcialmente classificada, terá uma maior eficiência. É praticamente mais eficiente do
que a classificação por seleção e uma classificação por bolha, mesmo que todos eles tenham
complexidade de pior caso: O (n * n).
Os números são divididos em classificados e não classificados. Os valores não classificados são
colocados em suas posições adequadas na matriz secundária classificada, um por um.
160
ALGORITMOS
O algoritmo Insertion Sort é bem organizado para conjuntos de dados menores, mas pouco
viável para listas maiores. Ele reduz o número total de etapas se receber uma lista parcialmente
classificada, aumentando a eficiência.
Merge Sort
O algoritmo Merge Sort divide a matriz de entrada em duas seções, chamando a si mesmo
para as duas divisões e mesclando duas divisões ordenadas. A seguir, são descritos os processos a
serem realizados
• Divide Step: se um dado vetor (ou array) possuir zero ou um elemento, simplesmente retorne
esse valor. Caso contrário, o algoritmo deve dividir o vetor, por exemplo Vetor1 [x ... z], em duas
matrizes secundárias Vetor1 [x ... z] e Vetor2 [y + 1 ... z], cada uma contendo cerca de partes dos
elementos de Vetor1 [x ... z]. Ou seja, y é o ponto intermediário de Vetor1 [x ... z].
• Conquer Step: agora classificando as duas pequenas matrizes Vetor1 [x ... z] e Vetor2 [y + 1 ... z],
deve-se utilizar o método de recursidade usando o conquer.
• Combine Step: afinal, temos que mesclar a parte de trás do elemento em Vetor1 [x ... z] a
partir das duas pequenas matrizes classificadas Vetor1 [x ... z] e Vetor1 [y + 1 ... z] em uma série
classificada.
ponteiro da lista resultado; o processo se repete até que uma das listas seja
esgotada. Neste ponto, os elementos restantes da outra lista são copiados
na lista resultado.
Quick Sort
O algoritmo Quick Sort é um dos algoritmos de classificação mais rápidos que faz parte de
muitas bibliotecas de classificação. O tempo desse algoritmo depende muito da escolha do elemento
pivô. O algoritmo Quick Sort também pertence à categoria de algoritmos de divisão e conquista e
depende do funcionamento da partição.
Para particionar uma matriz, um elemento denominado pivô é selecionado. O algoritmo Quick
Sort funciona da seguinte maneira:
Como a seleção dos elementos do pivô é aleatória, o caso médio e o tempo de execução do
melhor caso é O (n log n). Além disso, no pior caso de complexidade de tempo é O (n * n). Vale
esclarecer que a classificação rápida não é um algoritmo de classificação estável.
162
ALGORITMOS
Saiba mais
163
Unidade IV
Para solucionar esse problema, você pode fazer pesquisas em matrizes por
meio de programação. Nesse sentido, dois métodos podem ser utilizados:
pesquisa sequencial e pesquisa binária (MANZANO, 2015, p. 232).
Observação
Considere o programa a seguir, que recebe dez valores inteiros e concede ao usuário a
possibilidade de pesquisar os valores armazenados.
164
ALGORITMOS
A)
B)
165
Unidade IV
Exemplo de aplicação
A)
166
ALGORITMOS
B)
Diz Manzano:
Considere o programa a seguir, que apresenta a técnica de pesquisa binária a partir da solicitação
de dez nomes. Após esse processo, é realizada a ordenação e, por fim, o usuário tem a possibilidade de
pesquisar pelos nomes que foram armazenados previamente.
167
Unidade IV
A)
168
ALGORITMOS
B)
Resumo
169
Unidade IV
Exercícios
int A[10];
Análise da questão
No trecho apresentado, há uma declaração de variável. Temos o tipo, inteiro (int), o nome
da variável, A, e, em seguida, os colchetes contendo o número 10, indicando se tratar de uma
variável do tipo matriz unidimensional com 10 elementos. O número entre colchetes é o número
de elementos da matriz unidimensional. Se tivéssemos uma sequência de dois números entre
colchetes logo após o nome da variável, estaríamos tratando de uma matriz bidimensional. Vale
ressaltar que, em linguagem C, não fazemos a declaração de variável juntamente com a atribuição
de valores nessa variável.
170
ALGORITMOS
A) I.
B) II.
C) III.
D) I e II.
E) I e III.
Análise da questão
Na busca sequencial, é feita a procura pelo elemento desejado em uma lista, sequencialmente,
do primeiro ao último elemento. Dividir a lista ao meio sucessivas vezes é uma aplicação do
algoritmo de busca binária, enquanto procurar fotos em páginas aleatórias representa um método
randômico (ou aleatório) de busca.
171
FIGURAS E ILUSTRAÇÕES
Figura 1
Figura 2
Figura 3
Figura 4
Figura 5
Figura 6
Figura 7
Figura 8
Figura 9
172
Figura 10
Figura 11
SOICHER, L.; VIVALDI, F. Algorithmic Mathematics. London: University of London, 2004. p. 8. Web-book.
Disponível em: http://www.maths.qmul.ac.uk/~lsoicher/ambook.pdf. Acesso em: 5 fev. 2021.
Figura 12
Figura 14
Figura 15
Figura 16
Figura 17
Figura 18
Figura 19
Figura 21
Figura 22
Figura 23
Figura 24
Figura 25
Figura 26
Figura 27
Figura 32
174
Figura 35
Figura 38
Figura 41
Figura 44
Figura 46
Figura 49
Figura 51
Figura 54
Figura 58
Figura 59
Figura 61
Figura 62
Figura 63
Figura 64
Figura 65
Figura 66
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 67
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 68
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 69
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 70
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
176
Figura 71
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 72
Figura 73
Figura 74
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 75
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 76
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
Figura 77
A) MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
REFERÊNCIAS
Textuais
AHO, A.; HOPCROFT, J.; ULLMAN, J. The design and analysis of computer algorithms. Boston:
Addison-Wesley, 1974.
BEALE, E. M. L. Matrix generators and output analyzers. In: KUHN, H. W. (ed.). Proceedings of
the princeton symposium on mathematical programming. Princeton: Princeton University
Press, 1970. p. 25-36.
177
CHRISTODOULOU, M. et al. Algorithmic and programming training materials for teachers. Krosno,
2018. Disponível: https://www.codeit-project.eu/wp-content/uploads/CodeIT_O1_EN.pdf. Acesso
em: 7 fev. 2021.
DART, S. et al. Overview of software development environments. 1992. Disponível em: https://www.ics.
uci.edu/~andre/ics228s2006/dartellisonfeilerhabermann.pdf Acesso em: 7 fev. 2021.
DIFFERENCE BETWEEN SOURCE CODE AND OBJECT CODE. 24 jan. 2018. Disponível em: https://www.
differencebetween.com/wp-content/uploads/2018/01/Difference-Between-Source-Code-and-Object-
Code.pdf. Acesso em: 25 abr. 2020.
ELISSEEFF, A.; THEODOROS, E.; MASSIMILIANO, P. Stability of randomized learning algorithms. Journal
of Machine Learning Research, 2005.
ESTIVILL-CASTRO, V.; WOOD, D. A survey of adaptive sorting algorithms. ACM Computing Surveys, n.
24, v. 4, p. 441-476, 1992.
HUMBLE, J. Entrega contínua: como entregar software de forma rápida e confiável. Porto
Algre: Bookman, 2013.
LAKHWANI, K. (ed.). Fundamentals of data structures: DCAP201. Delhi: Lovely Professional University,
2013. Disponível em: http://ebooks.lpude.in/computer_application/bca/term_3/DCAP201_
FUNDAMENTALS_OF_DATA_STRUCTURES.pdf. Acesso em: 7 fev. 2021.
MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015.
ORAM, E.; NAIK, B. Lecture note on programming in C. [ca. 2010]. Disponível em: http://www.vssut.
ac.in/lecture_notes/lecture1424354156.pdf. Acesso em: 7 fev. 2021.
PAES, R. de B. Introdução à programação com a linguagem C: aprenda a resolver problemas com uma
abordagem prática. São Paulo: Novatec, 2016.
SLONNEGER, K.; KURTZ, B. L. Formal syntax and semantics of programming languages: a laboratory
based approach. Nova York: Pearson, 1995.
SOICHER, L.; VIVALDI, F. Algorithmic mathematics. London: University of London, 2004. Web-book.
Disponível em: http://www.maths.qmul.ac.uk/~lsoicher/ambook.pdf. Acesso em: 5 fev. 2021.
STALLINGS, W. Computer organization and architecture, designing for performance Boston: Pearson, 2010.
UNIVERSITY OF CRETE. Introduction to data types and structures. 2020. Disponível em: https://www.
csd.uoc.gr/~hy252/html/References/Introduction%20to%20Data%20Types%20and%20Structures.pdf.
Acesso em: 7 fev. 2021.
WALIA, R. K. Algorithm & flowchart manual for students. Pauri: University of Horticulture and Forestry,
2020. Disponível em: http://www.yspuniversity.ac.in/cic/algorithm-manual.pdf. Acesso em: 7 fev. 2021.
ZHIRKOV, I. Programação em baixo nível: C, assembly e execução de programas na arquitetura Intel 64.
São Paulo: Novatec, 2018.
179
180
Informações:
www.sepi.unip.br ou 0800 010 9000