Você está na página 1de 46

ICC

Linguagem C
Vetores, Matrizes, Strings

Prof. Jos Henrique

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

989 565 345

n-1
156

196
526

m-1 845 153 564 892 210

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

m-1 845 153 564 892 210

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

ndice do primeiro elemento:


ndice do ltimo elemento:
Quantidade de elementos:

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};

Atribuir valores na declarao da matriz:


float
float matriz[2][3]
matriz[2][3] == {{1,2,3},{4,5,6}};
{{1,2,3},{4,5,6}};

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;

Colocar os nmeros de 5 a 1 num vetor:


for
for (i=0;
(i=0; i<5;
i<5; i++)
i++)
Vetor[i]
Vetor[i] == 55 -- i;
i;

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];

Boa prtica de programao:


Definir o tamanho de vetores com constantes
flexibiliza a manuteno do cdigo.

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

Faa um programa que imprima uma matriz quadrada


de dimenso N contendo:

o nmero 1 nos elementos abaixo da diagonal principal

o nmero 0 nos demais elementos

N deve ser menor ou igual a 20.

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.

Construir um algoritmo que leia a tabela anterior e


informe ao usurio a distncia entre duas cidades
fornecidas por ele, at que ele fornea duas cidades
iguais (origem e destino).

40

Vetores
Vetores ee Matrizes
Matrizes na
na Linguagem
Linguagem C
C
::
:: Problema
Problema E
E
2.

Construir um algoritmo que permita ao usurio


informar vrias cidades, at inserir xx, e que
imprima a distncia total para cumprir todo o percurso
especificado entre as cidades fornecidas.

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

int tam = strlen(str1);


Retorna o tamanho 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;

int valor = strcmpi(str1, str2);


Mesmo que strcmp, mas no sensvel ao caso

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

Você também pode gostar