Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal da Integração Latino-Americana - UNILA Agregados Homogêneos: Vetores, Matrizes e Strings 1 Sumário • Vetores – Definição, declaração, manipulação e exemplos – Exercícios • Matrizes – Definição, declaração, manipulação e exemplos – Exercícios l Cadeira de caracteres – strings l Definição e declaração l Funções de manipulação, exemplos e exercícios 2 Universidade Federal da Integração Latino-Americana - UNILA Definição de vetores • Ao utilizamos variáveis, podemos armazenar apenas um valor por vez • Agora, imagine um programa onde precisa-se armazenar as notas de 5 pessoas • Com seus conhecimentos seria necessário criar cinco variáveis para armazenar as notas ... float n1, n2, n3, n4, n5; n1=9,5; n2=5,5; n3=8,0; n4=8,5; n5=6,0; .... 3 Universidade Federal da Integração Latino-Americana - UNILA Definição de vetores • Em C existem estruturas que permitem agruparmos várias informações dentro de uma mesma variável • Estas estruturas são os tipos de dados homogêneos e recebem diversos nomes: – Variáveis indexadas, compostas, subscritas – Vetores – Matrizes Universidade Federal da Integração Latino-Americana - UNILA 4 Definição de vetores • Vetores são usados para conjunto de dados que possuem a mesma característica, mesmo tipo de informação (agregado homogêneo) • O vetor é uma variável que recebe um nome único e seus elementos são acessados linearmente por meio de índices • Uma variável do tipo vetor armazena diversos elementos do tipo pré- definido Universidade Federal da Integração Latino-Americana - UNILA 5 Declaração de vetores • Sintaxe: tipo_dados nome_vetor[tamanho]; • Exemplos: int vetor_idade[10]; /*armazena 10 idades*/ float vetor_altura[50]; /*armazena 50 alturas*/ • Se o vetor tem tamanho N, os elementos de 0 até N-1 são acessíveis. Exemplo N=10: – Declaração: int vetor_idade[10]; • Primeiro elemento: vetor_idade[0] = 43; • Quinto elemento: vetor_idade[4] = 15; • Último elemento: vetor_idade[9] = 24;’ Universidade Federal da Integração Latino-Americana - UNILA 6 Declaração de vetores • Representação – tipo_dados nome_vetor[tamanho]; – int v_idade[6]; /*armazena 6 idades*/ – float va[10]; /*armazena 10 valores reais*/ Universidade Federal da Integração Latino-Americana - UNILA 7 v_idade[0] v_idade[1] v_idade[2] v_idade[3] v_idade[4] v_idade[5] nome_vetor[0] nome_vetor[1] ...... nome_vetor[tamanho-1] va[0] va[1] va[2] va[3] va[4] va[5] va[6] va[7] va[8] va[9] Manipulação de vetores • Para guardar as 5 notas de alunos vistas anteriormente podemos usar um vetor de notas. Ex. Universidade Federal da Integração Latino-Americana - UNILA 8 ... float vNotas[5]; vNotas[0]=9,5; vNotas[1]=5,5; vNotas[2]=8,0; vNotas[3]=8,5; vNotas[4]=6,0; .... Manipulação de vetores • Para ler do usuário e imprimir as 5 notas de alunos usando um vetor. Ex. Universidade Federal da Integração Latino-Americana - UNILA 9 #include<stdio.h> int main() { float vNotas[5]; /*declaracao do vetor*/ int cont; /*declaracao do indice do vetor e loop (for)*/ for (cont=0; cont<5; cont++) { /*leitura das 5 notas*/ printf(“Informe a %d nota: ”, cont); scanf(“%f”, &vNotas[cont]); } for (cont=0; cont<5;cont++) /*imprimindo as 5 notas*/ printf(“%d nota = %.2f \n”, cont, vNotas[cont]); return(0); } Exercício com vetores 1. Leia do usuário a altura de 15 pessoas e as armazene. Após isso, apresente em tela todas as alturas no seguinte formato: Universidade Federal da Integração Latino-Americana - UNILA 10 Elemento 0 tem valor 1,76 Elemento 1 tem valor 1,55 Elemento 2 tem valor 1,66 Elemento 3 tem valor 1,85 .... Elemento 13 tem valor 2,05 Elemento 14 tem valor 1,96 Exercício com vetores 2. Leia do usuário as alturas de 15 pessoas. Após a leitura das alturas, apresente: a) Todas as alturas lidas em tela b) Menor altura e sua posição c) Maior altura e sua posição d) Média de todas as alturas Universidade Federal da Integração Latino-Americana - UNILA 11 Exercício com vetores 3. Leia do usuário a altura de N pessoas. Após a leitura das alturas, apresente : a) Números de alturas fornecidas pelo usuário b) Menor altura e sua posição c) Maior altura e sua posição d) Média de todas as alturas Universidade Federal da Integração Latino-Americana - UNILA 12 Definição de matrizes • A matriz é uma extensão do conceito de vetor • A matriz mais comum possui duas dimensões: – Linha (horizontal) – Coluna (vertical) • A matriz é uma variável que recebe um nome único e seus elementos são acessados por meio de dois índices relativos a linha e coluna – Armazena valores contendo o mesmo tipo de informação (agregado homogêneo) Universidade Federal da Integração Latino-Americana - UNILA 13 Definição de matrizes • A quantidade de elementos de uma matriz é dada por linhas x colunas • Elementos de uma matriz M de tamanho L x C: Universidade Federal da Integração Latino-Americana - UNILA 14 M[0, 1] M[0, 2] M[1, 0] M[1, 1] M[1, 2] M[2, 0] M[2, 1] M[2, 2] .... .... .... .... .... .... .... M[L-1, 0] M[L-1, 1] M[L-1, 2] .... M[0, C-1] M[1, C-1] M[2, C-1] .... M[L-1, C-1] Linhas Colunas M[0, 1] - + - + Declaração de matrizes • Sintaxe: tipo_dado nome_matriz[tam_linha][tam_coluna]; • Exemplos: int mat_int[3][3]; /*armazena 9 inteiros*/ float mat_notas[5][4]; /*armazena 20 notas*/ char mat_char[5][5]; /*armazena 25 caracteres*/ • Se uma matriz M tem tamanho LxC, os elementos de M[0,0] até M[L-1, C-1] são acessíveis Universidade Federal da Integração Latino-Americana - UNILA 15 Declaração de matrizes • Exemplo L=3 e C=5: – Declaração: int mat1[3][5]; • Primeiro elemento: mat1[0][0] = 43; • Qualquer elemento: mat1[1][3] = 65; • Último elemento: mat1[2][4] = 24; • Exemplo L=10 e C=20: – Declaração: double mat2[10][20]; • Primeiro elemento: mat2[0][0] = 1.87345; • Qualquer elemento: mat2[5][7] = -21.54; • Último elemento: mat2[9][19] = 23923.36765; Universidade Federal da Integração Latino-Americana - UNILA 16 Declaração de matrizes • Representação – int mat1[3][3]; /*armazena 9 inteiros*/ – float mat2[5, 3]; /*armazena 15 floats*/ Universidade Federal da Integração Latino-Americana - UNILA 17 mat1[0][0] mat1[0][1] mat1[0][2] mat1[1][0] mat1[1][1] mat1[1][2] mat1[2][0] mat1[2][1] mat1[2][2] 43 5 28 2435 6 -13 134 -73 772 mat2[0][0] mat2[0][1] mat2[0][2] mat2[1][0] mat2[1][1] mat2[1][2] mat2[2][0] mat2[2][1] mat2[2][2] mat2[3][0] mat2[3][1] mat2[3][2] mat2[4][0] mat2[4][1] mat2[4][2] 1.2 10.23 -9.22 4.5 5.23 12.33 -3.6 77.2433 7.2 20.24 412.3 0.00 1845.2 1122.22 1.211 Manipulação de matrizes • Para guardar as 5 notas de um aluno basta utilizarmos um vetor com cinco elementos. • Agora, cada aluno tem 5 notas e você precisa guardar as notas de 4 alunos. Como fazer isto? Universidade Federal da Integração Latino-Americana - UNILA 18 Cada linha representará um aluno Cada coluna representará uma nota Usando uma matriz de notas com tamanho 4 linhas por 5 colunas Manipulação de matrizes • Agora, cada aluno tem 5 notas e você precisa guardar as notas de 4 alunos. Como fazer isto? Universidade Federal da Integração Latino-Americana - UNILA 19 float mNotas[4][5]; /*lendo estaticamente as notas do aluno 1*/ mNotas[0][0]=5,5; mNotas[0][1]=3,5; mNotas[0][2]=7,0; mNotas[0] [3]=9,5; mNotas[0][4]=9,5; /*lendo do usuario as notas do aluno 4*/ scanf(“%f”, &mNotas[3][0]); scanf(“%f”, &mNotas[3][1]); scanf(“%f”, &mNotas[3][2]); scanf(“%f”, &mNotas[3][3]); scanf(“%f”, &mNotas[3] [4]); Manipulação de matrizes • Agora, cada aluno tem 5 notas e você precisaguardar as notas de 4 alunos. Como fazer isto? • As notas do aluno 2 são acessadas por : – mNotas[1][0], mNotas[1][1] .... mNotas[1][4] Universidade Federal da Integração Latino-Americana - UNILA 20 6.5 8.5 4.5 6.5 6.5 9.0 8.0 8.5 6.5 8.5 6.0 8.0 4.5 7.0 6.5 5.5 8.5 2.5 6.5 7.5 Notas Alunos Aluno 1 Aluno 2 Aluno 3 Aluno 4 Manipulação de vetores • Lendo e imprimindo dados de uma matriz (3x4) Universidade Federal da Integração Latino-Americana - UNILA 21 #include<stdio.h> int main() { int mat[3][3]; /*declaracao da matriz*/ int lin, col; /*declaracao dos indices da matriz e loop (for)*/ /*leitura de dados para a matriz*/ for (lin=0; lin<3; lin++) { /*for para percorrer cada linha*/ for (col=0; col<3; col++) { /*for para percorrer cada coluna*/ printf(“Informe o valor do elemento m[%d][%d]: ”, lin, col); scanf(“%d”, &mat[lin][col]); } } /*impressao de dados para da matriz*/ for (lin=0; lin<3; lin++) /*for para percorrer cada linha*/ for (col=0; col<3; col++) /*for para percorrer cada coluna*/ printf(“Elemento m[%d][%d] = %d \n”, lin, col, mat[lin][col]); return 0; } Exercício com matrizes 1. Leia do usuário valores inteiros para uma matriz 3x3. Após isso, apresente os valores lidos no seguinte formato: Universidade Federal da Integração Latino-Americana - UNILA 22 Matriz na linha=0 coluna=0 tem valor 65 Matriz na linha=0 coluna=1 tem valor 9 Matriz na linha=0 coluna=2 tem valor 56 Matriz na linha=1 coluna=0 tem valor -83 Matriz na linha=1 coluna=1 tem valor 58 Matriz na linha=1 coluna=2 tem valor 0 Matriz na linha=2 coluna=0 tem valor 11 Matriz na linha=2 coluna=1 tem valor 8 Matriz na linha=2 coluna=2 tem valor 13 Exercício com matrizes 2. Leia do usuário valores reais para uma matriz 3x4. Após a leitura das alturas, apresente: a) Menor valor e sua posição (linha e coluna) b) Maior altura e sua posição (linha e coluna) c) Quantidade de valores da matriz d) Média de todas os valores lidos Universidade Federal da Integração Latino-Americana - UNILA 23 Exercício com matrizes 3. Leia do usuário o tamanho de uma matriz (LxC). Depois leia dados inteiros para essa matriz M[L][C] e apresente : a) Tamanho da matriz b) Menor altura e sua posição (linha e coluna) c) Maior altura e sua posição (linha e coluna) d) Média de todos os valores e) Elementos da diagonal principal da matriz M Universidade Federal da Integração Latino-Americana - UNILA 24 Universidade Federal da Integração Latino-Americana - UNILA O que são Strings?... 1) Vetores de caracteres 2) Strings têm como seu último elemento o caracter ‘\0’ 3) Declaração é feita como qualquer outro vetor: ¡ char nome_da_string [tamanho]; 4) Atribuindo valores a strings: char nome1[10] = "Cassio"; char nome2[10] = {'C', 'a', 's', 's', 'i', 'o'}; char nome3[] = "Turma X11"; Universidade Federal da Integração Latino-Americana - UNILA Lendo strings a partir do usuário #include<stdio.h> void main(){ char nome[50]; scanf(“%s”, &nome); gets(nome2); fgets(nome2, 50, stdin); } 3 formas diferentes: Problemas: l 1) scanf não lê espaços em branco. Se o usuário digitar: >“Alexandre Costa e Silva” O scanf vai pegar apenas “Alexandre”. l 2) O gets pega tudo. Porém, seu uso não é recomendado, nem mesmo pelo compilador C: warning: the `gets' function is dangerous and should not be used. Universidade Federal da Integração Latino-Americana - UNILA String como dados primitivos?!?!... l Em C, strings são vetores, e por isso não podem ser tratadas como dados primitivos: string1=string2; /* NÃO faca isso!!!!!! */ l As strings devem ser atribuídas elemento a elemento. l Comparações devem ser feitas uma a uma também int eh_igual =1; for(i=0;i<6;i++){ if (nome1[i] != nome2[i]) eh_igual = 0; } Funções auxiliares (1) 1) Manipular textos caractere a caractere não é interessante, tampouco produtivo!! 2) C oferece funções especiais para manipular strings de maneira mais apropriada (biblioteca string.h) ¡ Determinando o tamanho de uma string ÷ strlen(string); ¡ Copiando uma string em outra ÷ strcpy(destino, origem); ¡ Unindo duas strings: ÷ strcat(destino, origem); ¡ Convertendo uma string para maiúsculas e minuscula: ÷ strupr(string) e strlwr(string); Funções auxiliares (2) ¡ Invertendo uma string utilizando a função strrev( ): ÷ strrev(string); ¡ Comparando duas strings: ÷ strcmp(string1,string2); Exemplos /* strcat example */ #include <stdio.h> #include <string.h> int main () { char str[80]; strcpy (str,"Estas "); strcat (str,"strings "); strcat (str,"estão "); strcat (str,"concatenadas."); printf (“%s”,str); return 0; } Saída do programa: Estas strings estão concatenadas. Universidade Federal da Integração Latino-Americana - UNILA 31 Bibliografias l Wirth, N. Algoritmos e Estruturas de Dados, LTC Editora, 1989. l Oliveira, Ulysses. Programando em C, Ciência Moderna, 2008. l Mizrahi, V. V. Treinamento em Linguagem C, Pearson Education, 2008. l Dobay, E. S; Programação em C, Apostila. Instituto de Física da Universidade de São Paulo, 2010. l Cruz, A. J. de O. C. Curso de Linguagem C. Instituto de Matemática da UFRJ. Apostila, 2011. l Feofiloff, Paulo. Algoritmos em Linguagem C, Campus, 2008. l Ricarte, I. L. M. Programação em C (nota de aula). Disponível em < http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/ node129.html> , Acessado em setembro de 2011, 2003. 31
Compartilhar