Já tem cadastro?
Você viu 1 do total de 8 páginas deste material
Prévia do material em texto
8/26/2011 1 Arrays e Estruturas em C Prof. André Backes Array � Array ou “Vetor” é a forma mais familiar de dados estruturados. � Um array é um conjunto de componentes do mesmo tipo. Array - Problema � Imagine o seguinte problema � Dada uma relação de 5 estudantes, imprimir o nome de cada estudante, cuja nota é maior do que a média da classe. Array - Solução � Um algoritmo para esse problema poderia ser o seguinte: Leia(nome1,nota1,nome2,nota2,nome3,nota3,nome4, nota4,nome5,nota5); media = (nota1+nota2+nota3+nota4+nota5) / 5,0; Se nota1 > media então escreva (nome1) Se nota2 > media então escreva (nome2) Se nota3 > media então escreva (nome3) Se nota4 > media então escreva (nome4) Se nota5 > media então escreva (nome5) Array � O algoritmo anterior apresenta uma solução possível. � Porém, essa solução é inviável para uma lista de 100 alunos. � Uma variável para cada nome => 100 variáveis � Uma variável para cada nota => 100 variáveis � 100 testes Array Leia(nome1,nota1,nome2,nota2,...,nome100, nota100); media = (nota1+nota2+...+nota100) / 100,0; Se nota1 > media então escreva (nome1) Se nota2 > media então escreva (nome2) ... Se nota100 > media então escreva (nome100) 8/26/2011 2 Array - Definição � Como estes dados têm uma relação entre si, podemos declará-los usando um ÚNICO nome para todos os 100 elementos. � Lista = conjunto de 100 números acessados por um índice. 0 1 ... 99 Lista Array - Definição � Na linguagem C a numeração começa sempre em zero. � Isto significa que, no exemplo anterior, os dados serão indexados de 0 a 99. � Lista[0], Lista[1], ..., Lista[99] 0 1 ... 99 LISTA Array - Definição � Observação � Se o usuário digitar mais de 100 elementos em um array de 100 elementos, o programa tentará ler normalmente. � Porém, o programa os armazenará em uma parte não alocada de memória, pois o espaço alocado foi para somente 100 elementos. � Isto pode resultar nos mais variados erros no instante da execução do programa. Array = varíavel � O elemento do array tem todas as características de uma variável e pode aparecer em expressões e atribuições. � Lista[2] = Lista[3] + Lista[20] � Ex: somar todos os elementos da Lista: int soma = 0; for(i=0;i < 100; i++) soma = soma + Lista[i]; Array - Características � Características básicas de um Array � Estrutura homogênea, isto é, formada de elementos do mesmo tipo. � todos os elementos da estrutura são igualmente acessíveis, isto é, o tempo e o tipo de procedimento para acessar qualquer um dos elementos do Array são iguais. � cada elemento componente desta estrutura tem um índice próprio segundo sua posição no conjunto Array - Problema � Voltando ao problema anterior � Dada uma relação de 5 estudantes, imprimir o nome de cada estudante, cuja nota é maior do que a média da classe. 8/26/2011 3 Array - Solução � Um algoritmo para esse problema usando array: Para i = 1 até 5 faça Leia(nome[i],nota[i]) soma = 0 Para i = 1 até 5 faça soma = soma + nota[i] media = soma/5 Para i = 1 até 5 faça Se nota[i] > media então escrever (nome[i]) Array - Solução � Se ao invés de 5, fossem 100 alunos? Para i = 1 até 100 faça Leia(nome[i],nota[i]) soma = 0 Para i = 1 até 100 faça soma = soma + nota[i] media = soma/ 100 Para i = 1 até 100 faça Se nota[i] > media então escrever (nome[i]) Array - Declaração � arrays são agrupamentos de dados adjacentes na memória � declaração: � tipo_dado nome_array[tamanho]; � define um arranjo de tamanho elementos adjacentes na memória do tipo tipo_dado � Ex: int nota[5]; Relembrando Strings � Strings são arrays de chars � Seqüência de caracteres adjacentes na memória. � O caracter ‘\0’ (= valor inteiro 0) indica o fim da seqüência � Ex: char str[6] = “Teste”; Relembrando Strings � A biblioteca padrão do C possui diversas funções que manipulam strings. � header “string.h” � Estas funções são úteis pois não se pode, por exemplo, igualar duas strings: � string1 = string2; Relembrando Strings � Exemplo de funções para manipulação de strings � strlen(str); //retorna o tamanho de str � strcpy(dest, fonte); //copia fonte em dest � strcat(dest, fonte); //concatena fonte no fim de dest � gets(s); // lê uma string do teclado e coloca em s � fflush(stdin) ou setbuf(stdin, NULL): limpam o buffer to teclado. Devem ser usadas antes da função gets 8/26/2011 4 Arrays bidimensionais � Também chamados de “matrizes”, contém: � um número fixo de elementos; � todos são do mesmo tipo; � arranjados na forma de tabela de 2 dimensões; � Declaração � tipo_da_variável nome_da_variável [linhas][colunas]; Arrays bidimensionais � Ex.: um array que tenha 100 linhas por 50 colunas � int mat[100][50]; 0 1 ... 49 0 1 ... 99 mat[0][1] Arrays Multidimensionais � Arrays podem ter diversas dimensões, cada uma identificada por um par de colchetes na declaração � int vet[5]; // 1 dimensão � float mat[5][5]; // 2 dimensões � double cub[5][5][5]; // 3 dimensões � int X[5][5][5][5]; // 4 dimensões Arrays Multidimensionais � Apesar de terem o comportamento de estruturas com mais de uma dimensão, na memória os dados são armazenados linearmente: � int mat[5][5]; 0,0 4,4 0,0 1,0 2,0 3,0 4,0 4,4 Arrays Multidimensionais � Um array N-dimensional funciona basicamente como outros tipos de array. Basta lembrar que o índice que varia mais rapidamente é o índice mais à direita. � int vet[5]; // 1 dimensão � float mat[5][5]; // 2 dimensões � double cub[5][5][5]; // 3 dimensões � int X[5][5][5][5]; // 4 dimensões Inicialização � Arrays podem ser inicializados com certos valores durante sua declaração. A forma geral de um array com inicialização é: � tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] = {lista_de_valores}; 8/26/2011 5 Inicialização � A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. Os valores devem ser dados na ordem em que serão colocados na matriz. � float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 }; � int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; � char str [10] = { 'J', 'o', 'a', 'o', '\0' }; � char str [10] = "Joao"; � char str_vect [3][10] = { "Joao", "Maria", "Jose" }; Inicialização sem tamanho � Inicialização sem especificação de tamanho � char mess [] = "Linguagem C: flexibilidade e poder."; //A string mess terá tamanho 36. � int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 }; //O número de linhas de matrx será 5. Inicialização sem tamanho � Nesse tipo de inicialização, o compilador C vai considerar o tamanho do dado declarado como sendo o tamanho do array. � Isto ocorre durante a compilação e não poderá mais ser mudado durante o programa. � Isto é útil quando não queremos contar quantos caracteres serão necessários para inicializarmos uma string. Estruturas � Uma estruturas pode ser vista como um novo tipo de dados, que é formado por variáveis de outros tipos. � Pode ser declarada em qualquer escopo. � Ela é declarada da seguinte forma: struct nomestruct{ tipo1 campo1; tipo2 campo2; ... tipon campon; }; Estruturas � Uma estrutura pode ser vista como um agrupamento de dados. Ex.: cadastro. struct cadastro{ char nome[50]; int idade; char rua[50] int numero; }; char nome[50]; int idade; char rua[50]; int numero; cadastro Estruturas - declaração � Uma vez definida a estrutura, uma variável pode ser declarada de modo similar aos tipos já existente: � struct cadastro c; � Obs: por ser um tipo definido pelo programador, usa-se a palavra struct antes do tipo da nova variável 8/26/2011 6 Estruturas � O uso de estruturas facilita na manipulação dos dados do programa. Imagine ter que declarar 4 cadastros, para 4 diferentes pessoas: char nome1[50], nome2[50], nome3[50], nome4[50]; int idade1, idade2, idade3, idade4; char rua1[50], rua2[50], rua3[50], rua4[50] int numero1, numero2, numero3, numero4; Estruturas � Utilizando uma estrutura, o mesmo pode ser feito da seguinte maneira: � structcadastro c1, c2, c3, c4, c5; Acesso às variáveis � Como é feito o acesso às variáveis da estrutura? � Cada variável da estrutura pode ser acessada com o operador “.”. Ex.: strcpy(c.nome,"João"); c.idade = 18; strcpy(c.rua,"Avenida Brasil"); c.numero = 1082; Acesso às variáveis � Como nos arrays, uma estrutura pode ser previamente inicializada: struct ponto { int x; int y; }; struct ponto p1 = { 220, 110 }; Acesso às variáveis � E se quiséssemos ler os valores da das variáveis da estrutura do teclado? � Resposta: basta ler cada variável independentemente, respeitando seus tipos. scanf(“%s”,&c.nome); scanf(“%d”,&c.idade); scanf(“%s”,&c.rua); scanf(“%d”,&c.numero); Acesso às variáveis � Note que cada variável dentro da estrutura pode ser acessada como se apenas ela existisse, não sofrendo nenhuma interferência das outras. � Uma estrutura pode ser vista como um simples agrupamento de dados. 8/26/2011 7 Array de estruturas � Sua declaração é similar a declaração de uma array de um tipo básico � struct cadastro c[100]; � Desse modo, declara-se um array de 100 cadastros. Array de estruturas � Lembrando: � struct: define um “conjunto” de variáveis que podem ser de tipos diferentes; � array: é uma “lista” de elementos de mesmo tipo. Atribuição entre estruturas � Atribuições entre estruturas só podem ser feitas quando os campos são IGUAIS! � Ex: struct cadastro c1,c2; c1 = c2; //CORRETO � Ex: struct cadastro c1; struct ficha c2; c1 = c2; //ERRADO!! TIPOS DIFERENTES Atribuição entre estruturas � No caso de estarmos trabalhando com arrays, a atribuição entre diferentes elementos do array também é válida � Ex: � struct cadastro c[10]; � c[1] = c[2]; //CORRETO � Note que nesse caso, os tipos dos diferentes elementos do array são sempre IGUAIS. Estruturas de estruturas � Sendo uma estrutura um tipo de dado, podemos declarar uma estrutura que utilize outra estrutura previamente definida: struct endereco{ char rua[50] int numero;}; struct cadastro{ char nome[50]; int idade; struct endereco ender;}; char nome[50]; int idade; struct endereco ender cadastro char rua[50];char rua[50]; int numero; Estruturas de estruturas � Nesse caso, o acesso aos dados do endereço do cadastro é feito utilizando novamente o operador “.”. struct cadastro c; strcpy(c.nome,"João"); c.idade = 18; strcpy(c.ender.rua,"Avenida Brasil"); c.ender.numero = 1082; 8/26/2011 8 Estruturas de estruturas � Inicialização de uma estrutura de estruturas: struct ponto { int x, y;}; struct retangulo { struct ponto inicio, fim;}; struct retangulo r = {{10,20},{30,40}};
Compartilhar