• Nenhum resultado encontrado

E S T RU T U R A S D E DA D O S H O M O G Ê N E A S

N/A
N/A
Protected

Academic year: 2021

Share "E S T RU T U R A S D E DA D O S H O M O G Ê N E A S"

Copied!
42
0
0

Texto

(1)

E S T RU T U R A S D E DA D O S H O M O G Ê N E A S

PROGRAMAÇÃO I

(2)

Tópicos

2

 Vetores

 Matrizes

 Cadeia de caracteres (Strings)

(3)

Conjuntos de uma dimensão: Vetores

3

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

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

 O vetor é uma estrutura de uma dimensão.

(4)

Declaração de vetores

4

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 está dentro dos limites de um vetor. O programador deve

(5)

Declaração de vetores

5

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).

(6)

Acesso aos elementos do vetor

6

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

 O índice de um vetor deve ser um valor inteiro .

 Exemplo:

int i = 7;

float valor[10]; // declaração de vetor

valor[1] = 6.645; // atribuindo valor a um // elemento do vetor

valor[5] = 3.867;

valor[i] = 7.645;

(7)

Inicialização de vetores

7

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

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

onde:

lista de valores é uma lista contendo os 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};

(8)

Exemplo de uso de Vetores

8

Imprimindo dados de um vetor

#include <stdio.h>

#include <stdlib.h>

int main () {

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;

(9)

Exemplo de uso de Vetores

9

Inserindo dados aleatórios em um vetor

#include <stdio.h>

#include <stdlib.h>

int main () {

int i;

int v[6];

printf("Dados do vetor: \n\n");

for (i=0; i<6; i++) {

v[i] = rand() %100;

printf("%d ", v[i]);

}

printf("\n\n");

(10)

Exemplo de uso de Vetores

10

Calculando a somatória do vetor

#include <stdio.h>

#include <stdlib.h>

int main () {

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;

(11)

Exercícios

11

1. Faça um programa para preencher, por entrada de dados, um vetor A de n números inteiros (no máximo 10). Solicitar um valor via teclado.

Pesquisar se esse número existe no vetor. Se existir, imprimir em qual posição o valor encontra-se armazenado do vetor.

2. Dado um vetor de n números, exibir em tela os

dados em ordem inversa.

(12)

Conjuntos de duas dimensões: Matrizes

12

 Uma matriz representa um conjunto de valores de duas dimensões;

 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.

(13)

Declaração de matrizes

13

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 linhas

tam2 representa o número de colunas.

(14)

Declaração de matrizes

14

 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.

– O índice de linha varia de 0 a 2.

– O índice de coluna varia de 0 a 3.

(15)

Matriz multidimensional

15

 Declarando uma matriz multidimensional

<tipo> nome da matriz [<tam

1

>] [<tam

2

>] ...[<tam

n

>]

 Essa matriz possui tam 1 x tam 2 x ... x tam n variáveis do tipo <tipo>

 O índice da cada dimensão é numerada de 0 a

tam i -1

(16)

Acesso aos elementos da matriz

16

 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 válidos para os índices de linha e de coluna. É

responsabilidade do programador fazer essa

verificação.

(17)

Acesso aos elementos da matriz

17

2 | 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

 Como uma matriz é armazenada na memória – A memória do computador é linear.

– Uma matriz declarada em C é armazenada na memória linha por linha.

7 4 9

1

3

2

(18)

Inserindo dados em uma Matriz

18

 Lendo dados do teclado e inserindo na matriz (matriz 4x4)

/*Leitura*/

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++) {

printf ("Matriz[%d][%d]: ", i, j);

scanf ("%d", &matriz[i][j]);

}

(19)

Exibindo dados de uma Matriz

19

 Escrevendo uma matriz na tela (matriz 4x4) /*Escrita*/

for (i = 0; i < 4; i++) {

for (j = 0; j < 4; j++)

printf ("%3d ", matriz[i][j]);

printf ("\n");

}

(20)

Exemplo de uso de matrizes

20

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++;

(21)

Exemplo de uso de matrizes

21 /* calcula média */

for (i=0;i<n;i++) {

for (j=0; j<3; j++) {

soma = soma + notas[i][j];

} }

media = soma / (3*nalunos);

/* exibe média calculada */

printf("\nMedia da disciplina: %.2f\n", media);

system("pause");

return 0;

(22)

Cadeias de caracteres (Strings)

22

 A linguagem C não possui um tipo primitivo que permita a manipulação de cadeias de caracteres (strings).

 Em C, uma string é representada por um vetor do

tipo char terminado pelo caractere nulo. O

caractere nulo tem configuração binária

00000000 (o seu código ASCII é 0), e é

representado pela sequência '\0' ou pela macro

NULL.

(23)

Declaração de Strings

23

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 incluir o marcador ’\0’ no final da string.

 Exemplo: para armazenar uma string de até 10

caracteres deve-se declarar um vetor de caracteres de

tamanho 11; no exemplo abaixo, str é o nome da

variável string :

(24)

Inicialização de Strings

24

 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. Exemplo:

char str[10]={'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. Exemplo:

char str[10]="alo mundo";

(25)

Declaração e Inicialização de Strings

25

 Exemplos

char s1[ ] = "";

char s2[ ] = "Rio de Janeiro";

char s3[81];

char s4[81] = "Rio";

s1 é uma cadeia de caracteres vazia (vetor com 1 elemento que armazena apenas o caractere '\0');

s2 é uma cadeia de 14 caracteres armazenada em vetor com 15 elementos, inicializada com o conteúdo declarado e terminada com '\0';

s3 pode armazenar uma cadeia com até 80 caracteres em um vetor com 81 elementos (já que uma cadeia de caracteres sempre tem que ser terminada com o caractere ‘\0’, que ocupa uma posição a mais no vetor).

A cadeia s3 não foi inicializada;

s4 pode armazenar uma cadeia com até 80 caracteres em um vetor com 81

(26)

Leitura de Strings

26

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’).

 

(27)

Leitura de Strings

27

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

#include <stdio.h>

#include <stdlib.h>

int main ()

{ char nome[51];

printf ("Digite o seu nome: ");

gets (nome);

printf ("\n Ola %s!\n\n",nome);

system("pause");

(28)

Leitura de Strings

28

scanf()

A função scanf() é 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’).

(29)

Leitura de Strings

29

 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 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);

(30)

Leitura de Strings

30

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

scanf("%[^\n]");

lê uma cadeia de caracteres até encontrar um

enter.

(31)

Leitura de Strings

31

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

#include <stdio.h>

#include <stdlib.h>

int main ()

{ char nome[51];

printf ("Digite o seu nome: ");

scanf("%[^\n]", nome);

printf ("\n Ola %s!\n\n",nome);

system("pause");

(32)

Leitura de Strings

32

 Exemplo:

 lê uma sequência de caracteres até que seja encontrado o caractere de mudança de linha

captura linha fornecida pelo usuário até que ele tecle “Enter”

inclusão do espaço no formato garante que eventuais caracteres brancos que precedam a cadeia de caracteres sejam descartados char cidade[81];

... scanf(" %80[^\n]", cidade);

...

(33)

Leitura de Strings

33

scanf com o especificador de formato %[...]

%[...] lista entre os colchetes todos os caracteres aceitos na leitura

%[^...] lista entre os colchetes todos os caracteres não aceitos na leitura

exemplos :

%[aeiou]

 lê sequências de vogais

 leitura prossegue até encontrar um caractere que não seja uma vogal

%[^aeiou]

 lê sequências de caracteres que não são vogais

 leitura prossegue até encontrar um caractere que seja uma

(34)

Leitura de Strings

34

 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]");

(35)

Escrita de Strings

35

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);

(36)

Escrita de Strings

36

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

puts (texto);

fputs (texto, stdout);

(37)

Funções básicas para Strings

37

 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

(38)

Funções básicas para Strings

38

 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

(39)

Exemplos de uso das funções básicas

39

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;

(40)

Exemplos de uso das funções básicas

40

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;

(41)

Exemplos de uso das funções básicas

41

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");

(42)

Exemplos de uso das funções básicas

strcat 42

#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");

Referências

Documentos relacionados

O primeiro encontro se deu em agosto de 2015, no qual foi apresentado os 12 passos para manter uma memória ativa e as 4 dicas que deverão ser praticadas todos os dias, como

A PRESIDENTA DO CONSELHO MUNICIPAL DOS DIREI- TOS DA CRIANÇA E DO ADOLESCENTE - CMDCA, no uso de suas atribuições conferidas pela a Lei Municipal 6787 de 11-1- 91, e em

Em A viagem do elefante, seu penúltimo livro, José Saramago faz mais um exercício de metaficção historiográfica ao recriar a viagem da caravana incumbida de

pai, da mãe ou até mesmo dos avós, contando fábulas, histórias da bíblia, histórias inventadas (os pais e as crianças acabam virando personagens do texto). Para que a escola

Mas, a utilização de adaptadores funcionais no posto de trabalho ao computador também são medidas necessárias, como os apoios de monitores, cadeiras adequadas a estatura do

a) A oposição de embargos monitórios depende, necessariamente, da segurança do juízo, de modo que o réu não poderá intentar este incidente sem prestar

Por meio da pesquisa foi possível observar, a partir do relato dos professores, a forma na qual o cinema é utilizado em sala de aula pelos professores da rede municipal de ensino

De modo que, para ser Perito judical na área trabalhista, o candidato a perito deve pedir ao Juiz para atuar como Perito na sua Unidade Judiciária. Ao visitar as varas,