Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. Edson J. R. Justino Prof. Claudio Carvilhe Parte 9 - Lab Pontifícia Universidade Católica do Paraná - PUCPR VETORES DeclaraDeclaraçção de Vetoresão de Vetores �� Vetores SimplesVetores Simples �� Vetores MultidimensionaisVetores Multidimensionais Declaração de Vetores Em C, os vetores são declarados da seguinte forma:Em C, os vetores são declarados da seguinte forma: tipotipo nome [nome [tamanhotamanho];]; tipotipo •• Pode ser qualquer tipo de dado, simples ou composto.Pode ser qualquer tipo de dado, simples ou composto. Ex.: Ex.: int, int, charchar, etc, etc •• nomenome •• ÉÉ o nome que iro nome que iráá representar o conjunto de varirepresentar o conjunto de variááveis;veis; •• tamanhotamanho ••ÉÉ o no núúmero de elementos do vetor.mero de elementos do vetor. Ex.: Ex.: charchar mensagem[10];mensagem[10]; int int n_ocorren_ocorre[20[20]; Inicializando os vetores com valores Se quisermos declarar um vetor numSe quisermos declarar um vetor numéérico o qual jrico o qual jáá sabemos sabemos quais vão ser os valores iniciais de cada posiquais vão ser os valores iniciais de cada posiçção basta ão basta utilizarmos a sintaxe:utilizarmos a sintaxe: tipo nome[tamanho] = { Valor 1a positipo nome[tamanho] = { Valor 1a posiçção, Valor 2a. ão, Valor 2a. posiposiçção, ... , valor posião, ... , valor posiçção tamanho ão tamanho -- 1};1}; Exemplo:Exemplo: int int n_tesn_tes[[22] = {] = {1,21,2};}; neste neste úúltimo caso teremos os seguintes elementos:ltimo caso teremos os seguintes elementos: n_tesn_tes[0] = 1[0] = 1 n_tesn_tes[1] = 2[1] = 2 Inicializando os vetores com valores int n_tes[2] = {1,2}; Ou int n_tes[ ] = {1,2}; . . . . . . Memória N_tes[0] 0100 0101 0001 0102 0103 0104 n 1 2 N_tes[1] Inicializando os vetores com valores No caso de um vetor de No caso de um vetor de caracterescaracteres:: char char men[men[55] = ] = ““abcabc ““;; neste caso teremos os seguintes valores:neste caso teremos os seguintes valores: men[0] = `a`men[0] = `a` men[1] = `b`men[1] = `b` men[2] = `c`men[2] = `c` men[3] = ` `men[3] = ` ` men[4] = `men[4] = `\\0`0` ObservaObservaççãoão: : O O ‘‘\\00’’ ouou ‘’‘’ representamrepresentam o o fimfim de de umauma cadeiacadeia de de carecterescarecteres.. Inicializando os vetores com valores char men[5] = “abc “; Ou char men[ ] = “abc “; Ou char men[5] = {‘a’,’b’,’c’}; Ou char men[ ] = {‘a’,’b’,’c’}; . . . . . . Memória men[0] 0100 0101 0001 0102 0103 0104 a b c \0 \0 men[1] men[2] men[3] men[4] Inicializando os vetores com valores Não Não éé obrigatobrigatóório declarar todas as posirio declarar todas as posiçções do vetor na ões do vetor na inicializainicializaççãoão, como podemos ver no exemplo abaixo:, como podemos ver no exemplo abaixo: Ex.:Ex.: int num[4] = {1,2};int num[4] = {1,2}; num[0] = 1num[0] = 1 num[1] = 2num[1] = 2 num[2] = 0num[2] = 0 num[3] = 0num[3] = 0 Exemplo de Vetor Simples #include <stdio.h> void main( ){ int i, quad[10]; for (i = 0; i < 10; i++) quad[i] = i * i; for (i = 0; i < 10; i++) printf("quadrado de %d = %d\n", i, quad[i]); } Exercícios Propostos � 1) Dado vetor CRR de caracteres abaixo. Elabore um pgm em C que implemente o algoritmo abaixo ○ CRR ! U O T R E C A InInííciocio caracterecaractere crrcrr[8]={!,U,O,T,R,E,C,A};[8]={!,U,O,T,R,E,C,A}; intint auxaux, i;, i; ParaPara ii dede 1 1 atatéé 33 passo passo 11 auxaux <<-- crrcrr[i];[i]; crrcrr[i] <[i] <-- crrcrr[7 [7 –– i];i]; crrcrr[7 [7 –– i] <i] <-- auxaux;; FimFim--parapara auxaux <<-- crrcrr[0];[0]; crrcrr[0] <[0] <-- crrcrr[7];[7]; crrcrr[7] <[7] <-- auxaux;; Imprima (Imprima (crrcrr);); FimFim Exercícios Propostos � 2) Elabore um pgm em C que implemente o seguinte algoritmo InInííciocio realreal x, v[5];x, v[5]; intint I;I; v[0] <v[0] <-- 1;1; v[1] <v[1] <-- 3;3; v[2] <v[2] <-- 0;0; v[3] <v[3] <-- 2;2; v[4] <v[4] <-- 4;4; x <x <-- v[0] + v[4];v[0] + v[4]; ImprimaImprima (x);(x); x <x <-- v[1] v[1] –– v[4];v[4]; ImprimaImprima (x);(x); x <x <-- v[3] * v[0] v[3] * v[0] -- x;x; ImprimaImprima (x);(x); I <I <-- 2; 2; x <x <-- v[I];v[I]; ImprimaImprima (x);(x); x <x <-- v[I]/v[v[0]];v[I]/v[v[0]]; ImprimaImprima (x);(x); FimFim Exercícios Propostos � 3) Elabore um pgm que conte a quantidade de incidências de um caractere específico em uma cadeia de caracteres. A cadeia e o caractere devem ser informados como entrada. � 4) Elabore um pgm em C para concatenar duas cadeias de caracteres (A e B) lidas do teclado. Ao final imprima as duas cadeias e a cadeia resultante. � 5) Construa um pgm que, a partir de uma string informada pelo usuário, indique se a mesma contém apenas caracteres maiúsculos (de ‘A’ até ‘Z’). Dica: A letra ‘A’ têm código ASCII = 65. A letra ‘Z’ tem código ASCII = 90. � 6) Construa um pgm que, a partir de uma string informada pelo usuário, indique se o usuário digitou um INTEIRO POSITIVO válido (limitado a 5 dígitos). Dica: O número 0 (zero) têm código ASCII = 48. O número 9 código ASCII = 57. � 7) Modifique o exercício anterior, possibilitando que o usuário digite um inteiro (zero, positivo ou negativo). Vetores Multidimensionais Em C, podemos simular vetores com qualquer nEm C, podemos simular vetores com qualquer núúmero de mero de dimensões, sem nos preocuparmos com a forma como isto dimensões, sem nos preocuparmos com a forma como isto éé feito.feito. Ex:Ex: charchar nomes[nomes[22][] = { ][] = { ““joãojoão vaivai””, , ““mariamaria nãonão”” };}; int int matriz[matriz[22][][33] = { {1,2,3}, {4,5,6} };] = { {1,2,3}, {4,5,6} }; Um vetor de duas dimensões nada mais Um vetor de duas dimensões nada mais éé do que uma do que uma Matriz.Matriz. intint matriz [matriz [numero_de_linhasnumero_de_linhas][][numero_de_colunasnumero_de_colunas];]; Vetores Multidimensionais int men[2][3] = { {1,2,3}, {4,5,6} }; . . . . . . Memória men[0][0] 0100 0101 0001 0102 0103 0104 1 2 3 4 5 men[0][1] men[0][2] men[1][0] men[1][1] 01056men[1][2] Exemplo 001 /******************************************** Exemplo de Vetor Multidimensional ********************************************/ #include <stdio.h> void main( ){ int i; char nome[5][10] = { "Carmen“ , "Ricardo", "Alexandre", "Ana Paula", "Eduardo” }; for (i = 0; i < 5; i++) { printf("nome : "); printf("%s\n", nome[i]); } } Vetores Multidimensionais Vetores Multidimensionais Exemplo 02 /******************************************** Exemplo de Vetor Multidimensional ********************************************/ #include <stdio.h> void main( ){ int i,j; int matriz[5][5] = { {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5} }; for (i = 0; i < 5; i++) { for (j=4; j>=0;j--) printf("%d ", matriz[i][j]); printf(“\n”); } } Exercícios Propostos � 1) Elabore um pgm. em C para o seguinte algoritmo InInííciocio intint m1m1[3][2];[3][2]; intint i, j;i, j; m1m1[0][0] <[0][0] <-- 1;1; m1m1[0][1] <[0][1] <-- 2;2; m1m1[1][0] <[1][0] <-- 3; 3; m1m1[1][1] <[1][1] <-- 4;4; m1m1[2][0] <[2][0] <-- 5; 5; m1m1[2][1] <[2][1] <-- 6;6; ImprimaImprima ((m1m1);); parapara ii dede 0 0 atatéé 11 parapara j j dede 0 0 atatéé 22 imprimaimprima((m1m1[j][i]);[j][i]); fimfim--parapara fimfim--parapara FimFim Exercícios Propostos � 2) Elabore um pgm. em C para o seguinte algoritmo InInííciocio intint m1m1[3][4];[3][4]; caracterecaractere n1n1[2][2];[2][2]; intint i, j;i, j; j <j <-- 1;1; parapara i i dede 0 0 atatéé 22 m1m1[i][j] <[i][j] <-- 2;2; m1m1[i][[i][j+2j+2] <] <-- 2;2; m1m1[i][j[i][j--1]<1] <-- 1; 1; m1m1[i][[i][j+1j+1] <] <-- 1;1; fimfim--parapara para para ii dede 0 0 atatéé 11 para para j j dede 0 0 atatéé 11 sese i = j i = j entãoentão n1n1[i][j] <[i][j] <-- ‘‘AA’’;; senãosenão n1n1[i][j] <[i][j] <-- ‘‘ZZ’’;; fimfim--sese fimfim--parapara fimfim--parapara ImprimaImprima ((m1m1, n1);, n1); FimFim Exercícios Propostos � 3) Elabore um pgm. em C para o seguinte algoritmo InInííciocio intint i, j;i, j; caracterecaractere m1m1[4][4]= {{O,Q,*,I}, {E,R,E,S}, {R,E,U,S},[4][4]= {{O,Q,*,I}, {E,R,E,S}, {R,E,U,S}, {A,*,A,S}};{A,*,A,S}}; caractere caractere auxaux;; parapara i i dede 0 0 atatéé 3 3 passo passo 11 parapara j j dede i+1i+1 atatéé 3 3 passo passo 11 auxaux <<-- m1m1[i][j];[i][j]; m1m1[i][j] <[i][j] <-- m1m1[j][i];[j][i]; m1m1[j][i] <[j][i] <-- auxaux; ; fimfim--parapara fimfim--parapara auxaux <<-- m1m1[0][0];[0][0]; m1m1[0][0] <[0][0] <-- m1m1[3][3];[3][3]; m1m1[3][3] <[3][3] <-- auxaux;; auxaux <<-- m1m1[1][1];[1][1]; m1m1[1][1] <[1][1] <-- m1m1[2][2];[2][2]; m1m1[2][2] <[2][2] <-- auxaux; ; ImprimaImprima ((m1m1);); FimFim Exercícios Propostos � 4) Elaborar um pgm. em C que leia uma matriz de 4x5 elementos inteiros e some os elementos de cada linha gerando um vetor SOMALINHA. Em seguida, somar os elementos do vetor somalinha na variável TOTAL. Ao final, imprima a matriz, o vetor e a variável total. � 5) Elaborar um pgm. em C que leia duas matrizes reais de dimensão 3x5, calcule e imprima a soma das matrizes. � 6) Escreva um pgm. em C que: � Leia uma matriz 20x20 de elementos reais; � Divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linha; � Imprima a matriz assim modificada. Estrutura � Sintaxe � Normalmente a estrutura recebe um nome que passa a identificar um novo tipo de dado composto , correspondente ao que foi definido. � Após ter sido efetuada a declaração, um novo tipo passa a existir. Neste instante, basta declarar as variáveis para o tipo definido. Ex: struct funcionario { char nome[30]; char endereco[40]; char conjuge[30]; int n_depen; char cargo; float salario; char data_adm[10]; }; Ex: struct funcionario analista, programador ; Estrutura � Para nos referirmos ao campos das variáveis basta referenciarmos a variável e seu campo. Ex: analista.n_depen = 4; programador.salario = 800.00; Ex: struct funcionario { char nome[30]; char endereco[40]; char conjuge[30]; int n_depen; char cargo; float salario; char data_adm[10]; }; Ex: struct funcionario analista, programador ; /***************************************** Exemplo usando estrutura *****************************************/ #include <stdio.h> struct reg { int codigo; float valor; }; int main() { struct reg tabela[5]; int i,c; float v; for(i=0;i<=4;i++){ printf("codigo:");scanf("%d",&tabela[i].codigo);fflush(stdin); printf("valor:");scanf("%f",&tabela[i].valor);fflush(stdin); } for(i=0;i<=4;i++) printf("codigo: %d valor:%8.2f\n",tabela[i].codigo,tabela[i].valor); system("PAUSE"); return(0); } Estrutura Composta � Neste caso, teríamos uma estrutura dentro da outra, o que é uma prática muito comum no tratamento de dados em computação. � Agora, para nos referenciarmos ao campo ano da estrutura data_adm, utilizaríamos: Ex: struct data { int dia; int mes; int ano; }; struct funcionario { char nome[30]; char endereco[40]; struct data data_adm; char cargo; }; Referência à variável analista.data_adm.ano Declaração de variável struct funcionario analista /***************************************** Exemplo usando estrutura composta ****************************************/ #include <stdio.h> struct data { int dia; int mes; int ano; }; struct reg { int codigo; struct data data_c; }; int main() { struct reg tabela[5]; int i; for(i=0;i<=4;i++) { printf("codigo:");scanf("%d",&tabela[i].codigo);fflush(stdin); printf("dia:");scanf("%d",&tabela[i].data_c.dia);fflush(stdin); printf("mes:");scanf("%d",&tabela[i].data_c.mes);fflush(stdin); printf("ano:");scanf("%d",&tabela[i].data_c.ano);fflush(stdin); } for(i=0;i<=4;i++) printf("codigo: %d data: %d/%d/%d\n",tabela[i].codigo, tabela[i].data_c.dia,tabela[i].data_c.mes, tabela[i].data_c.ano); system("PAUSE"); return(0); } Exercícios � 1) Elabore um pgm. em c para ler e imprimir um vetor com 10 registros de funcionário com a seguinte estrutura: struct funcionario { char nome[30]; char endereco[40]; char conjuge[30]; int n_depen; char cargo; float salario; struct data data_adm; }; struct data { int dia; int mes; int ano; };
Compartilhar