Académique Documents
Professionnel Documents
Culture Documents
Informtica
Variveis Indexadas
Prof. Thiago Oliveira dos Santos
Departamento de Informtica
Universidade Federal do Esprito Santo
2015
1
Introduo
Variveis indexadas unidimensionais (Vetores)
Strings
Variveis indexadas bidimensionais (Matrizes)
Introduo
Informtica
Variveis
Variveis so abstraes que facilitam acesso memria
So representadas por um smbolo
Limitaes das Variveis Comuns
No permitem armazenar vrios valores de mesmo tipo
Exemplo de problemas desse tipo
Dado a idade de um grupo de pessoas, contar numero de
indivduos acima da media
Esse tipo de problema requer soluo complexa sem uso de
recursos adicionais
3
Introduo
Informtica
Variveis Indexadas
Possuem um mesmo nome
So variveis que so diferenciadas atravs de um ndice
Podem possuir mais de uma dimenso
Variveis indexadas unidimensionais (Vetores)
Variveis indexadas bidimensionais (Matriz)
Variveis indexadas multidimensionais
Introduo
Informtica
Memria do computador
1
Nota5
Nota50
Nota100
Nota10
Nota20
Notas
10
20
2
Nota2
Nome
Segue a mesma regra das variveis comuns
Declarao
Deve ser feita antes do uso (geralmente no incio do bloco)
Sintaxe
<tipo> <nome>[<tamanho>];
<tipo> = tipo de dados vlido
<nome> = nomes da varivel
<tamanho> = tamanho do vetor
Exemplo
float velocidades[10]; int idades[30], char nome[10];
6
Inicializao
Pode ser feita em lote com o operador {}
Exemplo
float velocidades[3] = { 100.0, 80.0, 50.0 };
int num[4] = { 1, 2, 3, 4 };
Exemplo
int main()
{
int n[3];
printf("Digite um num\n");
scanf("%d", &n[0]);
printf("Digite um num\n");
scanf("%d", &n[1]);
printf("Digite um num\n");
scanf("%d", &n[2]);
Acesso Iterativo
Possibilita percorrer uma seqncia de variveis
Exemplo
#define TAM 10
int main()
{
int i, numeros[TAM];
printf("Informe 3 numeros inteiros:\n");
for (i = 0; i < TAM; i++)
scanf("%d", &numeros[i]);
printf("Ordem inversa:\n");
for (i = TAM-1; i >= 0; i--) {
printf("%d\n", numeros[i]);
}
return 0;
10
Criao Dinmica
O tamanho definido durante a execuo
Exemplo
int main()
{
int i, tam;
printf("Informe a quantidade de numeros:\n");
scanf("%d", &tam);
int numeros[tam];
printf("Informe %d numeros inteiros:\n", tam);
for (i = 0; i < tam; i++)
scanf("%d", &numeros[i]);
printf("Ordem inversa:\n");
for (i = tam-1; i >= 0; i--) {
printf("%d\n", numeros[i]);
}
return 0;
}
11
Uso de Vetores
Impresso dos alunos acima da mdia da turma
Exemplo
int main()
{
int i, tam; float soma = 0, media;
printf("Informe a quantidade de numeros:\n");
scanf("%d", &tam);
int numeros[tam];
printf("Informe %d numeros inteiros:\n", tam);
for (i = 0; i < tam; i++){
scanf("%d", &numeros[i]);
soma = soma + numeros[i];
}
media = soma / (float)tam;
printf("Alunos acima da media, %f:\n", media);
for (i = 0; i < tam; i++) {
if (numeros[i] > media){
printf("i %d => nota %d\n", i, numeros[i]);
}
}
return 0;
}
12
Organizao em Memria
int Idades[3]
int IdadesTemp
33
Idades[0]
20
Idades[1]
50
Idades[2]
80
IdadesTemp
13
Unidimensional
Vetores podem ser passados como argumento para funo
Existem 3 formas
Exemplo para um vetor int vetor[10];
void func(int* vet);
void func(int vet[]);
void func(int vet[10]); CUIDADO! VETOR NO ALOCADO
14
Unidimensional
Exemplo 1
void PreencheVetor(int v[], int tam){
int i;
printf("Informe %d numeros inteiros:\n", tam);
for (i = 0; i < tam; i++)
scanf("%d", &v[i]);
}
void ImprimeOrdemInversa(int v[], int tam){
int i;
printf("Ordem inversa:\n");
for (i = tam-1; i >= 0; i--) {
printf("%d\n", v[i]);
}
}
15
Unidimensional
Exemplo 1
int main()
{
int tam;
printf("Informe a quantidade de numeros:\n");
scanf("%d", &tam);
int numeros[tam];
PreencheVetor(numeros, tam);
ImprimeOrdemInversa(numeros, tam);
return 0;
}
16
Unidimensional
Exemplo 2
Ordenar um vetor de inteiros
17
Unidimensional
Exemplo 2
Ordenar um vetor de inteiros
void OrdeneCrescente(int * vet, int qtd){
int i, idxMenor, aux;
for(i = 0; i < qtd-1; i++)
{
idxMenor = AcharMenorEntreAeB(vet, i+1, qtd-1);
if (EhMenorAqB(vet[idxMenor], vet[i]) ){
aux = vet[idxMenor];
vet[idxMenor] = vet[i];
vet[i] = aux;
}
}
18
Unidimensional
Exemplo 2
Ordenar um vetor de inteiros
int AcharMenorEntreAeB(int * vet, int a, int b){
int i, idx, menor;
menor = vet[a];
idx = a;
for(i = a+1; i <= b; i++)
{
if ( EhMenorAqB(vet[i], menor)){
menor = vet[i];
idx = i;
}
}
return idx;
}
19
Unidimensional
Exemplo 2
Ordenar um vetor de inteiros
int EhMenorAqB(int a, int b){
return a < b;
}
20
Vetores de Structs
Informtica
Unidimensional
Vetores podem ser de qualquer tipo
Inclusive de um tipo definido pelo usurio
21
Vetores de Structs
Informtica
Unidimensional
void OrdeneDatasCrescente(tData * vet, int qtd){
int i, idxMenor;
tData aux;
for(i = 0; i < qtd-1; i++)
{
idxMenor = AcharMenorEntreAeB(vet, i+1, qtd-1);
if ( EhMenorDataAqDataB(vet[idxMenor], vet[i]) ){
aux = vet[idxMenor];
vet[idxMenor] = vet[i];
vet[i] = aux;
}
}
}
22
Vetores de Structs
Informtica
Unidimensional
int AcharMenorEntreAeB(tData * vet, int a, int b){
int i, idx;
tData menor;
menor = vet[a];
idx = a;
for(i = a+1; i <= b; i++)
{
if ( EhMenorDataAqDataB(vet[i], menor) ){
menor = vet[i];
idx = i;
}
}
return idx;
}
23
Vetores de Structs
Informtica
Unidimensional
24
Strings
Informtica
Cadeia de Caracteres
Geralmente utilizados na entrada e sada de dados
Pode ser considerado um novo tipo
Estrutura de dados: vetores do tipo char
Toda string terminada com um caractere especial \0
Deve ser utilizado usando operaes prprias
Estado
\0
...
...
Strings
Informtica
Inicializao
Pode ser feita em lote com o operadores {} ou
Exemplo
char umNome[10] = { 'J', 'o', 'a', 'o', '\0' };
char outroNome[10] = "Joao";
J inclui o \0, mas tem que haver espao
Entrada
Pode ser feita com %s no comando scanf
Exemplo: scanf(%s, umNome); //Note a retirada do &
Cuidado! Acesso inseguro.
Sada
Pode ser feita com %s no comando printf
String
Informtica
Manipulao
Exemplo
int main()
{
int i = 0;
char nome[100] = "Thiago Oliveira dos Santos\n";
printf("Antes: %s", nome);
while (nome[i] != '\0'){
if (nome[i] == ' ')
nome[i] = '_';
i++;
}
printf("Depois: %s", nome);
return 0;
}
27
Vetores em Structs
Informtica
Unidimensional
Se comportam ligeiramente diferente de vetores puros
Assumem comportamento da struct
Atribuio de structs contendo vetores permitida
Copia todo o contedo
Exemplo
typedef struct{
char nome[100];
int idade;
} tPessoa;
int main()
{
tPessoa eu = {"Thiago Oliveira dos Santos", 35}, voce = {"Voce", 25};
28
Declarao
Sintaxe
<tipo> <nome>[<tamanho_n>] [<tamanho_m>];
Exemplo
float matriz[10][10]; int imagem[30][30];
29
ndices vo de 0 a n-1
Exemplo
float idadeTemp = matriz[0][0];
30
Acesso Iterativo
Exemplo
int i, j, matriz[2][2];
printf("Informe 4 nmeros inteiros:\n");
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++)
scanf("%d", &matriz[i][j]);
printf("Matriz:\n");
for (i = 0; i < 2; i++) {
printf("\t");
for (j = 0; j < 2; j++) {
printf("%d ", matriz[i][j]);
}
printf("\n");
}
31
int matriz[2][2]
int item
matriz[0][0]
0
23
matriz[0][1]
31
23
233
matriz[1][0]
233
43
43
matriz[1][1]
80
item
32
Inicializao
Exemplo
int matriz[2][2] = { 1, 2, 3, 4 };
char vetorStrings[3][10] = { "Joao", "Maria", "Jose" };
33
Caractersticas
Equivalente a bidimensional
Inclui [] adicionais na declarao e no acesso a dados
Exemplo
float matriz3D[10][10][10]; int multiDim[30][20][10][10];
34
Bidimensional e Multidimensional
Existe duas formas
Exemplo para um vetor int vetor[10][10];
void func(int vet[10][10]);
void func(int vet[][10]);
35
Perguntas???
Informtica
36