Vous êtes sur la page 1sur 12

Estruturas de dados homogneas

Exerccio 41: Os incas ficaram conhecidos pela grande civilizao que reinou na regio dos Andes durante vrios sculos. O que pouca gente sabe que os incas construram pirmides de base quadrada em que a nica forma de se atingir o topo era seguir em espiral pela borda, que acabava formando uma escada em espiral. Estas pirmides ainda se encontram escondidas na floresta amaznica e sua descoberta trar uma aplicao para este exerccio.
279

Estruturas de dados homogneas


Neste exerccio voc dever fazer um algoritmo para verificar se uma matriz ou no uma matriz inca. Seu algoritmo deve ter uma funo que recebe como parmetro, uma matriz quadrada Anxn de nmeros inteiros e sua ordem retornando o resultado da verificao se a matriz inca, ou seja, se partindo do canto superior esquerdo da matriz, no sentido horrio, em espiral, a posio seguinte na ordem o inteiro consecutivo da posio anterior. O valor de n no deve exceder 20.

280

Estruturas de dados homogneas


Exemplo de uma matriz inca:

M=

1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7

281

Estruturas de dados homogneas

Comentrios
Exemplo de uma matriz inca:

M=

1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7

282

Estruturas de dados homogneas

Comentrios
Exemplo de uma matriz inca:

M=

1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7

283

Estruturas de dados homogneas


Exemplo de uma matriz inca: M[i,j] = M[i,j+1]-1 M[i,j]= M[i+1,j]+1

Comentrios

M=

1 12 11 10

exceo

2 13 16 9

3 14 15 8

4 5 6 7

M[i,j] = M[i,j+1]+1
284

M[i,j]= M[i+1,j]-1

Estruturas de dados homogneas

Comentrios
Exemplo de uma matriz inca:

M=

1 2 12+1 = 13 11 16 10 9
relao

3 14 15 8

4 5 6 7

285

Estruturas de dados homogneas


Exemplo de uma matriz inca com ordem impar:

Comentrios

M=

1 16 15 14 13

2 17 24 23 12

3 18 25 22 11

4 19 20 21 10

5 6 7 8 9

Obs.: O detalhe o elemento central mantm a relao M[o\2+1,o\2+1]-1=M[o\2+1,o\2+1-1]. o ordem da matriz.

286

Estruturas de dados homogneas


Exerccio 42: Com o objetivo de melhor fixar alguns aspectos abordados, trabalharemos neste exerccio a diferena existente entre o tipo primitivo caractere disponvel para construo de algoritmos e o tipo primitivo char disponvel na linguagem C. Na linguagem C uma string um vetor de caracteres. Porm, obrigatoriamente um dos caracteres do vetor deve ser o caractere nulo, ou seja, o '\0'. O caractere nulo sucede o ltimo caractere vlido da string em questo. Com base no que foi exposto, construa um algoritmo que manipule um vetor de strings com 10 elementos onde o comprimento mximo das string de 30 caracteres. As manipulaes que devem ser efetuadas so inicializar vetor, com strings fornecidas pelo usurio, e imprimir o contedo do vetor, aps a inicializao. 290

funcao caractere_valido (aux: caractere): logico inicio retorne (aux=" " ou aux="!" ou aux="#" ou aux="$" ou aux="%" ou aux="&" ou aux="'" ou aux="(" ou aux=")" ou aux="*" ou aux="+" ou aux="," ou aux="-" ou aux="." ou aux="/" ou aux="0" ou aux="1" ou aux="2" ou aux="3" ou aux="4" ou aux="5" ou aux="6" ou aux="7" ou aux="8" ou aux="9" ou aux=":" ou aux=";" ou aux="<" ou aux="=" ou aux=">" ou aux="?" ou aux="@" ou aux="A" ou aux="B" ou aux="C" ou aux="D" ou aux="E" ou aux="F" ou aux="G" ou aux="H" ou aux="I" ou aux="J" ou aux="K" ou aux="L" ou aux="M" ou aux="N" ou aux="O" ou aux="P" ou aux="Q" ou aux="R" ou aux="S" ou aux="T" ou aux="U" ou aux="V" ou aux="W" ou aux="X" ou aux="Y" ou aux="Z" ou aux="[" ou aux="\" ou aux="]" ou aux="^" ou aux="_" ou aux="`" ou aux="{" ou aux="|" ou aux="}" ou aux="~") fimfuncao

291

algoritmo "vet_strings" var vet_strings: vetor [1..10, 1..31] de caractere i, j: inteiro aux: caractere funcao caractere_valido (aux: caractere): logico inicio retorne (...) fimfuncao inicio para i de 1 ate 10 faca escreva ("Obs.: Digite um a um os caracteres que compem a" ) escreval (" string, pressionando aps") escreval ("cada caractere a tecla enter.") escreva ("A leitura de uma string finalizada pelo fornecimento") escreval ( de 30 caracteres ou") escreval ("pelo fornecimento do caractere espao ' '.") escreval ("Entre com os caracteres da ",i," string:") para j de 1 ate 30 faca repita leia (aux) ate (caractere_valido(aux)) se (aux=" ") entao interrompa senao vet_strings[i,j]<-aux fimse 292 fimpara

vet_strings[i,j]<-"\0" se (j=31) entao escreval ("Ateno! Tamanho mximo da ",i," string atingido.") se (i<>10) entao escreval ("Os prximos caracteres a serem digitados pertencero a ",i+1," string") fimse fimse fimpara escreval ("Contedo do vetor.") para i de 1 ate 10 faca escreva (i," string: ") para j de 1 ate 30 faca se (vet_strings[i,j]<>"\0") entao escreva(vet_strings[i,j]) senao interrompa fimse fimpara escreval("") fimpara fimalgoritmo //nesta resposta no explorei adequadamente o conceito de //modularizao, pois minha inteno foi deixar o algoritmo compatvel //com o VisuAlg. Possibilitando que os alunos o utilizem para interpretar //a soluo. 293

Vous aimerez peut-être aussi