1 / 76

Capítulo VI – Variáveis Indexadas

Capítulo VI – Variáveis Indexadas. 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres.

hada
Download Presentation

Capítulo VI – Variáveis Indexadas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres

  2. 6.4 – Aplicações com Matrizes Numéricas 6.4.1 – Transformar uma matriz quadrada em sua transposta • Matriz transposta de uma matriz quadrada é aquela cujas linhas são as colunas da matriz original e cujas colunas são as linhas da mesma

  3. 0 0 1 1 2 2 3 3 4 4 0 0 1 11 3 1 12 8 2 6 13 13 11 3 4 16 18 14 21 23 15 5 1 1 A 16 21 6 2 4 5 9 22 7 7 17 10 14 15 18 8 12 23 19 19 24 20 17 9 24 25 25 10 22 20 2 2 Exemplo: • Se o objetivo fosse apenas obter o resultado na tela: for (i = 0; i < n; i++) { for (j = 0; i < n; j++) printf (“%5d”, A[j][i]); printf (“\n”); } • Mas deseja-se transformar a original na transposta 3 3 4 4 Matriz quadrada 5 x 5 original Matriz transposta da original Escrevendo cada coluna numa linha da tela

  4. 0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 2 12 13 3 14 4 5 15 1 21 6 16 17 7 22 18 8 23 24 19 9 20 25 10 2 3 A 4

  5. 0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 14 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 3 A 4 aux 14

  6. 0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 18 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 3 A 4 aux 14

  7. 0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 18 4 15 5 1 6 16 21 22 17 7 23 14 8 9 24 19 20 10 25 2 3 A 4 Trocar (A[i][j], A[j][i]): aux = A[i][j]; A[i][j] = A[j][i]; A[j][i] = aux; aux 14

  8. 0 1 2 3 4 Para transformar toda a matriz: Percorrê-la com 2 cursores ‘i’ e ‘j’ e Trocar (A[i][j], A[j][i]) O percurso não pode abranger toda a matriz!!! Porquê??? 0 11 1 12 2 13 3 14 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 A 3 4 Sejam os comandos: for (i = 0; i < n; i++) for (j = 0; j < n; j++) Trocar (A[i][j], A[j][i]); que percorrem toda a matriz Quando (i, j) = (1, 3) Trocar (A[1][3], A[3][1]) Mais adiante, quando (i, j) = (3, 1) Trocar (A[3][1], A[1][3]) A troca anterior é desfeita

  9. 0 1 2 3 4 Deve-se planejar o percurso de ‘i’ e de ‘j’ Para começar, a diagonal principal não precisa ser percorrida A parte acima dessa diagonal deve ser trocada com a parte abaixo dela 0 11 1 2 12 13 3 14 4 5 15 1 21 6 16 17 7 22 18 8 23 24 19 9 20 25 10 2 A 3 4

  10. 0 1 2 3 4 Variação de j 0 11 1 2 12 13 3 4 14 5 15 i vai de 0 até n-2 j vai de i+1 até n-1 1 16 6 21 22 7 17 8 23 18 19 24 9 20 25 10 Variação de i 2 A 3 4 Os comandos: for (i = 0; i <= n-2; i++) for (j = i+1; j <= n-1; j++) Trocar (A[i][j], A[j][i]); percorrem a parte acima da diagonal principal e fazem a troca desejada A seguir um programa completo

  11. 0 1 2 3 4 0 2 3 4 5 14 15 1 11 12 13 1 8 9 10 20 16 6 21 22 17 7 18 23 24 19 25 2 #include <stdio.h> #include <stdlib.h> int main () { int A[10][10], i, j, n, aux; /* Leitura e escrita da matriz */ printf ("Dimensao da matriz quadrada: "); scanf ("%d",&n); printf ("\nElementos da matriz: \n"); for (i = 0; i <= n-1; i++) for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]); printf ("\nMatriz original:\n\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%5d", A[i][j]); printf ("\n"); } A 3 4

  12. 0 1 2 3 4 0 1 11 12 2 3 13 4 14 5 15 1 6 16 21 17 22 7 23 8 18 9 24 19 20 25 10 2 /* Transformacao da matriz em sua transposta e sua escrita */ for (i = 0; i <= n-2; i++) { for (j = i+1; j <= n-1; j++) { aux = A[i][j]; A[i][j] = A[j][i]; A[j][i] = aux; } } printf ("\nMatriz transposta:\n\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%5d", A[i][j]); printf ("\n"); } printf ("\n\n"); system ("pause"); return 0; } A 3 4

  13. 6.4.2 – Síntese de sub-matrizes • Muito usada em processamento de imagens – p. ex., para o controle de desmatamento numa região • Dados captados pela câmera de um satélite são armazenados numa imensa matriz bidimensional, para serem usados na confecção de fotografias • Tipicamente uma foto é constituída de uma matriz de pontos, de dimensões bem menores que as da matriz preenchida pela câmera • Então cada ponto da foto deve conter uma síntese das informações contidas numa sub-matriz da primeira matriz

  14. A seguir, o desenvolvimento de um programa para sintetizar o conteúdo das sub-matrizes de uma grande matriz B em elementos de outra matriz A bem menor que a primeira • Dimensões: B(20 x 20) e A(5 x 5) • A síntese consiste na média aritmética dos elementos de cada sub-matriz de B • Sendo inteiros os elementos de B, então os de A devem ser reais • A seguir, um conteúdo possível para a matriz B e o conteúdo correspondente da matriz A

  15. Cada linha de A corresponde a 4 linhas de B • Cada coluna de A corresponde a 4 colunas de B • A linha ‘i’ de A corresponde às linhas de 4i a 4i+3 de B • A coluna ‘j’ de A corresponde às colunas de 4j a 4j+3 de B

  16. A linha ‘i’ de A corresponde às linhas de 4i a 4i+3 de B • A coluna ‘j’ de A corresponde às colunas de 4j a 4j+3 de B • Cálculo de A[i][j]: aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16;

  17. Cálculo de A[i][j]: aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16; • Cálculo de toda a matriz A: for (i = 0; i < 5; i++) for (j = 0; j < 5; j++) Cálculo de A[i][j]; A seguir um programa completo

  18. #include <stdio.h> #include <stdlib.h> int main () { /* Declaracoes das variaveis */ float A[5][5]; int B[20][20]; int i, j, k, x, y, z; float aux; char c; /* Formacao da matriz B (20 x 20) */ for (i = k = 0; i < 20; i++) for (j = 0; j < 20; j++) B[i][j] = ++k;

  19. Os 20 elementos preenchem uma linha inteira do vídeo Não é preciso o ‘\n’ no final de cada linha /* Escrita da matriz B (20 x 20) no video */ printf ("Matriz principal? (s/n): "); scanf ("%d", &c); if (c == 's' || c == 'S') { printf ("\n\n"); for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) printf ("%4d", B[i][j]); }

  20. /* Sintetizacao da Matriz B na matriz A */ for (i = 0; i < 5; i++) for (j = 0; j < 5; j++) { aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16; }

  21. /* Escrita da matriz A(5 x 5) no video */ printf ("\n\nMatriz reduzida? (s/n): "); scanf ("%d", &c); if (c == 's' || c == 'S') { printf ("\n\n"); for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) printf ("%8.2f", A[i][j]); printf ("\n"); } } /* Fechamento da tela */ printf ("\n\n"); system ("pause"); return 0; }

  22. Exercícios 6.4: • Escrever um programa para ler os elementos de uma matriz A e quatro inteiros i, j, k, l, formando em seguida outra matriz B, contendo uma submatriz de A composta de suas linhas de i a j e de suas colunas de k a l; no final, o programa deve escrever a matriz B • A seguinte matriz tem o apelido de matriz ziguezaguede dimensões 5 x 8: Fazer um programa que leia 2 inteiros positivos m e n e em seguida construa e escreva no vídeo uma matriz ziguezague de dimensões m x n

  23. As seguintes matrizes têm o apelido de matrizes-cebolas de dimensões (6 x 7) e (8 x 5): Fazer um programa para ler m e n e construir uma matriz-cebola de dimensões m e n

  24. As seguintes matrizes têm o apelido de matrizes-espirais de dimensões 5 e 6: Fazer um programa para ler n e construir uma matriz-espiral de dimensão n e

  25. Fazer um programa para ler o valor de uma variável inteira n, os valores dos elementos reais de uma matriz A triangular superior de dimensões (n x n) e de um vetor B de dimensão n, e resolver o seguinte sistema:

  26. Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres

  27. 6.5 – Cadeias de Caracteres 6.5.1 – Cadeias de caracteres como variáveis e constantes • Vetoresdecaracteres são denominados cadeias de caracteres (strings, em Inglês) • Podem ser manipulados de forma diferenciada em relação aos vetores numéricos, pela maioria das linguagens de programação • Tudo começa pela existência de constantes do tipo cadeia de caracteres, mas não de constantes vetores numéricos

  28. Constante cadeia de caracteres é uma sequência de caracteres delimitada por aspas (“”), como por exemplo: “abc DEF” • Os componentes dessa constante são os caracteres da sequência, sem as aspas, e mais o caractere ‘\0’, que é o finalizador da cadeia • Então, os caracteres componentes da constante anterior são: ‘a’, ‘b’, ‘c’, ‘ ’, ‘D’, ‘E’, ‘F’ e ‘\0’

  29. A declaração sem inicialização de uma variável cadeia de caracteres pode ser feita da mesma forma que a de vetores numéricos • Exemplo: charcad[30]; • Mas a declaração com inicialização pode ser feita da seguinte maneira: charcad[] = “ABCDE”; que é equivalente às seguintes: charcad[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’}; charcad[6] = “ABCDE”; charcad[6] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’};

  30. charcad[] = “ABCDE”; • Esta declaração reserva espaço na memória para os elementos cad[0], cad[1], cad[2], cad[3], cad[4] e cad[5] e coloca neles os caracteres ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’ • Representação gráfica: cad ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘\0’ 0 1 2 3 4 5

  31. Tal como em vetores numéricos, os elementos de uma cadeia de caracteres podem ser referenciados individualmente • Exemplos:cad[3] = ‘b’; y = cad[i+1]; • A seguinte atribuição não é permitida: cad = “xyzwt”; • Porém, se cad for declarada como sendo do tipo ponteiro para caracteres, isso será permitido

  32. 6.5.2 – Leitura e escrita de cadeias de caracteres • O formato “%s” pode ser usado nas funções printf e scanf para fazer escrita e leitura de valores de variáveis do tipo cadeia de caracteres Função printf: • O formato “%s” faz com que os caracteres da variável sejam escritos na tela até que o caractere ‘\0’ seja encontrado, não sendo ele escrito • Por exemplo, os comandos: char cad[10] = “ABCDE”; printf (“%s”, cad); escreverão na tela: ABCDE

  33. Se a variável cad não contiver o caractere ‘\0’: • printf continuará escrevendo todos os caracteres encontrados pela frente, invadindo locais reservados para outras finalidades, até encontrar um byte que contenha ‘\0’ cad ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ 0 1 2 3 4 5

  34. Função scanf : • O formato “%s” procura no buffer do teclado o primeiro caractere diferente do espaço em branco, do ‘enter’ e da tabulação • Ao encontrá-lo, scanf passa a transportar para a variável alvo da leitura todos os caracteres do buffer, até encontrar um caractere espaço em branco, um ‘enter’ ou uma tabulação • Daí, em vez de transportar o espaço em branco, a tabulação ou o ‘enter’, scanf coloca na variável o finalizador ‘\0’, encerrando a leitura para essa variável

  35. Não usar &cad O nome de uma variável indexada é por si só um endereço (cf. ponteiros) Exemplo: seja o seguinte trecho de programa: charcad[20], c; scanf ("%s%c", cad, &c); printf ("\ncadeia lida:%s; caractere lido:%d", cad, c); • Se o operador digitar Se o operador digitar 4 espaços e o ‘enter’: o buffer se esvaziará e o computador ficará esperando nova digitação encerrada por ‘enter’ cad ‘A’‘B’‘C’‘D’‘E’‘\0’ . . . . . ABCDE FGH<enter> c ‘ ’ FGH<enter> ASCII (‘ ’) = 32 Sobra do buffer do teclado No vídeo ABCDE FGH cadeia lida:ABCDE; caractere lido:32

  36. Cuidado: na leitura de uma variável cadeia de caracteres, o número de caracteres digitados não deve exceder o espaço reservado para ela • Exemplo experimental: seja o seguinte trecho de programa: char a, b, c, d, cad[5]; int i; printf ("Digite uma cadeia de caracteres:\n\n"); scanf ("%s", cad); printf ("\ncadeia lida:%s", cad); printf ("\n\na=%d; b=%c; c=%c; d=%c;\n", a, b, c, d); for (i = 0; i <= 4; i++) printf ("\n\tcad[%d] = %c", i, cad[i]); Cadeia digitada abcdefghi<enter>

  37. char a, b, c, d, cad[5]; int i; printf ("Digite uma cadeia de caracteres:\n\n"); scanf ("%s", cad); printf ("\ncadeia lida:%s", cad); printf ("\n\na=%d; b=%c; c=%c; d=%c;", a, b, c, d); for (i = 0; i <= 4; i++) printf ("\n\tcad[%d] = %c", i, cad[i]); Cadeia digitada abcdefghi<enter> cad ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ Digite uma cadeia de caracteres: abcdefghi cadeia lida:abcdefghi a=0; b=h; c=g; d=f; cad[0] = a cad[1] = b cad[2] = c cad[3] = d cad[4] = e Alocação das variáveis na memória, pelo compilador d ‘f’ c ‘g’ b ‘h’ ‘i’ a ‘\0’ Digitando uma sequência maior de caracteres: erro de execução!!! Resultado no vídeo

  38. Função gets : • A função scanf usando o formato %s encerra a leitura de uma cadeia quando encontra um espaço em branco • Então, cadeias contendo espaços em branco não podem ser lidas por ela • No entanto, o arquivo stdio.h da biblioteca de C tem a função gets que resolve esse problema • Ela recebe como argumento a variável do tipo cadeia para a qual se deseja fazer a leitura • Seu retorno, que no momento não tem relevância, é um ponteiro (assunto a ser estudado em capítulo específico)

  39. Exemplo: um programa com gets Tipo cadeia: para variáveis cadeias de 50 caracteres #include <stdio.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, n; cadeia frases [10]; printf ("Numero de frases (ate 10): "); scanf ("%d", &n); printf ("\n"); for (i = 0; i <= n-1; i++) { printf ("Digite a %da frase: ", i+1); setbuf (stdin, NULL); gets (frases[i]); } printf ("\nListagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("%d) %s\n", i+1, frases[i]); printf ("\n\n"); system ("pause"); return 0; } Variável ‘frases’: vetor de cadeias ou matriz de caracteres A função ‘setbuf’ esvazia o buffer do teclado antes da chamada de ‘gets’ Numeração na tela a partir de 1

  40. #include <stdio.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, n; cadeia frases [10]; printf ("Numero de frases (ate 10): "); scanf ("%d", &n); printf ("\n"); for (i = 0; i <= n-1; i++) { printf ("Digite a %da frase: ", i+1); setbuf (stdin, NULL); gets (frases[i]); } printf ("\nListagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("%d) %s\n", i+1, frases[i]); printf ("\n\n"); system ("pause"); return 0; } Resultado de uma execução: Numero de frases (ate 10): 4 Digite a 1a frase: Gosto muito de Computacao! Digite a 2a frase: A Linguagem C ehfantastica! Digite a 3a frase: Programar eh Engenharia! Digite a 4a frase: Engenheiros devem saber algoritmos! Listagem das frases: 1) Gosto muito de Computacao! 2) A Linguagem C ehfantastica! 3) Programar eh Engenharia! 4) Engenheiros devem saber algoritmos! Pressione ...

  41. Função fgets : • É uma versão da função gets, só que para leitura em arquivos • Pertence ao arquivo stdio.h da biblioteca de C • Chamada de fgets: fgets (cad, expr, filein); cad: variável cadeia para a qual se deseja fazer a leitura filein: variável FILE de onde fazer a leitura expr: a função para de ler quando interar expr-1 caracteres lidos ou quando encontrar ‘enter’ • Quando lido o ‘enter’, ele é colocado em cad antes do ‘\0’

  42. Exemplo: um programa com fgets No arquivo, há um número a ser lido, antes de cada frase #include <stdio.h> #include <string.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Serão lidos no máximo 48 caracteres Para conferir o número de caracteres lidos

  43. 4 1Gosto muito de Computacao! 2A Linguagem C ehfantastica! 3Programar eh Engenharia! 4Engenheiros devem saber algoritmos! #include <stdio.h> #include <string.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Conteúdo do arquivo ‘filefrases’ Não há espaço entre o número inicial e a frase Se houvesse, ele seria lido para a frase

  44. Listagem das frases: 1 Gosto muito de Computacao! Comprimento: 27 2 A Linguagem C ehfantastica! Comprimento: 29 3 Programar eh Engenharia! Comprimento: 25 4 Engenheiros devem saber algoritmos! Comprimento: 36 Pressione ... #include <stdio.h> #include <string.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Resultado no vídeo O ‘enter’ no final é escrito e contado pelo strlen

  45. 6.5.3 – Funções para conversão de cadeias de caracteres • Função atoi (ASCII to int): converte uma cadeia de caracteres no inteiro correspondente • Função atof (ASCII to float): converte uma cadeia de caracteres no real correspondente • Função itoa (int to ASCII): converte um inteiro numa cadeia de caracteres correspondente, especificada a base numérica para a escrita

  46. Converter cadeia em inteiro? (s/n): s Digite a cadeia: 728391 atoi ("728391") = 728391 Converter cadeia em inteiro? (s/n): s Digite a cadeia: pe182 atoi ("pe182") = 0 Converter cadeia em inteiro? (s/n): s Digite a cadeia: 625xyz atoi ("625xyz") = 625 Converter cadeia em inteiro? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função atoi: converte uma cadeia de caracteres no inteiro correspondente: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i; char c; cadeia cad; printf ("Converter cadeia em inteiro? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite a cadeia: "); scanf ("%s", cad); i = atoi (cad); printf ("\tatoi (\"%s\") = %d", cad, i); printf ("\n\nConverter cadeia em inteiro? (s/n): "); scanf (" %c", &c); } printf ("\n\n"); system ("pause"); return 0; }

  47. Converter cadeia em real? (s/n): s Digite a cadeia: 52.1753 atof ("52.1753") = 52.1753 Converter cadeia em real? (s/n): s Digite a cadeia: 167.23e32 atof ("167.23e32") = 1.6723e+34 Converter cadeia em real? (s/n): s Digite a cadeia: 0.0012e-15 atof ("0.0012e-15") = 1.2e-18 Converter cadeia em real? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função atof: converte uma cadeia de caracteres no real correspondente: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { float x; char c; cadeia cad; printf ("Converter cadeia em real? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite a cadeia: "); scanf ("%s", cad); x = atof (cad); printf ("\tatof (\"%s\") = %lf", cad, x); printf ("\n\nConverter cadeia em real? (s/n): "); scanf (" %c", &c); } printf ("\n\n"); system ("pause"); return 0; }

  48. Converter inteiro em cadeia? (s/n): s Digite o int e a base: 2561 10 (2561)10 = ("2561")10 Converter inteiro em cadeia? (s/n): s Digite o int e a base: 87 8 (87)10 = ("127")8 Converter inteiro em cadeia? (s/n): s Digite o int e a base: 2871936 16 (2871936)10 = ("2bd280")16 Converter inteiro em cadeia? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função itoa: converte um inteiro numa cadeia de caracteres correspondente, especificada a base numérica para a escrita: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, base; char c; cadeia cad; printf ("Converter inteiro em cadeia? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite o int e a base: "); scanf ("%d%d", &i, &base); itoa(i, cad, base); printf ("\t(%d)10 = (\"%s\")%d", i, cad, base); printf ("\n\nConverter inteiro em cadeia? (s/n): "); scanf (" %c", &c);} printf ("\n\n"); system ("pause"); return 0; }

  49. 6.5.4 – Funções para manipulação de cadeias de caracteres • Função strlen (string length): número de caracteres de uma cadeia • Função strcat (string concatenation): concatena 2 cadeias de caracteres • Função strcmp (string comparision): compara lexicograficamente 2 cadeias de caracteres • Função strcpy (string copy): copia o conteúdo de uma cadeia de caracteres em outra • As 4 funções pertencem ao arquivo string.h da biblioteca

More Related