ces-10 introduÇÃo À computaÇÃo aulas práticas – 2013 capítulo viii cadeias de caracteres
TRANSCRIPT
CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO
Aulas Práticas – 2013Aulas Práticas – 2013
Capítulo VIII Capítulo VIII
Cadeias de CaracteresCadeias de Caracteres
Programa 8.1: Leitura e escrita de cadeias de Programa 8.1: Leitura e escrita de cadeias de caracterescaracteres
#include <stdio.h>#include <stdio.h>
#include <conio.h>#include <conio.h>
void main () {void main () {
char char Cad1[10]Cad1[10], , Cad2[] = "abcde"Cad2[] = "abcde"; int i;; int i;
printf ("Digite uma cadeia de caracteres:\n\n");printf ("Digite uma cadeia de caracteres:\n\n");
scanf ("%s", Cad1);scanf ("%s", Cad1);
printf ("\nCad1 = %s", Cad1);printf ("\nCad1 = %s", Cad1);
printf ("\nCad2 = %s", Cad2);printf ("\nCad2 = %s", Cad2);
printf ("\n");printf ("\n");
for (i = 0; i <= 9; i++)for (i = 0; i <= 9; i++)
printf ("\n\tCad1[%d] = '%c' ou %d", i, Cad1[i], Cad1[i]);printf ("\n\tCad1[%d] = '%c' ou %d", i, Cad1[i], Cad1[i]);
printf ("\n");printf ("\n");
for (i = 0; i <= 5; i++)for (i = 0; i <= 5; i++)
printf ("\n\tCad2[%d] = '%c' ou %d", i, Cad2[i], Cad2[i]);printf ("\n\tCad2[%d] = '%c' ou %d", i, Cad2[i], Cad2[i]);
printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");
getch ();getch ();
}}
Copiar, salvar e executar
?
0
?
1
?
2
?
3
?
4
?
5
Cad1 ? ? ? ?
6 7 8 9
‘a’
0
‘b’
1
‘c’
2
‘d’
3
‘e’
4 5
Cad2 ‘\
0’
Supor a digitação de 1234<enter>
‘1’
0
‘2’
1
‘3’
2
‘4’
3
‘\0’4
?
5
Cad1 ? ? ? ?
6 7 8 9
Foi escrito:
Cad1 = 1234Cad2 = abcde
Cuidado para não digitar mais que 9 caracteres para Cad1
Programa 8.2: O formato %s para leitura de Programa 8.2: O formato %s para leitura de cadeias de caracterescadeias de caracteres
#include <stdio.h>#include <stdio.h>
#include <conio.h>#include <conio.h>
typedef char cadeia[20];typedef char cadeia[20];
void main () {void main () {
cadeia Cad1, Cad2;cadeia Cad1, Cad2;
printf ("Digite uma frase:\n\n");printf ("Digite uma frase:\n\n");
scanf ("%s%s", Cad1, Cad2);scanf ("%s%s", Cad1, Cad2);
printf ("\nCad1 = %s", Cad1);printf ("\nCad1 = %s", Cad1);
printf ("\nCad2 = %s", Cad2);printf ("\nCad2 = %s", Cad2);
printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");
getch ();getch ();
}}
Copiar, salvar e executar
Digite uma frase:
gosto muito de CES-10
Cad1 = gostoCad2 = muito
Digite algo para encerrar
Resultado de uma execução
Com o formato %s, scanf encerra a leitura para uma variável, quando encontra um espaço em branco, ou um ‘enter’, ou tabulação
Programa 8.3: Comprimento de cadeias de Programa 8.3: Comprimento de cadeias de caracterescaracteres
#include <stdio.h>#include <stdio.h>
#include <string.h>#include <string.h>
#include <conio.h>#include <conio.h>
typedef char cadeia[50];typedef char cadeia[50];
void main () {void main () {
cadeia Cad;cadeia Cad;
printf ("Digite uma cadeia de caracteres:\n\n");printf ("Digite uma cadeia de caracteres:\n\n");
scanf ("%s", Cad);scanf ("%s", Cad);
printf ("\n\tComprimento (%s) = %d", Cad, printf ("\n\tComprimento (%s) = %d", Cad, strlen(Cad)strlen(Cad)););
printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");
getch ();getch ();
}}
Copiar, salvar e executar
Digite uma cadeia de caracteres:
anticonstitucionalissimamente
Comprimento (anticonstitucionalissimamente) = 29
Digite algo para encerrar
Resultado de uma execução
‘strlen’ retorna o no de caracteres de uma cadeia, sem contar o ‘\0’
Programa 8.4: Vetor de cadeias de caracteresPrograma 8.4: Vetor de cadeias de caracteres
#include <stdio.h>#include <stdio.h>#include <string.h>#include <string.h>#include <conio.h>#include <conio.h>typedef char cadeia[21];typedef char cadeia[21];void main () {void main () {
cadeia VetCadeia[30];cadeia VetCadeia[30]; int i, n, int i, n, Comprimento[30]Comprimento[30]; ; printf ("Armazenamento de cadeia de caracteres:\n\n");printf ("Armazenamento de cadeia de caracteres:\n\n"); printf ("Armazenar quantas cadeias (maximo 30 cadeias)? ");printf ("Armazenar quantas cadeias (maximo 30 cadeias)? "); scanf ("%d", &n);scanf ("%d", &n); for (i = 0; i <= n-1; i++) {for (i = 0; i <= n-1; i++) { printf ("\nDigite uma cadeia (maximo 20 caracteres): ");printf ("\nDigite uma cadeia (maximo 20 caracteres): ");
scanf ("%s", VetCadeia[i]);scanf ("%s", VetCadeia[i]); Comprimento[i] = strlen (VetCadeia[i]);Comprimento[i] = strlen (VetCadeia[i]); }}
printf ("\n\n%30s|%15s", "Cadeia", "Comprimento");printf ("\n\n%30s|%15s", "Cadeia", "Comprimento"); printf ("\n----------------------------------------------");printf ("\n----------------------------------------------"); for (i = 0; i <= n-1; i++)for (i = 0; i <= n-1; i++) printf ("\n%30s|%15d", VetCadeia[i], Comprimento[i]);printf ("\n%30s|%15d", VetCadeia[i], Comprimento[i]);
printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();}}
Copiar, salvar e executar
Cadeias poderão ter no máximo 20 caracteres
Vetor de no máximo 30 cadeias de caracteres
Vetor com o comprimento das cadeias do vetor VetCadeia
Programa 8.5: a função getsPrograma 8.5: a função gets
#include <stdio.h>#include <stdio.h>
#include <conio.h>#include <conio.h>
void main ( ) {void main ( ) {
int i, n; char Frase[200];int i, n; char Frase[200];
printf ("Numero de frases: ");printf ("Numero de frases: ");
scanf ("%d", &n);scanf ("%d", &n);
printf ("\n");printf ("\n");
for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {
printf ("\n\nDigite a %da frase: ", i);printf ("\n\nDigite a %da frase: ", i);
fflush (stdin); gets (Frase);fflush (stdin); gets (Frase);
printf ("\n\tFrase digitada: %s", Frase);printf ("\n\tFrase digitada: %s", Frase);
}}
printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();
}} A função ‘fflush’ esvazia o buffer do teclado antes da chamada de ‘gets’
A frase digitada poderá ter caracteres brancos e tabulações
Copiar, salvar e executar
Programa 8.6: Conjuntos máximos de um Programa 8.6: Conjuntos máximos de um arquivoarquivo
Sejam as seguintes definições:Sejam as seguintes definições:
Conjunto:Conjunto: sequência de caracteres imprimíveis sequência de caracteres imprimíveis não brancos, dentro de um arquivo-textonão brancos, dentro de um arquivo-texto
SubconjuntoSubconjunto de um dado conjunto: conjunto de um dado conjunto: conjunto contido nesse dado conjuntocontido nesse dado conjunto
Subconjunto próprio Subconjunto próprio de um dado conjunto: de um dado conjunto: subconjunto desse conjunto dado diferente do subconjunto desse conjunto dado diferente do mesmomesmo
Conjunto máximo:Conjunto máximo: conjunto que não é conjunto que não é subconjunto próprio de nenhum outro conjuntosubconjunto próprio de nenhum outro conjunto
#include <stdio.h>#include <stdio.h>
#include <conio.h>#include <conio.h>
typedef char cadeia1[31], cadeia2[11];typedef char cadeia1[31], cadeia2[11];
void main ( ) {void main ( ) {
int x, n;int x, n;
cadeia1 ConjMax;cadeia1 ConjMax;
cadeia2 FileName;cadeia2 FileName;
FILE *arq;FILE *arq;
printf ("Conjuntos maximos de um arquivo: ");printf ("Conjuntos maximos de um arquivo: ");
printf ("\n\nDigite o nome do arquivo: ");printf ("\n\nDigite o nome do arquivo: ");
scanf ("%s", FileName);scanf ("%s", FileName);
arq = fopen (FileName, "r");arq = fopen (FileName, "r");
n = 0; x = fscanf (arq, "%s", ConjMax);n = 0; x = fscanf (arq, "%s", ConjMax);
while (x > 0) {while (x > 0) {
printf ("\n%s", ConjMax);printf ("\n%s", ConjMax);
n++; x = fscanf (arq, "%s", ConjMax);n++; x = fscanf (arq, "%s", ConjMax);
}}
printf ("\n\nTotal: %d conjuntos maximos", n);printf ("\n\nTotal: %d conjuntos maximos", n);
printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();
}}
Criar um arquivo de nome arquivo01 com o seguinte conteúdo:198 0 17439&() 100110100011101 82736193826 01101001 1b5FD4 1 34528178 00 ff123e ABGkJX 98271 10
Copiar, salvar e executar
Exercício 8.1: Vetor de conjuntos máximosExercício 8.1: Vetor de conjuntos máximos
Alterar o Alterar o Programa 8.6Programa 8.6 para que ele coloque para que ele coloque todos os conjuntos máximos num vetor de cadeias todos os conjuntos máximos num vetor de cadeias de caracteres e os comprimentos desses conjuntos de caracteres e os comprimentos desses conjuntos num vetor de inteirosnum vetor de inteiros
Usar as seguintes declarações:Usar as seguintes declarações:cadeia1 VetCadeia[40]; int Comprimento[40];cadeia1 VetCadeia[40]; int Comprimento[40];
Sendo Sendo aa e e bb duas cadeias de caracteres, para duas cadeias de caracteres, para copiar o conteúdo da cadeia copiar o conteúdo da cadeia bb na cadeia na cadeia aa, usar:, usar:
strcpy (a, b); strcpy (a, b); ao invés de ao invés de a = b;a = b;
A função A função strcpystrcpy está no arquivo está no arquivo string.hstring.h
No final, escrever o conteúdo do vetor No final, escrever o conteúdo do vetor VetCadeiaVetCadeia, com cada cadeia ao lado de seu , com cada cadeia ao lado de seu comprimentocomprimento
strcpy (VetCadeia[i], ConjMax);
Exemplo de saída, usando como entrada o Exemplo de saída, usando como entrada o arquivo01:arquivo01:
198 0 17439&() 100110100011101 82736193826 01101001 1b5FD4 1 34528178 00 ff123e ABGkJX 98271 10
arquivo01
Conjuntos maximos de um arquivo:
Digite o nome do arquivo: arquivo01
Total: 14 conjuntos maximos
198 3 0 1 17439&() 8 100110100011101 15 82736193826 11 01101001 8 1b5FD4 6 1 1 34528178 8 00 2 ff123e 6 ABGkJX 6 98271 5 10 2
Digite algo para encerrar:Saída no
vídeo
Exercício 8.2: Alterar o programa do Exercício 8.2: Alterar o programa do Exercício 8.1 para: Exercício 8.1 para:
Montar um vetor de nome Montar um vetor de nome VetBinVetBin, com os , com os conjuntos máximos de conjuntos máximos de VetCadeiaVetCadeia que que contenham apenas contenham apenas 0’s0’s e e 1’s1’s
Considerando tais conjuntos máximos como Considerando tais conjuntos máximos como sendo números binários em sendo números binários em complemento de complemento de 22, montar um vetor de nome , montar um vetor de nome Compl2Compl2 contendo contendo o valor em decimal correspondente a cada um o valor em decimal correspondente a cada um desses conjuntos máximosdesses conjuntos máximos
No final, o programa deve escrever cada No final, o programa deve escrever cada número binário em complemento de 2 ao lado número binário em complemento de 2 ao lado do valor correspondente em decimaldo valor correspondente em decimal
Obs.: sendo A[i] = “abcde”, então
A[i][0] = ‘a’; A[i][1] = ‘b’; A[i][2] = ‘c’; etc
0 = Compl-2 (0) e 1 = Compl-2 (-1)
Exemplo de saída, usando como entrada o Exemplo de saída, usando como entrada o arquivo01:arquivo01:
Conjuntos maximos de um arquivo:Conjuntos maximos de um arquivo:
Digite o nome do arquivo: arquivo01Digite o nome do arquivo: arquivo01
Total: 14 conjuntos maximosTotal: 14 conjuntos maximos
198 3198 3 0 10 1 17439&() 817439&() 8 100110100011101 15100110100011101 15 82736193826 1182736193826 11 01101001 801101001 8 1b5FD4 61b5FD4 6 1 11 1 34528178 834528178 8 00 200 2 ff123e 6ff123e 6 ABGkJX 6ABGkJX 6 98271 598271 5 10 210 2
6 numeros binarios6 numeros binarios
0 = compl-2 (0)0 = compl-2 (0) 100110100011101 = compl-2 (-13027)100110100011101 = compl-2 (-13027) 01101001 = compl-2 (105)01101001 = compl-2 (105) 1 = compl-2 (-1)1 = compl-2 (-1) 00 = compl-2 (0)00 = compl-2 (0) 10 = compl-2 (-2)10 = compl-2 (-2)
Digite algo para encerrar:Digite algo para encerrar:
Exercício 8.3: Alterar o programa do Exercício 8.3: Alterar o programa do Exercício 8.2 para: Exercício 8.2 para:
Montar um vetor de nome Montar um vetor de nome VetDecVetDec com os com os conjuntos máximos de conjuntos máximos de VetCadeiaVetCadeia que que contenham apenas contenham apenas dígitos decimais dígitos decimais e não e não correspondam a números binárioscorrespondam a números binários
Montar um vetor de números reais de nome Montar um vetor de números reais de nome Log10Log10 tal que, se tal que, se VetDec[i] VetDec[i] tiver 9 ou menos tiver 9 ou menos dígitos, dígitos, Log10[i] Log10[i] é o logaritmo na base 10 do é o logaritmo na base 10 do número correspondente; senão, número correspondente; senão, Log10[i] = -1Log10[i] = -1
No final, o programa deve escrever cada No final, o programa deve escrever cada elemento do vetor elemento do vetor VetDec VetDec ao lado do elemento ao lado do elemento correspondente no vetor correspondente no vetor Log10Log10
Exemplo de saída, usando como entrada o Exemplo de saída, usando como entrada o arquivo01:arquivo01:
6 numeros binarios6 numeros binarios
0 = compl-2 (0)0 = compl-2 (0)
100110100011101 = compl-2 (-13027)100110100011101 = compl-2 (-13027)
01101001 = compl-2 (105)01101001 = compl-2 (105)
1 = compl-2 (-1)1 = compl-2 (-1)
00 = compl-2 (0)00 = compl-2 (0)
10 = compl-2 (-2)10 = compl-2 (-2)
4 numeros decimais4 numeros decimais
198 Log10 ( 198) = 2.296665198 Log10 ( 198) = 2.296665
82736193826 ***** Valor muito grande *****82736193826 ***** Valor muito grande *****
34528178 Log10 ( 34528178) = 7.53817434528178 Log10 ( 34528178) = 7.538174
98271 Log10 ( 98271) = 4.99242598271 Log10 ( 98271) = 4.992425
Digite algo para encerrar:Digite algo para encerrar:
Exercício 8.4: Alterar o programa do Exercício Exercício 8.4: Alterar o programa do Exercício 8.3 para: 8.3 para:
Montar um vetor de nome Montar um vetor de nome VetHexaVetHexa com os com os conjuntos máximos de conjuntos máximos de VetCadeiaVetCadeia que contenham que contenham apenas apenas dígitos hexadecimaisdígitos hexadecimais e não e não correspondam a números binárioscorrespondam a números binários
Montar um vetor de números inteiros de nome Montar um vetor de números inteiros de nome ValBase10ValBase10 tal que, se tal que, se VetHexa[i] VetHexa[i] tiver 7 ou tiver 7 ou menos dígitos, menos dígitos, ValBase10[i] ValBase10[i] é o valor na base 10 é o valor na base 10 do número correspondente; senão, do número correspondente; senão, ValBase10[i] ValBase10[i] = -1= -1
No final, o programa deve escrever cada elemento No final, o programa deve escrever cada elemento do vetor do vetor VetHexa VetHexa ao lado do elemento ao lado do elemento correspondente no vetor correspondente no vetor ValBase10ValBase10
Exemplo de saída, usando como entrada o Exemplo de saída, usando como entrada o arquivo01:arquivo01:
6 numeros binarios6 numeros binarios
0 = compl-2 (0)0 = compl-2 (0) 100110100011101 = compl-2 (-13027)100110100011101 = compl-2 (-13027) 01101001 = compl-2 (105)01101001 = compl-2 (105) 1 = compl-2 (-1)1 = compl-2 (-1) 00 = compl-2 (0)00 = compl-2 (0) 10 = compl-2 (-2)10 = compl-2 (-2)
4 numeros decimais4 numeros decimais
198 Log10 ( 198) = 2.296665198 Log10 ( 198) = 2.296665 82736193826 ***** Valor muito grande *****82736193826 ***** Valor muito grande ***** 34528178 Log10 ( 34528178) = 7.53817434528178 Log10 ( 34528178) = 7.538174 98271 Log10 ( 98271) = 4.99242598271 Log10 ( 98271) = 4.992425
6 numeros hexadecimais6 numeros hexadecimais
198 = (408)10198 = (408)10 82736193826 ***** Valor muito grande *****82736193826 ***** Valor muito grande ***** 1b5FD4 = (1794004)101b5FD4 = (1794004)10 34528178 ***** Valor muito grande *****34528178 ***** Valor muito grande ***** ff123e = (16716350)10ff123e = (16716350)10 98271 = (623217)1098271 = (623217)10
Digite algo para encerrar:Digite algo para encerrar: