27
Vetores, Matrizes e Strings | Introdução à Computação 1 de 27 2014 © MdaS Estruturas de Dados Estruturas de Dados Estruturas de Dados Estruturas de Dados Nem sempre, a manipulação de dados é feita por simples elementos...

Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Embed Size (px)

Citation preview

Page 1: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 1 de 272014 © MdaS

Estruturas de DadosEstruturas de DadosEstruturas de DadosEstruturas de Dados

� Nem sempre, a manipulação de dados é feita por simples elementos...

Page 2: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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)

Page 3: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]

Page 4: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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 VETORVETORVETORVETOR ser inspirado nos valores ordenados de um vetor multidimensional no Rn

Page 5: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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];

Page 6: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]);

Page 7: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]);

}

Page 8: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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");

}

Page 9: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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.

Page 10: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]

Page 11: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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];

Page 12: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]

Page 13: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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]);

Page 14: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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");

}

Page 15: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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

Page 16: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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 no no no núúúúmero de colunas da 1mero de colunas da 1mero de colunas da 1mero de colunas da 1ªªªªmatriz matriz matriz matriz éééé igual ao nigual ao nigual ao nigual ao núúúúmero de linhas da 2mero de linhas da 2mero de linhas da 2mero 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}

Page 17: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 17 de 272014 © MdaS

StringsStringsStringsStrings

� Até então, sabemos manipular caracteres de modo isolado...

� E se for necessária a manipulação de palavras?

Page 18: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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

A[]

\0alenaJ

[6][5][4][3][2][1][0]

\0

[7] [8]

a

[6]

Valor

A[]

letroP

[9][5][4][3][2][1][0]

Page 19: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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);'

Page 20: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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);

Page 21: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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);

Page 22: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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");

}

Page 23: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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");

}

Page 24: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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)

FinalidadeFinalidadeFinalidadeFinalidadeFunFunFunFunççççãoãoãoão

Page 25: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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

Page 26: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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

Page 27: Nem sempre, a manipulação de dados éfeita por simples ... · nos quatro bimestres. Calcule a média e armazene em um outro vetor a diferença entre a nota de cada bimestre e a

Vetores, Matrizes e Strings | Introdução à Computação 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