FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA

Slides:



Advertisements
Apresentações semelhantes
CADEIA DE CARACTERES (Strings)
Advertisements

VARIÁVEIS EM C Dilvan Moreira. Lembrando...  Variável: nome de um local na memória onde dados são armazenados  Evita ter que lembrar um endereço numérico.
Disciplina:PROA3V José Henrique Verhalem e Renan Tenório Professor: Alexandre Cassimiro Novembro 2015.
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Introdução à Computação para Engenharia MAC2166
Algoritmo e Lógica Programação Vetores e Matrizes
Outros sistemas de numeração
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2016
INF1007: Programação 2 3 – Cadeias de Caracteres
Aprendizado de Máquina
Construção de Algoritmos AULA 04
Fundamentos de Programação 1
Comandos da Linguagem C
Estruturas de Repetição
Linguagem C Para programadores Python
FUNDAMENTO DE PROGRAMAÇÃO
Capítulo 8 - Caracteres e Strings
Prof. Wellington Franco
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Introdução à Programação BCC 201 Aula
FUNDAMENTO DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
DESENVOLVIMENTO DE PROGRAMAS
Prof. Wellington Franco Manipulação de Arquivos em C
Prof. Wellington Franco
Programação de Computadores I – Arquivos
Estruturas de Dados Vetores.
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Arquitetura de Computadores
PIT – PROGRAMA INTERNO DE TREINAMENTO 2015
FUNDAMENTO DE PROGRAMAÇÃO
UNIDADE 7 Tipos estruturados
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Algoritmos e Programação MC102
Funções do Usuário em Matlab
Representação dos dados
Representação da Informação
Fundamentos de Programação 1
Relembrando... Variáveis : endereçam uma posição de memória que contem um determinado valor dependendo do seu tipo (char, int, float, double, ...) void.
Complexidade de Algoritmos
Profa. Maria Augusta Constante Puget
Linguagem PASCAL Tipos Estruturados
Programação de Computadores I – Arquivos
EDA - Prof. Paulemir Campos
DHD – Desenvolvimento em Hardware
Algoritmos Prof.: Carlos Alberto
Linguagem de Programação
Fundamentos de Programação 1
Professora: Helena Oliveira
DHD – Desenvolvimento em Hardware
Computação Eletrônica Vetores e Matrizes
Estruturas de Dados em C
Computação Eletrônica Funções e Escopo de Variáveis
ALGORITMOS.
Arrays de caracteres: strings
ALGORITMOS.
Estruturas definidas pelo programador
Linguagem C Linguagem Imperativa
Tipos Primitivos de Dados
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Programação de Computadores LINGUAGEM C – AULA 03 – PROF. WELLINGTON TELLES.
Programação II Mateus Raeder.
Introdução a progrmação Comandos condicionais: if e switch
Ponteiros.
Constantes, Variáveis e Memória
RESULUÇÃO DOS EXERCÍCIOS E
MATEMÁTICA.
Aula 3 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA LINGUAGEM C – VETORES

Revisão Sobre Caracteres Cadeia de Caracteres Vetores Bidimencionais SUMÁRIO Revisão Sobre Caracteres Cadeia de Caracteres Vetores Bidimencionais Declaração de Vetores Bidimencionais Vetores para Funções

Cadeia de Caracteres

REVISÃO SOBRE CARACTERES De forma genérica, tudo o que um computador faz é executar cálculos com números. Ele é incapaz de entender o texto. Portanto, devemos fazer uma escolha: que número utilizaremos para representar a letra "A"? E para os sinais de pontuação, que números usar?

REVISÃO SOBRE CARACTERES Existem diversas convenções (códigos) para fazer a correspondência entre códigos e caracteres. Como exemplo destas convenções podemos citar: ASCII UNICODE UTF-8 LATIN 1 (ISO-8859-1) WIN-1252

REVISÃO SOBRE CARACTERES Um dos mais conhecidos é o código ASCII (American Standard Code for Information Interchange). O ASCII é um código binário (cadeias de bits: 0s e 1s) que codifica um conjunto de 128 sinais, sendo que cada código binário possui 8 bits (equivalente a 1 byte), sendo 7 bits para o propósito de codificação e 1 bit de paridade (detecção de erro).

REVISÃO SOBRE CARACTERES Dos 128 sinais codificados em ASCII: 95 são sinais gráficos (letras do alfabeto latino, sinais de pontuação e sinais matemáticos); E 33 sinais de controle.

REVISÃO SOBRE CARACTERES A seguir são ilustrados 95 sinais gráficos segundo a tabela ASCII:

REVISÃO SOBRE CARACTERES A linguagem C normalmente trata a correspondência entre os caracteres e seus códigos numéricos através da tabela ASCII. E a diferença entre caracteres e inteiros é feita apenas através da maneira pela qual são tratados.

REVISÃO SOBRE CARACTERES Por exemplo, para um mesmo caractere podemos imprimir o mesmo valor de duas formas diferentes usando formatos diferentes. 1. char c = 65; 2. printf("%d %c\n",c,c); // Será impresso na tela o código e // sinal gráfico correspondente, // neste caso a letra ‘A’.

REVISÃO SOBRE CARACTERES A linguagem C permite a escrita de constantes caracteres, a qual é escrita envolvendo o caractere com aspas simples. Assim, a expressão ‘A’ representa uma constante caractere e resulta no valor numérico associado ao caractere ‘A’, no caso 65.

REVISÃO SOBRE CARACTERES O uso de constantes caracteres nos livra de conhecermos os códigos associados a cada caractere. A seguir, o exemplo anterior utilizando este recurso: 1. char c = ‘A’; 2. printf("%d %c\n",c,c); // Será impresso na tela o código e // sinal gráfico correspondente, // neste caso a letra ‘A’.

REVISÃO SOBRE CARACTERES Independente da tabela de códigos numéricos utilizada, garante-se que os dígitos são codificados em seqüência. Deste modo, se o dígito zero tem código 48, o dígito um tem obrigatoriamente código 49, e assim por diante. As letras minúsculas e as letras maiúsculas também formam dois grupos de códigos seqüenciais.

REVISÃO SOBRE CARACTERES Valendo-se desta sequência de caracteres, considere o exemplo a seguir: Escreva uma função para testar se um caractere c é um dígito númerico(um dos caracteres entre '0' e '9').

REVISÃO SOBRE CARACTERES Solução: int digito(char c){ if ((c>='0')&&(c<='9')) return 1; else return 0; }

Cadeia de Caracteres

Cadeia de Caracteres Em C, cadeias de caracteres (strings), são representadas por vetores do tipo char terminadas pelo caractere nulo ('\0'). O código de formato %s da função printf permite imprimir uma cadeia de caracteres. A função printf então recebe um vetor de char e imprime elemento por elemento, até encontrar o caractere nulo.

O código abaixo ilustra a representação de uma cadeia de caracteres: 1. char cidade[4]; 2. cidade[0] = 'R'; 3. cidade[1] = 'i'; 4. cidade[2] = 'o'; 5. cidade[3] = '\0'; 6. printf("%s \n", cidade);

2. cidade[0] = 'R'; 3. cidade[1] = 'i'; 4. cidade[2] = 'o'; Cadeia de Caracteres . 1. char cidade[4]; 2. cidade[0] = 'R'; 3. cidade[1] = 'i'; 4. cidade[2] = 'o'; 5. cidade[3] = '\0'; 6. printf("%s \n", cidade); Se o caractere '\0' não fosse colocado, a função printf executaria de forma errada, pois não conseguiria identificar o final da cadeia

char cidade[ ] = {'R', 'i', 'o', '\0'}; printf("%s \n", cidade); } Cadeia de Caracteres Como as cadeias de caracteres são vetores, podemos reescrever o código acima inicializando os valores dos elementos do vetor na declaração: int main( ){ char cidade[ ] = {'R', 'i', 'o', '\0'}; printf("%s \n", cidade); }

Cadeia de Caracteres A inicialização de cadeias de caracteres é tão comum em códigos C que a linguagem permite que elas sejam inicializadas escrevendo-se os caracteres entre aspas duplas ( “ “ ). 1. char cidade[ ] = "Rio"; 2. printf("%s \n", cidade); /* Neste caso, o caractere nulo é representado implicitamente.*/

REVISÃO SOBRE CARACTERES Outro exemplos: char s1[ ] = ""; /* A variável s1 armazena uma cadeia de caracteres com um único elemento, o caractere '\0‘ */ char s2[ ] = "Rio de Janeiro"; /* A variável s2 representa um vetor com 15 elementos. */ char s3[81]; /* A variável s3 representa uma cadeia de caracteres capaz de representar cadeias com até 80 caracteres, */ char s4[81] = "Rio"; /* A variável s4 também foi dimensionada para armazenar cadeias até 80 caracteres, mas seus primeiros quatro elementos foram atribuídos na declaração. */

REVISÃO SOBRE CARACTERES O uso do especificador %s se limita a função printf, pois quando utilizado na comando scanf, em alguns compiladores tende a pular os eventuais caracteres brancos e capturar a seqüência de caracteres não brancos ou e outros compiladores, tende a cessar a leitura ao encontrar um caractere branco.

REVISÃO SOBRE CARACTERES Por exemplo, em: char cidade[81]; ... scanf("%s", cidade); /* Se o usuário digitar Rio de Janeiro, apenas a palavra Rio será capturada, pois o %s lê somente uma seqüência de caracteres não brancos. */

REVISÃO SOBRE CARACTERES Para capturarmos estes nomes, podemos usar o especificador de formato %[...], no qual listamos entre os colchetes todos os caracteres que aceitaremos na leitura. Assim, ao utilizar este código de formato, a leitura dos dados do teclado cessa quando for informado um caractere diferente do listado entre colchetes.

REVISÃO SOBRE CARACTERES Se o primeiro caractere entre colchetes for o acento circunflexo (^), teremos o efeito inverso (negação). Assim,com o formato "%[^a]" a leitura prossegue enquanto a vogal ‘a’ não for encontrada.

REVISÃO SOBRE CARACTERES Exemplos: char str1[81] , str2[81]; scanf( “%[1234567890],” , str1); /*neste comando scanf, foi especificado que só será aceito texto contendo números.*/ scanf( “%[^1234567890],” , str2); /*neste comando scanf, foi especificado que só será aceito texto sem dígitos númericos.*/

REVISÃO SOBRE CARACTERES Exemplos: char str3[81], str4[9]; scanf( “%[^\n],” , str3); /*neste comando scanf, foi especificado que o comando irá ler o texto fornecido até encontrar uma quebra de linha.*/ scanf( “%8[^\n],” , str4); /*neste comando scanf, foi especificado que o comando irá ler o apenas os primeiros 8 caracteres fornecidos ou irá encerrar a leitura do texto do fornecido quando encontrar uma quebra de linha.*/

REVISÃO SOBRE CARACTERES Exemplos: char str4[9]; scanf( “%8[^\n],” , str4); /*Devemos notar que não usamos o caractere & na passagem da cadeia para a função, pois a cadeia é um vetor (a variável str4 é uma constante que aponta para o endereço do primeiro elemento do vetor e a função atribui os valores dos elementos a partir desse endereço).*/

Vetores Bidimencionais

Vetores Bidimencionais Um vetor bidemensional é uma estrutura bidimensional capaz de armazenar dados de um mesmo tipo. Vetores bidimensionais são conhecidos também por Matrizes e podemos considerar o conceito de Matriz como uma extensão do conceito de vetores, onde vetores corresponderia a uma estrutura unidimensional.

Vetores Bidimencionais A dimensão de um vetor bidemensional (matriz) é definida através de 2 números, o número de linhas e o de colunas. Na linguagem C, o primeiro índice sempre corresponde à linha, e o segundo índice, à coluna a ser acessada.

DECLARAÇÃO DE VETORES BIDIMENCIONAIS

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Um vetor bidimensional deve ser declarada da seguinte forma: tipo_do_vetor nome_do_vetor [num_linhas][num_colunas];

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Por exemplo, para declararmos um vetor bidemensional de valores reais com 4 linhas e 3 colunas, fazemos: float mat[4][3]; Outro exemplos: int matInt [6][2]; /* matriz com 6 linhas e 2 colunas de inteiros */ float matReal [5][7]; /* matriz com 5 linhas e 7 colunas de floats */ char matChar [3][4]; /* matriz com 3 linhas e 4 colunas de chars */

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Pilha de execução para a matriz float mat[4][3]:

DECLARAÇÃO DE VETORES BIDIMENCIONAIS As matrizes também podem ser inicializadas na declaração: float mat[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; Ou podemos inicializar seqüencialmente: float mat[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; O número de elementos por linha pode ser omitido numa inicialização, mas o número de colunas deve, obrigatoriamente, ser fornecido: float mat[ ][3] = {1,2,3,4,5,6,7,8,9,10,11,12};

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Após a declaração de uma matriz, a variável que representa a matriz, mat no exemplo anterior, representa um ponteiro para o primeiro “vetor- linha”, composto por 3 elementos. Com isto, mat[1] aponta para o segundo “vetor-linha”, e assim por diante.

VETORES PARA FUNÇÕES

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Em C, a forma mais prática de se passar um vetor para uma função é através de um parâmetro do tipo ponteiro. Salientamos que a expressão “passar um vetor para uma função” deve ser interpretada como “passar o endereço inicial do vetor”.

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Exemplo: Escreva uma função que retorne a média aritmética dos valores inseridos em um vetor. float media (int n, float *v){ int i; float s = 0.0; for (i = 0; i < n; i++) s += v[i]; return s/n; }

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Exemplo: Escreva uma função que receba uma cadeia de caracteres e imprima caractere por caractere. void imprime (char *s){ int i; for (i=0; s[i] != '\0'; i++){ printf("%c",s[i]); printf("\n"); }

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Quanto a Matrizes (Vetores Bidimensionais), a forma usual de se declarar o parâmetro de uma função como matriz, é omitindo o número de linhas: void f (..., float mat[ ][3], ...); Outra forma, é declarando o parâmetro como ponteiro e definindo o número de colunas: void f (..., float (*mat)[3], ...);

DECLARAÇÃO DE VETORES BIDIMENCIONAIS Exemplo: Escreva uma função que receba um matriz e imprima todos os seus elementos. void exibir(int matriz[][4]) { int linha, coluna; for(linha=0 ; linha < 4 ; linha++) { for(coluna=0 ; coluna < 4 ; coluna++) { printf("%3d ", matriz[linha][coluna]); } printf("\n");