Nem sempre, a manipulação de dados é feita por simples ... · 2014 ©MdaS Vetores, Matrizes e...

27
Vetores, Matrizes e Strings | Programação de Computadores 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...

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