Aula 8 - Matrizes e Strings

Documentos relacionados
Aula 24 Ponteiros, vetores e structs

Programação I Matrizes e Strings. Prof. Carlos Alberto

Linguagem C: Tipos básicos de dados escalares e cadeia de caracteres. Prof. Leonardo Barreto Campos 1

Vetores e Matrizes. Conceito. Conceito. Conceito. Conceito. Conceito. Variáveis Compostas Homogêneas. Matriz

3. Linguagem de Programação C

Linguagem de Programação I Vetores e Strings. Thiago Leite Francisco Barretto

Programação: Vetores

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Strings. Introdução. Definição de strings. Criação/Declaração de strings. Inicialização de strings. Manipulação de strings. Exemplos.

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

x=0; y=x+1; x=&y+2; x 1000 y 1004

Aula 20 - Ponteiros. Prof. Laura Silva de Assis. Engenharia de Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Aula 3 Constantes e funções de E/S

Vetores II. Strings Leitura e exibição Biblioteca string.h Operações com Strings. Matrizes Definição de Acesso Operações com Matrizes

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Programação Estruturada Aula 9 - Matrizes e Strings II

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Algoritmos e Programação

Introdução a Programação. Strings (Vetor de Caracteres)

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Cadeias de Caracteres (Strings)

Aula 15: Vetores e Matrizes em C

Declarando e Utilizando Ponteiros. Para declarar um ponteiro temos a seguinte forma geral: tipo_do_ponteiro *nome_da_variável;

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

Fundamentos de Programação

Apêndice B. Cadeias de Caracteres (Strings)

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Caracteres e Cadeias de Caracteres

Métodos Computacionais. Strings (Vetor de Caracteres)

Vetores. Vetores. Vetores. Vetores. Vetores. Algoritmos e Lógica de Programação. Vetores

Vetores. e o programa deverá ler os valores separadamente:

Seqüências de Caracteres

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Introdução à Linguagem C

Módulo 7 Cadeias de Caracteres

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Métodos Computacionais em Física

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Introdução a Programação de Jogos

Algoritmos e Programação

SITUAÇÃO VETORES. Imagine o seguinte problema:

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.

Mais sobre Ponteiros em C

ESTRUTURAS COMPOSTAS VETOR

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Aula 06 Introdução à Programação Matrizes

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Computação 2. Aula 7. Profª. Fabiany Ponteiros

prim = A ; prim = &A[0];

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Programação Estruturada

Vetores(Arrays) Olimpíadas de Informática. Aulas preparatórias Introdução a Programação em C.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: variáveis compostas homogêneas: Arrays Strings

Algoritmos e Programação

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Introdução a Computação

Computação eletrônica:

ESTRUTURAS COMPOSTAS

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

Métodos Computacionais. Tipos Estruturados

Introdução à Linguagem C

DAS5102 Fundamentos da Estrutura da Informação

INF 1620 P1-16/09/06 Questão 1 Nome:

CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: C

Introdução à Computação

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Introdução à Programação Aula 10. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

INF 1620 P4-01/07/08 Questão 1 Nome:

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

O vetor é provavelmente um dos mais simples e importantes tipos agregados. Através do seu uso, podemos

Estrutura de Dados. Struct (Registro) Lais Farias Alves

Vetores II Strings Leitura e exibição Biblioteca string.h Operações com Strings Matrizes Definição de Acesso Operações com Matrizes

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

MC-102 Aula 11 Strings

CCO 016 / COM 110 Fundamentos de Programação

Vetores e Strings. printf ("\na string %s nao esta contida no vetor de %s", string, "strings.\n");

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

Linguagem C Vetores, Matrizes e Strings

11a. Aula Ponteiros e Vetores

Caracteres, Vetores e Matrizes

Estruturas de Dados Homogêneas (Vetores e Matrizes) e Ponteiros em C

INF 1007 Programação II

Aula 11. Prof. Laura Silva de Assis. Engenharia da Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

Transcrição:

Programação I Aula 8 - e Prof. Laura Silva de Assis Engenharia da Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis 2n o semestre - 2015

1 Sumário 1 2 3 4

2 Motivação Introdução unidimensionais Em diversas situações os tipos básicos de dados (int, char,...) não são suficientes para representar a informação que se deseja armazenar; Exemplo: Armazenar uma palavra: AULA ; Armazenar as notas de todos os alunos; Armazenar os dados dos alunos de uma turma; Armazenar os gastos mensais por um período de um ano; etc...

3 Motivação Introdução unidimensionais Problema : definir a média das notas de 50 alunos de uma turma. #include<stdio.h> #define N 50 void main(){ int i ; float nota, media=0; for ( i =0; i<n; i++){ printf ( Digite a nota\n ) ; scanf( %f, &nota) ; media = media+nota ; //media += nota ; media/=n; printf ( Média : %0.2f\n, media) ;

4 Motivação Introdução unidimensionais Problema! Mas se além da média quiséssemos fazer um programa imprimir as notas lidas juntamente com a média da turma? Quando uma determinada Estrutura de Dados for composta de variáveis com o mesmo tipo primitivo, temos um conjunto homogêneo de dados.

5 Conceitos de vetores em C Introdução unidimensionais Um vetor é uma coleção de variáveis, do mesmo tipo e que são referenciadas por um mesmo identificador; Um elemento específico de um vetor é referenciado (acessado) por meio do índice, que indica a posição desse elemento; Em C todos os vetores consistem em posições contíguas na memória, o endereço mais baixo representa o primeiro elemento do vetor e o mais alto o último; e matrizes de qualquer dimensão possuem todos os elementos do mesmo tipo de dado! Um vetor comum é a string.

6 Declaração de vetores Introdução unidimensionais Um vetor nada mais é que uma matriz que contém apenas uma dimensão, como por exemplo uma string; Quando se faz uma declaração de string em C, na verdade declara-se um vetor de caracteres; Forma geral: tipo nome do vetor [ tamanho do vetor ]; Assim como as demais variáveis, o vetor deve ser declarado para que o compilador aloque espaço para o mesmo na memória.

7 Declaração de vetores Introdução unidimensionais Exemplos: int vet [80]; 80 é o tamanho do vetor, a declaração reserva 80 gavetas consecutivas de memória que correspondem ao tamanho do vetor e cada gavetas guarda um int; float vet [20]; A declaração acima reserva 20 gavetas consecutiva de memória, cada uma guarda um float.

8 Declaração de vetores Introdução unidimensionais int dados [5]; float valores [4];

9 Declaração de vetores Introdução unidimensionais Importante! Na declaração de vetor, o valor que se encontra entre os colchetes pode ser um número constante ou uma variável; Portanto, se usar variável, cuidado ao modificar o valor da variável que armazena o tamanho do vetor. //poss í veis declara ções de vetores char nome[30]; //ou int n = 30; char nome[n ]; //ou int n; printf ( Entre com o tamanho máximo do nome\n ) ; scanf ( %d, &n) ; char nome[n ];

10 na memória Introdução unidimensionais é uma coleção de variáveis mesmo tipo, acessíveis com um único nome, que são armazenadas em posições contíguas de memória; A individualização de elemento de um vetor é feita através do uso de índices. Um índice é sempre um número natural; Ilustração de um vetor se ele começasse na posição 1000 de memória e fosse declarado como char a[5];

11 Percorrendo e lendo vetores Introdução unidimensionais Percorrer um vetor significa varrer o vetor de casa em casa a partir do índice 0 (zero); Para percorrer um vetor é necessário conhecer o tamanho do vetor; Para a leitura do vetor deve-se ler elemento a elemento usando o padrão de percorrimento do vetor; A leitura é feita com a mesma sintaxe de uma variável única, porém deve-se identificar o índice onde será o armazenamento. scanf( %f, &v [ i ]) ;

12 Acesso aos elementos Introdução unidimensionais Para acessar os elementos de um vetor usa-se índices; O índice define a posição da variável dentro do vetor; Todos os vetores tem o primeiro elemento na posição 0 (zero), assim, se tomarmos n como sendo o tamanho do vetor, sua última posição é a de índice n-1 ; Acesso aos elementos dos vetores: float notas [100];... notas [0] = 4.5; //insere 4.5 na primeira posi ção do vetor notas [10] = 7.8; // insere 7.8 na décima posi ção do vetor

13 Introdução unidimensionais Exemplo: Cálculo da média da nota de n alunos. //cá lculo da média aritmé tica de n alunos #include <stdio.h> void main(){ float notas [100], media = 0.0; int i, n; printf ( Digite a quantidade de alunos \n ) ; scanf ( %d, &n) ; for ( i=0;i<n; i++){ printf ( Entre com a %d a nota :, i+1); scanf( %f,&notas [ i ]) ; for ( i=0;i<n; i++) media += notas [ i ]; media/=n; printf ( \nmédia das notas da turma %3.2f\n,media) ; printf ( Nota de cada aluno :\n ) ; for ( i=0;i<n; i++) printf ( aluno %d \t nota %3.2f\n, i, notas [ i ]) ;

Introdução unidimensionais Exemplo: Melhoramento do programa de cálculo da média da nota de n alunos. //cá lculo da média aritmé tica de n alunos #include <stdio.h> void main(){ float notas [100], media = 0.0; int i, n=0; while (n<1 n>100){ printf ( Digite a quantidade de alunos \n ) ; scanf( %d, &n) ; for ( i=0;i<n; i++){ printf ( Entre com a %d a nota :, i+1); scanf( %f,&notas [ i ]) ; for ( i=0;i<n; i++) media += notas [ i ]; media/=n; printf ( \nmédia das notas da turma %3.2f\n,media) ; printf ( Nota de cada aluno :\n ) ; for ( i=0;i<n; i++) printf ( aluno %d \t nota %3.2f\n, i, notas [ i ]) ; 14

15 Introdução unidimensionais A quantidade de memória necessária para guardar um vetor está diretamente relacionada com seu tamanho e seu tipo; Para uma matriz unidimensional (vetor) o tamanho total em bytes é calculado da forma; totalbytes = sizeof ( tipo ) tamanhomatriz ; C não tem verificação de limites em vetores, fica a cargo do programador! Quando o programador não toma o devido cuidado com os limites de um vetor, pode ocorrer de sobrescrever dados que estão em memória ativa.

16 Introdução unidimensionais Exemplo de utrapassagem de limites: #include <stdio.h> void main(){ int vet [10], i ; printf ( Elemnetos do vetor : ) ; for ( i=0; i <100; i++){ vet [ i ] = i 3; printf ( %d,vet [ i ]) ; A compilação NÃO exibirá um erro, porém a execução dará falha de segmentação pois tenta fazer o acesso à memória que não foi reservada.

17 Introdução unidimensionais O índice do vetor pode ser uma expressão aritmética; #include <stdio.h> void main(){ float x [80]; int i ; // inicializando o vetor for ( i =100; i <180; i++) x[ i 100] = 0; Ao utilizar uma expressão, deve-se ter certeza que o resultado será um índice válido para o vetor declarado.

18 Exemplo utilidade de vetores Introdução unidimensionais Exemplo de como os vetores podem ser úteis: um vetor pode guardar os coeficientes de um polinômio de grau n;... float P[100]; int n; Dessa forma p[0], p[1],..., p[n] guardam os coeficientes de um polinômio p(x) = p 0 +p 1 x +...+p n x n ; É claro que nesse caso particular n não pode ser maior que 99.

19 Limitações de C com caracteres e strings Em C uma string é defina como uma matriz de caracteres que é terminada por um nulo; Um nulo é especificado como \0 ; Dado a forma de término de uma string sempre é necessário declarar vetores de caracteres de tamanho maior que a maior string que ela pode armazenar; Exemplo: a declaração de uma string que pode armazenar até 10 caracteres deve ser feita da forma: char str [11];

20 Limitações de C com caracteres e strings Dado a forma de término de uma string sempre é necessário declarar vetores de caracteres de tamanho maior que a maior string que ela pode armazenar.

21 Limitações de C com caracteres e strings Para declarar uma string, aloca-se um espaço na memória definindo um vetor de caracteres; Para algumas operações, uma string se parece como uma variável simples, como por exemplo impressão; char nome[20];... printf ( %s\n, nome) ; Porém algumas operações com strings estão ausentes na linguagem C, como: Atribuição a uma variável, concatenação, comparação, etc.

22 Limitações de C com caracteres e strings Embora o C não tenha o tipo de dado string a linguagem permite constantes string; Uma constante string é uma lista de caracteres entre aspas Aula de C ; Não é necessário adicionar o nulo no final das constantes string manualmente, o compilador C faz isso automaticamente; C suporta uma ampla gama de funções para manipulação de strings.

23 Limitações de C com caracteres e strings Limitações na manipulação de strings: char curso [20], nome[20];... curso = linguagem C ; // atribui ção ilegal em C curso < nome // comparação ilegal em C curso = curso + nome; // concatena ção ilegal em C

24 Limitações de C com caracteres e strings A biblioteca padrão string da linguagem C contém várias funções de manipulação de strings. Para usar essas funções, o seu programa deve incluir string.h; #include <string.h> strlen(s1): recebe uma string e retorna o seu comprimento; strcpy(s1, s2): recebe duas strings e copia o conteúdo da segunda para a primeira; strcat(s1, s2): concatena a segunda string ao final da primeira.

Limitações de C com caracteres e strings A biblioteca padrão string da linguagem C contém várias funções de manipulação de strings. Para usar essas funções, o seu programa deve incluir string.h; #include <string.h> strcmp(s1, s2): compara duas strings, retorna 0 se são iguais, menor que zero se s1 < s2 e maior que zero se s1 > s2; strchr(s1, c): procura um caracter em uma string, retorna um ponteiro para a primeira ocorrência de c em s1; strstr(s1, s2): procura uma string dentro de outra string, retorna um pontteiro para a primeira ocorrência de s2 em s1. 25

26 Limitações de C com caracteres e strings Exemplo: #include <stdio.h> #include <string.h> void main(){ char s1 [80], s2 [80]; int tam1, tam2; printf ( Digite duas strings \n ) ; gets(s1) ; gets(s2) ; tam1 = strlen (s1) ; tam2 = strlen (s2) ; printf ( \ncomprimentos : s1 = %d s2 = %d\n,tam1, tam2) ; if (! strcmp(s1, s2)) printf ( As strings são iguais!\n ) ; strcat (s1, s2) ; printf ( concatena : %s\n,s1) ; if ( strchr ( s1, o )) printf ( O cacracter o está em s1\n ) ; if ( strstr ( ola aqui estamos, tamos )) printf ( tamos foi encontrado!\n ) ;

27 Limitações de C com caracteres e strings Saída da execução: Digite duas strings o mercado está vazio faz tempo comprimentos: s1 = 9 s2 = 21 concatena : o mercado está vazio faz tempo tamos foi encontrado!

28 com duas dimensões Como os vetores, as matrizes são estruturas de dados homogêneos; Podem ser construídas dos diversos tipos básicos primitivos; A principal diferença é a dimensão, onde matrizes possuem uma ou mais dimensões; Exemplo: jogos como xadrez, campo minado, jogo da velha, etc, problemas matemáticos, etc.

29 com duas dimensões A matriz bidimensional é uma matriz de matrizes unidimensionais; Exemplo de declaração de matrizes bidimensionais: int mat [10][20]; //matriz 10x20 double matr [5][5]; //matriz 5x5 Similar ao vetor, a forma de acesso de uma determinada posição é feita informando em cada colchete a linha e coluna desejada; a = mat [1][3];

com duas dimensões bidimensionais são armazenadas em uma matriz linha-coluna, onde o primeiro índice indica a linha e o segundo a coluna; Sendo assim o índice mais a direita varia mais rapidamente que o mais a esquerda, quando o acesso é realizado na ordem em que eles estão armazenados na memória; O cálculo do tamanho de uma matriz bidimensional pode ser feito da forma: bytes = número de linhas número de colunas sizeof (tipo de dado) Para uma matriz de inteiros com dimensão 10x5 tem-se: 10 5 2 = 100 bytes alocados. 30

31 com duas dimensões Exemplo

32 com duas dimensões Exemplo de leitura e impressão de uma matriz bidimensional. #include <stdio.h> #define TAM 5 void main(){ int mat [5][5], i, j ; printf ( Entre com os valores de uma matriz %dx%d\n,tam,tam) ; for ( i=0; i<tam; i++) for ( j=0; j<tam; j++) scanf ( %d, &mat[ i ][ j ]) ; printf ( \nmatriz somando 1:\n ) ; for ( i=0; i<tam; i++){ for ( j=0; j<tam; j++) printf ( %d,mat[ i ][ j ]+1) ; printf ( \n ) ;

33 com duas dimensões Resultado da execução. Entre com os valores de uma matriz 5X5 1 2 3 4 5 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 6 6 6 6 6 Matriz somando 1: 2 3 4 5 6 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 7 7 7 7 7

34 bidimensionais como parâmetro Quando uma matriz bidimensional é usada como argumento para uma função, apenas um ponteiro para o primeiro elemento é realmente passado; Uma função que recebe uma matriz bidimensional como parâmetro deve definir pelo menos o comprimento da segunda dimensão; O compilador C precisa saber o comprimento de cada linha para poder indexar a matriz corretamente; //Exemplo funcao que recebe uma matriz de inteiros 20x10 void func( int mat [][10]) {...

35 bidimensionais como parâmetro O comprimento da primeira dimensão pode ser especificada, mas não é necessário; O compilador precisa saber a segunda dimensão para poder trabalhar com sentenças do tipo mat[10][5]. //Exemplo funcao que recebe uma matriz de inteiros 20x10 void func( int mat [][10]) {...

36 com duas dimensões Exemplo: #include <stdio.h> #include <stdlib.h> #include <ctype.h> // testar caracter #define CLASSE 3 #define GRADES 30 int grade [CLASSE ][GRADES]; // digita a nota dos alunos void entergrades (){ int i, j ; for ( i=0;i<classe; i++){ printf ( Turma # %d:\n, i+1); for ( j=0;j<grades; j++) grade [ i ][ j ] = getgrade ( j ) ; //continua...

37 com duas dimensões Exemplo: //... continua ção // l ê uma nota getgrade ( int num){ char s [80]; printf ( Digite a nota do aluno # %d: \n,num+1); gets(s) ; return ( atoi (s)) ; //Mostra as notas void dispgrades ( int g [ ][GRADES]){ int i, j ; for ( i=0;i<classe; i++){ printf ( Turma # %d:\n, i+1); for ( j=0;j<grades; j++) printf ( Aluno #%d é %d\n, j+1, g[ i ][ j ]) ; //continua...

38 com duas dimensões Exemplo: //... continua ção void main(){ char ch, str [80]; for (;;) { do{ printf ( D. Digitar notas\n ) ; printf ( M. Mostrar notas\n ) ; printf ( S. Sair\n ) ; gets( str ) ; ch = toupper( str ) ; while (ch!= D && ch!= M && ch!= S ); switch(ch){ case D : entergrades () ; break ; case M : dispgrades (grade ) ; break ; case S : exit (0) ;

39 1 C Completo e Total, Herbert Schidt; Pearson Makron Books; 3a. Ed., 1997. 2 Linguagem C. DAMAS, Luis. 10a. Edição. LTC, 2014.