ces-10 introduÇÃo À computaÇÃo aulas práticas – 2013 capítulo viii cadeias de caracteres

16
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Aulas Práticas – 2013 Aulas Práticas – 2013 Capítulo VIII Capítulo VIII Cadeias de Caracteres Cadeias de Caracteres

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 2: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias 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

Page 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 4: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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’

Page 5: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 6: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

#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

Page 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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)

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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:

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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:

Page 15: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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

Page 16: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VIII Cadeias de Caracteres

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: