Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação 9099 : Bioengenharia 10135 : Ciências Biomédicas Cap. 6 — Arrays Module Introduction 5375, 6619, 9099, 10135 Programação Sumário: Arrays 5375, 6619, 9099, 10135 Programação Arrays Taxonomia de tipos de dados Tipos de Dados void Tipos Numéricos Tipos Simples Tipos Compostos Tipos Apontadores Tipos Enumerados * enum char int float double array struct 3 FILE 5375, 6619, 9099, 10135 Programação Arrays Modelo de programação imperativa: dados + funções #include <stdio.h> int main() { int x; float y; funções printf(“Escreva um valor inteiro: ”); scanf(“%d”,&x); y=x+5.4; printf(“O valor de y=%f¥n”,y); } printf! estruturas de dados x y 5.4 scanf! printf! + = 5375, 6619, 9099, 10135 Programação Arrays Modelo de programação imperativa (cont.) Funções Programa Principal Subprogramas Estruturas de Dados Dados Compostos Instruções Compostas Dados Simples Instruções Simples 5375, 6619, 9099, 10135 Programação Arrays Características gerais dos tipos de dados compostos #include <stdio.h> int main() { int soma = 0; int X[5]= {4,5,7,-14,20}; for (i=1;i<=5;i++) soma = soma + X[i]; printf(“SOMA = %i\n”,soma); return 0; } 5375, 6619, 9099, 10135 Programação Arrays Arrays (ou Tabelas) 5 4 7 X[0] X[1] X[2] tipo nome [ = tamanho { ] ; val1, val2, …, valN } X 5375, 6619, 9099, 10135 Programação Arrays Arrays: características específicas X[0] X[1] X[2] Acesso para escrita Acesso para leitura 5 4 7 X 5375, 6619, 9099, 10135 Programação Arrays Arrays: características específicas (cont.)) i→ 0 x[0] j ↓ 0 i→ 0 1 2 x[1] x[2] 1 array 1-dimensional 2 x[0][0] x[0][1] x[0][2] 1 x[1][0] x[1][1] x[1][2] 2 x[2][0] x[2][1] x[2][2] array 2-dimensional 5375, 6619, 9099, 10135 Programação Arrays Exemplo: soma de 2 vectores em R2 #include <stdio.h>! int main()! {! float p[2], q[2]; ! float s[2];! ! ! ! ! ! ! !// dois vectores! !// vector soma! scanf(“%f%f”,&p[0],&p[1]); scanf(“%f%f”,&q[0],&q[1]); !// lê 1º vector! !// lê 2º vector! s[0] = p[0]+q[0]); ! s[1] = p[1]+q[1]; ! !// calcula elementos do! !// vector soma! ! ! ! ! printf(“O vector soma=[%f %f]\n”,s[0],s[1]);! return 0;! }! 5375, 6619, 9099, 10135 Programação Arrays Exemplo: soma de 2 matrizes 2x2 #include <stdio.h>! int main() { float p[2][2], q[2][2]; float s[2][2]; // duas matrizes // matriz soma scanf(“%f%f%f%f”,&p[0][0],&p[0][1],&p[1][0],&p[1][1]); scanf(“%f%f%f%f”,&q[0][0],&q[0][1],&q[1][0],&q[1][1]); s[0][0] s[0][1] s[1][0] s[1][1] = = = = p[0][0]+q[0][0]); // calcula elementos do p[0][1]+q[0][1]); // vector soma p[1][0]+q[1][0]); p[1][1]+q[1][1]); printf(“Matriz soma:\n”); printf(“%f %f\n”,s[0][0],s[0][1]); printf(“%f %f\n”,s[1][0],s[1][1]); } return 0; 5375, 6619, 9099, 10135 Programação Arrays Passagem de um array como argumento de uma função ATENÇÃO: O nome do array funciona como endereço do 1º elemento do array, ou seja, a sua localização em memória. CONSEQUÊNCIA: Quando se passa um array para uma função, o que estamos a passar é o endereço do 1º elemento, não o array no seu todo. 5375, 6619, 9099, 10135 Programação #include <stdio.h> int maximo( int a[], int N ); int main(void) { int x[5] = {6,3,4,8,12}; int m; m = maximo(x,5); } printf(“Maximo = %d\n”, m); return 0; int maximo( int a[], int N ) { int i, max; max=a[0]; for ( i=1; i<N; i++) if (a[i]>max) max = a[i]; } return max; i→ x! 0 1 2 3 4 6 3 4 8 12 main m &x[0] a 5 N 12 max Exemplo Arrays maximo 5375, 6619, 9099, 10135 Programação Arrays Conclusões O que já sabíamos antes deste capítulo: • • Ao passar uma variável para uma função, o que se passa é o seu valor. O que passámos a saber com este capítulo: • Mas, se a variável representar um array, o que se passa é o seu endereço, ou seja, o endereço do seu 1º elemento. • Neste caso, passamos a ter duas variáveis (uma em cada função) que representam o mesmo array. Portanto, o array pode ser acedido e, consequentemente, partilhado por duas funções diferentes. i→ x! 0 1 2 3 4 6 3 4 8 12 main m &x[0] a 5 N 12 max • maximo FIM