Buscar

Algo e estrutura de dados vetores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 62 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 62 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 62 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores unidimensionais - arrays
• Ate´ agora: < identificador > ⇒ uma posic¸a˜o de memo´ria.
• Vetor: Estrutura de dados que associa uma sequeˆncia de
posic¸o˜es de memo´ria a um u´nico identificador.
– O tamanho da sequeˆncia e´ especificado pelo programador.
1
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores unidimensionais - arrays
• Ate´ agora: < identificador > ⇒ uma posic¸a˜o de memo´ria.
• Vetor: Estrutura de dados que associa uma sequeˆncia de
posic¸o˜es de memo´ria a um u´nico identificador.
– O tamanho da sequeˆncia e´ especificado pelo programador.
Por que usar vetores?
Exemplo 1: Ler 10 notas, calcular a me´dia das 10 notas e imprimir
as notas maiores ou iguais a me´dia. Sem usar vetores.
1
MC 102 – Algoritmos e Programac¸a˜o de Computadores
#include<stdio.h>
int main() {
float n1, n2, n3, n4, n5, n6, n7, n8, n9, n10;
float media;
printf(‘‘Digite a nota 1: ”); scanf(‘‘%f”,&n1);
printf(‘‘Digite a nota 2: ”); scanf(‘‘%f”,&n2);
printf(‘‘Digite a nota 3: ”); scanf(‘‘%f”,&n3);
printf(‘‘Digite a nota 4: ”); scanf(‘‘%f”,&n4);
printf(‘‘Digite a nota 5: ”); scanf(‘‘%f”,&n5);
printf(‘‘Digite a nota 6: ”); scanf(‘‘%f”,&n6);
printf(‘‘Digite a nota 7: ”); scanf(‘‘%f”,&n7);
printf(‘‘Digite a nota 8: ”); scanf(‘‘%f”,&n8);
printf(‘‘Digite a nota 9: ”); scanf(‘‘%f”,&n9);
printf(‘‘Digite a nota 10: ”); scanf(‘‘%f”,&n10);
media = (n1+n2+n3+n4+n5+n6+n7+n8+n9+n10)/10.0;
printf(‘‘Media = %f\n”,media);
if (n1>=media) printf(‘‘Nota 1: %f\n”,n1);
if (n2>=media) printf(‘‘Nota 2: %f\n”,n2);
if (n3>=media) printf(‘‘Nota 3: %f\n”,n3);
if (n4>=media) printf(‘‘Nota 4: %f\n”,n4);
if (n5>=media) printf(‘‘Nota 5: %f\n”,n5);
if (n6>=media) printf(‘‘Nota 6: %f\n”,n6);
if (n7>=media) printf(‘‘Nota 7: %f\n”,n7);
if (n8>=media) printf(‘‘Nota 8: %f\n”,n8);
if (n9>=media) printf(‘‘Nota 9: %f\n”,n9);
if (n10>=media) printf(‘‘Nota 10: %f\n”,n10);
return 0;
}
2
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores
• Va´riaveis compostas homogeˆneas.
– Um u´nico identificador esta´ associado a uma sequeˆncia de
posic¸o˜es de memo´ria.
– Individualizac¸a˜o e´ feita atrave´s de ı´ndices.
– Conteu´do e´ do mesmo tipo.
3
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores
• Va´riaveis compostas homogeˆneas.
– Um u´nico identificador esta´ associado a uma sequeˆncia de
posic¸o˜es de memo´ria.
– Individualizac¸a˜o e´ feita atrave´s de ı´ndices.
– Conteu´do e´ do mesmo tipo.
Sintaxe:
<tipo> <identificador>[<tamanho>];
– Sa˜o reservadas tamanho posic¸o˜es de memo´ria.
Os ı´ndices do vetor comec¸am em 0 e va˜o ate´ tamanho-1.
–• Exemplos:
int notas[50];
float nums[120];
3
MC 102 – Algoritmos e Programac¸a˜o de Computadores
• Programa das notas utilizando vetores:
int main() {
float notas[10], media=0.0;
int i;
for (i = 0; i < 10; i++) {
printf(‘‘Digite nota %d: ”, i+1);
scanf(‘‘%f”, &notas[i]);
media = media + notas[i];
}
media = media / 10.0; printf(‘‘Media = %f\n”, media);
for (i = 0; i < 10; i++)
if (notas[i] >= media)
printf(‘‘Nota %d: %f\n”, i + 1, notas[i]);
return 0;
}
4
MC 102 – Algoritmos e Programac¸a˜o de Computadores
• Programa das notas utilizando vetores, nu´mero de notas varia´vel:
#include<stdio.h>
#define MAX 20
int main() {
float notas[MAX], media=0.0;
int i, n;
do {
printf(‘‘Quantas notas sera˜o digitadas? ”); scanf(‘‘%d”, &n);
} while ((n <= 0) || (n > MAX));
for (i = 0; i < n; i++) {
printf(‘‘Digite nota %d: ”, i+1); scanf(‘‘%f”, &notas[i]);
media = media + notas[i];
}
media = media / n; printf(‘‘Media = %f\n”, media);
for (i = 0; i < n; i++)
if (notas[i] >= media)
printf(‘‘Nota %d: %f\n”, i + 1, notas[i]);
return 0;}
5
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 2: Ler uma sequeˆncia de nu´meros inteiros e, posteriormente,
imprimi-los na ordem inversa.
6
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 2: Ler uma sequeˆncia de nu´meros inteiros e, posteriormente,
imprimi-los na ordem inversa.
#include<stdio.h>
#define MAX 20
int main() {
int nums[MAX], i;
do {
printf(‘‘Quantos nu´meros sera˜o digitados? ”);
scanf(‘‘%d”, &nums[0]);
} while ((nums[0] < 0) || (nums[0] > MAX-1));
for (i = 1; i <= nums[0]; i++)
scanf(‘‘%d”, &nums[i]);
for (i = nums[0]; i >= 1; i−−)
printf(‘‘%d\n”, nums[i]);
return 0;
}
6
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 3: Dada uma sequeˆncia de nu´meros, retornar o ı´ndice do
maior elemento do vetor.
7
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 3: Dada uma sequeˆncia de nu´meros, retornar o ı´ndice do
maior elemento do vetor.
#include<stdio.h>
#define MAX 100
int main() {
int nums[MAX], n, i, imax;
do {
printf(‘‘Quantos nu´meros sera˜o digitados? ”); scanf(‘‘%d”, &n);
} while (n < 0 || n > MAX);
for (i = 0, imax=0; i < n; i++) {
scanf(‘‘%d”, &nums[i]);
if ((nums[imax] < nums[i])) imax = i;
}
if (n)
printf(‘‘´Indice do ma´ximo: %d\n”, imax);
return 0;
}
7
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Alguns cuidados
• Suponha que tenhamos: int vet[20];
– vet[-1] = 10; ou vet[20] = 3; −→ Resultado ???
– vet = 1; −→ Erro!!!
8
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Alguns cuidados
• Suponha que tenhamos: int vet[20];
– vet[-1] = 10; ou vet[20] = 3; −→ Resultado ???
– vet = 1; −→ Erro!!!
• Suponha que tenhamos tambe´m: int vet1[20];
– Para copiar os elementos de vet em vet1 :
∗ Na˜o podemos fazer vet1 = vet;
∗ E´ necessa´rio fazer a atribuic¸a˜o elemento a elemento:
for(i = 0; i < 20; i++) vet1[i] = vet[i];
8
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 4: (Busca) Fac¸a um programa que leia uma sequeˆncia de
nu´meros inteiros e posterioremente pesquise a ocorreˆncia de nu´meros
nesta sequeˆncia. Seu programa deve perguntar ao usua´rio se ele
deseja fazer uma pesquisa. Se a resposta for positiva o seu programa
deve pesquisar se o nu´mero solicitado ocorre na sequeˆncia e depois
perguntar novamente se quer pesquisar. Se a resposta for negativa o
seu programa deve encerrar a execuc¸a˜o.
9
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 4: (Busca) Fac¸a um programa que leia uma sequeˆncia de
nu´meros inteiros e posterioremente pesquise a ocorreˆncia de nu´meros
nesta sequeˆncia. Seu programa deve perguntar ao usua´rio se ele
deseja fazer uma pesquisa. Se a resposta for positiva o seu programa
deve pesquisar se o nu´mero solicitado ocorre na sequeˆncia e depois
perguntar novamente se quer pesquisar. Se a resposta for negativa o
seu programa deve encerrar a execuc¸a˜o.
Busca sequencial – versa˜o simplificada
. . .
int main() {
int seq[MAX], num, i = 1, achou = 0;
. . .
printf(‘‘Digite nu´mero a ser pesquisado: ”); scanf(‘‘%d”, &num);
while ((i <= seq[0]) && (!achou)) {
if (seq[i] == num) achou = 1;
i++;
}
. . .
9
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 5: Busca bina´ria.
• Pressupo˜e que os elementos estejam ordenados;
• Converge mais ra´pido.
10
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Exemplo 5: Busca bina´ria.
• Pressupo˜e que os elementos estejam ordenados;
• Converge mais ra´pido.
0
10
1 3
15 22 35 43 49 51 60 80 81 89 93
40?
6 12
15 22 35 4910
35 43
43
49
35 43
10
MC 102 – Algoritmos e Programac¸a˜o de Computadores
BBinaria(x, vet[0. . . n])
1. left ← 0
2. right ← n
3. middle ← (left + right)/2
4. Enquanto (x 6= vet[middle]) e (left < right)
5. Se vet[middle]< x
6. left ← middle +1
7. Sena˜o
8. right ← middle −1
9. middle ← (left + right)/2
10. Se x = vet[middle] retorne middle
11. Sena˜o retorne -1
11
MC 102 – Algoritmos e Programac¸a˜o de Computadores
SelectionSort
12
MC 102 – Algoritmos e Programac¸a˜o de Computadores
SelectionSort
• Ideia: considere todos os elementos, escolha o menor e o
coloque na primeira posic¸a˜o; agora escolha o segundo menor e o
coloque na segunda posic¸a˜o; e assim sucessivamente.
12
MC 102 – Algoritmos e Programac¸a˜o de Computadores
SelectionSort
• Ideia: considere todos os elementos, escolha o menor e o
coloque na primeira posic¸a˜o; agora escolha o segundo menor e o
coloque na segunda posic¸a˜o; e assim sucessivamente.
1. Para i← 0 ate´ n− 1 fac¸a
2. min← i
3. Para j ← i+ 1 ate´ n− 1 fac¸a
4. Se a[j] < a[min] enta˜o min← j;
5. a[min]↔ a[i]
• Exerc´ıcio: implementar o algoritmo.
12
MC 102 – Algoritmos e Programac¸a˜o de Computadores
InsertionSort
13
MC 102 – Algoritmos e Programac¸a˜o de Computadores
InsertionSort
• Ideia: e´ a mesma que usamos para ordenar uma ma˜o de
baralho. Cada elemento e´ colocado em seu lugar correto.
≤ x≤ x xx > x> x
OrdenadoOrdenado Na˜o ordenado Na˜o ordenado
13
MC 102 – Algoritmos e Programac¸a˜o de Computadores
InsertionSort
• Ideia: e´ a mesma que usamos para ordenar uma ma˜o de
baralho. Cada elemento e´ colocado em seu lugar correto.
≤ x≤ x xx > x> x
OrdenadoOrdenado Na˜o ordenado Na˜o ordenado
1. Para j ← 1 ate´ n− 1 fac¸a
2. x← a[j]
3. i← j − 1
4. Enquanto i >= 0 e a[i] > x fac¸a
5. a[i+ 1]← a[i]
6. i← i− 1
7. a[i+ 1]← x
• Exerc´ıcio: implementar o algoritmo.
13
MC 102 – Algoritmos e Programac¸a˜o de Computadores
BubbleSort
14
MC 102 – Algoritmos e Programac¸a˜o de Computadores
BubbleSort
• Ideia: dado um vetor de n elementos, a ideia e´ percorrer o
vetor n− 1 vezes e a cada passagem fazer flutuar para o topo o
maior elemento da sequeˆncia.
14
MC 102 – Algoritmos e Programac¸a˜o de Computadores
BubbleSort
• Ideia: dado um vetor de n elementos, a ideia e´ percorrer o
vetor n− 1 vezes e a cada passagem fazer flutuar para o topo o
maior elemento da sequeˆncia.
1. Para i← 0 ate´ n− 2 fac¸a
2. Para j ← n− 1 ate´ i+ 1 fac¸a
3. Se a[j − 1] > a[j] enta˜o
4. a[j]↔ a[j − 1]
• Exerc´ıcio: implementar o algoritmo.
14
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando dois vetores
15
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando dois vetores
int main() {
int ant[MAX], atual[MAX], n, i, j;
. . . \* Leitura do tamanho lo´gico *\
. . . \* Inicia ant com n+1 elementos: (0, 1, 0, . . . , 0)
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
atual[j] = ant[j-1] + ant[j];
printf(‘‘%d\t”, atual[j]);
}
printf(‘‘\n”); /* espac/ind para caber no slide */
for (j = 1; j <= i; j++) { ant[j] = atual[j]; }
}
return 0;
}
15
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando um vetor
16
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando um vetor
int main() {
int vet[MAX], i, j, n;
scanf(‘‘%d”, &n);
vet[0] = 1;
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf(‘‘%5d”, vet[j]);
}
printf(‘‘\n”);
vet[i+1] = 1;
for (j = i; j > 0; j--) {
vet[j] = vet[j]+ vet[j-1];
}
}
return 0;}
16
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
• Um caracter: ’A’ , ’b’ , ’0’ . . . .
– Para armazenar um caracter usamos o tipo char.
17
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
• Um caracter: ’A’ , ’b’ , ’0’ . . . .
– Para armazenar um caracter usamos o tipo char.
• Uma cadeia/sequeˆncia de caracteres (string):
“Isto e´ uma cadeia de caracteres.”
17
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
• Um caracter: ’A’ , ’b’ , ’0’ . . . .
– Para armazenar um caracter usamos o tipo char.
• Uma cadeia/sequeˆncia de caracteres (string):
“Isto e´ uma cadeia de caracteres.”
– Cadeias de caracteres foram usadas nas func¸o˜es printf e
scanf.
– Delimitadas por aspas duplas.
– Atenc¸a˜o: “A” 6= ’A’
17
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
18
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
• Para armazenar uma cadeia de caracteres usamos um vetor,
cujos elementos sa˜o caracteres.
char < identificador > [ < tamanho >]
– Exemplo: char cad[16];
18
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
• Para armazenar uma cadeia de caracteres usamos um vetor,
cujos elementos sa˜o caracteres.
char < identificador > [ < tamanho >]
– Exemplo: char cad[16];
• O u´ltimo s´ımbolo de uma cadeia de caracteres e´ o s´ımbolo
especial ’\0’, denominado caracter nulo (um caracter cujo valor
nume´rico e´ zero).
L i n g u a g e m C ! \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
– Note que o comprimento de uma cadeia de caracteres e´
sempre um a mais que o tamanho do texto.
18
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores de caracteres
char cad[16];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
char cad[16] = “Exemplo”;
E x e m p l o \0 ? ? ? ? ? ? ? ?
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
char cad[ ] = “Exemplo”;
E x e m p l o \0
0 1 2 3 4 5 6 7
19
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Manipulac¸a˜o de strings
• Impressa˜o: printf(“%s\n”, cad);
• Leitura: scanf(“%s”, cad)
– Na˜o tem “&”;
– Ignora brancos e tabs.
• Acesso: por elementos, cad[i] (i ≤ strlen(cad))
• Biblioteca: string.h
– strcpy(cad, “Copiando”);
– strlen(cad);
– strcat(cad, cad1);
– outras.
20
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Ler uma string sem espac¸os em branco
21
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Ler uma string sem espac¸os em branco
int main() {
char str[MAX];
int tam;
printf(‘‘Digite uma string: ”);
scanf(‘‘%s”, str);
tam = strlen(str);
printf(‘‘A string e´:”);
printf(‘‘%s\n”, str);
printf(‘‘Comprimento:”);
printf(‘‘%d.\n”, tam);
return 0;
}
21
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Ler uma string sem espac¸os em branco
int main() {
char str[MAX];
int tam;
printf(‘‘Digite uma string: ”);
scanf(‘‘%s”, str);
tam = strlen(str);
printf(‘‘A string e´:”);
printf(‘‘%s\n”, str);
printf(‘‘Comprimento:”);
printf(‘‘%d.\n”, tam);
return 0;
}
• Leitura com espac¸os:
scanf(‘‘%[ˆ\n]s”, str);
=⇒ setbuf(stdin, NULL);
fgets(str, MAX-1, stdin);
21
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Inverter os elementos de uma string
22
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Inverter os elementos de uma string
#include <stdio.h>
#include <string.h>
#define MAX 20
int main() {
char str[MAX], aux;
int i, tam;
printf(‘‘Digite uma string: ”); scanf(‘‘%s”, str); tam = strlen(str);
printf(‘‘A string original e´: %s\n”, str);
for (i = 0; i < (tam/2)-1; i++) {
aux = str[i]; str[i] = str[tam - 1 - i]; str[tam - 1 - i] = aux;
}
printf(‘‘A string invertida e´: %s\n”, str);
return 0; }
22
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Contar ocorreˆncias dos padro˜es ABC e ADE em uma seq. de letras)
23
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Contar ocorreˆncias dos padro˜es ABC e ADE em uma seq. de letras)
Programa com erros – determinem!
i = 0;
while (i < strlen(dna)- 1) {
if (dna[i] == ’A’) {
if ((i+2)< strlen(dna))
flag = ((dna[i+1] == ’B’ && dna[i+2] == ’C’) ||
(dna[i+1] == ’D’ && dna[i+2] == ’E’));
if (flag) {
num++;
flag = 0;
i = i+ 3;}
else
i++;
} }
23
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Outra soluc¸a˜o – corrijam!
24
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Outra soluc¸a˜o – corrijam!
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(){
char dna[MAX];
int i, j, tam, num = 0, flag = 0;
scanf(‘‘%s”, dna);
tam = strlen(dna);
while (i < tam - 2) {
if (dna[i] == ’A’) {
flag = (dna[i+1] == ’B’ && dna[i+2] == ’C’)
||
(dna[i+1] == ’D’ && dna[i+2] == ’E’);
}
if (flag) {
num++;
i+=3; }
else
i++;
}
printf(‘‘Nu´mero de ocorreˆncias e´ %d\n”, num);
return 0;
}
24
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores multidimensionais
25
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores multidimensionais
• Vetores bidimensionais: matrizes
< tipo > < identificador > [ linhas ] [ colunas ];
– Exemplo: int mat[3][4];
25
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores multidimensionais
• Vetores bidimensionais: matrizes
< tipo > < identificador > [ linhas ] [ colunas ];
– Exemplo: int mat[3][4];
• Ler os dados de uma matriz:
int i, j, nlinhas, ncolunas, mat[MAX][MAX];
. . .
for (i = 0; i < nlinhas; i++)
for (j = 0; j < ncolunas; j++)
scanf(‘‘%d”, &mat[i][j]);
25
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Vetores multidimensionais
• Vetores bidimensionais: matrizes
< tipo > < identificador > [ linhas ] [ colunas ];
– Exemplo: int mat[3][4];
• Ler os dados de uma matriz:
int i, j, nlinhas, ncolunas, mat[MAX][MAX];
. . .
for (i = 0; i < nlinhas; i++)
for (j = 0; j < ncolunas; j++)
scanf(‘‘%d”, &mat[i][j]);
• Generalizac¸a˜o:
< tipo > < identificador > [ dim 1 ] [ dim 2 ] . . . [dim n];
25
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para somar duas matrizes de dimenso˜es m× n
26
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para somar duas matrizes de dimenso˜es m× n
#include<stdio.h>
#define MAX 20
int main() {
int mat[MAX][MAX], mat1[MAX][MAX], m, n, i, j;
. . . \* Leitura de dados *\
for (i = 0; i < m; i++)
for (j = 0; j < n; j++) {
mat[i][j] = mat[i][j]+mat1[i][j];
}
. . . \* impressa˜o da matriz *\
return 0;}
26
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para transpor uma matriz quadrada
27
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para transpor uma matriz quadrada
#include<stdio.h>
#define MAX 20
int main() {
int mat[MAX][MAX], aux, n, i, j;
. . . \* Leitura de dados *\
for (i = 0; i < n; i++)
for (j = 0; j < i; j++) {
aux = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = aux;
}
. . . \* impressa˜o da matriz *\
return 0;}
27
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para multiplicar duas matrizes de
dimenso˜es m× p e p× n.
28
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Fac¸a um programa para multiplicar duas matrizes de
dimenso˜es m× p e p× n.
int main() {
int mat1[MAX][MAX], mat2[MAX][MAX], mat res[MAX][MAX];
int m, n, p, k, i, j;
. . . \* Leitura de dados *\
for (i = 0; i < m; i++)
for (j = 0; j < n; j++) {
mat res[i][j] = 0;
for (k=0; k<p; k++)
mat res[i][j] = mat res[i][j] + mat1[i][k]*mat2[k][j];
}
. . . \* impressa˜o da matriz *\
return 0;}
28
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando uma matriz
29
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Triaˆngulo de Pascal usando uma matriz
#include<stdio.h>
#define MAX 20
int main() {
int mat[MAX][MAX], n, i, j;
. . . \* Leitura do tamanho lo´gico *\
. . . \* Inicia matriz: uns na coluna 0 e na diagonal principal;
zeros no restante *\
for (i = 1; i < n; i++)
for (j = 1; j < i; j++)
mat[i][j] = mat[i-1][j-1] + mat[i-1][j];
. . . \* impressa˜o da matriz *\
return 0;
}
29
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Iniciando vetores com valores constantes
• Em algumas situac¸o˜es, ao criarmos uma matriz, pode ser u´til atribuir
valores ja´ na sua criac¸a˜o.
• No caso de vetores basta atribuir uma lista de valores constantes de
mesmo tipo separados por v´ırgulas e entre chaves.
– Exemplo: int vet[5] = {10, 20, 30, 40, 50};
• No caso de strings, uma constante string pode ser atribu´ıda diretamente.
– Exemplo char st1[100] = “sim isto e´ poss´ıvel”;
30
MC 102 – Algoritmos e Programac¸a˜o de Computadores
Iniciando vetores com valores constantes
• No caso de vetores bidimensionais, usa-se chaves para delimitar as
linhas:
– Exemplo:
int vet[2][5] = { {1, 20, 3, 40, 5} , {60, 7, 80, 9, 100 } } ;
• No caso tridimensional, cada ı´ndice da primeira dimensa˜o refere-se a
uma matriz completa:
– Exemplo:
int v3[2][3][4] = {
{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} },
{ {0, 0, 0, 0}, {5, 6, 7, 8}, {0, 0, 0, 0} },
};
• Generalizac¸a˜o...
31

Outros materiais