Arrays

Propaganda
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
Download