37
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Embed Size (px)

Citation preview

Page 1: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

UNIDADE 5

ESTRUTURAS DE DADOS HOMOGÊNEAS

PROGRAMAÇÃO I

Page 2: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

2

Estruturas de Dados Homogêneas

VetoresMatrizesStrings

Page 3: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

3

Conjuntos de uma dimensão: Vetores

Vetores são estruturas de dados que permitem armazenar um conjunto de valores na memória do computador.

O vetor é uma fileira de variáveis de mesmo tipo que ocupa uma região contínua de memória.

O vetor é uma estrutura de uma dimensão.

Page 4: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

4

Declaração de vetores

Sintaxe: A sintaxe para a declaração de um vetor é a seguinte:

tipo nome[tam];onde:

tipo é o tipo dos elementos do vetor: int, float, double ...Nome é o nome identificador do vetor. As regras de

nomenclatura dos nomes de vetores são as mesmas usadas na declaração de variáveis .

tam é o tamanho do vetor, isto é, o número de elementos que o vetor pode armazenar.

Atenção: o sistema de execução não verifica se um determinado acesso esta dentro dos limites de um vetor.

Page 5: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

5

Declaração de vetores

Exemplo:int notas[5];

A declaração acima reserva um espaço na memória para 5 inteiros.

A quantidade de memória (em bytes) usada para armazenar um vetor pode ser calculada como:

quantidade de memória = tamanho do tipo * tamanho do vetor

No exemplo acima, a quantidade de memória utilizada pelo vetor é 10 bytes (2*5).

Page 6: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

6

Acesso aos elementos do vetor

Cada elemento do vetor é referenciado pelo nome do vetor seguido de um índice escrito entre colchetes.

O primeiro elemento do vetor tem índice 0 e o último tem índice tam-1.

O índice de um vetor deve ser inteiro.Exemplo:

int i = 7;float valor[10]; // declaração de vetorvalor[1] = 6.645; // atribuindo valor a um // elemento do vetorvalor[5] = 3.867;valor[i] = 7.645;

Page 7: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

7

Inicialização de vetores

Sintaxe: A sintaxe para a inicialização dos elementos de um vetor é:

tipo nome[tam] = {lista de valores};onde:

lista de valores é uma lista dos valores de cada elemento do vetor, separados por vírgulas.

Exemplos:int dia[7] = {12,30,14,7,13,15,6};float nota[5] = {8.4,6.9,4.5,4.6,7.2};char vogal[5] = {'a’, ‘e’, ‘i’, ‘o’, ‘u'};

Page 8: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

8

Exemplo de uso de Vetores

Imprimindo dados de um vetor#include <stdio.h>#include <stdlib.h>int main (void){ int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; printf("Dados do vetor: \n\n"); for (i=0; i<6; i++) { printf("%f ", v[i]); } printf("\n\n"); system("pause"); return 0;}

Page 9: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

9

Exemplo de uso de Vetores

Calculando somatoria do vetor#include <stdio.h>#include <stdlib.h>int main (void){ int i; float soma = 0.0; //declara e inicializa a soma float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; // declara e inicializa o vetor printf("Dados do vetor: \n\n"); for (i=0; i<6; i++) { printf("%.2f ", v[i]); // imprime o valor armazenado no índice i do vetor soma = soma + v[i]; // calcula a soma } // fim do laço for printf("\n\nSoma=%.2f\n\n", soma); system("pause"); return 0;}

Page 10: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

10

Exemplo de uso de Vetores

Pesquisa em vetores#include <stdio.h>#include <stdlib.h>int main (void){ int i; float valor; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; printf("Vetor de dados: \n\n"); for (i=0; i<6; i++) { printf("%.2f ", v[i]); } printf("\n\nQual valor deseja pesquisar? "); scanf("%f",&valor); for (i=0; i<6; i++) { if (v[i]==valor){ printf("\n\tO valor %.2f foi encontrado no indice %d\n\n",valor, i); system("pause"); return 0; } } printf("\n\t%.2f nao foi encontrado no vetor\n\n", valor); system("pause"); return 0;}

Page 11: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

11

Conjuntos de duas dimensões: Matrizes

Uma matriz representa um conjunto bi-dimensional de valores;

Similar a variáveis simples e vetores, matrizes devem ser declaradas para que o espaço de memória apropriado seja reservado.

Como a matriz representa um conjunto bi-dimensional, devemos especificar as duas dimensões na declaração: o número de linhas e o número de colunas.

Page 12: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

12

Declaração de matrizes

Sintaxe: A sintaxe para a declaração de uma matriz é a seguinte:

tipo nome[tam1][tam2];

onde:tipo é o tipo dos elementos da matriz: int, float, ...Nome é o nome identificador da matriz. As regras

de nomenclatura dos nomes são as mesmas usadas na declaração de variáveis .

tam1 representa o número de linhastam2 representa o número de colunas.

Page 13: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

13

Declaração de matrizes

Exemplo:float mat[3][4] ;– Declara uma matriz de 3 linhas por 4 colunas (armazenamento de 12 valores do tipo float).– O nome da variável mat representa uma referência para o espaço de memória reservado.

Page 14: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

14

Matriz multidimensional

Declarando uma matriz multidimensional

<tipo> nome da matriz [<tam1>] [<tam2>] ...[<tamn>]

Essa matriz possui tam1 x tam2 x ... x tamn variáveis do tipo <tipo>

Cada dimensão é numerada de 0 a tami -1

Page 15: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

15

Acesso aos elementos da matriz

Para acessar um elemento da matriz, utilizamos indexação dupla, da seguinte forma:

nome_da_matriz [<linha] [<coluna>]

Exemplo: mat[i][j]– Para uma matriz com m linhas e n colunas, os índices usados

no acesso aos elementos devem satisfazer: 0<=i<m e 0<=j<n

– O compilador não verifica se foram utilizados valores validos para a linha e para a coluna. É responsabilidade do programador fazer essa verificação.

Como é armazenada uma matriz em memória:– A memória do computador é linear.– Uma matriz declarada em C é armazenada na memória linha

por linha.

Page 16: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

16

Acesso aos elementos da matriz

749

1322 | 3 | 1 | 9 | 4 | 7

m[i][j] = i *n + j onde n éo número de colunas.

Exemplo: m[1][2] = 1*3 + 2 = 5

0 1 2 3 4 5

Page 17: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

17

Inserindo dados em uma Matriz

Lendo dados do teclado/*Leitura*/

for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { printf ("Matriz[%d][%d]: ", i, j); scanf ("%d", &matriz[i][j]); }

Page 18: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

18

Exibindo dados de uma Matriz

Escrevendo uma matriz na tela/*Escrita*/for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf ("%3d ", matriz[i][j]); printf ("\n");}

Page 19: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

19

Exemplo de uso de matrizes

printf("Digite o numero de alunos da turma: "); scanf("%d",&n); nalunos = 0; /* lê dados dos alunos*/ while (nalunos < n) { printf("\nAluno %d: \n",nalunos+1); printf("\tDigite a 1a. nota: "); scanf("%f",&notas[nalunos][0]); printf("\tDigite a 2a. nota: "); scanf("%f",&notas[nalunos][1]); printf("\tDigite a 3a. nota: "); scanf("%f",&notas[nalunos][2]); nalunos++; } /* calcula média */ for (i=0;i<n;i++) { for (j=0; j<3; j++) { media = media + notas[i][j]; } } media = media / (3*nalunos); /* exibe média calculada */ printf("\nMedia da disciplina: %.2f\n", media); system("pause"); return 0; }

Page 20: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

20

Strings (Cadeias de caracteres)

A linguagem C não possui um tipo primitivo que permita a manipulação de strings.

Em C, uma string é implementada através do uso de um vetor de caracteres terminado pelo caractere nulo. O caractere nulo tem configuração binária 00000000 (o seu código ASCII é 0), e é representado pela seqüência '\0' ou pela macro NULL.

Page 21: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

21

Declarando uma cadeia de caracteres

A declaração geral para uma string é:

char nome_da_string[tamanho+1];

Deve-se declarar o vetor com uma posição a mais do que o tamanho desejado para que se possa incluído o marcador ’\0’ no final da string.

Exemplo: para armazenar uma cadeia de caracteres de até 10 caracteres escreve-se o comando, onde str é o nome da variável string :

char str[11];

Page 22: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

22

Inicializando Strings

O vetor de caracteres pode ser inicializado de duas maneiras distintas:1. listando os caracteres um a um, e

acrescentando o caractere nulo no final. Ex:char str[11]={'a','l','o',' ','m','u','n','d','o','\0'};

2.usando uma constante do tipo cadeia de caracteres; neste caso, o compilador acrescenta o caracter nulo automaticamente. Ex:

char str[11]="alo mundo";

Page 23: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

23

Lendo Strings

A biblioteca padrão de E/S, stdio.h, fornece funções para E/S com strings. gets

A função gets() lê uma string do teclado. Sua forma geral é:

 gets (nome_da_string);

Os caracteres digitados são transferidos para a memória após um Enter. O Enter não se torna parte do string; em seu lugar é colocado o caractere nulo (‘\0’).

 

Page 24: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

24

Lendo Strings

O programa abaixo demonstra o funcionamento da função gets():

#include <stdio.h>#include <stdlib.h>int main (){

char nome[100];printf ("Digite o seu nome: ");gets (nome);printf ("\n Ola %s\n\n",nome);system("pause");return(0);

}

Page 25: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

25

Lendo Strings

scanf()A função scanf() pode ser utilizada para ler uma cadeia de caracteres do teclado usando o especificador de formato %s.

scanf ("%s", nome_string);Note que não se utiliza o & para strings, pois o nome de

um vetor já é um endereço de memória (o endereço de memória do começo do vetor).

O %s faz com que scanf() leia caracteres até que seja encontrado um caractere de espaço.

Os caracteres lidos são colocados em um vetor de caracteres apontado pelo argumento correspondente, e o resultado tem terminação nula (‘\0’).

Page 26: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

26

Lendo Strings

Infelizmente, a leitura a partir do teclado utilizando o scanf lê somente até o primeiro espaço, ou seja, lê somente uma palavra, o que torna o seu uso desta forma um pouco restrito.

Para contornar isso, pode-se utilizar a função gets, que faz a leitura até encontrar o caracter de fim de linha (enter ).

gets(texto);

Page 27: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

27

Lendo Strings

Outra opção é explorar as outras possibilidades fornecidas pela função scanf. Por exemplo, a opção abaixo

scanf("%[^\n]);

lê uma cadeia de caracteres até encontrar um enter.

Page 28: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

28

Lendo Strings

Aqui, deparamos com outro problema: tanto o comando scanf quanto o gets podem ler mais caracteres que os existentes na string, provocando erros.

A solução aqui, é utilizar uma função que tenha o mesmo comportamento do gets, mas que permita limitar a leitura a um tamanho máximo. As opções são:

fgets (texto, 50, stdin);scanf("%50[^\n]);

Page 29: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

29

Escrevendo Strings

printf()Pode-se escrever uma string na tela caracter a caracter, mas é mais simples escrever utilizando o comando printf, com o mesmo comando utilizado para leitura (%s)

printf ("%s", nome_string);

Page 30: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

30

Escrevendo Strings

De forma análoga ao gets e fgets, temos o puts e fputs, que escrevem a string na tela.

puts (texto);fputs (texto, stdout);

Page 31: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

31

Funções básicas para Strings

A biblioteca string.h, fornece uma gama variada de funções para a manipulação de strings. As mais comuns são fornecidas pela maioria dos compiladores C. São elas:

strlen(texto) : Retorna o número de caracteres da string. O caracter ‘\0’ não é contado.

strcpy(destino, fonte) : Copia a string fonte para a string destino

Page 32: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

32

Funções básicas para Strings

strcmp(str1, str2) : Compara duas cadeias e caracteres e retorna um valor

= 0 - se str1 e str2 forem iguais< 0 - se str1 for menor que str2> 0 - se str1 for maior que str2

strcat(destino, fonte) : Concatena a string fonte no fim da string destino

Page 33: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

33

Exemplos de uso das funções básicas

strlen

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome[41]; printf("Informe um nome: "); gets(nome); printf("\n%s contem %d caracteres\n\n",nome,strlen(nome)); system("pause"); return 0;}

Page 34: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

34

Exemplos de uso das funções básicas

strcpy

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome[41], aluno[41]; printf("Informe um Nome: "); gets(nome); strcpy(aluno,nome); printf("\nO nome do aluno e' %s\n\n",aluno); system("pause"); return 0;}

Page 35: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

35

Exemplos de uso das funções básicas

strcmp#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome1[41], nome2[41]; printf("Informe um nome: "); gets(nome1); printf("\nInforme outro nome: "); gets(nome2); if(strcmp(nome1,nome2)==0) printf("\nOs nomes sao iguais"); else printf("\nOs nomes sao diferentes"); printf("\n\n"); system("pause"); return 0;}

Page 36: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

36

Exemplos de uso das funções básicas

strcat#include <stdio.h>#include <stdlib.h>#include <string.h>

int main (){

char str1[100],str2[100];printf ("Entre com uma string: ");gets (str1);strcpy (str2,"Voce digitou a string ");

/* str2 armazenara' Voce digitou a string + o conteudo de str1 */strcat (str2,str1);printf ("\n%s\n\n",str2);system("pause");return(0);

}

Page 37: UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I

Programação I

37

Strings (Cadeia de caracteres)

Vetor de caracteres terminado pelo caracter '\0'. Exemplo:

#include <stdio.h>#include <stdlib.h>int main (){ char str[30]; int i; printf("Digite uma cadeia de caracteres: "); scanf("%s", str); /* escreve um caracter em cada linha*/ for (i = 0; str[i] != '\0'; i++){ printf("%c\n", str[i]); } printf("\n"); system("pause"); return 0;}