Ir para conteúdo
Fórum Script Brasil

John Doe

Membros
  • Total de itens

    1.608
  • Registro em

  • Última visita

Tudo que John Doe postou

  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. John Doe

    O médico lógico

    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)
  15. Por que você não esconde os nomes de arquivo? Por ex.: <? $array=("arquivos.php","downloads.php","teste.php"); $pag = (int) $_GET['pag']; if(isset($pag) && $pag>0 && $pag<count($array)){ include($array[$pag]); } ?> Nesse caso, se você quisesse linkar pra teste.php, bastaria botar uma referência para index.php?pag=2.
  16. John Doe

    Média dos valores

    Essa é uma típica questão que você pode fazer é "phportuguês" antes de partir pro php. Vou fazer a (a) em pseudocódigo, depois você tenta fazer as outras. a) Média (aritmética? harmônica?) A média aritmética dos números x1, x2, ..., xN é dada por (x1+x2+...+xN)/N Supondo que "vec" seja um vetor dado com quinze posições de números racionais: início; inteiro variavel_soma <- 0; inteiro aux <- 0; flutuante media <- 0.0; enquanto aux < 15 faça: variavel_soma <- variavel_soma + vec[aux] aux <- aux+1 fim_enquanto media <- variavel_soma/15 fim; Tenta fazer um e posta o resultado aqui. Abraços.
  17. É isso mesmo, essa passagem aqui não fez sentido: para i de 0 a 3 printf("\nDigite a linha %d: ",i); scanf("%d",&mat[i][j]); ... já que o j vai valer lixo de memória (primeira iteração) ou 2 (nas outras). Se quiser fazer desse jeito (esperando input da coluna no primeiro loop), tem que criar uma variável temporária pra linha, e usá-la no segundo loop. Ainda assim, não entendo por que fazer desse jeito e não do jeito sugerido acima.
  18. É verdade. Ainda assim, entretenimento de nerd é sempre algo curioso, "data venia".
  19. @AndersonFerreira: Na verdade, (60!/20!)*24! = (60!/20!)*(24*23*22*21*20!) = 60! * 24! >>> (60, 6) Na verdade, ainda falta uma coisa para esse raciocínio. Segundo o que você disse, os seguintes arranjos: 54, 21, 10, 1, 2, 3 e 54, 10, 21, 1, 2, 3 e 54, 1, 10, 21, 2, 3 ... entram na conta. Mas isso não acontece. O que falta é descontar algumas possibilidades. Digamos que os números a, b, c, d, e, f tenham sido escolhidos. Podemos fazer diversas combinações desses números, como a, b, c, d, e, f a, b, d, e, c, f f, a, b, c, d, e Ao todo, são 6! combinações possíveis. Logo da conta 60!/54! devemos descontar essas possibilidades, i.e., dividir tudo por 6!: Número de combinações = 60!/(54!*6!) = (60, 6) onde (n, k) é a combinação de 'n' 'k' a 'k', ou 'n escolhe k'. (Na verdade isso aqui foi uma dedução bastante informal do coeficiente binomial. ) Abraços
  20. Agora a gente ouve tanto em bilhões nessa época de crise econômica que 50 063 860 parece um número insignificante. Mas se você supor que um ano tem 365 dias e uma vida tem 70 anos, então, jogando uma vez por dia, você precisa de pouco mais que 1959 vidas pra ganhar uma vez na mega-sena. A conta é simples: 70 anos tem, por hipótese, 70*365=25 550 dias. Divida 50 063 860 por esse número e confira. De fato, jogar na mega-sena é uma péssima idéia se você valoriza seu dinheiro.
  21. Acho que você pode usar a autenticação sugerida pelo colega acima, junto com isso: http://www.kavoir.com/2009/05/php-hide-the...php-script.html No script acima você verificaria antes de tudo se o usuário está autenticado.
  22. Eita, essa é velha! (ignorem, não percebi que era pinned...huehuehueh quanto mais o cara fica velho, mais burro ele fica!)
  23. Você está querendo a diferença entre duas datas, certo? (sendo uma a data de agora e uma outra data qualquer) Então tenta isso aqui: http://scriptbrasil.com.br/forum/index.php...64&hl=datas Abraço, Gustavo
  24. Eu acho que eu não entendi direito tu queres fazer, colega.
×
×
  • Criar Novo...