Sei sulla pagina 1di 39

Algoritmos e Estruturas de Dados !

!EC012
Linguagem C Linguagem C
vetores, Natrizes, Strings vetores, Natrizes, Strings vetores, Natrizes, Strings vetores, Natrizes, Strings
Prof. Eduardo Prof. Eduardo Souto Souto
esouto@dcc.ufam.edu.br esouto@dcc.ufam.edu.br
Slides Slides preparados preparados pelo pelo Prof. Leandro Prof. Leandro Galvao Galvao
galvao@dcc.ufam.edu.br galvao@dcc.ufam.edu.br
Sao um conjunto de variaveis identificadas por Sao um conjunto de variaveis identificadas por
um um mesmo nome mesmo nome..
Homogneas Homogneas (vetores e matrizes) (vetores e matrizes)
variaveis Compostas variaveis Compostas variaveis Compostas variaveis Compostas
Homogneas Homogneas (vetores e matrizes) (vetores e matrizes)
Heterogneas Heterogneas (estruturas) (estruturas)
variaveis Compostas variaveis Compostas Homogneas Homogneas variaveis Compostas variaveis Compostas Homogneas Homogneas
Correspondem a posioes da memria: Correspondem a posioes da memria:
identificadas por um identificadas por um unico nome unico nome
individualizadas por individualizadas por indices indices
cujo conteudo de um cujo conteudo de um mesmo tipo mesmo tipo
6,1 2,3 9,+ 5,1 8,9 9,8 10 7,0 6,3 +,+
0 1 2 3 + 5 6 7 8 9
Notas:
Posiao:
cujo conteudo de um cujo conteudo de um mesmo tipo mesmo tipo
Posiao do livro Posiao do livro
00 11 22 .. nn--11
00 788 788 598 598 265 265 .. 156 156
variaveis Compostas variaveis Compostas Homogneas Homogneas
:: Exemplo :: Exemplo
variaveis Compostas variaveis Compostas Homogneas Homogneas
:: Exemplo :: Exemplo
11 1+5 1+5 258 258 369 369 .. 196 196
22 989 989 565 565 3+5 3+5 .. 526 526




mm--11 8+5 8+5 153 153 56+ 56+ 892 892 210 210
P
r
a
t
e
l
e
i
r
a
P
r
a
t
e
l
e
i
r
a
Utilizados para armazenar conjuntos de dados Utilizados para armazenar conjuntos de dados
cujos elementos podem ser endereados por cujos elementos podem ser endereados por um um
unico indice unico indice..
Arranjos unidimensionais Arranjos unidimensionais Arranjos unidimensionais Arranjos unidimensionais
Tambm sao conhecidos como Tambm sao conhecidos como vetores vetores..
Utilizados para armazenar conjuntos de dados Utilizados para armazenar conjuntos de dados
cujos elementos necessitam ser endereados cujos elementos necessitam ser endereados
por por mais de um indice mais de um indice..
Arranjos multidimensionais Arranjos multidimensionais Arranjos multidimensionais Arranjos multidimensionais
Tambm sao conhecidos como Tambm sao conhecidos como arrays arrays ou ou
matrizes matrizes..
00 11 22 .. nn--11
00 788 788 598 598 265 265 .. 156 156
Arranjos de Arranjos de 22 dimensoes dimensoes
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
00 788 788 598 598 265 265 .. 156 156
11 1+5 1+5 258 258 369 369 .. 196 196
22 989 989 565 565 3+5 3+5 .. 526 526





mm--11 8+5 8+5 153 153 56+ 56+ 892 892 210 210
00 11 22 33
00
11
00 11 22 33
00
11
00 11 22 33
00
11
00 11 22 33
00
11
Arranjo de Arranjo de 33 dimensoes dimensoes
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
11
22
33
00
11
22
33
11
11
22
33
22
11
22
33
33
00 11 22 33
00
11
00 11 22 33
00
11
00 11 22 33
00
11
00 11 22 33
00
11
Arranjo de Arranjo de ++ dimensoes dimensoes
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
Arranjos multidimensionais Arranjos multidimensionais
:: Exemplos :: Exemplos
11
22
33
(0,0) (0,0)
11
22
33
(0,1) (0,1)
11
22
33
(0,2) (0,2)
11
22
33
(0,3) (0,3)
00 11 22 33
00
11
22
33
(1,0) (1,0)
00 11 22 33
00
11
22
33
(1,1) (1,1)
00 11 22 33
00
11
22
33
(1,2) (1,2)
00 11 22 33
00
11
22
33
(1,3) (1,3)
Como declarar: Como declarar:
<tipo> <nome> [<tamanho1>][<tamanho2>]...; <tipo> <nome> [<tamanho1>][<tamanho2>]...;
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
Exemplos: Exemplos:
float VetReais[100];
int matriz[5][9];
char Nome_cliente[50];
float cubo[20][12][7];
float VetReais[100];
int matriz[5][9];
char Nome_cliente[50];
float cubo[20][12][7];
O compilador C aloca uma porao O compilador C aloca uma porao contigua contigua da memria da memria
para armazenar os elementos das matrizes e vetores. para armazenar os elementos das matrizes e vetores.
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
int VetInt[n]; int VetInt[n];
ndices: ndices: 00 11 22 33 ++ 55 ... ... nn--11
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
... VetInt
ndice do ndice do primeiro primeiro elemento: elemento: zero zero
ndice do ndice do ultimo ultimo elemento: elemento: n n -- 11
Quantidade Quantidade de elementos: de elementos: nn
00 11 22 33 ++ 55
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
ndices fora dos limites podem causar ndices fora dos limites podem causar
comportamento comportamento anmalo anmalo do cdigo. do cdigo.
Vetor[6] Vetor[6]
X1 X1 X2 X2
Vetor[1] = 9;
Vetor[-1] = 2;
Vetor[6] = 8;
Vetor[1] = 9;
Vetor[-1] = 2;
Vetor[6] = 8;
2 8 9
37
int X1;
int Vetor[6];
int X2
int X1;
int Vetor[6];
int X2
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
O tamanho de um vetor ou matriz O tamanho de um vetor ou matriz pr pr--
definido definido, ou seja, aps a compilaao, nao pode , ou seja, aps a compilaao, nao pode
ser mudado. ser mudado.
Portanto, vetores e matrizes sao chamadas Portanto, vetores e matrizes sao chamadas
estruturas de dados estaticas estruturas de dados estaticas, pois mantm o , pois mantm o
mesmo tamanho mesmo tamanho ao longo de toda a execuao ao longo de toda a execuao
do programa. do programa.
Atribuir valores na declaraao do vetor: Atribuir valores na declaraao do vetor:
Recurso valido somente na Recurso valido somente na declaraao declaraao do vetor. do vetor.
int vetor[5] = {1,2,3,4,5}; int vetor[5] = {1,2,3,4,5};
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
Atribuir valores na declaraao da matriz: Atribuir valores na declaraao da matriz:
float matriz[2][3] = {{1,2,3},{4,5,6}}; float matriz[2][3] = {{1,2,3},{4,5,6}};
Colocar os numeros de 1 a 5 num vetor: Colocar os numeros de 1 a 5 num vetor:
for (i=0; i<5; i++)
Vetor[i] = i + 1;
for (i=0; i<5; i++)
Vetor[i] = i + 1;
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
Colocar os numeros de 5 a 1 num vetor: Colocar os numeros de 5 a 1 num vetor:
for (i=0; i<5; i++)
Vetor[i] = 5 - i;
for (i=0; i<5; i++)
Vetor[i] = 5 - i;
Preencher uma matriz n Preencher uma matriz n m com zeros: m com zeros:
for (i=0; i < N; i++)
for (j=0; j < M; j++)
for (i=0; i < N; i++)
for (j=0; j < M; j++)
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
Matriz[i][j] = 0; Matriz[i][j] = 0;
Copiar dados de um vetor para outro: Copiar dados de um vetor para outro:
#define TAM_MAX 10
double VetReais[TAM_MAX], VetCopia[TAM_MAX];
for (i=0; i<TAM_MAX; i++)
#define TAM_MAX 10
double VetReais[TAM_MAX], VetCopia[TAM_MAX];
for (i=0; i<TAM_MAX; i++)
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
Boa pratica de programaao: Boa pratica de programaao:
Definir o tamanho de vetores com Definir o tamanho de vetores com constantes constantes
flexibiliza a manutenao do cdigo. flexibiliza a manutenao do cdigo.
for (i=0; i<TAM_MAX; i++)
VetCopia[i] = VetReais[i];
for (i=0; i<TAM_MAX; i++)
VetCopia[i] = VetReais[i];
Leitura dos dados de um vetor: Leitura dos dados de um vetor:
for (i=0; i<TAM_MAX; i++)
{
printf("Digite um nmero: ");
for (i=0; i<TAM_MAX; i++)
{
printf("Digite um nmero: ");
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Exemplos :: Exemplos
printf("Digite um nmero: ");
scanf("%f", &Vet[i]);
}
printf("Digite um nmero: ");
scanf("%f", &Vet[i]);
}
Determinar: Determinar:
1. 1. N[3|[0| N[3|[0|
2. 2. N[+|[2| N[+|[2|
3. 3. N[1|[3| N[1|[3|
+. +. N[5|[N[0|[2|| N[5|[N[0|[2||
00 11 22 33
00 11 22 33 ++
11 55 --55 33 00
22 11 11 11 11
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema AA
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema AA
+. +. N[5|[N[0|[2|| N[5|[N[0|[2||
5. 5. N[N[3|[1||[1| N[N[3|[1||[1|
6. 6. N[+|[(N[1|[2|+N[3|[0|)| N[+|[(N[1|[2|+N[3|[0|)|
22 11 11 11 11
33 --33 22 00 00
++ 00 00 11 11
55 --11 --11 --22 --22
1. 1. --33
2. 2. 11
3. 3. 00
+. +. --22
5. 5. 11
6. 6. 00
Ler um elemento Ler um elemento KK..
Ler um vetor Ler um vetor AA de de NN elementos. elementos.
verificar se o elemento verificar se o elemento KK esta presente no esta presente no
vetor: vetor:
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema BB
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema BB
vetor: vetor:
Se estiver, imprimir a posiao onde ele foi Se estiver, imprimir a posiao onde ele foi
encontrado. encontrado.
Caso contrario, imprimir mensagem "elemento Caso contrario, imprimir mensagem "elemento KK nao nao
encontrado". encontrado".
37a
Ler Ler NN valores inteiros (N valores inteiros (N SS 100) at que seja 100) at que seja
digitado o valor zero. digitado o valor zero.
A seguir, A seguir, inverter o vetor inverter o vetor, trocando o 1 , trocando o 1
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema CC
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema CC
A seguir, A seguir, inverter o vetor inverter o vetor, trocando o 1 , trocando o 1
elemento com o ultimo, o 2 com o penultimo, e elemento com o ultimo, o 2 com o penultimo, e
assim sucessivamente. assim sucessivamente.
Ao final, Ao final, imprimir imprimir o vetor invertido. o vetor invertido.
38
Faa um programa que imprima uma matriz quadrada Faa um programa que imprima uma matriz quadrada
de dimensao de dimensao NN contendo: contendo:
o numero o numero 11 nos elementos abaixo da diagonal principal nos elementos abaixo da diagonal principal
o numero o numero 0 0 nos demais elementos nos demais elementos
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema DD
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema DD
NN deve ser menor ou igual a deve ser menor ou igual a 20 20..
39
B
E
L

N
F
O
R
T
A
L
E
Z
A
N
A
N
A
U
S
P
O
R
T
O

v
E
L
H
O
R
!
O

D
E

J
A
N
E
!
R
O
S
A
L
v
A
D
O
R
S

O

P
A
U
L
O
Fonte: DEN!T
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
BELN BELN
1611 1611 5298 5298 +397 +397 3250 3250 2100 2100 2933 2933
FORTALEZA FORTALEZA
1611 1611 5763 5763 +865 +865 2805 2805 1389 1389 3127 3127
NANAUS NANAUS
5298 5298 5763 5763 901 901 +37+ +37+ 5009 5009 3971 3971
PORTO vELHO PORTO vELHO
+397 +397 +865 +865 901 901 3+73 3+73 +023 +023 3070 3070
R!O DE JANE!RO R!O DE JANE!RO
3250 3250 2805 2805 +37+ +37+ 3+73 3+73 16+9 16+9 +29 +29
SALvADOR SALvADOR
2100 2100 1389 1389 5009 5009 +023 +023 16+9 16+9 1962 1962
SO PAULO SO PAULO
2933 2933 3127 3127 3971 3971 3070 3070 +29 +29 1962 1962
B
E
L

N
F
O
R
T
A
L
E
Z
A
N
A
N
A
U
S
P
O
R
T
O

v
E
L
H
O
R
!
O

D
E

J
A
N
E
!
R
O
S
A
L
v
A
D
O
R
S

O

P
A
U
L
O
1. 1. Construir um algoritmo que leia a tabela anterior e Construir um algoritmo que leia a tabela anterior e
informe ao usuario a distancia entre duas cidades informe ao usuario a distancia entre duas cidades
fornecidas por ele, at que ele fornea duas cidades fornecidas por ele, at que ele fornea duas cidades
iguais (origem e destino). iguais (origem e destino).
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
+0
2. 2. Construir um algoritmo que permita ao usuario Construir um algoritmo que permita ao usuario
informar varias cidades, at inserir informar varias cidades, at inserir xx xx", e que ", e que
imprima a distancia total para cumprir todo o percurso imprima a distancia total para cumprir todo o percurso
especificado entre as cidades fornecidas. especificado entre as cidades fornecidas.
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
vetores e Natrizes na Linguagem C vetores e Natrizes na Linguagem C
:: Problema :: Problema EE
+1
Uma string um vetor de caracteres, cujo final Uma string um vetor de caracteres, cujo final
indicado com um indicado com um caractere nulo caractere nulo (valor inteiro zero). (valor inteiro zero).
O terminador nulo tambm pode ser escrito como O terminador nulo tambm pode ser escrito como ''0'. 0'.
Ao definir uma string, deve Ao definir uma string, deve--se levar em consideraao, se levar em consideraao,
Strings Strings Strings Strings
Ao definir uma string, deve Ao definir uma string, deve--se levar em consideraao, se levar em consideraao,
alm do numero de caracteres da string, o caractere alm do numero de caracteres da string, o caractere
nulo que termina a string. nulo que termina a string.
Funao Funao gets() gets()
L string at o L string at o primeiro enter primeiro enter
Funao Funao scanf() scanf()
Strings Strings
:: :: Leitura Leitura a partir do teclado a partir do teclado
Strings Strings
:: :: Leitura Leitura a partir do teclado a partir do teclado
Funao Funao scanf() scanf()
L string at o L string at o primeiro espao em branco primeiro espao em branco
17
char curso[15] = "Engenharia"; // Valido somente na
// declaracao!
char curso[15] = "Engenharia"; // Valido somente na
// declaracao!
Strings Strings
:: Atribuiao de valores :: Atribuiao de valores
Strings Strings
:: Atribuiao de valores :: Atribuiao de valores
char curso[15];
strcpy(curso,"Engenharia"); // Requer biblioteca
// string.h
char curso[15];
strcpy(curso,"Engenharia"); // Requer biblioteca
// string.h
+3
A Linguagem C possui funoes especiais para analise e A Linguagem C possui funoes especiais para analise e
manipulaao de manipulaao de strings strings..
Tais funoes estao definidas na biblioteca Tais funoes estao definidas na biblioteca string.h string.h..
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
string.h string.h
A biblioteca A biblioteca string.h string.h possibilita a manipulaao de possibilita a manipulaao de
strings completas (sem considerar caractere a strings completas (sem considerar caractere a
caractere). caractere).
strcat(str1, str2) strcat(str1, str2)
Concatena str2 ao final de str1 Concatena str2 ao final de str1
int tam = strlen(str1); int tam = strlen(str1);
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
Retorna o tamanho de str1 Retorna o tamanho de str1
int valor = strcmp(str1, str2); int valor = strcmp(str1, str2);
valor = 0, se str1 e str2 sao iguais; valor = 0, se str1 e str2 sao iguais;
valor < 0, se str1 < str2; valor < 0, se str1 < str2;
valor > 0, se str1 > str2; valor > 0, se str1 > str2;
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
int valor = strcmpi(str1, str2); int valor = strcmpi(str1, str2);
Nesmo que Nesmo que strcmp strcmp, mas nao sensivel ao caso , mas nao sensivel ao caso
+7
strupr(str) strupr(str)
Converte uma string para maiusculas. Converte uma string para maiusculas.
strlwr(str) strlwr(str)
Converte uma string para minusculas. Converte uma string para minusculas.
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
Nanipulaao de strings Nanipulaao de strings
:: Biblioteca :: Biblioteca string.h string.h
strrev(str) strrev(str)
!nverte o conteudo de uma string. !nverte o conteudo de uma string.
strset(str,char) strset(str,char)
Substitui todos os caracteres de uma string pelo caractere Substitui todos os caracteres de uma string pelo caractere
especificado. especificado.
+8
A seguintes funoes fazem parte da biblioteca A seguintes funoes fazem parte da biblioteca
stdlib.h stdlib.h
Funo Funo Converte Converte
Nanipulaao de strings Nanipulaao de strings
:: Conversao para numeros :: Conversao para numeros
Nanipulaao de strings Nanipulaao de strings
:: Conversao para numeros :: Conversao para numeros
atoi( atoi(<str> <str>))
String em int String em int
atof( atof(<str> <str>))
String em float String em float
itoa( itoa(<int> <int>))
!nt em string !nt em string
+9
A Linguagem C possui algumas funoes especiais para A Linguagem C possui algumas funoes especiais para
analise e manipulaao de caracteres. analise e manipulaao de caracteres.
Tais funoes estao definidas na biblioteca Tais funoes estao definidas na biblioteca ctype.h ctype.h
Nanipulaao de caracteres Nanipulaao de caracteres Nanipulaao de caracteres Nanipulaao de caracteres
ctype.h ctype.h
A biblioteca A biblioteca ctype.h ctype.h possibilita a possibilita a manipulaao de manipulaao de
caracteres caracteres, nao de strings inteiras. , nao de strings inteiras.
Funao Funao toupper
Converte seu argumento para uma letra Converte seu argumento para uma letra maiuscula maiuscula::
<var1> = toupper(var2); <var1> = toupper(var2);
Nanipulaao de caracteres Nanipulaao de caracteres
:: Funoes :: Funoes tolower tolower e e toupper toupper
Nanipulaao de caracteres Nanipulaao de caracteres
:: Funoes :: Funoes tolower tolower e e toupper toupper
Funao Funao tolower
Converte seu argumento para uma letra Converte seu argumento para uma letra minuscula minuscula::
<var1> = tolower(var2); <var1> = tolower(var2);
++
Funo Funo Testa se seu argumento um Testa se seu argumento um
isalnum isalnum caractere caractere alfanumrico alfanumrico
isalpha isalpha caractere caractere alfabtico alfabtico
Nanipulaao de caracteres Nanipulaao de caracteres
:: Outras funoes :: Outras funoes
Nanipulaao de caracteres Nanipulaao de caracteres
:: Outras funoes :: Outras funoes
isascii isascii caractere caractere ASC!! ASC!! (0 a 127) (0 a 127)
iscntrl iscntrl caractere de controle ( caractere de controle (00--0x1F 0x1F ou ou 0x7F 0x7F))
isgraph isgraph
caractere imprimivel na tela ( caractere imprimivel na tela (nao leva nao leva espao em espao em
consideraao) consideraao)
isprint isprint
caractere imprimivel na tela ( caractere imprimivel na tela (leva leva espao em espao em
consideraao) consideraao)
+5
Funo Funo Testa se seu argumento um Testa se seu argumento um
islower islower caractere caractere minusculo minusculo
isupper isupper caractere maiusculo caractere maiusculo
Nanipulaao de caracteres Nanipulaao de caracteres
:: Outras funoes :: Outras funoes
Nanipulaao de caracteres Nanipulaao de caracteres
:: Outras funoes :: Outras funoes
ispunct ispunct caractere de caractere de pontuaao pontuaao
isspace isspace caractere de caractere de espao espao, , tabulaao tabulaao
isdigit isdigit caractere numrico ( caractere numrico (00--99))
isxdigit isxdigit digito hexadecimal ( digito hexadecimal (00--99, , aa--ff ou ou AA--FF))
+6
Questoes Questoes Questoes Questoes

Potrebbero piacerti anche