Vetores e Matrizes em C.

pcnunes 247 views 31 slides Jul 05, 2023
Slide 1
Slide 1 of 31
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31

About This Presentation

Aprenda a trabalhar com conjuntos de dados homogêneos utilizando os vetores e matrizes, arrays, em C. Veja como é fácil trabalhar com múltiplos valores em uma mesma variável indexada.


Slide Content

Linguagens de Programação
Linguagem de programação C

Trabalhando com Arrays
Colecionando dados.

Definição geral
Vetor unidimensional
Declarando um vetor unidimensional
Referenciando um elemento
Inicializando um vetor unidimensional (Parte I)
Exemplo 01
Exemplo 02
Inicializando um vetor unidimensional (Parte II)
Exemplo 03 –Uso de vetores inteiros e de caracteres
A diretiva #define
Matriz –Vetor multidimensional
Exemplo 01
Inicialização de matrizes
Referências bibliográficas
05/07/2023Professor Paulo Nunes 3
Sumário

Umamatrizéumacoleçãodedadosdomesmotipoqueé
referenciadaporumnomecomum;
Seus elementos são acessados por meio de um índice;
O endereçomais baixo desse índicecorresponde ao primeiro
elemento e o mais alto ao último;
As matrizes ocupam posiçõescontíguasna memória;
As “strings” são o tipo de matriz mais comum em C;
Matrizes podem ser:
Unidimensionaisou;
Multidimensionais.
05/07/2023Professor Paulo Nunes 4
Definição geral

Vetores
ArraysUnidimensionais

A declaração de um vetor é dada da seguinte forma:
tipo nome[tamanho]
Onde:
tipodefine o tipo de dado que será armazenado;
nomeé o nome da variável que armazenará os dados;
[tamanho]entrecolchetesvemotamanhodovetorounúmerode
elementosqueomesmopoderáconter.
Comoqualquervariável,asmatrizesdevemserdeclaradasantesda
suautilização;
EmC,oíndicedeumamatrizinicia-seem0(zero).Então,se
declararmosumamatrizde10elementos,teremosumíndicede0a
9.
05/07/2023Professor Paulo Nunes 6
Unidimensional ou Vetor

A declaração de um vetor é feita da seguinte forma:
05/07/2023Professor Paulo Nunes 7
Declarando um vetor unidimensional
Tipo de dado
“inteiro”.
“notas” é o nome
da variável.
5 é o tamanho do
vetor.

Na memória teremos:
05/07/2023Professor Paulo Nunes 8
Declarando um vetor
notas[0]
notas[1]
notas[2]
notas[3]
notas[4]
5 espaços alocados
na memória,
referenciados pelos
índices de 0 a 4.

Oselementossãoreferenciadospeloseunúmerodeíndice,
queindicaasuaposiçãodentrodovetor.
No exemplo a seguir, utilizamos um laço “for” para preencher
os elementos do vetor:
05/07/2023Professor Paulo Nunes 9
Referenciando um elemento
Laço para
preenchimento
do vetor.
O índice vai variar de 0 a 4, permitindo
assim que as notas sejam inseridas no
vetor em posições diferentes.

Na memória teremos:
05/07/2023Professor Paulo Nunes 10
Referenciando um elemento
5.7
6.7
9.6
7.3
5.5
notas[0]
notas[1]
notas[2]
notas[3]
notas[4]
As notas são
inseridas cada uma
em sua posição.

Comoumavariávelcomum,osvetorespodemserinicializadosjádurantea
declaração;
Exemplo:
intcontador[5] = {0, 0, 0, 0,0};
Intinteiros[5] = {0, 1, 2, 3, 4};
Vetores do tipo caractere são inicializados de maneira similar:
char vogais[5] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’};
Um vetor não precisa ser inicializado por completo:
floatdados[500] = {20.5, 10, 111.7};
Ostrêsprimeiroselementosforamdeclarados,orestanteserápreenchidocom
zeros.
Umaposiçãodeumvetorpodeserinicializadaespecificamente:
floatdados[500] = { [2] = 500.5, [1] = 300.0, [0] = 100.0 };
A inicialização também pode ser através de uma expressão:
intx = 123;
inta[10] = {[9] = x + 1, [2] = 2, [1] = 0, [0] = 10};
05/07/2023Professor Paulo Nunes 11
Inicializando um vetor
unidimensional

Exemplo 01 –Inicializando um vetor
05/07/2023Professor Paulo Nunes 12
Vetor com 10
posições.
As 5 primeiras posições são
inicializadas na declaração.
Laço “for” para inicialização dos
outros elementos do vetor.
Saída do programa.

Exemplo 02 –Média de notas
05/07/2023Professor Paulo Nunes 13
Entrada de
notas no vetor,
posição “i”.
Variável “soma”
recebe o somatório
das notas.Exibe o resultado
da média das
notas.

A linguagem C permite que um vetor seja declarado sem que
determinemos de imediato seu tamanho. Veja o exemplo:
05/07/2023Professor Paulo Nunes 14
Inicializando um vetor
unidimensional
Declaração do vetor.
Seu tamanho será determinado
pelo maior índice inicializado.
O laço vai até o tamanho do
índice do vetor, que é 6.
Saída do programa.

Outro exemplo de inicialização de vetores:
floatdados[] = { [0] = 1.0, [49] = 100.0, [99] = 200.0 };
No exemplo acima o tamanho do vetor é 100, pois 99 é o
maior índice declarado no vetor.
05/07/2023Professor Paulo Nunes 15
Inicializando um vetor
unidimensional

Atarefaéadedesenvolverumprogramaqueconverteumnúmero
inteiropositivodesuarepresentaçãobase10nasuarepresentação
equivalenteemoutrabase.
Comoentradasparaoprograma,vocêespecificaonúmeroaser
convertidoetambémabaseparaoqualdesejaqueonúmeroseja
convertido.
Oprimeiropassonodesenvolvimentodetalprogramaéconceber
umalgoritmoparaconverterumnúmerodebase10paraoutra
base.
Umalgoritmoparagerarosdígitosdonúmeroconvertidopodeser
informalmenteindicadocomosesegue:
Umdígitodonúmeroconvertidoéobtidotomandoomodulodo
númeropelonúmerodabase;
Onúmeroéentãodivididopelabase,comqualquerrestofracionário
descartado,eoprocessoérepetidoatéqueonúmerochegarazero.
05/07/2023Professor Paulo Nunes 16
Exemplo 03 –uso de vetores inteiros
e de caracteres

Número Número % 2 Número / 2
10 0 5
5 1 2
2 0 1
1 1 0
05/07/2023Professor Paulo Nunes 17
Exemplo 03 –uso de vetores inteiros
e de caracteres

Para escrever um programa que executa o processo de conversão anterior,
você deve levar algumas coisas em consideração:
Em primeiro lugar, o fato do algoritmo gerar os dígitos do número convertido em
ordem inversa. Não podemos esperar que o usuário leia o resultado da direita para a
esquerda, ou a partir de baixo da página para cima. Portanto, você deve corrigir esse
problema.
Ao invés de simplesmente exibir cada dígito como ele é gerado, você pode fazer o
programa armazenar cada dígito dentro de uma matriz. Então, quando você terminar
de converter o número, você pode exibir o conteúdo do arrayna ordem correta.
Em segundo lugar, você deve perceber que o programa deve ser especificado para
lidar com a conversão de números em bases até 16. Isto significa que quaisquer
dígitos do número convertido que estão entre 10 e 15 deve ser exibido usando as
letras correspondentes, de A aF. É ai que nossa matriz de caracteres entra em cena.
Examine o a seguir para ver como estas duas questões são tratadas. Este
programa também introduz o qualificador de tipo const, que é usado para as
variáveis cujo valor não mudam durante a execução do programa.
05/07/2023Professor Paulo Nunes 18
Exemplo 03 –uso de vetores inteiros
e de caracteres

Exemplo 03 –uso de vetores inteiros
e de caracteres
05/07/2023Professor Paulo Nunes 19
Define estes valores como
“constantes” dentro do programa.
Vetor para receber o número
convertido.

Exemplo 03 –uso de vetores inteiros
e de caracteres
05/07/2023Professor Paulo Nunes 20
Rotina para converter
o número para a base
indicada.
Rotina para exibir o
número na ordem
correta.

Observe o seguinte programa:
05/07/2023Professor Paulo Nunes 21
Diretiva #define

Nalinha6doprogramaanterior,temosaseguintedefinição:
#defineLIM6.Issofazcomqueoprogramasubstituaa
constanteLIMpor6ondeamesmaforencontrada.
Algumas diferenças entre o uso de #definee const:
#defineé um pré-processador , por isso deve ser definido no
cabeçalho do programa;
Uma constante definida por #define, não existe fisicamente na
memória;
consté uma palavra reservada em C;
05/07/2023Professor Paulo Nunes 22
Diretiva #define

05/07/2023Professor Paulo Nunes 23
Exemplo #define

Matrizes
ArraysMultidimensionais

É uma matrizdematrizes, pois os elementos de uma matriz
multidimensional são matrizes de uma dimensão;
A declaração pode ser feita da seguinte forma:
tipo nome[indice_1][indice_2];
A matriz bidimensional, duas dimensões, é a mais comum;
Onde:
tipoé o tipo de dado armazenado na matriz;
nomeé o nome identificador da matriz;
[indice_1][indice_2]...[indice_n] são os índices da matriz. O
número de elementos é conseguido multiplicando-se os índices
da matriz.
05/07/2023Professor Paulo Nunes 25
Matriz Multidimensional

Exemplo 01
05/07/2023Professor Paulo Nunes 26
Matriz bidimensional do tipo
“inteiro” de nome “num”
com 12 elementos (3x4).
A matriz possui 03 linhas e
04 colunas ([3][4])
Laço para variar a posição
das linhas da matriz, “t”.Laço para variar a posição
das colunas da matriz, “i”.
elemento [t][i] da matriz
Expressão para preencher a
posição [t][i] com seu elemento.
Imprime os elementos da
matriz.
Saída em tela.

Matrizes bidimensionais podem ser inicializadas de forma análoga
aos seus homólogos unidimensionais;
Elementos quando listados para a inicialização, os valores são
listados por linha.
Pares de chaves são utilizados para separar a lista de inicializadores
para uma linha, linha por linha;
Assim, podemos definir os elementos da seguinte forma:
05/07/2023Professor Paulo Nunes 27
Inicialização de matrizes
multidimensionais

Preste especial atençãoà sintaxeda declaraçãoanterior;
Note-se quevírgulas são necessáriasdepois de cadachave
quefechauma linha,excetono casoda linhafinal;
A utilizaçãodos pares de chavesé realmente opcional.Assim,
a declaraçãoanteriortambém poderia ter sidoescrita como
segue:
05/07/2023Professor Paulo Nunes 28
Inicialização de matrizes
multidimensionais

Tal como acontece com matrizes unidimensionais, não é necessário que
toda a matriz seja inicializada.
Uma declaração como:
inicializa apenas os primeiros três elementos de cada linha da matriz com
os valores indicados. Os demais valores são definidos como 0.
Note-se que, neste caso, os pares de chaves interiores são necessários para
forçar a inicialização correta. Sem elas, as duas primeiras linhas e os
primeiros dois elementos da linha 3 teriam sido inicializados em vez disso.
05/07/2023Professor Paulo Nunes 29
Inicialização de matrizes
multidimensionais

Mizrahi,VictorineViviane.TreinamentoemlinguagemC–
Módulo1.SãoPaulo:McGraw-Hill,1990.
Schildt,Herbert.C,CompletoeTotal–3ªEd.Revistae
Atualizada.SãoPaulo:PearsonEducationdoBrasil,1997.
StephenG.Kochan.ProgramminginC–Acomplete
introductiontotheCprogramminglanguage.ThirdEdition.
Indianapolis:SamsPublishing,2005.
05/07/2023Professor Paulo Nunes 30
Referências

05/07/2023Professor Paulo Nunes 31
O professor