Buscar

Aula03 - Rev_Array_Estruturas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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}};

Outros materiais