Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem C
Vetores, Matrizes, Strings
Variveis
Variveis Compostas
Compostas
So um conjunto de variveis identificadas por
um mesmo nome.
Homogneas (vetores e matrizes)
Heterogneas (estruturas ou registros)
Variveis
Variveis Compostas
Compostas Homogneas
Homogneas
Correspondem a posies da memria:
identificadas por um nico nome
individualizadas por ndices
cujo contedo de um mesmo tipo
Mdias:
6,1
2,3
9,4
5,1
Posio:
8,9 9,8
4
10
7,0
6,3
4,4
Variveis
Variveis Compostas
Compostas Homogneas
Homogneas
::
:: Exemplo
Exemplo
Prateleira
Posio do livro
0
1
0
1
2
788 598 265
145 258 369
n-1
156
196
526
Arranjos
Arranjos unidimensionais
unidimensionais
Utilizados para armazenar conjuntos de dados
cujos elementos podem ser endereados por um
nico ndice.
Tambm so conhecidos como vetores.
Arranjos
Arranjos multidimensionais
multidimensionais
Utilizados para armazenar conjuntos de dados
cujos elementos necessitam ser endereados
por mais de um ndice.
Tambm so conhecidos como arrays ou
matrizes.
Arranjos
Arranjos multidimensionais
multidimensionais
::
:: Exemplos
Exemplos
Arranjos de 2 dimenses
0
1
2
0
1
2
788 598 265
145 258 369
989 565 345
n-1
156
196
526
Arranjos
Arranjos multidimensionais
multidimensionais
::
:: Exemplos
Exemplos
Arranjo de 3 dimenses
0
Vetore
Vetore ee matrizes
matrizes Por
Por que
que usar?
usar?
Lembram da questo 2 da lista 1?
Elabore um algoritmo que leia quatro nmeros
inteiros e diferentes e mostre-os em ordem
decrescente. Utilize apenas selees encadeadas.
Vetore
Vetore ee matrizes
matrizes Por
Por que
que usar?
usar?
Programa em C para ordenao
void BubbleSort(int vetor[], int tamanho) {
int aux, i, j;
for(j=tamanho-1; j<=1; j--) {
for(i=0; i>j; i++) {
if(vetor[i]<vetor[i+1]) {
aux=vetor[i];
vetor[i]=vetor[i+1];
vetor[i+1]=aux;
}
}
}
}
Vetore
Vetore ee matrizes
matrizes Por
Por que
que usar?
usar?
Outro problema!
Escreva um algoritmo que calcule a mdia aritmtica
geral de uma classe com 4 alunos e imprima a mdia
e a quantidade de notas acima da mdia calculada.
No usar vetores.
Vetore
Vetore ee matrizes
matrizes Por
Por que
que usar?
usar?
Uma soluo sem vetores
Algoritmo MediaAritmetica
NotaAcima :inteiro
A, B, C, D MediaNota : real
NotaAcima <- 0
escreva(Informe 4 notas: )
leia(A,B,C,D)
MediaNota <- (A+B+C+D) / 4
se (A > MediaNota) entao
NotaAcima <- NotaAcima + 1
fim se;
se (B > MediaNota)entao
NotaAcima <-
<- NotaAcima + 1
fim se;
se (C > MediaNota) entao
NotaAcima <- NotaAcima + 1
fim se
se (D > MediaNota)entao
NotaAcima <- NotaAcima + 1
fim se
escreva(A mdia de: , MediaNota)
escreva(Existem , NotaAcima, notas acima da media!)
Fim Algoritmo.
Como ficaria
para 50
Alunos?
Vetore
Vetore ee matrizes
matrizes Por
Por que
que usar?
usar?
Uma soluo com vetores
Algoritmo OutroExemplo
A[50], soma, medianota : real
Notaacima : inteiro
notaacima <- 0
soma <- 0
para i de 1 ate 50 passo 1
escreva(Informe a nota do aluno: , i, : )
leia(A[i])
soma <- soma + A[i]
fim para
medianota <- soma/50
para i de 1 ate 50 passo 1 faca
se (A[i] > medianota) entao
notaacima <- notaacima + 1
fim se
fim para
escreva(A mdia de: , medianota)
escreva(Existem , notaacima, notas acima da media!)
Fim Algoritmo
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
Como declarar:
<tipo>
<tipo> <nome>
<nome> [<tamanho1>][<tamanho2>]...;
[<tamanho1>][<tamanho2>]...;
Exemplos:
float
float
int
int
char
char
float
float
VetReais[100];
VetReais[100];
Vetor[5][9];
Vetor[5][9];
Nome_cliente[50];
Nome_cliente[50];
cubo[20][12][7];
cubo[20][12][7];
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
O compilador C aloca uma poro contgua da memria
para armazenar os elementos das matrizes e vetores.
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
int
int VetInt[n];
VetInt[n];
ndices:
...
...
VetInt
zero
n1
n
n-1
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
ndices fora dos limites podem causar
comportamento anmalo do cdigo.
0
2
X1
int
int
int
int
8
X2
Vetor[6]
X1;
X1;
Vetor[6];
Vetor[6];
int
int X2
X2
Vetor[1]
Vetor[1]
Vetor[-1]
Vetor[-1]
==
==
9;
9;
2;
2;
Vetor[6]
Vetor[6] == 8;
8;
37
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
O tamanho de um vetor ou matriz prdefinido, ou seja, aps a compilao, no pode
ser mudado.
Portanto, vetores e matrizes so chamadas
estruturas de dados estticas, pois mantm o
mesmo tamanho ao longo de toda a execuo
do programa.
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Exemplos
Exemplos
Atribuir valores na declarao do vetor:
int
int vetor[5]
vetor[5] == {1,2,3,4,5};
{1,2,3,4,5};
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Exemplos
Exemplos
Colocar os nmeros de 1 a 5 num vetor:
for
for (i=0;
(i=0; i<5;
i<5; i++)
i++)
Vetor[i]
Vetor[i] == ii ++ 1;
1;
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Exemplos
Exemplos
Preencher uma matriz n m com zeros:
for
for (i=0;
(i=0; ii << N;
N; i++)
i++)
for
for (j=0;
(j=0; jj << M;
M; j++)
j++)
Matriz[i][j]
Matriz[i][j] == 0;
0;
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Exemplos
Exemplos
Copiar dados de um vetor para outro:
#define
#define TAM_MAX
TAM_MAX 10
10
double
double VetReais[TAM_MAX],
VetReais[TAM_MAX], VetCopia[TAM_MAX];
VetCopia[TAM_MAX];
for
for (i=0;
(i=0; i<TAM_MAX;
i<TAM_MAX; i++)
i++)
VetCopia[i]
VetCopia[i] == VetReais[i];
VetReais[i];
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Exemplos
Exemplos
Leitura dos dados de um vetor:
for
for (i=0;
(i=0; i<TAM_MAX;
i<TAM_MAX; i++)
i++)
{{
printf("Digite
printf("Digite um
um nmero:
nmero: ");
");
scanf("%f",
scanf("%f", &Vet[i]);
&Vet[i]);
}}
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema A
A
Determinar:
1. M[3][0]
2. M[4][2]
3. M[1][3]
4. M[5][M[0][2]]
5. M[M[3][1]][1]
6. M[4][(M[1][2]+M[3][0])]
1.
-3
4.
-2
2.
5.
3.
6.
-5
-3
-1
-1
-2
-2
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema B
B
Ler um vetor A de N elementos.
Ler um elemento K.
Verificar se o elemento K est presente no
vetor:
Se estiver, imprimir a posio onde ele foi
encontrado.
Caso contrrio, imprimir mensagem "elemento K no
encontrado".
37a
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema B
B -- Algoritmo
Algoritmo
var
vetnum: vetor[4] : inteiro
elemento, indice : inteiro
Achou : lgico
inicio
para indice de 1 a 4 faa
escreva('Digite um elemento ')
leia(vetnum.[indice])
fim para
escreva ('Digite o elemento que deseja encontrar')
leia (elemento)
achou <- falso
Indice <- 1
enquanto indice <= tamanho e achou = falso
se elemento = vetnum[indice]
achou <- verdadeiro
fimse
indice <- indice + 1
fimenquanto
se achou = verdadeiro
escreva ('Elemento encontrado na posio ' + indice -1 + 'do vetor.')
senao
escreva ('O elemento no foi encontrado.')
fimse
fimAlgoritmo
37a
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema B
B -- Programa
Programa
int vetnum[4];
int elemento=0, indice=0, achou=0;
for (indice=0;indice<3; indice++) {
printf (Digite um elemento);
scanf(%d, &vetnum[indice]);
}
printf(Digite o elemento que deseja encontrar);
scanf(%d, &elemento);
indice=0;
while (indice < 3 && !achou) {
if (elemento == vetnum[indice])
achou =1;
indice ++;
} //fim while
if (achou)
printf (Elemento encontrado na posio %d do vetor.'' , indice );
else
printf(O elemento no foi encontrado.);
37a
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema C
C
Ler 10 valores inteiros.
A seguir, inverter o vetor, trocando o 1
elemento com o ltimo, o 2 com o penltimo, e
assim sucessivamente.
Ao final, imprimir o vetor invertido.
38
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema C
C Programa
Programa
#include <stdio.h>
#include <stdlib.h>
void main() {
const n = 10;
int i,temp, a[n];
for (i=0; i<n; i++) {
printf(Entre com um nmero inteiro );
scanf(%d, &a[i]);
}
for (i=0; i<n/2; i++) {
temp = a[n-i-1];
a[n-i-1] = a[i];
a[i] = temp;
}
printf("Vetor 'a' invertidos\n");
for (i=0; i<n; i++) {
printf("a[%d] = %2d \n", i, a[i]);
}
}
38
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema D
D
39
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema D
D Algoritmo
Algoritmo
constante
TAM_MAX = 5
var
I, J,N M[1..TAM_MAX,1..TAM_MAX] : inteiro
incio
Imprima (Entre com a dimenso da matriz quadrada.
Mximo =10)
Leia (N)
para I de 1 at N faa
para J de 1 at N faa
se ( I > J ) ento
Imprima (1)
Else
Imprima (0)
fim-se
Fim-para
Imprima (salto)
fim-para
fim
38
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema E
E
BELM
FORTALEZA
MANAUS
PORTO
VELHO
RIO DE
JANEIRO
SALVADOR
SO PAULO
Fonte: DENIT
1611
5298
4397
3250
2100
2933
FORTALEZA
1611
5763
4865
2805
1389
3127
MANAUS
5298
5763
901
4374
5009
3971
PORTO VELHO
4397
4865
901
3473
4023
3070
RIO DE JANEIRO
3250
2805
4374
3473
1649
429
SALVADOR
2100
1389
5009
4023
1649
1962
SO PAULO
2933
3127
3971
3070
429
1962
BELM
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema E
E
1.
40
Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema E
E
2.
41
Strings
Strings
Uma string um vetor de caracteres, cujo final
indicado com um caractere nulo ('\0', valor inteiro zero).
Ex. char nome[40];
Por conta desse caracter pode-se fazer uma referncia
explcita a uma string:
scanf (%s, nome);
Ao definir uma string, deve-se
alm do nmero de caracteres
nulo que termina a string.
levar em considerao,
da string, o caractere
Strings
Strings
::
:: Leitura
Leitura aa partir
partir do
do teclado
teclado
Funo gets()
L string at o primeiro enter
Funo scanf()
L string at o primeiro espao em branco
Exemplo:
char nome[10];
scanf(%s, nome);
17
Strings
Strings
::
:: Escrevendo
Escrevendo para
para sada
sada
Utilizamos o %s no printf
Exemplo:
char nome[] = Joao;
printf(%s\n, nome);
17
Strings
Strings
::
:: Atribuio
Atribuio de
de valores
valores
char
char curso[15]
curso[15] == "Engenharia";
"Engenharia"; //
// Valido
Valido somente
somente na
na
//
// declaracao!
declaracao!
char
char curso[15];
curso[15];
strcpy(curso,"Engenharia");
strcpy(curso,"Engenharia");
//
// Requer
Requer biblioteca
biblioteca
//
// string.h
string.h
43
Manipulao
Manipulao de
de strings
strings
::
string.h
:: Biblioteca
Biblioteca string.h
A Linguagem C possui funes especiais para anlise e
manipulao de strings.
Tais funes esto definidas na biblioteca string.h.
A biblioteca string.h possibilita a manipulao de
strings completas (sem considerar caractere a
caractere).
Manipulao
Manipulao de
de strings
strings
::
string.h
:: Biblioteca
Biblioteca string.h
strcat(str1, str2)
Concatena str2 ao final de str1
Manipulao
Manipulao de
de strings
strings
::
string.h
:: Biblioteca
Biblioteca string.h
int valor = strcmp(str1, str2);
valor = 0, se str1 e str2 so iguais;
valor < 0, se str1 < str2;
valor > 0, se str1 > str2;
47
Manipulao
Manipulao de
de strings
strings
::
string.h
:: Biblioteca
Biblioteca string.h
strupr(str)
Converte uma string para maisculas.
strlwr(str)
Converte uma string para minsculas.
strrev(str)
Inverte o contedo de uma string.
strset(str,char)
Substitui todos os caracteres de uma string pelo caractere
especificado.
48
Manipulao
Manipulao de
de strings
strings
::
:: Converso
Converso para
para nmeros
nmeros
A seguintes funes fazem parte da biblioteca
stdlib.h
Funo
Converte
String em int
atoi(<str>)
String em float
atof(<str>)
Int em string
itoa(<int>)
49
Manipulao
Manipulao de
de strings
strings
::
:: Exerccio
Exerccio 11
Leia um texto pela entrada padro com no mximo 99
caracteres. Em seguida imprima o nmero de caracteres
digitados.
Dica: percorra o vetor at encontrar o caracter teminador \0
main()
{
char texto[100], i;
scanf("%s", texto);
for (i=0; texto[i] != '\0'; i++);
printf("%d\n", i);
}
49
Manipulao
Manipulao de
de strings
strings
::
:: Exerccio
Exerccio 22
Leia duas strings. Se as strings forem iguais escreva
strings iguais. Caso contrrio, concatene as duas
strings e imprima a string resultante.
49
Manipulao
Manipulao de
de strings
strings
::
:: Exerccio
Exerccio 22 Uma
Uma soluo
soluo
int main() {
char s1[20], s2[20];
printf("s1 = "); scanf("%s", s1);
printf("s2 = "); scanf("%s", s2);
if (strcmp(s1, s2) == 0)
printf("strings iguais!\n");
else
{
strcat(s1, s2);
printf("%s\n", s1);
}
}
49