Vous êtes sur la page 1sur 36

ARRAYS

ARRAYS UNIDIMENSIONAIS vetores

ARRAYS
Arrays so estruturas de dados que consistem em itens de dados relacionados do mesmo tipo.

Um array um conjunto de espaos de memria que se relacionam pelo fato de que todos tm o mesmo nome e o mesmo tipo.
Para se referir a um local ou elemento em particular no array, especificamos o nome do array e o nmero da posio do elemento em particular no array.

em geral, o i-simo elemento do array c referenciado como c[i - 1].


O nmero da posio contido dentro dos colchetes formalmente chamado de subscrito (ou ndice). Um subscrito precisa ser um inteiro ou uma expresso inteira.

Deitel & Deitel (2010)

ARRAYS
Se um programa usa uma expresso como um subscrito, ento a expresso avaliada para determinar o subscrito. Por exemplo, se a = 5 e b = 6, ento a instruo
c[ a + b ] += 2;

soma 2 ao elemento de array c[11].

Deitel & Deitel (2010)

DECLARANDO ARRAYS
Os arrays ocupam espao na memria. Voc especifica o tipo de cada elemento e o nmero de elementos exigidos por array de modo que o computador possa reservar a quantidade de memria apropriada. A declarao int c[ 12 ]; usada para pedir ao computador que reserve 12 elementos para o array de inteiros c.

Deitel & Deitel (2010)

EXEMPLO DE USO- ARRAYS

Deitel & Deitel (2010)

INICIALIZAO DE ARRAYS
Os elementos de um array tambm podem ser inicializados quando o array declarado a partir de uma declarao com um sinal de igual e chaves, {}, que contenha uma lista de inicializadores separados por vrgula.

Deitel & Deitel (2010)

EXEMPLO DE USO- ARRAYS

Se houver menos inicializadores que elementos no array, os elementos restantes sero inicializados em zero. Por exemplo, os elementos do array n na figura ao lado poderiam ter sido inicializados com zero, da seguinte forma: int n[ 10 ] = { 0 }; Isso inicializa explicitamente o primeiro elemento em zero e inicializa os nove elementos restantes em zero, pois existem menos inicializadores que elementos no array. Observao: A declarao de array
int n[ 5 ] = { 32, 27, 64, 18, 95, 14 }; causa um erro de sintaxe porque existem seis inicializadores e apenas cinco elementos de array

Deitel & Deitel (2010)

.
8

ARRAYS
Se o tamanho do array for omitido de uma declarao com uma lista de inicializadores, o nmero de elementos no array ser o nmero de elementos na lista de inicializadores. Por exemplo, int n[] = { 1, 2, 3, 4, 5 }; criaria um array de cinco elementos.

ARRAYS
A diretiva do pr-processador #define introduzida nesse programa. A linha 4 #define SIZE 10 define uma constante simblica SIZE cujo valor 10. Uma constante simblica um identificador substitudo com o texto substituto pelo prprocessador C antes de o programa ser compilado.
Especificao do tamanho de um array com uma constante simblica

Deitel & Deitel (2010)

10

ARRAYS
Quando o programa pr-processado, Especificao do tamanho de um todas as ocorrncias da constante array com uma constante simblica simblica SIZE so substitudas com o texto substituto 10. O uso de constantes simblicas para especificar tamanhos de array torna os programas mais escalveis. Na Figura ao lado, poderamos fazer o primeiro for (linha 13) preencher um array de 1000 elementos simplesmente mudando o valor de SIZE na diretiva #define de 10 para 1000. Se a constante simblica SIZE no tivesse sido usada, teramos de mudar o programa em trs lugares separados para fazer com que ele tratasse de 1000 elementos de array. medida que os programas se tornam maiores, essa tcnica se torna mais til na elaborao de programas claros.
Deitel & Deitel (2010)

11

EXEMPLOS DE ARRAYS

ARRAYS
Soma dos elementos de um array

Deitel & Deitel (2010)

13

ARRAYS
Calcular a mdia da nota de 5 alunos e verificar quantos conseguiram nota acima da mdia:
#include <stdio.h> #include <stdlib.h> main() { int contA=0; double media, n1, n2, n3, n4, n5; scanf ("%lf %lf %lf %lf %lf", &n1, &n2, &n3, &n4, &n5); media = (n1+ n2 + n3 + n4 + n5)/5; if (n1>media) contA=contA+1; if (n2>media) contA=contA+1; if (n3>media) contA=contA+1; if (n4>media) contA=contA+1; if (n5>media) contA=contA+1; printf ("%lf %d", media, contA); system("pause");
#include <stdio.h> #include <stdlib.h> main() { int i, contA=0; double soma=0, media; double v[5]; for (i=0;i<5;i++) { scanf ("%lf", &v[i]); soma = soma + v[i]; } media = soma/i; for (i=0;i<5;i++) { if (v[i]>media) contA=contA+1; } printf ("%lf %d\n", media, contA); system("PAUSE"); }

}
14

ARRAYS
. Armazenar 10 valores inteiros num vetor de 10 posies e mostrar os valores armazenados
#include<stdio.h> #include<stdlib.h> main(){ int vetor[10], cont; for (cont=0; cont<10; cont++) { printf ("\nDigite um valor inteiro: "); scanf ("%d", &vetor[cont]); } for (cont=0; cont<10; cont++) printf ("\nO valor armazenado na posicao %d eh %d\n", cont, vetor[cont]); system("pause"); }

Armazenar 10 valores inteiros num vetor de 10 posies. Aps, leia o vetor e mostre os valores armazenados, adicionando em 10 unidades quando forem nmeros positivos.
#include<stdio.h> #include<stdlib.h> main(){ int vetor[10], cont; for (cont=0; cont<10; cont++) { printf ("\nDigite um valor inteiro: "); scanf ("%d", &vetor[cont]); } for (cont=0; cont<10; cont++) { if (vetor[cont]>0) printf ("\nO valor armazenado na posicao %d eh %d\n", cont, vetor[cont]+10); else printf ("\nO valor armazenado na posicao %d eh %d\n", cont, vetor[cont]); } system("pause"); }

15

ARRAYS
Faca um algoritmo que leia 5 idades de 5 pessoas e escreva o numero de pessoas que so maiores de idade. Armazene as idades num vetor.
#include<stdio.h> #include<stdlib.h> main(){ int pessoas[5]; int i=0, numMaiorIdade=0; while (i<5) { printf ("\nDigite uma idade: "); scanf ("%d", &pessoas[i]); if (pessoas[i]>=18) numMaiorIdade++; i++; } printf ("\nO numero de pessoas com mais de 18 anos eh %d\n", numMaiorIdade); system("pause"); }
16

ARRAYS
Faca um programa que armazene em um vetor de inteiros as quantidades compradas de 5 produtos. Em outro vetor de reais, armazene o valor unitrio de cada produto. O programa deve, ao final, mostrar o valor total a ser pago por cada produto. Considere que o ndice do vetor corresponde ao cdigo do produto

#include<stdio.h> #include<stdlib.h> main(){ int quantidade[5], i; float precoUnitario[5]; for (i=0; i<5; i++) { printf ("\nDigite a qtidade comprada do produto %d ", i); scanf ("%d", &quantidade[i]); printf ("\nDigite o preco unitario do produto %d ", i); scanf ("%f", &precoUnitario[i]); } for (i=0; i<5; i++) printf ("\nO valor total do produto %d eh %.2f\n", i, quantidade[i]*precoUnitario[i]); system("pause"); }
17

ARRAYS MULTIDIMENSIONAIS matrizes

Matrizes
Os arrays de subscritos mltiplos (tambm chamados arrays multidimensionais) podem ser usados na representao de tabelas de valores que consistem em informaes organizadas em linhas e colunas. Para identificar determinado elemento de tabela, devemos especificar dois subscritos: o primeiro (por conveno) identifica a linha do elemento, e o segundo (por conveno) identifica a coluna do elemento. Tabelas ou arrays que exigem dois subscritos para identificar determinado elemento so chamados arrays de subscrito duplo Estrutura de dados multidimensional Declarao:
Ex1: int materia [4] [40]

19

Matrizes

Deitel & Deitel (2010)

20

Matrizes

21

ARRAYS

22

ARRAYS
#include<stdio.h> void main() { int mat[2][2]; float det; int x,y; printf("Este programa calcula a determinante de uma matriz quadrada de ordem 2"); printf("\n\nEntre com os valores a da matriz:\n"); for(x=0;x<2;x++) { for(y=0;y<2;y++) { printf("mat[%d][%d]=",x+1,y+1); scanf("%d",&mat[x][y]); } /*fim do for*/ } /*fim do for*/ det=mat[0][0]*mat[1][1]-mat[1][0]*mat[0][1]; /*formula para calcular a determinante */ printf("Determinante da matriz = %f\n",det); } /*fim do programa*/

23

Referncias
Schildt, H. C completo e Total. 3 ed. 1997 Deitel e Deitel. C: como programar. 6 ed. Pearson, 2011. Mizrahi, Victorine. Treinamento em Linguagem C. So Paulo: Pearson Prentice Hall, 2008

Schildt, Herbert. C Completo e Total. Makron books


Material de apoio da Prof Bogorny- UFRGS

24

APNDICE I ORDENANDO ARRAYS

ARRAYS
A ordenao de dados (ou seja, a classificao dos dados em uma ordem em particular, crescente ou decrescente) uma das aplicaes mais importantes da computao.

Dica de desempenho Normalmente, os algoritmos mais simples oferecem o pior desempenho. Sua virtude que eles so fceis de escrever, testar e depurar. Algoritmos mais complexos normalmente so necessrios para que se obtenha o mximo de desempenho.

26

ARRAYS
A tcnica que usamos chamada de bubble sort ou sinking sort, pois os valores menores gradualmente sobem como bolhas at o topo do array, como bolhas de ar que sobem para a superfcie da gua, enquanto os valores maiores vo para o fundo do array. A tcnica fazer vrias passadas pelo array. A cada passada, pares sucessivos de elementos so comparados. Se um par est em ordem crescente (ou se os valores forem idnticos), deixamos os valores como esto. Se um par est em ordem decrescente, seus valores so trocados no array.

27

ARRAYS

Deitel & Deitel (2010)

28

APNDICE II PESQUISANDO EM ARRAYS

ARRAYS
. O processo de encontrar determinado elemento de um array chamado pesquisa. Nesta seo, discutiremos duas tcnicas de pesquisa a pesquisa linear simples e, a mais eficiente (porm mais complexa), pesquisa binria.

30

ARRAYS
A pesquisa linear compara cada elemento do array com a chave de pesquisa. Como o array no est em uma ordem em particular, o valor pode ser encontrado tanto no primeiro elemento quanto no ltimo. Na mdia, portanto, o programa ter de comparar a chave de pesquisa com metade dos elementos do array.

31

ARRAYS

Deitel & Deitel (2010)

32

ARRAYS
O mtodo de pesquisa linear funciona bem para arrays pequenos ou no ordenados. Entretanto, para arrays grandes, a pesquisa linear ineficaz. Se o array estiver ordenado, a tcnica de pesquisa binria de alta velocidade poder ser utilizada.

33

ARRAYS
No cenrio da pior das hipteses, a pesquisa de um array de 1024 elementos exige apenas 10 comparaes usando uma pesquisa binria. Dividir 1024 repetidamente por 2 gera os valores 512, 256, 128, 64, 32, 16, 8, 4, 2 e 1. O nmero 1024 (210) dividido por 2 apenas 10 vezes para chegar ao valor 1.

Dividir por 2 equivalente a uma comparao no algoritmo de pesquisa binria.

34

ARRAYS
Um array de 1048576 (220) elementos exige um mximo de 20 comparaes para que a chave de pesquisa seja encontrada. Um array de um bilho de elementos exige no mximo 30 comparaes para que a chave de pesquisa seja encontrada. um progresso tremendo em termos de desempenho em relao pesquisa linear, que exige a comparao de uma chave de pesquisa a uma mdia de metade dos elementos do array. Para um array de um bilho de elementos, esta uma diferena entre uma mdia de 500 milhes de comparaes e um mximo de 30 comparaes!

35

Referncias
Schildt, H. C completo e Total. 3 ed. 1997 Deitel e Deitel. C: como programar. 6 ed. Pearson, 2011. Mizrahi, Victorine. Treinamento em Linguagem C. So Paulo: Pearson Prentice Hall, 2008

Schildt, Herbert. C Completo e Total. Makron books


Material de apoio da Prof Bogorny- UFRGS

36

Vous aimerez peut-être aussi