John Doe

Membros
  • Content Count

    1843
  • Joined

  • Last visited

Community Reputation

0 Neutro

About John Doe

  • Rank
    Usuário que pouco contribui

Contatos

  • ICQ
    177693129

Perfil

  • Location
    Cudmund
  1. Começando pelo fim. Não lembro quem disse que existem dois meios igualmente válidos de aprender matemática: estudando muito ou se acostumando. Acho que o caso dos algoritmos é bem análogo... Enfim, quanto à diagonal secundária, uma vez que você fez a função para a diagonal principal, basta você refletir a matriz como na figura (na verdade é ao contrário, mas o princípio é igual): e aplicar a função à matriz refletida! Mas observe que essa reflexão simplesmente troca a primeira coluna pela quarta, e a segunda pela terceira. Se você tiver dificuldade em implementar esse algoritmo (pega uma matriz 4x4, troca a primeira coluna pela quara e a segunda pela terceira), pode postar aqui. PS: O uso de contadores no while é necessário porque a variável que você usa dentro do loop também aparece no controle. O funcionamento do for ali em cima não dependia do contador.
  2. A primeira abordagem é a mais comum. Pode ficar tranquilo pois não deve gerar nenhum desconforto.
  3. Você percebe que esse código de segurança está aí justamente pra evitar que bots peguem esses dados?
  4. John Doe

    Sistema de sorteio

    Cria um arquivo mesma pasta que esse daí, digamos, nomes.txt, com permissões de ler e gravar. Bota nele uma lista de nomes, tipo Mario Zé Ana (sem linhas em branco no início e no fim, e com uma quebra de linha como espaço entre os nomes) No início, você carrega o array $participantes com os nomes desse arquivo de texto. Tem uma função chamada file que faz isso por você. [É importante, como você vai ver mais pra frente, verificar se esse arquivo ainda tem elementos. Se o arquivo estiver vazio, a funão file vai retornar "FALSE", então você verifica isso e manda pra uma página de fim do sorteio, por exemplo.] Depois você sorteia um número entre 0 e número de elementos de $participantes, exatamente como você tinha feito. Chama esse número de $numeroSorteado. Bota o resultado lá usando $numeroSorteado. Depois reescreve todos os elementos do vetor $participantes no nomes.txt (que será devidamente "truncado" para 0 byte) exceto o elemento cujo número foi sorteado ali em cima. É um loop assim: $alc = fopen("nomes.txt", "w"); //a opção w abre o arquivo para escrever, e trunca o arquivo para 0 byte for($i=0; $i<count($participantes); $i++) { if($i!=$numeroSorteado){ fwrite($alc,$participantes[$i]); //Se não me engano, ao fim de cada elemento já haverá um "\n". } }
  5. EDIT: Acho que tinha postado algo totalmente fora da sua pergunta antes. Para calcular a média aritmética dos elementos abaixo da diagonal principal, precisamos de algumas considerações teóricas. Suponha que se tenha uma matriz M, e que seu elemento (i,j) seja acessível pelo comando M(i, j). Suponha que ela seja 4x4. (1) Os elementos da diagonal principal são M(i, i), para i variando de 1 a 4. (2) Fixada uma coluna k qualquer (com 1 <= k <= 4, é claro, pois a matriz é 4x4), o elemento da diagonal principal é o elemento M(k, k), segundo (1). Estamos na seguinte situação: Coluna k: M(1, k) M(2, k) ⁞ M(k-1, k) M(k,k) <- elemento da diagonal principal M(k+1, k) ⁞ M(4,k) Agora basta observar que os elementos que estão acima da diagonal principal são os elementos que estão acima de M(k,k). Ou seja, são os elementos M(1, k), M(2, k), ..., M(k-1, k). Os elementos, por sua vez, que estão abaixo da diagonal principal são aqueles abaixo de M(k, k), quais sejam: M(k+1, k), M(k+2, k), ..., M(4, k). (Ficou claro? Pode falar se não estiver, essa parte é a mais importante) Agora vamos à parte computacional. O que se quer é calcular a média aritmética de um conjunto de elementos. A média aritmética de um conjunto de números é a soma de todos os seus elementos dividida pelo número de elementos do conjunto. Então façamos o seguinte: uma variável, Soma, vai armazenar a soma dos elementos abaixo da diagonal principal. Outra variável, Cont, vai armazenar o número de elementos que foram usados. Usemos agora um raciocínio indutivo. Suponha fixada, mais uma vez, a coluna k. Suponha que as variáveis Soma e Cont já estejam definidas. O que se fará, agora, é acrescentar à variável Soma todos os valores que estão abaixo da diagonal principal, e, cada vez que se acrescentar um valor, aumentar em 1 o valor de Cont. Mas já vimos que os valores abaixo da diagonal principal são do tipo M(k+1, k), ..., M(4, k)! Para a coluna k, ter-se-á, portanto: // Já se tem definidas Soma e Cont. PARA i=1 até i=4, faça: Soma = Soma+M(k+i, k) Cont = Cont+1 FIM PARA Começando com Soma = 0 e Cont = 0, você pode aplicar esse processo para todas as colunas fazendo k variar de 1 a 4! No fim, a variável Soma terá armazenado a soma de todos os valores abaixo da diagonal principal e a variável Cont terá armazenado o número de elementos desse tipo. Como diria meu professor: botei a bola na marca do pênalti. Agora é só marcar gol.
  6. Eu não entendi o seu problema, mas tenho algumas considerações sobre o algoritmo que você escreveu. As notas finais do indivíduo vão de 0 a 10. Existem três casos, pelo que entendi: nota < 4 -> indivíduo é reprovado4<= nota < 7 -> indivíduo está de prova finalnota >= 7 -> indivíduo é aprovadoVocê pode fazer três ifs distintos, um para cada caso, no seguinte estilo: SE (nota < 4) ENTÃO ESCREVA('Reprovado!') FIM SE Observe que o computador fará quatro "contas booleanas" nesse caso, isto é, vai verificar quatro condições sobre as notas. Você pode, porém, fazer assim: l1 - verifica se a nota do indivíduo é menor que 4. Se sim, escreve "reprovado". Se não, vai pra l2. l2 - verifica se a nota do indivíduo é menor que sete. Se sim, escreve "prova final". Se não, escreve "aprovado". Com um pequeno custo, você economiza (na pior das hipóteses) dois cálculos booleanos. Exercício: faça um algoritmo para as operações acima.
  7. Justiceira, você poderia explicar melhor o problema? Você quer pegar um sistema de equações lineares e "desembaralhar", botando numa forma em que seja possível resolver? Eu realmente não entendi o problema.
  8. Provavelmente já não é mais de nenhuma ajuda, mas... Desses aí eu só conheço Newton. Ele é bem simples do ponto de vista matemático, mas exige um conhecimento razoável de análise (ou cálculo). Sugiro o livro do Elon, Análise vol. 1, para entender as sutilezas do método (demonstração de que funciona e de que as aproximações convergem quadraticamente p/ a raíz). Para uma visão menos rigorosa do método: http://pt.wikipedia.org/wiki/M%C3%A9todo_de_Newton Ele se baseia na diferenciabilidade da função e em algumas outras hipóteses importantes. Mãos à obra. Seja Y = x^3-7x+6 := f(x) .......(1) Então f'(x)=3x^2 - 7 ................(2) (observe que eu estou calculando analiticamente a derivada, mas eventualmente isso não será possível e você terá que usar uma aproximação) O que você quer é uma sequencia de pontos x_n que convirja para um número x tal que f(x)=0. Vamos usar o fato de que f(x+h)=f(x)+hf'(x)+O(h^2). (Notação de Landau) Seja X0 = 1.8. Seria ideal que eu pudesse achar um ΔX0 tal que X1 = X0+ΔX0 fizesse f se anular, isto é, f(X1) = f(X0+ΔX0) = 0. É claro que eu não posso usar a própria função (senão estaria roubando, resolvendo explicitamente o polinômio). O que eu vou fazer é usar a aproximação linear, cometendo um abuso de notação (qual seja, usar f para a função e para a aproximação linear): f(X0+ΔX0) = f(X0)+ΔX0 * f'(X0) = 0 ==> ΔX0 = -f(X0)/f'(X0) Logo o próximo termo da seqüência será X1 = X0+ΔX0 = X0-f(X0)/f'(X0) Analogamente (faça as contas, estou com preguiça), se eu já tiver definido Xk, o X(k+1) deverá ser: X(k+1) = Xk - f(Xk)/f'(Xk) Para fazer o algoritmo, basta subsituir as expressões (1) e (2) na linha acima. É claro, em algum momento o algoritmo tem que parar. Você pode fazer com que ele pare com um número pré-determinado de passos. Em pseudocódigo: declara real X, X0; declara inteiro numero_passos; numero_passos <- 500; X0 <- 1.8; X<-X0; *comentário: essa é uma variável que vai armazenar os valores sucessivos da seqüência* para k=1 até k=numero_passos faça: X<- X - Poli(X)/DerivadaPoli(X); fim para imprime "A raíz encontrada foi: "; imprime X; função Poli(real Z) declara real Y; Y<- Z^3 - 7*Z + 6; retorna Y; fim função função DerivadaPoli(real Z) declara real Y; Y<-2*Z^2 - 7 retorna Y; fim função
  9. Uma moça grávida e seu parceiro vão ao médico descobrir o sexo de seu filho. - Doutor, é homem ou mulher? - pergunta a moça Então o médico responde, indo embora: - É. O Elon Lages que contou essa. Genial.
  10. Um pequeno adendo: se o programa termina com a digitação de um número negativo, obviamente ele será o menor de todos 8-)
  11. Você quer programar um "robô" pra ficar atualizando a página?
  12. É importante que você atribua o valor true à variável ok antes do loop, i.e., antes do código você bota: var ok = true; (resto do código)
  13. Resumo: não jogue na mega-sena. A probabilidade de ganhar é tão insignificante que vale mais a pena gastar seu dinheiro com um pastelzinho de queijo na esquina.
  14. John Doe

    Vamos produzir algo!

    Meio off topic, mas eu não aconselharia a botar seu email nesse formato. Use, ao invés: kylar77 at gmail dot com por exemplo. Só pra dificultar a vida dos bots. (moderadores, sintam-se à vontade para apagar esse post)