Вы находитесь на странице: 1из 28

ALGORITMOS

Prof. Lourival lourival@dimap.ufrn.br SEGUNDA PARTE

CAPTULO 7: ESTRUTURA DE DADOS HOMOGNEOS

7.1 INTRODUO At agora, vimos os quatro tipos bsicos de informao: Inteiro, Real, Lgico e Literal. Mas eles no so suficientes para representar toda e qualquer informao que possa surgir. Portanto, construiremos novos tipos a partir dos tipos bsicos, medida que se fizerem necessrios. Esses novos tipos tm um formato denominado estrutura de dados, que define como os tipos bsicos esto organizados. Uma varivel simples uma entidade criada para permitir o acesso a uma posio de memria onde se armazena uma informao de um determinado tipo de dado pela simples referncia a um nome simblico. Neste captulo, veremos estrutura de dados homogneos, como vetores, matrizes e cadeias de caracteres, que nos permitir referenciar um grupo de variveis do mesmo tipo pelo mesmo nome simblico.

7.2 VARIVEIS COMPOSTAS HOMOGNEAS

Quando uma determinada Estrutura de dados composta de variveis com o mesmo tipo bsico, temos um conjunto homogneo de dados. Variveis compostas homogneas, tambm chamadas de variveis indexadas, correspondem a um conjunto de variveis do mesmo tipo, referenciveis pelo mesmo nome e individualizadas entre s atravs de sua posio dentro desse conjunto (os ndices). Uma varivel indexada pode ser definida contendo um ou mais ndices. Quando possui um nico ndice a varivel chamada de vetor e quando possui dois ndices chamada de matriz. Com trs ou mais ndices no recebe nome especial, tambm, na prtica, sua ocorrncia pouco freqente. Ao nmero de ndices necessrios localizao de um componente dentro da varivel indexada d-se o nome de dimenso.

7.3 VETORES As variveis indexadas que possui apenas um ndice so chamadas de vetores ou variveis compostas unidimensionais. Notao: <nome_varivel>[<ndice>] x[i] : varivel indexada. i : ndice (expresso inteira positiva) Exemplos: a) A[3] : representa o terceiro elemento do vetor A. b) Nome[p] : representa o p-simo elemento do vetor Nome. c) x[2*i + 3*j - 4*k] : a avaliao da expresso entre colchetes, que dever ser um nmero inteiro positivo, dar a posio do elemento no conjunto x.

7.3.1 DECLARAO DE VETORES

Como qualquer precisamos antes declar-lo. Sintaxe:

varivel

simples,

para

usarmos

vetores

<tipo> : <nome>[<limite>]

Onde <tipo> poder ser qualquer dos tipos vlidos, <nome> qualquer nome de uma varivel simples representativa do conjunto e <limite> um nmero inteiro positivo que limita o valor mximo para o ndice da varivel indexada, ou seja, nmero mximo de elementos do vetor. Exemplos: Real: vetor1[10], vetor2[20] Inteiro: pares[30], impares[50] Lgico: opcoes[20] Literal[30]: nomes[10], datas[20], cidades[30]

7.3.2 OPERAES COM VETORES

No possvel operar diretamente com conjuntos, como um todo, mas apenas com cada um de seus componentes, um por vez. O acesso individual a cada componente de um conjunto realizado pela especificao de sua posio, no mesmo, por meio de um ou mais ndices. Por exemplo, para somar dois vetores necessrio somar cada um dos seus componentes, dois a dois. No se deve confundir o nmero entre colchetes na declarao de variveis indexadas com o nmero entre colchetes no processamento de alguma operao. No primeiro caso, o nmero representa o limite superior para os ndices, enquanto que no segundo caso, o nmero representa a posio do elemento no conjunto (o ndice).

7.3.2.1 ATRIBUIO DE VETORES

Cada vez que se processa uma varivel indexada, qualquer que seja a operao, o ndice deve ser um valor conhecido. A sintaxe da atribuio para variveis indexadas a mesma, sendo que a varivel, alm do nome, deve conter o(s) ndice(s) da componente do conjunto, onde dever ser armazenado o valor da expresso. A expresso tambm poder conter variveis indexadas. Exemplos: a) b) c) d) e) x[1] 0 y[10] 2*x**3+1 num[3] 3*num[1] + 5*num[2] fibo[n] fibo[n-2] + fibo[n-1] Para i de 1 at 10 faa p[i] 3*i-1 Fim_para Para u de 1 at n faa Se (u/2*2 = u) ento x[u] 0 seno x[u] 1 Fim_se Fim_para

f)

7.3.2.2 LEITURA DE VETORES

A leitura de um conjunto feita passo a passo, um componente por vez, usando a mesma sintaxe da instruo primitiva de entrada de dados, ou seja, a instruo Leia ( <lista_de_variveis>), sendo que, mais uma vez, explicitando a posio da componente lida. bastante freqente o uso de estruturas de repetio na leitura de variveis indexadas. Exemplos: a) Leia( x[1], x[2], x[3], x[4], x[5] ) Este exemplo vlido, mas pouco prtico, principalmente se o conjunto possui muitos elementos. b) Para i de 1 at 100 faa Leia ( x[i] ) Fim_para c) Para k de 1 at n faa Repita Escreva(Digite um nmero positivo:) Leia ( num[k] ) At ( num[k] >0 ) Fim_para
d)

Para i de 1 at n faa Repita Escreva(Digite um nmero positivo:) Leia ( p ) At ( p > 0 ) x[i] p Fim_para

7.3.2.3 ESCRITA DE VETORES

A escrita de um conjunto obedece mesma sintaxe da instruo primitiva de sada, ou seja, a instruo Escreva (<lista_de_expresses>) . E de forma anloga ao tem anterior, utilizamos as estruturas de repetio para escrever todos os elementos de um conjunto. Exemplos: a) Para i de 1 at p faa Escreva ( x[i] ) Fim_para Escreva (Vetor Soluo: ) Para j de 1 at n faa Escreva ( x[,j,]=, x[j] ) Fim_para Escreva ( i X[i] Y[i] Z[i] ) Para i de 1 at n faa Escreva ( i , x[i] , y[i] , z[i] ) Fim_para

b)

c)

7.3.3 EXEMPLOS DE ALGORITMOS COM VETORES 1) Imprimir a soma de n nmeros dados.


Algoritmo Soma Real: x[100], soma Inteiro: n, i Incio Repita Escreva (Quantos nmeros? ) Leia ( n ) At ( n > 0 .E. n <= 100 ) Escreva ( Digite os , n , nmeros: ) Para i de 1 at n faa Leia ( x[i] ) Fim_para soma 0 Para i de 1 at n faa soma soma + x[i] Fim_para Escreva ( Soma = , soma ) Fim

2)

Imprimir os n primeiros termos da seqncia de Fibonacci: 1 1 2 3 5 8 13 21 ...


Algoritmo Fibonacci Inteiro: f[100], n, i Incio Repita Escreva(Quantos termos?) Leia ( n ) At ( n>0 .E. n <=100 ) f[1] 1 f[2] 1 Para i de 3 at n faa f[i] f[i-2] + f[i-1] Fim_para Escreva (Sequncia de Fibonacci: ) Para i de 1 at n faa Escreva ( f[i] ) Fim_para Fim

3)

Dados dois vetores com n componentes cada, calcular o produto escalar entre eles. Algoritmo Produto_escalar Real: x[10], y[10], pesc Inteiro: n,i Incio Repita Escreva (Quantas componentes tem cada vetor? ) Leia ( n ) At ( n>0 .E. n<=10 ) Escreva( Digite os nmeros do primeiro vetor: ) Para i de 1 at n faa Leia ( x[i] ) Fim_para Escreva ( Digite os nmeros do segundo vetor: ) pesc 0 Para i de 1 at n faa Leia ( y[i] ) pesc pesc + x[i]*y[i] Fim_para Escreva (Produto Escalar = , pesc) Fim

4)

Dados n nmeros inteiros positivos, imprimi-los, separadamente, como pares e mpares. Algoritmo Par_mpar Inteiro: x[30], par[30], impar[30], n, k, p, i Incio Repita Escreva (Quantos nmeros?) Leia ( n ) At ( n>0 .E. n<=30 )
8

Escreva (Digite os, n, nmeros inteiros positivos:) p 0 i 0 Para k de 1 at n faa Repita Leia ( x[k] ) At ( x[k] > 0 ) Se ( x[k]/2*2 = x[k] ) ento p p+1 par[p] x[k] seno i i+1 impar[i] x[k] Fim_se Fim_para Escreva(Nmeros pares: ) Para k de 1 at p faa Escreva (par[k]) Fim_para Para k de 1 at i faa Escreva(mpar[k]) Fim_para Fim

5)

Calcular e imprimir o conjunto interseo entre dois conjuntos numricos quaisquer dados. Algoritmo Interseo Real: a[20], b[20], c[20] Inteiro: m, n, i, j, k Incio Repita Escreva(Quantos nmeros tem o primeiro conjunto? ) Leia( m )
9

At( m>0 .E. m<=20 ) Escreva(Digite os nmeros do primeiro conjunto:) Para i de 1 at m faa Leia( a[i] ) Fim_para Repita Escreva(Quantos nmeros tem o segundo conjunto?) Leia ( n ) At( n>0 .E. n<=20 ) Escreva(Digite os nmeros do segundo conjunto:) Para i de 1 at n faa Leia( b[i] ) Fim_para k 0 Para i de 1 at m faa Para j de 1 at n faa Se( a[i] = b[j] ) ento k k+1 c[k] a[i] Fim_se Fim_para Fim_para Se ( k=0 ) ento Escreva(Interseo Vazia. ) Seno Escreva(Conjunto Interseo:) Para i de 1 at k faa Escreva( c[i] ) Fim_para Fim_se Fim

10

6)

Pesquisa seqencial. Pesquisa seqencial ou linear o mtodo para se encontrar um elemento particular num conjunto no_classificado. Vejamos um algoritmo para ler um nmero e verificar se o mesmo se encontra num vetor com n elementos. Algoritmo Pesquisa_sequencial Real: x[100], num Inteiro: n, i Lgico: achou Incio Repita Escreva(Quantos nmeros?) Leia( n ) At( n>0 .E. n<=100) Escreva(Digite todos os nmeros:) Para i de 1 at n faa Leia( x[i] ) Fim_para Escreva(Digite o nmero que procura:) Leia (num) achou .F. i 1 Enquanto ( i <= n .E. .No. achou )faa Se( x[i] = num) ento achou .V. seno i i+1 Fim_se Fim_enquanto Se( achou ) ento Escreva(Nmero encontrado. ) Seno Escreva(Nmero no encontrado.) Fim_se Fim
11

7)

Pesquisa binria. Pesquisa binria semelhante pesquisa seqencial quanto ao objetivo, sendo que os elementos do vetor esto previamente classificados segundo algum critrio. Vejamos um algoritmo, supondo que os nmeros do vetor esto classificados na ordem crescente.
Algoritmo Pesquisa_binria Real: x[100], num Inteiro: n, i, meio, alto, baixo Lgico: achou Incio Repita Escreva(Quantos nmeros?) Leia( n ) At ( n>0 .E. n<=100 ) Escreva(Digite todos os nmeros:) Para i de 1 at n faa Leia ( x[i] ) Fim_para Escreva (Digite o nmero que procura: ) Leia( num ) alto n baixo 1 achou .F. Enquanto( baixo<=alto .E. .No. achou ) faa meio (baixo + alto)/2 Se( num < x[meio] )ento alto meio 1 seno Se( num > x[meio] ) ento baixo meio + 1 seno achou .V. Fim_se Fim_se Fim_enquanto Se( achou ) ento Escreva(Nmero encontrado. ) Seno Escreva(Nmero no encontrado. ) Fim_se Fim

12

8)

Classificao na ordem crescente. Colocar na ordem crescente n nmeros quaisquer dados. Vamos utilizar o algoritmo conhecido como mtodo da bolha.

Algoritmo Ordem_crescente Real: x[100], aux Inteiro: n, i, j Incio Repita Escreva(Quantos nmeros?) Leia( n ) At( n>0 .E. n<=100 ) Escreva(Digite os nmeros:) Para i de 1 at n faa Leia ( x[i] ) Fim_para Para j de n at 2 passo 1 faa Para i de 1 at j 1 faa Se( x[i] > x[i+1] ) ento aux x[i] x[i] x[i+1] x[i+1] aux Fim_se Fim_para Fim_para Escreva(Vetor ordenado: ) Para i de 1 at n faa Escreva ( x[i] ) Fim_para Fim

13

7.3.4 EXERCCIOS PROPOSTOS


1) 2) Dados dois vetores com n componentes cada um, calcular e imprimir a soma deles. Calcular o cosseno do ngulo formado por dois vetores dados, com o mesmo nmero de coordenadas, atravs da frmula: Cosseno = ( A.B ) / ( |A| |B| ) Onde A.B o produto escalar entre os vetores A e B, mdulo do vetor A, dado por |A| = A.A . 3) 4) 5) 6) Calcular a mdia aritmtica de n nmeros reais dados. Calcular o n-simo termo da seqncia de Fibonacci. Leia n nmeros maiores que 1, e imprima-os, separadamente, como primos e no-primos. Dado um vetor A com n nmeros reais, obter um outro vetor B, tambm com n nmeros, da seguinte forma: B[1] = 2*A[1] B[2] = 3*A[1] + 2*A[2] B[3] = 4*A[1] + 3*A[2] + 2*A[3] . . ( ...e assim por diante,) .
7)

e |A| o

Calcular o Desvio padro de uma amostra x de n nmeros


quaisquer dados.

Desvio padro =

( ( x[i] M ) ) / ( n 1 )
2

Onde M a mdia dos n nmeros dados. 8) 9)


10)

Leia um conjunto com n nmeros e informe se existe algum elemento repetido no conjunto. Leia n nmeros quaisquer e imprima-os sem repeties. Dado um nmero inteiro positivo, do sistema decimal, obtenha o seu valor correspondente no sistema binrio.
14

7.4 MATRIZES Os vetores, ou variveis compostas unidimensionais, tm como principal caracterstica a necessidade de apenas um ndice para endereamento. Uma estrutura que precise de mais de um ndice, como no caso de matrizes, ser denominada estrutura composta multidimensional. As variveis compostas multidimensionais, mais utilizadas so as bidimensionais, ou matrizes, devido sua relao direta com muitas aplicaes. A aplicao com as demais variveis indexadas, isto , com trs ndices, quatro ndices, etc., se faz por analogia a esta. Notao: <nome_varivel>[<ndice1>,<ndice2>, ... , <ndicen>] x[i,j,k] : varivel indexada de dimenso trs. i, j, k: ndices (valores inteiros positivos). Exemplos: a) b) x[2,3] : elemento de uma matriz (varivel indexada bidimensional) da segunda linha e terceira coluna (posio na matriz). mat[i+1,j-1] : os ndices podem ser expresses desde que sejam inteiras.

7.4.1 DECLARAO DE MATRIZES Veremos, de agora em diante, apenas matrizes( dois ndices) como variveis compostas multidimensionais . Sintaxe: Exemplos: a) b) c) d) <tipo>: <nome>[<limite1>,<limite2>] Real: mat1[10,10] Inteiro: x[15,15], y[20,20], z[10,10] Lgico: achou[5,5] Literal[20]: nomes[15,15]
15

7.4.2 OPERAES COM MATRIZES Percebemos que uma estrutura bidimensional um conjunto de estruturas unidimensionais, ou seja, uma matriz um conjunto de vetores. Portanto, para operarmos com matrizes, geralmente, lanamos mo de duas estruturas de repetio (para vetores utilizamos uma). 7.4.2.1 ATRIBUIO DE MATRIZES A atribuio uma das formas de qualquer varivel armazenar algum valor. Como no operamos diretamente com a matriz, somente seus elementos armazenam valores numa atribuio. Exemplos:
a)

mat[3,4] 3.75 Para i de 1 at 10 faa Para j de 1 at 10 faa Se(i = j) ento x[i,j] 1 seno x[i,j] 0 Fim_se Fim_para Fim_para Para i de 1 at m faa Para j de 1 at n faa Se ( i > j ) ento a[i,j] 2*i + 3*j seno Se ( i = j ) ento a[i,j] i**2 seno a[i,j] 5*i**3 2*j**2 Fim_se Fim_se Fim_para Fim_para

b)

c)

16

7.4.2.2 LEITURA DE MATRIZES De forma anloga a leitura de vetores, utilizamos dois laos para a leitura de matrizes. Exemplos: a) Para i de 1 at m faa Para j de 1 at n faa Leia ( mat[i,j] ) Fim_para Fim_para b) Escreva(Digite nmeros positivos:) Para a de 1 at p faa Para b de 1 at p faa Repita Escreva(Ateno! Positivo.) Leia( x ) At ( x > 0 ) matriz[a,b] x Fim_para Fim_para

7.4.2.3 ESCRITA DE MATRIZES De forma semelhante a leitura fazemos a escrita de matrizes. Exemplos: a) Para i de 1 at m faa Para j de 1 at n faa Escreva ( matriz[i,j] ) Fim_para Fim_para b) Para i de 1 at m faa Para j de 1 at n faa Escreva(x[,i,,,j,] = ,x[i,j] ) Fim_para Fim_para
17

7.4.3 EXEMPLOS DE ALGORITMOS COM MATRIZES

1)

Imprimir a matriz identidade de ordem n.

Algoritmo Matriz_identidade Inteiro: ident[20,20], n, i, j Incio Repita Escreva(Digite a ordem da matriz <=20:) Leia ( n ) At ( n>0 .E. n<=20 ) Para i de 1 at n faa Para j de 1 at n faa Se ( i = j ) ento ident[i,j] 1 seno ident[i,j] 0 Fim_se Fim_para Fim_para Para i de 1 at n faa Para j de 1 at n faa Escreva( ident[i,j] ) Fim_para Fim_para Fim

18

2)

Dada uma matriz quadrada de ordem n>3, calcular: a) b) c) d) e) a soma dos elementos da primeira linha; a soma dos elementos da terceira coluna; a soma dos elementos da diagonal principal; a soma dos elementos da diagonal secundria; a soma de todos os elementos da matriz.

Algoritmo Clculos_matriciais Real: mat[15,15], sa, sb, sc, sd, se Inteiro: n, i, j Incio Repita Escreva(Digite a ordem da matriz >3:) Leia ( n ) At ( n>3 .E. n<=15 ) Escreva(Digite os elementos da matriz por linha:) Para i de 1 at n faa Para j de 1 at n faa Leia( mat[i,j] ) Fim_para Fim_para sa 0 sb 0 sc 0 sd 0 se 0 Para i de 1 at n faa sa sa + mat[1,i] sb sb + mat[i,3] sc sc + mat[i,i] sd sd + mat[i,n i + 1] Para j de 1 at n faa se se + mat[i,j] Fim_para Fim_para
Escreva(sa=,sa, sb=,sb, sc=,sc, sd=,sd, se=, se)

Fim

19

3)

Dada uma matriz quadrada de ordem n, calcular e imprimir a soma dessa matriz com a sua transposta.

Algoritmo Soma_transposta Real: x[10,10], y[10,10] Inteiro: n, i, j Incio Repita Escreva(Digite a ordem da matriz <=10) Leia ( n ) At ( n>0 .E. n<=10) Escreva(Digite os nmeros da matriz:) Para i de 1 at n faa Para j de 1 at n faa Leia( x[i,j] ) Fim_para Fim_para Para i de 1 at n faa Para j de 1 at n faa y[i,j] x[i,j] + x[j,i] Fim_para Fim_para Escreva(Matriz resultante:) Para i de 1 at n faa Para j de 1 at n faa Escreva( y[i,j] ) Fim_para Fim_para Fim

20

4)

Dada uma matriz A qualquer de nmeros inteiros positivos, gerar uma matriz B tal que: B[i,j] = 0, se A[i,j] par e B[i,j] = 1, se A[i,j] mpar.

Algoritmo Matriz_B Inteiro: A[10,10], B[10,10], m, n, i, j Incio Repita


Escreva(Digite o nmero de linhas e o nmero de colunas <=10:)

Leia ( m, n ) At( m>0 .E. m<=10 .E. n>0 .E. n<=10 ) Escreva(Digite os nmeros da matriz de inteiros positivos: ) Para i de 1 at m faa Para j de 1 at n faa Repita Leia ( A[i,j] ) At ( A[i,j] > 0 ) Se ( A[i,j]/2*2 = A[i,j] ) ento B[i,j] 0 seno B[i,j] 1 Fim_se Fim_para Fim_para Escreva(Matriz pedida:) Para i de 1 at m faa Paraj de 1 at n faa Escreva( B[i,j] ) Fim_para Fim_para Fim

21

5)

Obtenha o produto entre duas matrizes conformes.


Obs. Dadas duas matrizes de tipos possveis de se efetuar o produto entre elas, por exemplo a matriz A do tipo m por n, e a matriz B do tipo n por p, ento obteremos uma outra matriz C do tipo m por p.

Algoritmo Produto_matricial
Real: a[10,10], b[10,10], c[10,10] Inteiro: m, n, p, i, j, k

Incio
Repita Escreva(Digite o nmero de linhas e o nmero de colunas da primeira matriz, e tambm o nmero de colunas da segunda matriz: ) Leia ( m, n, p ) At(m>0 .E. m<=10 .E. n>0 .E. n<=10 .E. p>0 .E. p<=10) Escreva(Digite os nmeros da primeira matriz: )

Para i de 1 at m faa Para j de 1 at n faa Leia ( a[i,j] ) Fim_para Fim_para


Escreva(Digite os nmeros da segunda matriz: )

Para i de 1 at n faa Para j de 1 at p faa Leia ( b[i,j] ) Fim_para Fim_para Para i de 1 at m faa Para k de 1 at p faa c[i,k] 0 Para j de 1 at n faa c[i,k] c[i,k] + a[i,j]*b[j,k] Fim_para Fim_para Fiom_para Escreva(Matriz Produto: )
Para i de 1 at m faa Para j de 1 at p faa Escreva( c[i,j] ) Fim_para Fim_para Fim
22

7.4.4 EXERCCIOS PROPOSTOS


1) Gerar e imprimir uma matriz com m linhas e n colunas onde seus elementos so da forma: A[i,j] = 2) 3) 4) 5) 2*i + 7*j 2 se 3*i**2 1 se 4*i**3 5*j**2 + 1 se i<j i=j i > j.

Calcular a soma dos elementos de uma matriz numrica quadrada qualquer dada, que esto acima da diagonal principal. Obtenha e imprima um vetor que seja a soma dos elementos de cada coluna de uma matriz numrica qualquer dada. Verificar se uma matriz quadrada dada ou no simtrica. Gerar e imprimir a matriz quadrada de ordem n abaixo. 1 2 3 . . . n n-1 1 3 . . . n n-2 n-2 1 . . . n ... ... ... ... ... ... ... 1 1 1 . . . 1

6)

A matriz abaixo, quadrada 4x4, foi obtida de acordo com uma determinada definio para seus elementos. Faa um algoritmo que leia um nmero inteiro positivo n e imprima essa matriz com n linhas e n colunas. 3 5 7 9 4 5 8 10 5 6 7 11 6 7 8 9

23

7.5 CADEIAS E SUBCADEIAS DE CARACTERES A maior parte dos processamentos efetuados atualmente exige a manipulao de cadeias de caracteres alfanumricos. Uma cadeia de caracteres uma sequncia de letras, algarismos ou smbolos( sinais de pontuao, parnteses, etc.). Cada caractere uma informao e a cadeia de caracteres um conjunto de informaes. A relao de ordem entre as cadeias depende da relao de ordem vigente para os caracteres e esta depende da linguagem de programao utilizada na codificao do algoritmo. Conforme j vimos na apresentao do tipo de dados Literal, esta ordem est estabelecida pela ordem dos caracteres no sistema de codificao utilizado( ASCII ). A representao de uma cadeia de caracteres como um dado de processamento feita atravs da seqncia de seus caracteres entre aspas duplas. Por exemplo: JANEIRO, abcdefg, Rio Grande do Norte, etc.. As variveis do tipo Literal armazenam cadeias de caracteres . Lembramos que o nico operador literal, que nos permite operar cadeias de caracteres, o operador de concatenao + (abc + de resulta abcde). Exemplo: mes FEVEREIRO nome Ana Maria Duarte endereco Rua Afonso Pena, 625. Tirol 7.5.1 DECLARAO DE CADEIA DE CARACTERES A declarao de variveis do tipo literal, feita como se fosse um vetor onde seus elementos so caracteres, sendo que o nmero que indicaria o limite mximo de elementos do vetor no fica junto varivel, e sim, ao lado do tipo, mas o objetivo continua sendo reservar espao na memria para armazenamento de constantes. No momento da declarao o espao reservado fica cheio de caracteres vazios() e, durante o processamento, a medida que a varivel vai recebendo caracteres, os vazios vo sumindo, mas o programador deve providenciar para que tenhamos pelo menos um caractere vazio em qualquer momento do processamento, pois isso o ajudar a saber quantos caracteres podero ser acessados, ou seja, ele dever declarar n caracteres e utilizar, no mximo, n-1,sendo n uma constante inteira maior que 1. Sintaxe: Literal[<limite>]: <lista_variveis>
24

Exemplos: a) Literal[41]: nome, endereco nome e endereco podem armazenar at 40 caracteres. b) Literal[21]: nomes[50], cidades[50] nomes e cidades so conjuntos (vetores) com, no mximo, 50 cadeias de caracteres, contendo, no mximo, 20 caracteres cada cadeia. Como em um vetor, todos os caracteres de uma cadeia so armazenados em unidades consecutivas de armazenamento de caracteres (1 byte para cada caractere). O nmero de caracteres (ou de unidades de armazenamento) de uma cadeia o comprimento da cadeia, e a cada caractere corresponde um nmero (posio) dentro da cadeia (como o ndice nos vetores). 7.5.2 SUBCADEIA DE CARACTERES Uma subcadeia de caracteres uma seqncia de um ou mais caracteres consecutivos dentro de uma cadeia. Por exemplo, JANE uma subcadeia de JANEIRO, mas JAIRO no . O recurso da subcadeia propicia a manipulao (o processamento) de partes de uma determinada cadeia de caracteres. Notao da subcadeia: <nome_cadeia>[<incio_cadeia>:<fim_cadeia>] <nome_cadeia> um nome qualquer de uma varivel declarada do tipo Literal. <incio_cadeia> um nmero inteiro positivo que indica a posio dentro da cadeia onde a subcadeia inicia. <fim_cadeia> um nmero inteiro positivo que indica a posio dentro da cadeia onde a subcadeia termina. Exemplos: x[3:6], nome[4:10], ms[3:3] ento: Exemplo: Seja a cadeia vogal AEIOU a subcadeia vogal[3:4] corresponde a a subcadeia vogal[1:5] corresponde a a subcadeia vogal[2:2] corresponde a
25

IO AEIOU E

7.5.3 EXEMPLOS DE ALGORITMOS COM CADEIAS E SUBCADEIAS DE CARACTERES 1) Diga como ser a sada do algoritmo abaixo. Algoritmo Cadeia_caracteres Literal[11]: cadeia Incio cadeia[1:3] ABC cadeia[4:7] DEFG cadeia[6:10] HIJKL Escreva( cadeia ) Fim Sada: ABCDEHIJKL 2) Diga como ser a sada do algoritmo abaixo. Algoritmo Branco Literal[52]: branco, z Inteiro: n Incio Para n de 1 at 50 faa branco[n:n] z branco[1:n] + Z Escreva( z ) Fim_para Fim Sada: Z Z Z Z . .

26

3)

. Calcular o comprimento de uma cadeia de caracteres dada. Algoritmo Comprimento Literal[81]: nome Inteiro: n Incio Escreva(Digite a cadeia: ) Leia( nome ) n 0 Enquanto( nome[n+1:n+1] <> )faa n n + 1 Fim_enquanto Escreva(Comprimento = , n) Fim

4)

Converter uma letra minscula em letra maiscula. Algoritmo Maisculo Literal[27]: alfa, ALFA Literal[2]: letra Inteiro: i Incio Repita Escreva(Digite uma letra minscula: ) Leia( letra ) At( letra>=a .E. letra<=z ) alfa abcdefghijklmnopqrstuvwxyz ALFA ABCDEFGHIJKLMNOPQRSTUVWXYZ i 1 Enquanto ( letra <> alfa[i:i] ) faa i i + 1 Fim_enquanto letra ALFA[i:i] Escreva (letra) Fim

27

7.5.4 EXERCCIOS PROPOSTOS 1) 2) 3) 4) 5) Converta uma letra maiscula em letra minscula. Faa um algoritmo para converter uma cadeia de caracteres de letras maisculas em letras minsculas. Dado o nome completo de uma pessoa imprimir apenas o primeiro nome. Dado o nome completo de uma pessoa imprimir apenas as iniciais seguidas cada uma de ponto e espao. Dada uma cadeia de caracteres, inserir um caractere dado numa posio da cadeia tambm dada e imprimir a nova cadeia. Dada uma cadeia de caracteres, eliminar o caractere de uma posio dada nessa cadeia e imprimir a nova cadeia. Dado um texto com, no mximo, 80 caracteres, diga quantas consoantes existem no texto. Dado um texto com, no mximo, 80 caracteres, diga quantas vogais existem no texto. Calcular o custo de um telegrama, onde os 30 primeiros caracteres custam 9 centavos cada, os demais, a partir da, custam 6 centavos cada e os espaos em branco no so cobrados. Dado um nmero inteiro positivo do sistema binrio, converte-lo no nmero correspondente do sistema decimal.

6)

7)

8)

9)

10)

28

Вам также может понравиться