Buscar

2015410 164139 UNIDADE+2+ +ESTRUTURAS+DE+DADOS+HOMOGÊNEAS+ +AULA+03

Prévia do material em texto

ALGORITMOS II 
Ricardo de Almeida 
(ricardo.almeida@univix.edu.br) 
 
1. Relembrando... 
2. Caracteres 
3. Cadeia de Caracteres 
4. Declarações da Cadeia de Caracteres 
5. Leitura de Caracteres e Cadeia de 
Caracteres 
6. Exercícios de Fixação 
7. Revisão 
Agenda 
Quais pontos foram vistos na última aula? 
• Variáveis Indexadas Bidimensionais (Matrizes) 
• Declaração de Matriz 
• Índices de Matriz 
• Inicialização de Matriz 
• Alocação de Matriz 
Relembrando... 
Caracteres 
Caracteres 
 
Efetivamente, a linguagem C não oferece um tipo caractere. Os 
caracteres são representados por códigos numéricos. 
 
A linguagem oferece o tipo char, que pode armazenar valores 
inteiros “pequenos”: um char tem tamanho de 1 byte, 8 bits, e 
sua versão com sinal pode representar valores que variam de 
–128 a 127 (256 caracteres distintos). 
 
Como os códigos associados aos caracteres estão dentro desse 
intervalo, usamos o tipo char para representar caracteres. 
A correspondência entre os caracteres e seus códigos numéricos é 
feita por uma tabela de códigos. Em geral, usa-se a tabela ASCII, 
mas diferentes máquinas podem usar diferentes códigos. 
 
Caracteres 
Caracteres 
 
ASCII (acrônimo para American Standard Code for Information 
Interchange, que em português significa "Código Padrão 
Americano para o Intercâmbio de Informação") é uma codificação 
de caracteres de oito bits baseada no alfabeto inglês. 
 
Os códigos ASCII representam texto em computadores e 
equipamentos de comunicação. Desenvolvida a partir de 1960, 
grande parte das codificações de caracteres a utilizam como base. 
 
A codificação define 256 caracteres, desses, 33 são como 
caracteres de controle, atualmente não utilizáveis para edição de 
texto. Exceto pelo caractere de espaço, o restante é composto por 
caracteres imprimíveis. 
Caracteres 
Caracteres 
 
Como ilustração, mostramos a seguir os códigos associados a 
alguns caracteres segundo a tabela ASCII. 
Caracteres 
Exemplo 2.7 e 2.8: Visualizemos a Tabela ASCII e percebam a 
sequência em que os caracteres aparecem, e como os caracteres 
são tratados pela linguagem C. 
/* Exemplo 2.7 - Tabela ASCII */ 
#include<stdio.h> 
#include<stdlib.h> 
int main() { 
 int c=-128; 
 while(c < 128) { 
 printf("%c [%d]\t",c ,c); 
 c++;} 
 printf ("\n"); 
 system ("PAUSE"); 
 return (0); 
} 
/* Exemplo 2.8 - Ordem da Tabela */ 
#include<stdio.h> 
#include<stdlib.h> 
int main() { 
 char c = 'a'; 
 printf("%c [%d]\n",c ,c); 
 c = 'b'; 
 printf("%c [%d]\n",c ,c); 
 c = '0'; 
 printf("%c [%d]\n",c ,c); 
 c = '1'; 
 printf("%c [%d]\n",c ,c); 
 
 system ("PAUSE"); 
 return (0); 
} 
Caracteres 
 
Além de agregar portabilidade e clareza ao código, o uso de 
constantes caracteres nos livra de conhecermos os códigos 
associados a cada caractere. 
 
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 ('0') tem código 48, o dígito um ('1') 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. 
Os exemplos a seguir tiram proveito desta seqüência dos códigos 
de caracteres. 
Caracteres 
#include<stdio.h> 
#include<stdlib.h> 
 
int main() 
{ 
 char c; 
 
 do 
 { 
 printf("Informe um numero de 0 a 9: "); 
 scanf("\n%c",&c); /* use \n na frente do % */ 
 } 
 while ((c<'0')||(c>'9')); 
 
 printf ("Ok, o numero escolhido foi: %c\n", c); 
 
 system ("PAUSE"); 
 return (0); 
} 
Caracteres 
Exemplo 2.9: Queremos escrever uma função para testar se um 
caractere c é um dígito (um dos caracteres entre '0' e '9'). 
#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
 char c, M; 
 printf("Informe uma letra minuscula: "); 
 scanf("%c",&c); 
 
 /* Verifica se já é maiúscula */ 
 if ((c>='A')&&(c<='Z')) 
 printf ("A letra [%c] digitada ja eh maiuscula\n", c); 
 else 
 { 
 /* Converte para maiúcula */ 
 M = c - 'a' + 'A'; 
 printf ("A maiuscula de [%c] eh [%c]\n", c, M); 
 } 
 system ("PAUSE"); 
 return (0); 
} 
Caracteres 
Exemplo 2.10: Queremos escrever uma função para converter 
um caractere minúsculo em um caractere maiúsculo. 
Cadeia de Caracteres 
 
Cadeias de caracteres (strings), em C, são representadas por 
vetores do tipo char terminadas, obrigatoriamente, pelo caractere 
nulo ('\0'). Portanto, para armazenarmos uma cadeia de 
caracteres, devemos reservar uma posição adicional para o 
caractere de fim da cadeia. 
 
Todas as funções que manipulam cadeias de caracteres (e a 
biblioteca padrão de C oferece várias delas) recebem como 
parâmetro um vetor de char, isto é, um ponteiro para o primeiro 
elemento do vetor que representa a cadeia, e processam caractere 
por caractere, até encontrarem o caractere nulo, que sinaliza o 
final da cadeia. 
Cadeia de Caracteres 
Cadeia de Caracteres 
 
Por exemplo, o especificador 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. 
 
A vantagem de ter o final da cadeia delimitado pelo caractere nulo 
está no fato de não ser necessário passar explicitamente para as 
funções que recebem cadeias de caracteres o número de 
caracteres a ser considerado. A partir do ponteiro para o primeiro 
caractere, as funções processam caractere a caractere até que um 
'\0' seja encontrado. 
Cadeia de Caracteres 
Cadeia de Caracteres 
 
O código abaixo ilustra a representação de uma cadeia de 
caracteres. Como queremos representar a palavra Rio, composta 
por 3 caracteres, declaramos um vetor com dimensão 4 (um 
elemento adicional para armazenarmos o caractere nulo no final 
da cadeia). O código preenche os elementos do vetor, incluindo o 
caractere '\0', e imprime a palavra na tela. Exemplo 2.11 
#include<stdio.h> 
#include<stdlib.h> 
 
int main() 
{ 
 char cidade[4]; 
 cidade[0] = 'R'; 
 cidade[1] = 'i'; 
 cidade[2] = 'o'; 
 cidade[3] = '\0'; 
 printf("%s \n", cidade); 
 system ("PAUSE"); 
 return 0; 
} 
Cadeia de Caracteres 
Cadeia de Caracteres 
 
Como as cadeias de caracteres são vetores, podemos reescrever o 
código anterior inicializando os valores dos elementos do vetor: 
 
 
 
 
 
 
 
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. 
Cadeia de Caracteres 
#include<stdio.h> 
#include<stdlib.h> 
int main() { /* 2.12 – Cadeia */ 
char cidade[ ] = {'R', 'i', 'o', '\0'}; 
printf("%s \n", cidade); 
system ("PAUSE"); 
return 0; 
} 
#include<stdio.h> 
#include<stdlib.h> 
int main() { /* 2.13 – Cadeia */ 
char cidade[ ] = "Rio"; 
printf("%s \n", cidade); 
system ("PAUSE"); 
return 0; 
} 
Declarações da Cadeia de Caracteres 
 
Vejamos exemplos das declarações da Cadeia de Caracteres: 
 
• s1 cadeia de caracteres vazia (armazena o caractere '\0'). 
 
• s2 armazena cadeia de 14 caracteres (vetor com 15 elementos). 
 
• s3 armazena cadeia com até 80 caracteres dimensionada com 81 
elementos, mas não inicializada, com conteúdo desconhecido. 
 
• s4 armazena cadeias com até 80 caracteres primeiros quatro 
elementos atribuídos na declaração {'R', 'i', 'o', '\0'}. 
Cadeia de Caracteres 
char s1[] = "" ; 
char s2[] = "Rio de Janeiro";char s3[81]; 
char s4[81] = "Rio"; 
Leitura de Caracteres e Cadeia de Caracteres 
 
Para capturarmos o valor de um caractere simples fornecido pelo 
usuário via teclado, usamos a função scanf, os especificadores é 
quem definirão o comportamento da função: 
 
scanf com o Especificador de formato %c 
 
• lê o valor de um único caractere fornecido via teclado. 
 
• não pula os “caracteres brancos”; caractere branco = 
espaço (' '), tabulação ('\t') ou nova linha ('\n' ). 
Cadeia de Caracteres 
char a; 
... 
scanf("%c", &a); 
... 
Leitura de Caracteres e Cadeia de Caracteres 
 
scanf com o Especificador de formato %c (continuação) 
 
 se o usuário teclar um espaço antes da letra: 
• o código do espaço será capturado. 
• a letra será capturada apenas na próxima chamada de scanf. 
 
 para pular todos os “caracteres brancos” antes do caractere: 
• basta incluir um espaço em branco no formato, antes do 
especificador. 
Cadeia de Caracteres 
char a; 
... 
scanf(" %c", &a); /* o branco no formato pula brancos da entrada */ 
... 
Leitura de Caracteres e Cadeia de Caracteres 
 
scanf com o Especificador de formato %s 
 
 lê uma cadeia de caracteres não brancos. 
 
 pula os eventuais caracteres brancos antes da cadeia. 
 
 
 
 
 
 
 &cidade não é usada pois a cadeia é um vetor. 
 
 o código acima funciona apenas para capturar nomes simples: 
• se o usuário digitar Rio de Janeiro, apenas Rio será capturada, 
pois %s lê somente uma seqüência de caracteres não brancos. 
Cadeia de Caracteres 
char cidade[81]; 
... 
scanf("%s", cidade); 
... 
Leitura de Caracteres e Cadeia de Caracteres 
 
scanf com o Especificador de formato %[...] 
 
 %[...] lista entre os colchetes todos os caracteres aceitos na 
leitura. 
 
 
• lê sequências de vogais. 
• leitura prossegue até encontrar um caractere que não seja uma 
vogal. 
 
 %[^...] lista entre os colchetes todos os caracteres não aceitos 
na leitura. 
 
 
• lê sequências de caracteres que não são vogais. 
• leitura prossegue até encontrar um caractere que seja uma 
vogal. 
 
 
 
 
Cadeia de Caracteres 
%[aeiou]; 
%[^aeiou]; 
Leitura de Caracteres e Cadeia de Caracteres 
 
scanf com o caractere de mudança de linha ('\n'). 
 
 Lê uma sequência de caracteres até que seja encontrado o 
caractere de mudança de linha ('\n'): 
 
• 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. 
 
 
 
 
Cadeia de Caracteres 
char cidade[81]; 
... 
scanf(" %[^\n]", cidade); 
... 
Leitura de Caracteres e Cadeia de Caracteres 
 
gets (get string) função da biblioteca string.h 
 
 O gets não é uma função muito confiável, pois se o usuário 
digitar mais caracteres do que o previsto, ela pega mais caracteres 
que o tamanho da sua string, o que pode interferir em outras 
variáveis do seu programa. 
 
• Nas novas versões da linguagem C, esta função gets já não 
existe mais, foi excluída. 
 
 
 
 
Cadeia de Caracteres 
char cidade[81]; 
... 
 printf ("Digite uma cidade: "); 
 gets (cidade); 
... 
Exercícios Práticos de Fixação 
Exercícios Práticos de Fixação 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
E como seria para trabalharmos com Caracteres? 
 
É o que veremos na próxima aula, quando discutirmos: 
 
• Manipulação de Caracteres. 
• Funções de Caracteres. 
Cadeia de Caracteres 
Revisão 
Quais pontos foram vistos nesta aula? 
• Caracteres. 
• Cadeia de Caracteres. 
• Declarações da Cadeia de Caracteres. 
• Leitura de Caracteres e Cadeia de Caracteres. 
 
ALGORITMOS II 
Ricardo de Almeida 
(ricardo.almeida@univix.edu.br)

Continue navegando