of 47 /47
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Capítulo VI Capítulo VI Variáveis Indexadas Variáveis Indexadas

CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Embed Size (px)

Text of CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Capítulo VI Capítulo VI

Variáveis IndexadasVariáveis Indexadas

Page 2: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Capítulo VI – Variáveis Capítulo VI – Variáveis IndexadasIndexadas

6.1 – A necessidade de variáveis indexadas6.1 – A necessidade de variáveis indexadas

6.2 – Vetores e matrizes6.2 – Vetores e matrizes

6.3 – Aplicações com vetores numéricos6.3 – Aplicações com vetores numéricos

6.4 – Aplicações com matrizes numéricas6.4 – Aplicações com matrizes numéricas

6.5 – Cadeias de caracteres6.5 – Cadeias de caracteres

6.6 – Aplicações com vetores de cadeias de 6.6 – Aplicações com vetores de cadeias de caracterescaracteres

Page 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.1 – A Necessidade de 6.1 – A Necessidade de Variáveis IndexadasVariáveis Indexadas

6.1.1 – Classificação das variáveis6.1.1 – Classificação das variáveis

Variáveis

Escalares

Estruturadas

Homogêneas – Variáveis Indexadas(arrays – em inglês)Heterogêneas – Estruturas (structs – em inglês)

Page 4: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.1.2 – Contabilização de votos usando 6.1.2 – Contabilização de votos usando só variáveis escalaressó variáveis escalares

O programa a seguir utiliza somente O programa a seguir utiliza somente variáveis variáveis escalaresescalares para contabilizar os para contabilizar os votosvotos de uma de uma eleiçãoeleição

São São oito candidatos oito candidatos para para uma vagauma vaga

Cada Cada eleitoreleitor deve colocar numa papeleta o deve colocar numa papeleta o númeronúmero de seu candidato de seu candidato

O O operadoroperador, de posse de todas as papeletas, , de posse de todas as papeletas, digitarádigitará o o númeronúmero contido em cada uma contido em cada uma

Page 5: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

/*/* DeclaracoesDeclaracoes */*/

int n, cand1, cand2, cand3, cand4, cand5, cand6, int n, cand1, cand2, cand3, cand4, cand5, cand6, cand7, cand8,cand7, cand8,

nulos, voto, i;nulos, voto, i;

/*/* Leitura do numero de votosLeitura do numero de votos */*/

printf ("Apuracao de eleicao:\n\n\tNumero de printf ("Apuracao de eleicao:\n\n\tNumero de votos: ");votos: ");

scanf ("%d",&n); printf ("\n");scanf ("%d",&n); printf ("\n");

E se o número de candidatos fosse maior que 100?

Page 6: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Inicializacao dos contadores de votos com zeroInicializacao dos contadores de votos com zero */*/

cand1 = cand2 = cand3 = cand4 = cand5 = cand6 = cand7 cand1 = cand2 = cand3 = cand4 = cand5 = cand6 = cand7 = =

cand8 = nulos = 0;cand8 = nulos = 0;

/*/* Leitura e contabilizacao dos votos */Leitura e contabilizacao dos votos */

for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {

printf ("\t\tVoto: "); scanf ("%d", &voto);printf ("\t\tVoto: "); scanf ("%d", &voto);

switch (voto) {switch (voto) {

case 1: cand1++; break; case 2: cand2++; break;case 1: cand1++; break; case 2: cand2++; break;

case 3: cand3++; break; case 4: cand4++; break;case 3: cand3++; break; case 4: cand4++; break;

case 5: cand5++; break; case 6: cand6++; break;case 5: cand5++; break; case 6: cand6++; break;

case 7: cand7++; break; case 8: cand8++; break;case 7: cand7++; break; case 8: cand8++; break;

default: nulos++;default: nulos++;

}}

}}

E se o número de candidatos fosse maior que 100?

E se o número de candidatos fosse maior que 100?

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Escrita do resultadoEscrita do resultado */*/

printf ("\n\nResultado: \n\n\tcand1: %d; cand2: printf ("\n\nResultado: \n\n\tcand1: %d; cand2: %d", cand1, %d", cand1, cand2);cand2);

printf ("\n\tcand3: %d; cand4: %d", cand3, cand4);printf ("\n\tcand3: %d; cand4: %d", cand3, cand4);

printf ("\n\tcand5: %d; cand6: %d", cand5, cand6);printf ("\n\tcand5: %d; cand6: %d", cand5, cand6);

printf ("\n\tcand7: %d; cand8: %d", cand7, cand8);printf ("\n\tcand7: %d; cand8: %d", cand7, cand8);

printf ("\n\tnulos: %d", nulos);printf ("\n\tnulos: %d", nulos);

/*/* Fechamento da telaFechamento da tela */*/

printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");

getch ();getch ();

}}

E se o número de candidatos fosse maior que 100?

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.1.3 – Contabilização usando variáveis 6.1.3 – Contabilização usando variáveis indexadasindexadas

Variável indexada: Variável indexada: destinada a guardar destinada a guardar simultaneamente simultaneamente diversos valores de mesmo diversos valores de mesmo tipotipo

Os Os compartimentoscompartimentos destinados a guardar destinados a guardar cada um desses valores são denominados cada um desses valores são denominados elementoselementos de variável indexada de variável indexada

Cada Cada elementoelemento é identificado pelo é identificado pelo nomenome da da variável e por um conjunto de variável e por um conjunto de índicesíndices usado usado para para diferenciá-lodiferenciá-lo dos demais elementos dos demais elementos

Cand[1], Cand[2], Cand[3], Cand[4], Cand[5], Cand[6], Cand[7], Cand[8]

Conjuntos com apenas 1 índice cada – há variáveis com mais de 1 índice

Page 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

/*/* Declaracoes - Cand[0] guardarah o numero de Declaracoes - Cand[0] guardarah o numero de votos nulos */votos nulos */

int n, Cand[9], voto, i;int n, Cand[9], voto, i;

/*/* Leitura do numero de votosLeitura do numero de votos */*/

printf ("Apuracao de eleicao:\n\n\tNumero de printf ("Apuracao de eleicao:\n\n\tNumero de votos: ");votos: ");

scanf ("%d",&n); printf ("\n");scanf ("%d",&n); printf ("\n");

/*/* Inicializacao do contadores de votos com zero */Inicializacao do contadores de votos com zero */

for (i = 0; i <= 8; i++) Cand[i] = 0;for (i = 0; i <= 8; i++) Cand[i] = 0;

Em C, o primeiro índice é sempre o zero

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Leitura e contabilizacao dos votosLeitura e contabilizacao dos votos */*/

for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {

printf ("\t\tVoto: "); scanf ("%d", &voto);printf ("\t\tVoto: "); scanf ("%d", &voto);

if (voto >= 1 && voto <= 8)if (voto >= 1 && voto <= 8)

Cand[voto]++;Cand[voto]++;

elseelse

Cand[0]++;Cand[0]++;

}}

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Escrita do resultadoEscrita do resultado */*/

printf ("\n\nResultado: \n");printf ("\n\nResultado: \n");

for (i = 1; i <= 8; i++)for (i = 1; i <= 8; i++)

printf ("\n\tCandidato[%d]: %d", i, Cand[i]);printf ("\n\tCandidato[%d]: %d", i, Cand[i]);

printf ("\n\n\tnulos: %d", Cand[0]);printf ("\n\n\tnulos: %d", Cand[0]);

/*/* Fechamento da telaFechamento da tela */*/

printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");

getch ();getch ();

}}

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

A A declaraçãodeclaração em C em C

int Cand[9];int Cand[9];

reserva na memória espaço contíguo de reserva na memória espaço contíguo de 9 9 inteirosinteiros para os para os 9 elementos9 elementos da variável da variável CandCand

Então, Então, CandCand é uma variável indexada de é uma variável indexada de 9 9 elementoselementos do tipo do tipo intint

Em C, os Em C, os índicesíndices de toda variável de toda variável indexada indexada são numerados a partir de são numerados a partir de 00 ( (zerozero))

Cand[0], Cand[1], Cand[2], Cand[3], Cand[4], Cand[5], Cand[6], Cand[7], Cand[8]

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

O O número de elementonúmero de elementos da variável s da variável CandCand poderia ser bem maior (poderia ser bem maior (int Cand[101]; int Cand[101]; - por - por exemplo)exemplo)

O programa poderia prever um O programa poderia prever um número número variávelvariável de candidatos a cada execução, desde de candidatos a cada execução, desde de que de que não excedessenão excedesse tal número de tal número de elementos (elementos (101101))

O número de elementos poderia ser O número de elementos poderia ser estabelecido durante a execuçãoestabelecido durante a execução, depois que , depois que o operador digitasse o o operador digitasse o número de elementosnúmero de elementos

Isso só é possível com Isso só é possível com variáveis do tipo variáveis do tipo ponteiroponteiro (a serem vistas em capítulo posterior) (a serem vistas em capítulo posterior)

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Nos Nos comandoscomandos, um , um elementoelemento de variável de variável indexada é referenciado pelo indexada é referenciado pelo nomenome seguido de seguido de um conjunto de um conjunto de subscritossubscritos

Um Um subscritosubscrito pode ser uma pode ser uma expressão expressão inteirainteira contendo constantes e variáveis contendo constantes e variáveis

O O índiceíndice correspondente a tal correspondente a tal subscritosubscrito é o é o valor da valor da expressãoexpressão

Por exemplo, no programa anterior, os Por exemplo, no programa anterior, os elementoselementos da variável da variável CandCand são referenciados são referenciados porpor

Cand[i]Cand[i] e e Cand[voto]Cand[voto]

Page 15: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

São São válidosválidos os subscritos dos seguintes os subscritos dos seguintes elementos:elementos:

Cand[2*i + 5]Cand[2*i + 5] e e Cand[voto - 5]Cand[voto - 5]

É preciso cuidar para que, em tempo de É preciso cuidar para que, em tempo de execução, o execução, o valor dos subscritosvalor dos subscritos não sejam não sejam negativosnegativos e não ultrapassem o e não ultrapassem o valor máximovalor máximo dos índicesdos índices

Neste exemplo, o Neste exemplo, o conjunto de subscritosconjunto de subscritos também é também é unitáriounitário

Semelhantemente aos Semelhantemente aos índicesíndices, há variáveis cujo , há variáveis cujo número de subscritosnúmero de subscritos de seus elementos é de seus elementos é maior que 1maior que 1

Page 16: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Capítulo VI – Variáveis Capítulo VI – Variáveis IndexadasIndexadas

6.1 – A necessidade de variáveis indexadas6.1 – A necessidade de variáveis indexadas

6.2 – Vetores e matrizes6.2 – Vetores e matrizes

6.3 – Aplicações com vetores numéricos6.3 – Aplicações com vetores numéricos

6.4 – Aplicações com matrizes numéricas6.4 – Aplicações com matrizes numéricas

6.5 – Cadeias de caracteres6.5 – Cadeias de caracteres

6.6 – Aplicações com vetores de cadeias de 6.6 – Aplicações com vetores de cadeias de caracterescaracteres

Page 17: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.2 – Vetores e Matrizes6.2 – Vetores e Matrizes

6.2.1 – Dimensionamento de variáveis 6.2.1 – Dimensionamento de variáveis indexadasindexadas

A variável A variável CandCand do programa anterior tem do programa anterior tem apenas um índiceapenas um índice

Por essa razão ela é denominada Por essa razão ela é denominada variável variável indexada unidimensionalindexada unidimensional ou ou matriz matriz unidimensionalunidimensional ou simplesmente ou simplesmente vetorvetor

Page 18: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Supondo que o conteúdo dos elementos da Supondo que o conteúdo dos elementos da variável variável Cand Cand seja:seja:

Cand[0] = 35 Cand[1] = 14 Cand[2] = 7 Cand[3] = 87Cand[0] = 35 Cand[1] = 14 Cand[2] = 7 Cand[3] = 87

Cand[4] = 2 Cand[5] = 21 Cand[6] = 14 Cand[7] = 63 Cand[4] = 2 Cand[5] = 21 Cand[6] = 14 Cand[7] = 63

Cand[8] = 16Cand[8] = 16

Então, esta variável pode ter a seguinte Então, esta variável pode ter a seguinte representação gráficarepresentação gráfica::

Page 19: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Variáveis indexadas podem ser Variáveis indexadas podem ser multidimensionaismultidimensionais

Por exemplo, pelas declarações em CPor exemplo, pelas declarações em C

int A[7][10]; float X[4][8][5];int A[7][10]; float X[4][8][5];

AA é uma é uma variável indexada bidimensionalvariável indexada bidimensional ou ou matriz bidimensionalmatriz bidimensional ou simplesmente ou simplesmente matrizmatriz de 7 linhas por 10 colunas de de 7 linhas por 10 colunas de elementos do tipo elementos do tipo intint

X X é uma é uma matriz tridimensionalmatriz tridimensional de de 4 x 8 x 54 x 8 x 5 elementos do tipo elementos do tipo floatfloat

Page 20: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Seja a seguinte representação gráfica da Seja a seguinte representação gráfica da matriz matriz A (7x10)A (7x10) de elementos do tipo de elementos do tipo intint::

Nesta representação, por exemplo,Nesta representação, por exemplo,

A[0][9] = 81; A[3][5] = -108; A[1][8] = -83;A[0][9] = 81; A[3][5] = -108; A[1][8] = -83;

Page 21: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Exemplo: Exemplo: mapa de mapa de acidentesacidentes nos cruzamentos de nos cruzamentos de ruas ruas ortogonaisortogonais

O programa a seguir contabiliza os O programa a seguir contabiliza os acidentesacidentes nos nos cruzamentos de cruzamentos de 10 ruas10 ruas na direção norte-sul ( na direção norte-sul (N-N-SS) com ) com 10 ruas10 ruas na direção leste-oeste ( na direção leste-oeste (L-OL-O))

Supõe-se que não haja acidentes fora dos Supõe-se que não haja acidentes fora dos cruzamentos cruzamentos

No final, ele escreve no vídeo um No final, ele escreve no vídeo um mapamapa desses desses acidentes, no qual as ruas acidentes, no qual as ruas N-SN-S são são verticaisverticais e as e as ruas ruas L-OL-O são são horizontaishorizontais

Tanto as Tanto as ruas N-Sruas N-S quanto as quanto as L-OL-O são numeradas são numeradas de de 0 a 90 a 9

Page 22: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Uma Uma matriz 10x10matriz 10x10 de nome de nome CruzaCruza deve deve guardar os guardar os números de acidentesnúmeros de acidentes nesses nesses cruzamentoscruzamentos

O elemento O elemento Cruza[i][j]Cruza[i][j] guarda esse número guarda esse número para o cruzamento da rua horizontal para o cruzamento da rua horizontal ii com a com a vertical vertical jj

O operador recebe várias O operador recebe várias papeletaspapeletas, cada uma , cada uma contendo dois números: o número da contendo dois números: o número da rua rua horizontal horizontal e o da e o da rua verticalrua vertical onde ocorreu onde ocorreu um acidenteum acidente

Esse operador deverá Esse operador deverá digitardigitar os dados de os dados de cada papeletacada papeleta, na execução do programa, na execução do programa

Page 23: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

/*/* DeclaracoesDeclaracoes */*/

int i, j, n, rh, rv, Cruza[10][10];int i, j, n, rh, rv, Cruza[10][10];

/*/* Inicializacao da matriz de acidentes com zeroInicializacao da matriz de acidentes com zero */*/

for (i=0; i<=9; i++)for (i=0; i<=9; i++)

for (j=0; j<=9; j++) Cruza[i][j] = 0;for (j=0; j<=9; j++) Cruza[i][j] = 0;

/*/* Leitura do numero de acidentesLeitura do numero de acidentes */*/

printf ("Mapa de acidentes:\n\n\tNumero de printf ("Mapa de acidentes:\n\n\tNumero de acidentes: ");acidentes: ");

scanf ("%d", &n); printf ("\n");scanf ("%d", &n); printf ("\n");

Page 24: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Leitura e contabilizacao dos acidentes de cada Leitura e contabilizacao dos acidentes de cada cruzamentocruzamento */*/

for (i = 1; i<= n; i++) {for (i = 1; i<= n; i++) {

printf ("\tCruzamento: "); scanf ("%d%d", &rh, printf ("\tCruzamento: "); scanf ("%d%d", &rh, &rv);&rv);

if (rh >= 0 && rh <= 9 && rv >= 0 && rv <= 9) if (rh >= 0 && rh <= 9 && rv >= 0 && rv <= 9)

Cruza[rh][rv]++;Cruza[rh][rv]++;

}}

/*/* Escrita do mapa de acidentes no videoEscrita do mapa de acidentes no video */*/

printf ("\n\n");printf ("\n\n");

for (i = 0; i <= 9; i++) {for (i = 0; i <= 9; i++) {

for (j = 0; j <= 9; j++) for (j = 0; j <= 9; j++)

printf ("%3d", Cruza[i][j]);printf ("%3d", Cruza[i][j]);

printf ("\n");printf ("\n");

}}

Este trecho pode ser mais bem trabalhado

Page 25: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/*/* Fechamento da telaFechamento da tela */*/

printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();

}}

30 cruzamentos digitados

Mapa dos

acidentes

Page 26: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

printf ("\n\n"); printf (" ");printf ("\n\n"); printf (" ");

for (j=0; j<=9; printf ("__%d", j), j++); printf ("_");for (j=0; j<=9; printf ("__%d", j), j++); printf ("_");

for (i=0; i<=9; i++) {for (i=0; i<=9; i++) {

printf ("\n %d|",i);printf ("\n %d|",i);

for (j=0; j<=9; j++) {for (j=0; j<=9; j++) {

if (Cruza[i][j]) printf ("%3d", Cruza[i]if (Cruza[i][j]) printf ("%3d", Cruza[i][j]);[j]);

else printf (" ");else printf (" ");

}}

printf (" |\n |%32c", '|');printf (" |\n |%32c", '|');

}}

printf ("\n -");printf ("\n -");

for (j=0; j<=9; printf ("---"), j++);for (j=0; j<=9; printf ("---"), j++);

printf ("--");printf ("--");

Escrita mais trabalhada do mapa de acidentes

Mapa dos

acidentes

Page 27: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.2.2 – Inicialização de variáveis 6.2.2 – Inicialização de variáveis indexadas nas declaraçõesindexadas nas declarações

Variáveis escalares podem ser inicializadas nas Variáveis escalares podem ser inicializadas nas declarações:declarações:

int i = 12; float x = 40.7; char b = ‘#’;int i = 12; float x = 40.7; char b = ‘#’;

VetoresVetores e e matrizesmatrizes também podem ser também podem ser inicializadas inicializadas nas declaraçõesnas declarações

Page 28: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

A) Vetores:A) Vetores:

Na declaração:Na declaração:

int A[7] = {2, 5, -4, 7, 15, -20, 6};int A[7] = {2, 5, -4, 7, 15, -20, 6};

os valores dos elementos de os valores dos elementos de A A serão os serão os seguintes:seguintes:

A[0] = 2 A[0] = 2 A[1] = 5 A[1] = 5 A[2] = -4 A[2] = -4 A[3] = 7 A[3] = 7

A[4] = 15 A[4] = 15 A[5] = -20 A[5] = -20 A[6] = 6A[6] = 6

Page 29: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Na declaração:Na declaração:

int B[5] = {0};int B[5] = {0};

os valores dos elementos de os valores dos elementos de B B serão os serão os seguintes:seguintes:

B[0] = B[1] = B[2] = B[3] = B[4] = 0 B[0] = B[1] = B[2] = B[3] = B[4] = 0

É uma forma simples de É uma forma simples de inicializar com zeroinicializar com zero todos os elementos de um vetortodos os elementos de um vetor

Page 30: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Na declaração:Na declaração:

float C[10] = {3.2, 0.7, -1.2};float C[10] = {3.2, 0.7, -1.2};

os valores dos elementos de os valores dos elementos de C C serão:serão:

C[0] = 3.2 C[1] = 0.7 C[2] = -1.2 C[0] = 3.2 C[1] = 0.7 C[2] = -1.2

C[3] = C[4] = C[5] = C[6] = C[7] = C[8] = C[3] = C[4] = C[5] = C[6] = C[7] = C[8] = C[9] = 0 C[9] = 0

Os elementos Os elementos C[3] C[3] e seguintes, para os quais e seguintes, para os quais não há valores entre as chaves não há valores entre as chaves ‘{’‘{’ e e ‘}’‘}’, serão , serão zeradoszerados

Page 31: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Na declaração:Na declaração:

float D[ ] = {0.13, -5.23, 4.1, -2.8};float D[ ] = {0.13, -5.23, 4.1, -2.8};

o número de elementos de o número de elementos de DD, que não aparece , que não aparece explícito, é igual ao explícito, é igual ao número de constantesnúmero de constantes entre as chaves, ou seja, entre as chaves, ou seja, 44

Os valores deles serão:Os valores deles serão:

D[0] = 0.13; D[1] = -5.23; D[2] = 4.1; D[0] = 0.13; D[1] = -5.23; D[2] = 4.1; D[3] = -2.8;D[3] = -2.8;

Page 32: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

B) Matrizes: B) Matrizes: várias formas de inicializarvárias formas de inicializar

Usando um só Usando um só par de chavespar de chaves, como na declaração:, como na declaração:

int A[3][4] = {1, 2, 3, 4, 5, 6, 7};int A[3][4] = {1, 2, 3, 4, 5, 6, 7};

O conteúdo dos elementos da matriz O conteúdo dos elementos da matriz AA deve ser deve ser

A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = 4= 4

A[1][0] = 5 A[1][1] = 6 A[1][2] = 7 A[1][3] A[1][0] = 5 A[1][1] = 6 A[1][2] = 7 A[1][3] = 0= 0

A[2][0] = 0 A[2][1] = 0 A[2][2] = 0 A[2][3] A[2][0] = 0 A[2][1] = 0 A[2][2] = 0 A[2][3] = 0= 0

O O preenchimentopreenchimento desses elementos com os valores desses elementos com os valores da declaração é feito da declaração é feito linha por linhalinha por linha

Page 33: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Usando um Usando um par de chaves interno par de chaves interno para cada para cada linhalinha, como na declaração:, como na declaração:

int A[3][4] = {{1, 2, 3}, {4, 5, 6, 7}};int A[3][4] = {{1, 2, 3}, {4, 5, 6, 7}};

O conteúdo dos elementos da matriz O conteúdo dos elementos da matriz AA deve ser deve ser

A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0]A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = 0[3] = 0

A[1][0] = 4 A[1][1] = 5 A[1][2] = 6 A[1]A[1][0] = 4 A[1][1] = 5 A[1][2] = 6 A[1][3] = 7[3] = 7

A[2][0] = 0 A[2][1] = 0 A[2][2] = 0 A[2]A[2][0] = 0 A[2][1] = 0 A[2][2] = 0 A[2][3] = 0[3] = 0

Page 34: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Seja a declaração:Seja a declaração:

int A[][4] = {{1, 2, 3}, {4, 5, 6, 7}, {8, 9}};int A[][4] = {{1, 2, 3}, {4, 5, 6, 7}, {8, 9}};

Eis o conteúdo dos elementos de Eis o conteúdo dos elementos de AA::

A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = 00

A[1][0] = 4 A[1][1] = 5 A[1][2] = 6 A[1][3] A[1][0] = 4 A[1][1] = 5 A[1][2] = 6 A[1][3] = 7= 7

A[2][0] = 8 A[2][1] = 9 A[2][2] = 0 A[2][3] = A[2][0] = 8 A[2][1] = 9 A[2][2] = 0 A[2][3] = 00

A falta do A falta do número de linhasnúmero de linhas na declaração é suprida na declaração é suprida pelo pelo número de paresnúmero de pares de chaves internas, que é de chaves internas, que é igual a igual a 33

Para Para zerar todoszerar todos os elementos: os elementos: int A[3][4] = {0};int A[3][4] = {0};

Page 35: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.2.3 – Atribuições com todos os 6.2.3 – Atribuições com todos os elementos de uma variável indexadaelementos de uma variável indexada

Seja a declaraçãoSeja a declaração

int A[10][7], B[10][7];int A[10][7], B[10][7];

A atribuição A atribuição A = B;A = B; não é permitida em não é permitida em CC

Para copiar todos elementos de Para copiar todos elementos de BB em em AA: :

for (i = 0; i < 10; i++)for (i = 0; i < 10; i++)

for (j = 0; j < 7; j++) A[i][j] = B[i]for (j = 0; j < 7; j++) A[i][j] = B[i][j];[j];

No capítulo sobre estruturas, essa proibição pode ser contornada

Page 36: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Outra proibição:Outra proibição:

As declarações As declarações

float C[3] = {3.2, 0.7, -1.2}; int A[3]float C[3] = {3.2, 0.7, -1.2}; int A[3][4] = {0};[4] = {0};

são permitidas, porém não os comandossão permitidas, porém não os comandos

float C[3];float C[3]; int A[3][4];int A[3][4];

C = {3.2, 0.7, -1.2};C = {3.2, 0.7, -1.2}; A = {0};A = {0};

Page 37: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.2.4 – Leitura e escrita de variáveis 6.2.4 – Leitura e escrita de variáveis indexadas por arquivo em discoindexadas por arquivo em disco

A seguir programas para:A seguir programas para:

– Leitura de matriz pelo tecladoLeitura de matriz pelo teclado

– Leitura de matriz por arquivo em discoLeitura de matriz por arquivo em disco

– Leitura e escrita de matriz por arquivo em Leitura e escrita de matriz por arquivo em discodisco

Page 38: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

int A[10][10], m, n, i, j;int A[10][10], m, n, i, j;

printf ("Leitura e escrita de matriz\n\n");printf ("Leitura e escrita de matriz\n\n");

do {do {

printf ("\nDimensoes m e n (<= 10): ");printf ("\nDimensoes m e n (<= 10): ");

scanf ("%d%d", &m, &n);scanf ("%d%d", &m, &n);

} while (m < 1 || m > 10 || n < 1 || n > 10);} while (m < 1 || m > 10 || n < 1 || n > 10);

printf ("\n\n");printf ("\n\n");

for (i = 0; i <= m-1; i++) {for (i = 0; i <= m-1; i++) {

printf ("%d elementos da linha %d: ", n, i);printf ("%d elementos da linha %d: ", n, i);

for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]);for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]);

}}

printf ("\n\nMatriz A:\n\n");printf ("\n\nMatriz A:\n\n");

for (i = 0; i <= m-1; i++) {for (i = 0; i <= m-1; i++) {

for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]);for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]);

printf ("\n\n");printf ("\n\n");

}}

printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();

}}

Leitura e escrita de matriz por teclado e vídeo

Page 39: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

int A[10][10], m, n, i, j;int A[10][10], m, n, i, j;

FILE *FileIn;FILE *FileIn;

FileIn = fopen ("MatrizA", "r");FileIn = fopen ("MatrizA", "r");

fscanf (FileIn, "%d%d", &m, &n);fscanf (FileIn, "%d%d", &m, &n);

for (i = 0; i <= m-1; i++)for (i = 0; i <= m-1; i++)

for (j = 0; j <= n-1; j++)for (j = 0; j <= n-1; j++)

fscanf (FileIn, "%d", &A[i][j]);fscanf (FileIn, "%d", &A[i][j]);

printf ("Matriz A:\n\n");printf ("Matriz A:\n\n");

for (i = 0; i <= m-1; i++) {for (i = 0; i <= m-1; i++) {

for (j = 0; j <= n-1; j++) for (j = 0; j <= n-1; j++)

printf ("%4d", A[i][j]);printf ("%4d", A[i][j]);

printf ("\n\n");printf ("\n\n");

}}

printf ("\n\nDigite algo para encerrar: "); printf ("\n\nDigite algo para encerrar: ");

getch ();getch ();

}}

Leitura de matriz por arquivo

Conteúdo do arquivo “MatrizA” :

3 423 65 -2 045 13 390 -549 -1 -23 7

Obs.: A entrada de dados não precisa ser amigável

Page 40: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

void main () {void main () {

int A[10][10], m, n, i, j;int A[10][10], m, n, i, j;

FILE *FileIn, *FileOut;FILE *FileIn, *FileOut;

FileIn = fopen ("MatrizA", "r");FileIn = fopen ("MatrizA", "r");

FileOut = fopen ("MatrizASaida", "w");FileOut = fopen ("MatrizASaida", "w");

fscanf (FileIn, "%d%d", &m, &n);fscanf (FileIn, "%d%d", &m, &n);

for (i = 0; i <= m-1; i++)for (i = 0; i <= m-1; i++)

for (j = 0; j <= n-1; j++)for (j = 0; j <= n-1; j++)

fscanf (FileIn, "%d", &A[i][j]);fscanf (FileIn, "%d", &A[i][j]);

fprintf (FileOut, "Matriz A:\n\n");fprintf (FileOut, "Matriz A:\n\n");

for (i = 0; i <= m-1; i++) {for (i = 0; i <= m-1; i++) {

for (j = 0; j <= n-1; j++)for (j = 0; j <= n-1; j++)

fprintf (FileOut, "%4d", A[i][j]);fprintf (FileOut, "%4d", A[i][j]);

fprintf (FileOut, "\n\n");fprintf (FileOut, "\n\n");

}}

}}

Leitura e escrita de matriz por arquivo

Obs.: Não é preciso controlar o fechamento da tela

Conteúdo do arquivo “MatrizASaida”

Matriz A:

23 65 -2 0

45 13 390 -54

9 -1 -23 7

Page 41: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

6.2.4 – Declaração dos tipos vetor e 6.2.4 – Declaração dos tipos vetor e matrizmatriz

Sejam as seguintes Sejam as seguintes declarações de tiposdeclarações de tipos::

typedef float vetor[10]; typedef vetor typedef float vetor[10]; typedef vetor matriz[10]matriz[10]

Variáveis do tipo Variáveis do tipo vetor vetor são indexadas são indexadas unidimensionais com unidimensionais com 10 elementos10 elementos do tipo do tipo floatfloat

Variáveis do tipo Variáveis do tipo matriz matriz são indexadas são indexadas bidimensionais com bidimensionais com 10x10 elementos10x10 elementos do tipo do tipo floatfloat

Page 42: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

typedef float vetor[10]; typedef vetor typedef float vetor[10]; typedef vetor matriz[10]matriz[10]

O tipo O tipo matrizmatriz também poderia ser declarado por: também poderia ser declarado por:

typedef float matriz[10][10];typedef float matriz[10][10];

Com estes tipos, pode-se declarar:Com estes tipos, pode-se declarar:

vetor A, B, C; vetor A, B, C; ao invés de ao invés de float A[10], float A[10], B[10], C[10];B[10], C[10];

matriz M, N, P; matriz M, N, P; ao invés deao invés de

float M[10][10], N[10][10], float M[10][10], N[10][10], P[10][10];P[10][10];

Page 43: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Exemplo: Multiplicação de matrizesExemplo: Multiplicação de matrizes

Duas matrizes podem ser Duas matrizes podem ser multiplicadasmultiplicadas quando o quando o número de colunas da primeiranúmero de colunas da primeira for igual ao for igual ao número de linhas da segundanúmero de linhas da segunda

O O resultadoresultado será uma matriz cujo será uma matriz cujo número de número de linhaslinhas é igual ao da é igual ao da primeira matrizprimeira matriz e o de e o de colunascolunas igual ao da igual ao da segundasegunda

Essa operação Essa operação não é comutativanão é comutativa, ou seja, sendo , ou seja, sendo AA e e BB duas matrizes, não necessariamente duas matrizes, não necessariamente

A * B = B * AA * B = B * A

Caso Caso A * BA * B seja realizável, seja realizável, B * AB * A só o será só o será também se ambas forem também se ambas forem quadradasquadradas e de mesmo e de mesmo número de elementosnúmero de elementos

Page 44: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

Método para a multiplicação de A(m x n) por Método para a multiplicação de A(m x n) por B(n x p)B(n x p)

O O resultadoresultado é uma matriz é uma matriz C(m x p)C(m x p)A0,0 A0,1 ... A0,k ... A0,n-1

A1,0 A1,1 ... A1,k ... A0,n-1

⁞ ⁞ ⁞ ⁞

Ai,0 Ai,1 ... Ai,k ... Ai,n-1

⁞ ⁞ ⁞ ⁞

Am-

1,0

Am-

1,1

... Am-1,k ... Am-1,n-

1

C0,0 C0,1 ... C0,j ... C0,p-1

C1,0 C1,1 ... C1,j ... C1,p-1

⁞ ⁞ ⁞ ⁞

Ci,0 Ci,1 ... Ci,j ... Ci,p-1

⁞ ⁞ ⁞ ⁞

Cm-

1,0

Cm-

1,1

... Cm-1,j ... Cm-1,p-

1

B0,0 B0,1 ... B0,j ... B0,p-1

B1,0 B1,1 ... B1,j ... B1,p-1

⁞ ⁞ ⁞ ⁞

Bk,0 Bk,1 ... Bk,j ... Bk,p-1

⁞ ⁞ ⁞ ⁞

Bn-

1,0

Bn-1,1 ... Bn-1,j ... Bn-1,p-1

Page 45: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

typedef int vetor[10]; typedef vetor matriz[10];typedef int vetor[10]; typedef vetor matriz[10];

void main () {void main () {

matriz A, B, C; int m, n, p, i, j, k, aux;matriz A, B, C; int m, n, p, i, j, k, aux;

/* Leitura das duas matrizes operandos *//* Leitura das duas matrizes operandos */

printf ("Leitura da matriz A:\n\n");printf ("Leitura da matriz A:\n\n");

printf ("Numero de linhas e de colunas: "); scanf ("%d%d", &m, printf ("Numero de linhas e de colunas: "); scanf ("%d%d", &m, &n); printf ("\n");&n); printf ("\n");

for (i = 0; i < m; i++) {for (i = 0; i < m; i++) {

printf ("Linha %d: ", i);printf ("Linha %d: ", i);

for (j = 0; j < n; j++) scanf ("%d", &A[i][j]); for (j = 0; j < n; j++) scanf ("%d", &A[i][j]);

}}

printf ("\nLeitura da matriz B:\n\n");printf ("\nLeitura da matriz B:\n\n");

printf ("Numero de colunas: "); scanf ("%d", &p); printf ("\n");printf ("Numero de colunas: "); scanf ("%d", &p); printf ("\n");

for (i = 0; i < n; i++) {for (i = 0; i < n; i++) {

printf ("Linha %d: ", i);printf ("Linha %d: ", i);

for (j = 0; j < p; j++) scanf ("%d", &B[i][j]); for (j = 0; j < p; j++) scanf ("%d", &B[i][j]);

}}

Page 46: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/* Calculo da matriz produto *//* Calculo da matriz produto */

for (i = 0; i < m; i++)for (i = 0; i < m; i++)

for (j = 0; j < p; j++) {for (j = 0; j < p; j++) {

aux = 0;aux = 0;

for (k = 0; k < n; k++) aux += A[i][k] * B[k][j];for (k = 0; k < n; k++) aux += A[i][k] * B[k][j];

C[i][j] = aux;C[i][j] = aux;

}}

/* Escrita da matriz produto *//* Escrita da matriz produto */

printf ("\nMatriz C:\n\n");printf ("\nMatriz C:\n\n");

for (i = 0; i < m; i++) {for (i = 0; i < m; i++) {

for (j = 0; j < p; j++) printf ("%4d", C[i][j]);for (j = 0; j < p; j++) printf ("%4d", C[i][j]);

printf ("\n"); printf ("\n");

}}

Usa-se a variável escalar ‘aux’ para reduzir o número de referências a C[i][j]

Cada uma dessas referências requer um cálculo extra para localizar tal elemento na matriz

Page 47: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VI Variáveis Indexadas

/* Fechamento da tela *//* Fechamento da tela */

printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();

}}

Resultado de uma execução