A maior rede de estudos do Brasil

Grátis
275 pág.
Apostila C

Pré-visualização | Página 18 de 45

Ha´
casos, em que uma estrutura com mais de uma dimensa˜o e´ mais u´til. Por
exemplo, quando trabalhamos com matrizes, onde os valores sa˜o organi-
zados em uma estrutura de linhas e colunas.
Em linguagem C, a declarac¸a˜o de uma matriz segue a seguinte forma ge-
ral:
tipo dado nome array[nro linhas][nro colunas];
O comando acima define um array de nome nome array contendo nro linhas
× nro colunas elementos adjacentes na memo´ria. Cada elemento do array
e´ do tipo tipo dado.
Por exemplo, para criar um array de inteiros que possua 100 linhas e
50 colunas, isto e´, uma matriz de inteiros de tamanho 100×50, usa-se
a declarac¸a˜o abaixo:
int mat[100][50];
Como no caso dos arrays de uma u´nica dimensa˜o, cada posic¸a˜o da ma-
triz possui todas as caracterı´sticas de uma varia´vel. Isso significa que ela
115
pode aparecer em comandos de entrada e saı´da de dados, expresso˜es e
atribuic¸o˜es:
scanf(“%d”,&mat[5][0]);
mat[0][0] = 10;
mat[1][2] = mat[5][0] + mat[0][0];
Perceba, no entanto, que o acesso ao valor de uma posic¸a˜o da matriz e´
feito agora utilizando dois ı´ndices: um para a linha e outro para a coluna.
Lembre-se, cada posic¸a˜o do array e´ uma varia´vel. Portanto, todas as
posic¸o˜es do array sa˜o igualmente acessı´veis, isto e´, o tempo e o tipo de
procedimento para acessar qualquer uma das posic¸o˜es do array sa˜o iguais
ao de qualquer outra varia´vel.
5.4 ARRAYS MULTIDIMENSIONAIS
Vimos ate´ agora como criar arrays com uma ou duas dimenso˜es. A lingua-
gem C permite que se crie arrays com mais de duas dimenso˜es de maneira
fa´cil.
Na linguagem C, cada conjunto de colchetes [ ] representa
uma dimensa˜o do array.
Cada par de colchetes adicionado ao nome de uma varia´vel durante a sua
declarac¸a˜o adiciona uma nova dimensa˜o a`quela varia´vel, independente do
seu tipo:
int vet[5]; // 1 dimensa˜o
116
float mat[5][5]; // 2 dimenso˜es
double cub[5][5][5]; // 3 dimenso˜es
int X[5][5][5][5]; // 4 dimenso˜es
O acesso ao valor de uma posic¸a˜o de um array multidimen-
sional e´ feito utilizando um ı´ndice para cada dimensa˜o do
array.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t cub [ 5 ] [ 5 ] [ 5 ] ;
5 i n t i , j , k ;
6 / / preenche o ar ray de 3 dimenso˜es com zeros
7 for ( i =0; i < 5; i ++){
8 for ( j =0; j < 5; j ++){
9 for ( k =0; k < 5; k++){
10 cub [ i ] [ j ] [ k ] = 0 ;
11 }
12 }
13 }
14 system ( ‘ ‘ pause ’ ’ ) ;
15 return 0;
16 }
Apesar de terem o comportamento de estruturas com mais de uma di-
mensa˜o, os dados dos arrays multidimensionais sa˜o armazenados line-
armente na memo´ria. E´ o uso dos colchetes que cria a impressa˜o de
estarmos trabalhando com mais de uma dimensa˜o.
Por esse motivo, e´ importante ter em mente qual a dimensa˜o que se move
mais rapidamente na memo´ria: sempre a mais a direita, independente do
tipo ou nu´mero de dimenso˜es do array, como se pode ver abaixo marcado
em vermelho:
117
int vet[5]; // 1 dimensa˜o
float mat[5][5]; // 2 dimenso˜es
double cub[5][5][5]; // 3 dimenso˜es
int X[5][5][5][5]; // 4 dimenso˜es
Basicamente, um array multidimensional funciona como
qualquer outro array. Basta lembrar que o ı´ndice que va-
ria mais rapidamente e´ o ı´ndice mais a` direita.
5.5 INICIALIZAC¸A˜O DE ARRAYS
Um array pode ser inicializado com certos valores durante sua declarac¸a˜o.
Isso pode ser feito com qualquer array independente do tipo ou nu´mero de
dimenso˜es do array.
A forma geral de inicializac¸a˜o de um array e´:
tipo dado nome array[tam1][tam2]...[tamN] = {dados };
Na declarac¸a˜o acima, dados e´ uma lista de valores (do mesmo tipo do ar-
ray) separados por vı´rgula e delimitado pelo operador de chaves {}. Esses
valores devem ser colocados na mesma ordem em que sera˜o colocados
dentro do array.
A inicializac¸a˜o de uma array utilizando o operador de cha-
ves {}so´ pode ser feita durante sua declarac¸a˜o.
A inicializac¸a˜o de uma array consiste em atribuir um valor inicial a cada
posic¸a˜o do array. O operador de chaves apenas facilita essa tarefa, como
mostra o exemplo abaixo:
118
Exemplo: inicializando um array
Com o operador de {} Sem o operador de {}
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t vet [ 5 ] =
{15 ,12 ,91 ,35} ;
5
6 system ( ‘ ‘ pause ’ ’ ) ;
7 return 0;
8 }
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t vet [ 5 ] ;
5 vet [ 0 ] = 15;
6 vet [ 1 ] = 12;
7 vet [ 2 ] = 9 ;
8 vet [ 3 ] = 1 ;
9 vet [ 4 ] = 35;
10
11 system ( ‘ ‘ pause ’ ’ ) ;
12 return 0;
13 }
Abaixo sa˜o apresentados alguns exemplos de inicializac¸a˜o de arrays de
diferentes tipos e nu´mero de dimenso˜es:
Exemplos: inicializando um array
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 i n t matr iz1 [ 3 ] [ 4 ] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12} ;
5 i n t matr iz2 [ 3 ] [ 4 ] =
{{1 ,2 ,3 ,4} ,{5 ,6 ,7 ,8} ,{9 ,10 ,11 ,12}} ;
6
7 char s t r 1 [ 1 0 ] = { ’ J ’ , ’ o ’ , ’ a ’ , ’ o ’ , ’ \0 ’ } ;
8 char s t r 2 [ 1 0 ] = ‘ ‘ Joao ’ ’ ;
9
10 char s t r m a t r i z [ 3 ] [ 1 0 ] = { ‘ ‘ Joao ’ ’ , ‘ ‘ Maria ’ ’ , ‘ ‘ Jose ’
’ } ;
11
12 system ( ‘ ‘ pause ’ ’ ) ;
13 return 0;
14 }
Note no exemplo acima que a inicializac¸a˜o de um array de 2 dimenso˜es
pode ser feita de duas formas distintas. Na primeira matriz (matriz1) os
valores iniciais da matriz sa˜o definidos utilizando um u´nico conjunto de
chaves {}, igual ao que e´ feito com vetores. Nesse caso, os valores sa˜o
atribuı´dos para todas as colunas da primeira linha da matriz, para depois
passar para as colunas da segunda linha e assim por diante. Lembre-se,
119
a dimensa˜o que se move mais rapidamente na memo´ria e´ sempre a mais
a direita, independente do tipo ou nu´mero de dimenso˜es do array. Ja´ na
segunda matriz (matriz2) usa-se mais de um conjunto de chaves {}para
definir cada uma das dimenso˜es da matriz.
Para a inicializac¸a˜o de um array de caracteres, pode-se usar o mesmo
princı´pio definido na inicializac¸a˜o de vetores (str1). Percebe-se que essa
forma de inicializac¸a˜o na˜o e´ muito pra´tica. Por isso, a inicializac¸a˜o de um
array de caracteres tambe´m pode ser feita por meio de “aspas duplas”,
como mostrado na inicializac¸a˜o de str2. O mesmo princı´pio e´ va´lido para
iniciar um array de caracteres de mais de uma dimensa˜o.
Na inicializac¸a˜o de um array de caracteres na˜o e´ ne-
cessa´rio definir todos os seus elementos.
5.5.1 INICIALIZAC¸A˜O SEM TAMANHO
A linguagem C tambe´m permite inicializar um array sem que tenhamos
definido o seu tamanho. Nesse caso, simplesmente na˜o se coloca o valor
do tamanho entre os colchetes durante a declarac¸a˜o do array:
tipo dado nome array[ ] = {dados };
Nesse tipo de inicializac¸a˜o, o compilador da linguagem C vai considerar o
tamanho do dado declarado como sendo o tamanho do array. Isto ocorre
durante a compilac¸a˜o do programa. Depois disso, o tamanho do array na˜o
podera´ mais ser modificado durante o programa.
Abaixo sa˜o apresentados alguns exemplos de inicializac¸a˜o de arrays sem
tamanhos:
120
Exemplos: inicializando um array sem tamanho
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 i n t main ( ) {
4 / / A s t r i n g tex to te r a´ tamanho 13
5 / / (12 carac te res + o carac te re ’\0 ’ )
6 char t e x t o [ ] = ‘ ‘ Linguagem C. ’ ’ ;
7
8 / / O nu´mero de posi c¸ o˜es do ve to r sera´ 10.
9 i n t ve to r [ ] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ;
10
11 / /O nu´mero de l i n h a s de mat r i z sera´ 5 .
12 i n t mat r i z [ ] [ 2 ] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ;
13
14 system ( ‘ ‘ pause ’ ’ ) ;
15 return 0;
16 }
Note no exemplo acima que foram utilizados 12 caracteres para iniciar o
array de char “texto”. Pore´m, o seu tamanho final sera´ 13. Isso ocorre por
que arrays de caracteres sempre possuem o elemento seguinte ao u´ltimo
caractere como sendo o caractere ‘\0’. Mais detalhes sobre isso podem
ser vistos na sec¸a˜o seguinte.
Esse tipo de inicializac¸a˜o e´ muito u´til quando na˜o queremos
contar quantos caracteres sera˜o necessa´rios