Você está na página 1de 3

Queridos amigos!!

Estou preocupado por no ser claro o suficiente enquanto tento explicar o desenvolvimento da minha questo, no entanto, vamos trabalhar at que vocs consigam entender. Provavelmente amanh ho!e" estarei o dia inteiro na rua resolvendo assunto com meu pai. #e eu tiver disponibilidade, chegarei mais cedo na faculdade para tentar a!uda$los, do contr%rio espero que vocs consigam entender minha explica&o. 'cho que vocs !% sabem como funciona o m(dulo de )nserir e Exibir conte*dos do vetor. + *nico m(dulo que ficou diferente foi o m(dulo do ,e-inho .usephus". #e tiverem d*vida de como o treco funciona, basta olhar novamente na folha que o Pich disponibili-ou no /eb0af pra saber como o algoritmo todo deveria funcionar. 1as enfim, vou explicar apenas o m(dulo do ,e-inho. 'ntes de chamar esta fun&o, eu criei uma fun&o para interagir com o usu%rio. 0hamei esta fun&o de int IniciarBrincadeira (int ult). 2o reparem nos nomes de algumas vari%veis ou fun&3es, porque eu costumo fa-er esse tipo de coisa. 2ormalmente no o recomendado, pois a premissa de programa&o que outro programador possa pegar seu c(digo e entender o que est% sendo feito, portanto no pratiquem isso na vida de vocs. 0omo vocs podem ver, atravs deste mtodo, eu !% recebo a ultima posi&o da lista e eu o declaro como int, pois depois de toda macumba que ser% feita eu devo retornar a ultima posi&o novamente. Prestem aten&o na vari%vel ult, pois ela uma das mais importantes na estrutura de controle que precisaremos mais tarde. Quem preferir trabalhar com mtodos sem retorno e sem este par4metro, pode declarar a vari%vel ult como 5lobal. 2o meu caso ela foi declarada como local dentro do main. Enfim, voltando 6 fun&o, ela serve para interagir com o usu%rio e pegar dados que nos sero *teis tambm dentro dos loops. Pediremos ento para o usu%rio digitar 7um n*mero aleat(rio8 que ser% arma-enado numa vari%vel int num. Esta vari%vel servir% pra saber quantas ve-es a lista circular dever% rolar. Pediremos tambm para que o usu%rios nos informe a partir de que posi&o a lista dever% roda que na verdade a posi&o dentro do vetor" e vamos arma-enar esta informa&o na vari%vel int pos. Por que eu pedi para o usu%rio digitar a posi&o do vetor, ao invs de digitar a letra .oseph.0od"9 Porque so :;<= da manh e eu terei que acordar cedo e estou com sono. Estou longe ainda de terminar este pequeno tutorial. Ento fiquei com pregui&a de criar ainda uma outra fun&o que fa&a uma pesquisa comparando c(digo pra depois me retornar um >ndice. ?ogo em seguida, criei uma estrutura de repeti&o que s( ser% ativada caso algum tenha digitado uma posi&o inv%lida, ou se!a, uma posi&o que se!a maior do que a vari%vel ult. 'companhem o racioc>nio; qualquer pos tem que estar entre = primeira posi&o de um vetor" e ult. 0ontinuando... Quando !% temos ult, num e pos, podemos chamar outra fun&o que eu chamei de .usephus nem sei se assim mesmo que se escreve o nome desse infeli-". Est% fun&o tambm inteira e me retornar% ao final" a vari%vel ult que obrigatoriamente tem que estar setada como $@, !% que sero retirados todos os registros do vetor. Ento int Jusephus(int ult, int num, int pos) vai nos tra-er toda a parafernalha que precisamos para resolver este maldito E+ que tm nos atormentado durante os *ltimos dias.

Para reali-ar os ?oops, precisaremos de A vari%veis e a forma como elas se interagem entre si que so um pouco complicadas para explicar, mas vamos l%. ?ogo no in>cio do mtodo eu crio duas vari%veis de controle de ?oops e as chamo de c@ e c<. ' vari%vel c@ ser% utili-ada em compara&o com num vari%vel que dir% o n*mero de voltas" e a vari%vel c< ser% utili-ada para que ha!a um ponto entre o final no vetor ult" e o la&o que deve ser feito. Ento vamos come&ar iniciando a vari%vel c< com pos c<Bpos". 'o fa-er isso, di-emos que o fluxo mais l% na frente" come&ar% a contar a partir da posi&o < do vetor .osephC<D". 1as agora n(s podemos come&ar a fa-er nossas to dese!adas estruturas de repeti&o; ' primeira que ser% feita controla todo o vetor. Ento eu digo que enquanto ult for maior ou igual a =, essa repeti&o ser% feita. E dentro deste loop que fica, praticamente, todo o c(digo. 1as por qu9 Porque voc dever% correr da posi&o na qual se encontra o vetor, at que a *ltima posi&o torne$se $@ novamente. ?ogo em seguida fa-emos uma condi&o para verificar se a vari%vel ult !% se encontra na posi&o =. Porque se ultBB= ento no h% necessidade de fa-er mais loop nenhum. Foc pega o seu lindo cavalinho e vai embora. E logo em seguida decrementamos ult$$ para que o loop acima perceba que ultG=, portanto no precisa executar mais nada. 2o entanto, essa condi&o vem seguida de um E?#E para caso o ultH=. E agora que a coisa come&a a complicar. Famos iniciar a vari%vel c@ com a posi&o @ para que ao longo do pr(ximo loop ela possa ser incrementada e controlada at que chegue ao n*mero m%ximo a vari%vel num digitada pelo usu%rio anteriormente". Ento montamos um loop while(c1<=num){ ... c1++}. Famos dar um exemplo; Isu%rio disse que quer o programa percorrendo J posi&3es para retirar algum numBJ". 0@ est% iniciada com @ c@B@" que seria a primeira posi&o. Este loop ser% executado at que c@ se!a igual a J. 'o final deste loop, nos ser% informada em qual posi&o do vetor ele parou e a partir da> poderemos reali-ar I1' retirada. Ento criaremos uma estrutura de controle que nos dir% a condi&o da posi&o. ' vari%vel c< que anteriormente recebeu a posi&o inicial pela qual o loop come&ar% a contar, vamos exemplificar que c@ B <. E vamos tomar como exemplo tambm que a vari%vel ult B A. 0< !amais poder% ser maior do que A e caso chegue a este montante, c< dever% receber = novamente e decrementada a cada loop de c@. Por isso di-emos; )f c<HBult"K 0<B=L MelseK 0<NN; M Oesta forma, quando o loop de c@ for interrompido, a vari%vel c< estar% arma-enada com o valor da posi&o a ser retirada. 2este caso, ap(s o loop de c@, precisaremos apenas chamar a fun&o Retira(int ult, int i) que receber% como par4metro a *ltima posi&o atual e a vari%vel c< como >ndice para que ha!a a remo&o e a realoca&o dos valores. Em seguida deveremos decrementar ult ult$ $" para por fim 6 condi&o do E?#E e para que todo o ?oop retorne, repetindo todo o processo at que ult se!a $@.

Ento pessoal, sei que estou longe de ter conseguido criar uma explica&o boa o suficiente para que vocs possam entender. 1as espero que esse pequeno texto consiga iluminar um pouco suas mentes. Pealmente foi um pouco complicado desenvolver a solu&o desse problema. 2o peguei pra fa-er antes por pregui&a mesmo, mas tambm no foi muito dif>cil. + que me a!udou muito foi sentar, antes mesmo de abrir o notebooQ para programar, e escrever passo a passo em uma folha como o algoritmo deveria se comportar. Oefinido isso eu consegui saber quantas vari%veis eu poderia precisar, quantos loops precisariam ser feitos e quantas decis3es o programa deveria tomar. Enfim... Espero que consigam estudar e espero que consigam entender os algoritmos. ?evarei impresso amanh com capinha. Rudo bem aviadado minha cara" e bonito pro nosso querido professor Pich!! Soa noite 0ambada!!

Você também pode gostar