Nem sempre, a manipulação de dados é feita por simples ... · 2014 ©MdaS Vetores, Matrizes e...
Transcript of Nem sempre, a manipulação de dados é feita por simples ... · 2014 ©MdaS Vetores, Matrizes e...
Vetores, Matrizes e Strings | Programação de Computadores 1 de 272014 © MdaS
Estruturas de DadosEstruturas de DadosEstruturas de DadosEstruturas de Dados
� Nem sempre, a manipulação de dados é feita por simples elementos...
Vetores, Matrizes e Strings | Programação de Computadores 2 de 272014 © MdaS
Estruturas de DadosEstruturas de DadosEstruturas de DadosEstruturas de Dados
� Estruturas de dados permitem que um conjunto de valores em comum sejam agrupados� De acordo com tipo e dimensão das estruturas
� Principais tipos de estruturas de dados são:� Números
� Vetores (unidimensional)� Matrizes (multidimensional)
� Caracteres� Strings (palavras ou cadeias de caracteres)
� Personalizado� Registros (structs)
Vetores, Matrizes e Strings | Programação de Computadores 3 de 272014 © MdaS
VetoresVetoresVetoresVetores
� São um conjunto de dados de um mesmo tipo que são armazenados de acordo com um índice� Assemelham-se às matrizes linha e coluna
� Diferentemente da Matemática, o primeiro elemento de um vetor possui o índice 0
v[1] = 54 v[0] = 12
v[2] = -63 v[4] = -81
v
1430-818-635412
[6][5][4][3][2][1][0]
Vetores, Matrizes e Strings | Programação de Computadores 4 de 272014 © MdaS
ObservaObservaObservaObservaççççãoãoãoão
� Muito cuidado ao confundir vetor (Programação) com vetor (Matemática)!!
� Os significados são diferentes, apesar do nome VETOR ser inspirado nos valores ordenados de um vetor multidimensional no Rn
Vetores, Matrizes e Strings | Programação de Computadores 5 de 272014 © MdaS
DeclaraDeclaraDeclaraDeclaraçççção de um Vetorão de um Vetorão de um Vetorão de um Vetor
� Os vetores são declarados na seguinte sequência:� Tipo primitivo dos elementos
� int
� float
� char
� Nome do vetor� Assim como é feito uma variável
� Quantidade de elementos do vetor� Deve ser colocado entre colchetes: [numero]
� Com um número já afixado de elementos
int notas[10];
float temperatura[50];
Vetores, Matrizes e Strings | Programação de Computadores 6 de 272014 © MdaS
AtribuiAtribuiAtribuiAtribuiçççção dos Elementos de Vetorão dos Elementos de Vetorão dos Elementos de Vetorão dos Elementos de Vetor
� Pode ser feita:� Atribuição
� Leitura
nota[0] = 7;
nota[1] = 4;
nota[2] = 6;
printf("Entre com a 1a. Temperatura: ");
scanf("%f", &temperatura[0]);
printf("Entre com a 2a. Temperatura: ");
scanf("%f", &temperatura[1]);
printf("Entre com a 3a. Temperatura: ");
scanf("%f", &temperatura[2]);
Vetores, Matrizes e Strings | Programação de Computadores 7 de 272014 © MdaS
AtribuiAtribuiAtribuiAtribuiçççção dos Elementos de Vetorão dos Elementos de Vetorão dos Elementos de Vetorão dos Elementos de Vetor
� Para evitar uma grande quantidade de comandos repetitivos, pode ser utilizada uma estrutura de repetição
printf("Entre com a 1a. Temperatura: ");
scanf("%f", temperatura[0]);
printf("Entre com a 2a. Temperatura: ");
scanf("%f", temperatura[1]);
printf("Entre com a 3a. Temperatura: ");
scanf("%f", temperatura[2]);
printf("Entre com a 4a. Temperatura: ");
scanf("%f", temperatura[3]);
printf("Entre com a 5a. Temperatura: ");
scanf("%f", temperatura[4]);
printf("Entre com a 6a. Temperatura: ");
scanf("%f", temperatura[5]);
for (i = 0; i < 50; i++)
{
printf("Entre com a %da. Temperatura: ", i);
scanf("%f", temperatura[i]);
}
Vetores, Matrizes e Strings | Programação de Computadores 8 de 272014 © MdaS
ExemploExemploExemploExemplo
� Calcular e exibir o produto escalar entre dois vetores de dimensão 10, inseridos pelo usuário
#include <stdio.h>
#include <stdlib.h>
float v[10], w[10];
float prod;
int i;
int main()
{
printf("Vetor v:\n");
for (i = 0; i < 10; i++)
scanf("%f", &v[i]);
printf("Vetor w:\n");
for (i = 0; i < 10; i++)
scanf("%f", &w[i]);
prod = 0;
for (i = 0; i < 10; i++)
prod += v[i]*w[i];
printf("Produto escalar = %f\n", prod);
system("PAUSE");
}
Vetores, Matrizes e Strings | Programação de Computadores 9 de 272014 © MdaS
ExercExercExercExercíííícioscioscioscios
1. Dado um vetor de números aleatórios de dimensão N, calcule a soma de seus elementos ímpares
2. Uma vez lida uma sequência de 10 números inteiros, imprimi-la na ordem inversa à da leitura.
3. Utilize um vetor para armazenar as notas de um aluno nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a média final obtida. Exiba a média e a diferença na tela.
4. Dado um número inicial e uma razão, calcule e exiba os termos de uma PG (Progressão Geométrica), armazenando-os em um vetor de tamanho 12.
Vetores, Matrizes e Strings | Programação de Computadores 10 de 272014 © MdaS
MatrizesMatrizesMatrizesMatrizes
� Baseia-se na ideia da matriz matemática
� Vetor de vetores� Exemplo:
19-234123112054[1]
6229462-54-28911[2]
12117653-234678993435[3]
90-2423121-58-45[4]
824-82109-253[5]
5674-2-90862737[6]
-1430-818-635412[0]
A[][] [6][5][4][3][2][1][0]
Vetores, Matrizes e Strings | Programação de Computadores 11 de 272014 © MdaS
DeclaraDeclaraDeclaraDeclaraçççção de uma Matrizão de uma Matrizão de uma Matrizão de uma Matriz
� As matrizes são declaradas na seguinte sequência:� Tipo primitivo dos elementos
� int
� float
� char
� Nome da matriz� Assim como é feito uma variável
� Quantidade de elementos da matriz� Deve ser colocado entre colchetes: [numero][numero]
� Com um número já afixado de elementos� Pode ser feita de duas ou mais dimensões
int A[7][7];
float fluxo[30][60];
float data[40][40][40];
Vetores, Matrizes e Strings | Programação de Computadores 12 de 272014 © MdaS
AtribuiAtribuiAtribuiAtribuiçççção dos Elementos de Matrizão dos Elementos de Matrizão dos Elementos de Matrizão dos Elementos de Matriz
� Pode ser feita:� Atribuição
A[0][0] = 12;
A[0][1] = 54;
A[0][2] = -63;
A[0][3] = 8;
A[0][4] = -81;
19-234123112054[1]
6229462-54-28911[2]
12117653-234678993435[3]
90-2423121-58-45[4]
824-82109-253[5]
5674-2-90862737[6]
-1430-818-635412[0]
A[][] [6][5][4][3][2][1][0]
A[1][6]A[1][5]A[1][4]A[1][3]A[1][2]A[1][1]A[1][0][1]
A[2][6]A[2][5]A[2][4]A[2][3]A[2][2]A[2][1]A[2][0][2]
A[3][6]A[3][5]A[3][4]A[3][3]A[3][2]A[3][1]A[3][0][3]
A[4][6]A[4][5]A[4][4]A[4][3]A[4][2]A[4][1]A[4][0][4]
A[5][6]A[5][5]A[5][4]A[5][3]A[5][2]A[5][1]A[5][0][5]
A[6][6]A[6][5]A[6][4]A[6][3]A[6][2]A[6][1]A[6][0][6]
A[0][6]A[0][5]A[0][4]A[0][3]A[0][2]A[0][1]A[0][0][0]
A[][] [6][5][4][3][2][1][0]
Vetores, Matrizes e Strings | Programação de Computadores 13 de 272014 © MdaS
AtribuiAtribuiAtribuiAtribuiçççção dos Elementos de Matrizão dos Elementos de Matrizão dos Elementos de Matrizão dos Elementos de Matriz
� Na leitura, podem ser utilizadas estruturas de repetição
printf("Entre com os elementos da matriz:\n");
scanf("%f", &fluxo[0][0]);
scanf("%f", &fluxo[0][1]);
scanf("%f", &fluxo[0][2]);
...
scanf("%f", &fluxo[29][58]);
scanf("%f", &fluxo[29][59]);
printf("Entre com os elementos da matriz:\n");
for (i = 0; i < 30; i++)
for (j = 0; j < 60; j++)
scanf("%f", &fluxo[i][j]);
Vetores, Matrizes e Strings | Programação de Computadores 14 de 272014 © MdaS
ManipulaManipulaManipulaManipulaçççção da Matrizão da Matrizão da Matrizão da Matriz
� É feita elemento a elemento
� Ex.: Calcular a matriz identidade de dimensão N = 10#define N 10
int main()
{
int I[N][N]; // matriz identidade de ordem N
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
{
if (i == j)
I[i][j] = 1;
else
I[i][j] = 0;
}
system("PAUSE");
}
Vetores, Matrizes e Strings | Programação de Computadores 15 de 272014 © MdaS
ExercExercExercExercíííícioscioscioscios
1. Construa e exiba em tela uma matriz, onde devem ser inseridos pelo usuário suas dimensões. Cada elemento da matriz deve ser calculado como:
aij = i + 2j
2. Faça um algoritmo que peça ao usuário a dimensão e os elementos das matrizes quadradas A e B, calcular e exibir em tela o resultado de A - Bt
Vetores, Matrizes e Strings | Programação de Computadores 16 de 272014 © MdaS
ExercExercExercExercíííícioscioscioscios
3. Faça um programa que calcule e exiba o produto entre duas matrizes, com suas dimensões e os seus elementos informados pelo usuário.� O programa deve se certificar, inicialmente, se é possível
fazer a multiplicação, ou seja, se o número de colunas da 1ª matriz é igual ao número de linhas da 2ª;
� Dado que, a matriz C é a matriz resultante, o cálculo de cada elemento deve ser feito da seguinte forma:
Cij = Cij + Aik * Bkj� Onde:
� i = {1, ..., nº de linhas de A} e � j = {1, ..., nº de colunas de B}
Vetores, Matrizes e Strings | Programação de Computadores 17 de 272014 © MdaS
StringsStringsStringsStrings
� Até então, sabemos manipular caracteres de modo isolado...
� E se for necessária a manipulação de palavras?
Vetores, Matrizes e Strings | Programação de Computadores 18 de 272014 © MdaS
StringsStringsStringsStrings
� Em suma, strings são as cadeias de caracteres que podem formar desde uma simples palavra até um texto grande
� São vetores compostos pelo tipo char
� Sempre terminam com o caractere '\0'� Invisível na tela
� Não necessitam preencher todos os espaços do vetor
Valor
Índice\0alenaJ
6543210
\0
7 8
a
6
Valor
ÍndiceletroP
9543210
Vetores, Matrizes e Strings | Programação de Computadores 19 de 272014 © MdaS
AtribuiAtribuiAtribuiAtribuiçççção de Stringsão de Stringsão de Stringsão de Strings
� Podem ser feitas diversas formas de atribuição de strings� Inicialização
� Leitura
� Cópia
char cidade[] = "Guaratingueta";
char cidade[30];
gets(cidade);
#include <string.h>
char destino[20], origem[] = "Pindamonhangaba";
strcpy(destino, origem);'
Vetores, Matrizes e Strings | Programação de Computadores 20 de 272014 © MdaS
Leitura de uma StringLeitura de uma StringLeitura de uma StringLeitura de uma String
� A função scanf() é utilizada para a leitura de valores� Porém, é feita a leitura até o primeiro espaço da string
� Para a leitura de uma string, portanto, recomenda-se utilizar a função gets(variavel);� É feita a leitura dos caracteres até ser pressionada a tecla Enter
scanf("%s", cidade);
gets(nome);
Vetores, Matrizes e Strings | Programação de Computadores 21 de 272014 © MdaS
ExibiExibiExibiExibiçççção de uma Stringão de uma Stringão de uma Stringão de uma String
� Além da função printf(), pode ser utilizada a função puts(variavel)
� Cada chamada corresponde a uma linha da saída
� A função printf() permite a exibição em várias linhas e a concatenação de variáveis e mensagens
printf("%s %s\n", nome, sobrenome);
puts(nome);
puts(sobrenome);
Vetores, Matrizes e Strings | Programação de Computadores 22 de 272014 © MdaS
ExemploExemploExemploExemplo
� Inserir o teu nome completo e verificar quantas letras aparecerão (Pereira, 2010):
#include <stdio.h>
#include <stdlib.h>
char nome[80];
int i, cont;
int main()
{
printf("Digite o seu nome: ");
gets(nome);
cont = 0;
for (i = 0; nome[i] != '\0'; i++)
{
if (nome[i] != ' ')
cont++;
}
printf("No nome %s existem %d letras", nome, cont);
system("PAUSE");
}
Vetores, Matrizes e Strings | Programação de Computadores 23 de 272014 © MdaS
ExemploExemploExemploExemplo
� Verificar se dois nomes são idênticos (Pereira, 2010)#include <stdio.h>
#include <stdlib.h>
char nome1[80], nome2[80];
int i, igual;
int main()
{
printf("Digite o primeiro nome: "); gets(nome1);
printf("Digite o segundo nome: "); gets(nome2);
igual = 1;
for (i = 0; nome1[i] != '\0'; i++)
if ( nome1[i] != nome2[i] )
igual = 0;
if (igual == 1)
puts("Os nomes são iguais");
else
puts("Os nomes são diferentes");
system("PAUSE");
}
Vetores, Matrizes e Strings | Programação de Computadores 24 de 272014 © MdaS
FunFunFunFunçççções com Stringsões com Stringsões com Stringsões com Strings
� Funções inclusas na biblioteca <string.h>
Retorna o posicionamento do caractere na string. strchr(x)
Copia o conteúdo da primeira string para a segundastrcpy(n1, n2)
Concatena duas stringsstrcat(n1, n2)
Verifica se duas strings são idênticasstrcmp(n1, n2)
Tamanho do stringstrlen(n1)
FinalidadeFunção
Vetores, Matrizes e Strings | Programação de Computadores 25 de 272014 © MdaS
ExercExercExercExercííííciociociocio
� Inserir o teu nome completo e verificar quantas vogais aparecerão:
PRAZER, O MEU NOME É PEDRO DE ALCÂNTARA FRANCISCO ANTÓNIO JOÃO CARLOS XAVIER DE PAULA MIGUEL RAFAEL JOAQUIM JOSÉGONZAGA PASCOAL CIPRIANO
SERAFIM DE BRAGANÇA E BOURBON
Vetores, Matrizes e Strings | Programação de Computadores 26 de 272014 © MdaS
ExercExercExercExercíííícioscioscioscios
1. Teste de DNA: faça um programa que leia uma sequência de letras que compõem as bases nitrogenadas (com as letras T, G, C e A) e exiba a sequência correspondente, lembrando que:� Timina => Adenina
� Guanina => Citosina
� Citosina => Guanina
� Adenina => Timina
Vetores, Matrizes e Strings | Programação de Computadores 27 de 272014 © MdaS
ExercExercExercExercíííícioscioscioscios
2. Baseado no programa anterior, faça um outro algoritmo que faça as seguintes tarefas:
a. Exiba o RNA correspondente a cadeia de DNA descrita, dado que:
� Timina => Adenina
� Guanina => Citosina
� Citosina => Guanina
� Adenina => Uracila
b. Exiba a quantidade existente de cada base nitrogenada contida na cadeia de RNA
c. Exiba o resultado de como ficaria o seu nome, utilizando as regras acima