Ir para conteúdo
Fórum Script Brasil

Todas Atividades

Atualizada automaticamente

  1. Yesterday
  2. <div class="whitespace-nowrap overflow-auto px-2"><?= $lcto->hist ?></div> Ele fica um pouco desalinhado, dá para consertar, diminuindo o tamanho em pixel do campo histórico, mas aí apareceram vários históricos com o recurso da barra deslizante, então, achei melhor do jeito que está. Agora estou trabalhando com um <body class="w-[600px]">, é o que cabe na tela do celular, no modo paisagem.
  3. Frank K Hosaka

    A impressora

    O meu irmão não se deu bem com a impressora térmica para emitir orçamento, ele disse que a impressora só é boa para emitir nota fiscal ao consumidor eletrônica (NFCe). Ele decidiu comprar uma impressora a laser, o HP 107 w. Levei uma hora para configurar a impressora, eu fiz a besteira de conectar o cabo de dados da impressora com o notebook. Hoje tudo é diferente, não é mais necessário o cabo de dados, mas enfim consegui conectar a impressora na rede WiFi. O pesadelo foi na hora de adaptar o código PHP para a nova impressora. Eu e o Copilot gastamos oito horas para fazer o serviço de impressão funcionar. Depois de muita tentativa e erro, pedi para o Copilot começar do zero, tentar imprimir "Olá mundo" pelo Android, e deu certo. Esse foi o núcleo do trabalho, e pouco a pouco fui acrescentando o resto do serviço. O problema foi na hora de usar o comando JavaScript window.onafterprint(), é justamente esse comando é que estava detonando todo o serviço. O Copilot teve a genial ideia de criar o botão "Concluir" para substituir o serviço do afterprint. Outro serviço que não deu certo foi window.scrollTo. Resumindo, não deu para automatizar tudo, o que o JavaScript não conseguiu fazer, eu joguei nas costas do usuário: <?php include('menuView.php'); ?> <style> @media print {.no-print { display: none; }} .print-area {text-align: center;margin: 20px;} </style> <div class="print-area"> <table style="margin-left:420px"> <tr class=fw-semibold><td colspan=7>Quitanda do Frank - Praça Castelo Branco 123 <tr class=fw-semibold><td colspan=7>Pedido <?=$ped?> de <?=dbr($itens[0]->dia)?> <?php foreach($itens as $item): ?> <tr><td colspan=7><?=$item->prod?> <tr><td class=text-end><?=$item->qt?> <td class=text-end><?=$item->un?> <td>x<td class=text-end><?=dec($item->unitario)?> <td>=<td class=text-end><?=dec($item->subtotal)?> <?php endforeach; ?> <tr class=fw-semibold><td>Total<td><td><td><td><td class=text-end><?=dec($itens[0]->total)?> </div> <div class="no-print"> <button onclick="imprimir()">Imprimir</button> <button onclick="concluir()">Concluir</button> </div> <script> document.addEventListener("DOMContentLoaded", function() { // Adiciona a classe no-print ao elemento cabecalho var cabecalho = document.querySelector('#cabecalho'); if (cabecalho) { cabecalho.classList.add('no-print'); } }); function imprimir() { setTimeout(function() { window.print(); }, 500); } function concluir() { location.replace("?Orcamento.inicio.<?=$ped?>"); } </script> </body> </html>
  4. Última semana
  5. Em 32 bits ele compila mas em 64 bits o instalador não compila. Se eu abrir o package dclfrce.bpl e tentar compilar direto no delphi em 64 bits dá o erro: [dcc64 Fatal Error] dclfrce.dpk(75): E2202 Required package 'designide' not found. Estou usando Delphi 12.2
  6. Hoje descobri que um <body> com um width:600px é o ideal para trabalhar com um celular, no modo paisagem, ele é um espaço bem apertado, principalmente se você tiver 9 campos para exibir em cada linha. Então decidi exibir apenas 4 campos e ocultar os demais. Para dispensar o JavaScript para mostrar ou ocultar a <div> usei o marcador <details>, assim: <?php $dados = [['cod'=>1,'desc'=>"maçã"],['cod'=>2,'desc'=>"pera"]]; ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Exemplo de Alternância de Divs</title> <script src="https://cdn.tailwindcss.com"></script> </head> <style> summary {list-style:none} </style> <body class="p-4"> <?php foreach($dados as $dado): ?> <details class="mb-4"> <summary class="cursor-pointer"><?=$dado['cod']?></summary> <div class="p-4 bg-gray-100"> <?=$dado['desc']?> </div> </details> <?php endforeach; ?> </body> </html>
  7. Hoje de manhã, o meu irmão Jorge reclamou que não conseguia ver o total do orçamento no tablet. Eu fui no arquivo appView.php e alterei o código assim: <style> @media (min-width: 768px) { body {width: 750px; margin: auto} } @media (max-width: 767px) { body {width: 600px} } <style> E o meu irmão mostrou que o tablet foi capaz de mostrar o total, eu reduzi o <body> do tablet de 750px para 600px. O nome dessa mágica é o Bootstrap, ele consegue mostrar o que projetei num código para 750px no notebook dentro de um tablet de 600px. Claro que não dá para esperar a mesma mágica no celular. Mas hoje eu lembrei que o celular tem dois modos, o retrato e a paisagem. O modo paisagem tem bem mais que 600px, mas o meu celular mostra exatamente o que eu vejo no modo retrato com as fontes bem ampliadas. Pedi ajuda para o Copilot, pedi para ele me ensinar como fazer o celular não ampliar a fonte, quando mudo o modo retrato para paisagem: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  8. Encontrei nesse fórum um tema bem interessante, usar o PHP para distribuir tarefas entre pessoas. Eu comecei com João e Maria, e as tarefas eram limpar o chão e limpar o teto. O Copilot entendeu o meu problema, e ele resolveu o meu problema assim: João fica com o chão e a Maria fica com o teto. O código do Copilot é uma bela obra de arte, e ele mostra que o PHP é a melhor forma de começar um projeto. Baseado nesse trabalho, expliquei para o Copilot que o Leonardo e o Danilo não querem trabalhar na entrada e no auditório, e ele resolveu assim: <?php // Array de colaboradores $colaboradores = array('Leonardo', 'Danilo', 'Mateus', 'Lucas', 'Pedro', 'Batista'); // Array de tarefas $tarefas = array('entrada', 'auditorio', 'Fone 1', 'Fone 2', 'leitor', 'som'); // Atribuir tarefas aos colaboradores $atribuicoes = array(); $indicesNaoPermitidos = array(); // Definir um índice inicial $indiceInicial = 0; foreach ($tarefas as $tarefa) { // Verifica se a tarefa é "entrada" ou "auditorio" if ($tarefa == 'entrada' || $tarefa == 'auditorio') { // Encontra um colaborador que não seja Leonardo ou Danilo while (in_array($indiceInicial, $indicesNaoPermitidos) || $colaboradores[$indiceInicial] == 'Leonardo' || $colaboradores[$indiceInicial] == 'Danilo') { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } else { // Encontra o próximo colaborador disponível while (in_array($indiceInicial, $indicesNaoPermitidos)) { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } // Atribui a tarefa ao colaborador $atribuicoes[$colaboradores[$indiceInicial]] = $tarefa; // Armazena o índice usado para evitar duplicações $indicesNaoPermitidos[] = $indiceInicial; // Move para o próximo colaborador $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } // Exibir as atribuições foreach ($atribuicoes as $colaborador => $tarefa) { echo "$colaborador: $tarefa <br>"; } ?>
  9. Usando o Copilot, cheguei nessa solução, mas para simplificar não considerei o dia em que a tarefa será executada, mas acredito que dá para expandir o código, até atingir o objetivo do seu projeto: <?php // Array de colaboradores $colaboradores = array('Leonardo', 'Danilo', 'Mateus', 'Lucas', 'Pedro', 'Batista'); // Array de tarefas $tarefas = array('entrada', 'auditorio', 'Fone 1', 'Fone 2', 'leitor', 'som'); // Atribuir tarefas aos colaboradores $atribuicoes = array(); $indicesNaoPermitidos = array(); // Definir um índice inicial $indiceInicial = 0; foreach ($tarefas as $tarefa) { // Verifica se a tarefa é "entrada" ou "auditorio" if ($tarefa == 'entrada' || $tarefa == 'auditorio') { // Encontra um colaborador que não seja Leonardo ou Danilo while (in_array($indiceInicial, $indicesNaoPermitidos) || $colaboradores[$indiceInicial] == 'Leonardo' || $colaboradores[$indiceInicial] == 'Danilo') { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } else { // Encontra o próximo colaborador disponível while (in_array($indiceInicial, $indicesNaoPermitidos)) { $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } } // Atribui a tarefa ao colaborador $atribuicoes[$colaboradores[$indiceInicial]] = $tarefa; // Armazena o índice usado para evitar duplicações $indicesNaoPermitidos[] = $indiceInicial; // Move para o próximo colaborador $indiceInicial = ($indiceInicial + 1) % count($colaboradores); } // Exibir as atribuições foreach ($atribuicoes as $colaborador => $tarefa) { echo "$colaborador: $tarefa <br>"; } ?>
  10. A = list() B = list() z = int(input("Digite o tamanho da lista 1 ")) x = int(input("Digite o tamanho da lista 2 ")) for cont in range(0, z) A.append(int(input("Digite um número da lista 1 "))) for cont in range(0, x) B.append(int(input("Digite um número da lista 2 "))) print (len(A)) print (len(B)) print(f"Sua lista junta = {A + B}") print (len(A)+len(B))
  11. print("-----------------------------------") print(" RESGATE SEM FRONTEIRAS ") print("-----------------------------------") print("AJUDE A MILHARES DE PESSOAS REALIZAREM SEUS SONHOS. DOE AGORA MESMO!") print("[1] PARA DOAR R$ 10,00") print("[2] PARA DOAR R$ 25,00") print("[3] PARA DOAR R$ 50,00") print("[4] PARA DOAR OUTROS VALORES") n = float(input("DIGITE O NÚMERO CORRESPONDENTE AO VALOR DE SUA DOAÇÃO: ")) if n == 1: print("Voce doou 10 reais ") elif n == 2: print("Voce doou 25 reais ") elif n == 3: print("Voce doou 50 reais ") elif n == 4: n = float(input("Digite o valor a ser doado")) print(f"Voce doou {n:.2f}") print("Obrigado") # eu faria dessa forma
  12. odiegodias

    COUNT DISTINCT

    Frank, Muito obrigado pela ajuda !! Acredito que o caminho seja exatamente este. No lugar do SUM, eu coloquei um count (distinct data) .. sabe me dizer como eu adapto para que este count distict considere o year e month concatenado ? Por exemplo: Mês e Ano - Concatenado 11/24 ----> CountDistinct 12/24 -----> CountDistinct 01/25 -------> CountDistinct SELECT cnpj, YEAR(data) AS ano, MONTH(data) AS mes, count(distinct data) FROM comissao GROUP BY cnpj, YEAR(data), MONTH(data) ORDER BY ano, mes;
  13. quero definir que Leonardo e Danilo Dorneles não sejam designados Indicadores de entrada e de auditorio.... já tentei de tudo segue o codigo: <?php function distribuirOperadoresDeSom($nomes, $mes) { $dias = array(); $numNomes = count($nomes); $nomeIndex = 0; for ($dia = 1; $dia <= 31; $dia++) { $diaSemana = date("N", strtotime("$mes-$dia")); if ($diaSemana == 2 || $diaSemana == 6) { $dias[$dia] = $nomes[$nomeIndex]; $nomeIndex = ($nomeIndex + 1) % $numNomes; } } return $dias; } function distribuirNomesParaFuncoes($nomes, $mes, $operadoresSomDesignados) { $funcoes = array( "Indicador de Entrada" => "", "Indicador de Auditório" => "", "Microfone 1" => "", "Microfone 2" => "", "Leitor" => "" ); $numDiasNoMes = date("t", strtotime($mes)); $numNomes = count($nomes); $resultados = array(); $nomeIndex = 0; for ($dia = 1; $dia <= $numDiasNoMes; $dia++) { $diaSemana = date("N", strtotime("$mes-$dia")); if ($diaSemana == 2 || $diaSemana == 6) { $operadorSom = isset($operadoresSomDesignados[$dia]) ? $operadoresSomDesignados[$dia] : null; // Armazenar os nomes já usados neste dia para evitar duplicação $nomesUsados = array(); foreach ($funcoes as $funcao => $nome) { if ($funcao == "Leitor") { // Garantir que Fernando e Lourenço não sejam designados como Leitor while ( $nomes[$nomeIndex] == "Lourenço" || $nomes[$nomeIndex] == "Fernando" || $nomes[$nomeIndex] == $operadorSom || in_array($nomes[$nomeIndex], $nomesUsados) ) { $nomeIndex = ($nomeIndex + 1) % $numNomes; } } else { while ($nomes[$nomeIndex] == $operadorSom || in_array($nomes[$nomeIndex], $nomesUsados)) { $nomeIndex = ($nomeIndex + 1) % $numNomes; } } $funcoes[$funcao] = $nomes[$nomeIndex]; $nomesUsados[] = $nomes[$nomeIndex]; // Marcar o nome como usado $nomeIndex = ($nomeIndex + 1) % $numNomes; } $resultados[] = array( "data" => date("d/m/Y", strtotime("$mes-$dia")), "diaSemana" => ($diaSemana == 2 ? "Terça-feira" : "Sábado"), "operadorSom" => $operadorSom, "funcoes" => $funcoes ); } } return $resultados; } if ($_SERVER["REQUEST_METHOD"] == "POST") { $nomesFuncoes = isset($_POST['nomes_funcoes']) ? explode(",", $_POST['nomes_funcoes']) : array(); $nomesSom = isset($_POST['nomes_som']) ? explode(",", $_POST['nomes_som']) : array(); $mes = isset($_POST['mes']) ? $_POST['mes'] : ""; if (!empty($mes)) { // Configura o idioma para português do Brasil setlocale(LC_TIME, 'pt_BR', 'pt_BR.utf8', 'portuguese'); // Formata o nome do mês em português $mesFormatado = strftime("%B de %Y", strtotime($mes)); // Exemplo: "novembro de 2024" $resultadosSom = distribuirOperadoresDeSom($nomesSom, $mes); $resultadosFuncoes = distribuirNomesParaFuncoes($nomesFuncoes, $mes, $resultadosSom); echo "<style> table { border-collapse: collapse; width: 100%; margin-top: 20px; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #4682B4; color: white; } tr:nth-child(even) { background-color: #f2f2f2; } tr:nth-child(odd) { background-color: #ffffff; } .header { text-align: center; font-family: Arial, sans-serif; margin-bottom: 20px; } .header h1 { font-size: 24px; color: #4682B4; } .header h2 { font-size: 20px; color: #000; } </style>"; // Cabeçalho echo "<div class='header'>"; echo "<h1>CONGREGAÇÃO CENTRO-OESTE, GAMA, DF – 002 – Nº 82446</h1>"; echo "<h2>ÁUDIO E VÍDEO / INDICADORES / LEITORES</h2>"; echo "<h3>" . strtoupper($mesFormatado) . "</h3>"; // Exibe o mês escolhido no cabeçalho em português echo "</div>"; // Tabela principal echo "<table>"; echo "<tr><th>Dia/Mês</th><th>Dia da Semana</th><th>Indicador de Entrada</th><th>Indicador de Auditório</th><th>Microfone 1</th><th>Microfone 2</th><th>Leitor</th><th>Operador de Som</th></tr>"; foreach ($resultadosFuncoes as $resultado) { echo "<tr>"; echo "<td>{$resultado['data']}</td>"; echo "<td>{$resultado['diaSemana']}</td>"; foreach ($resultado['funcoes'] as $nome) { echo "<td>{$nome}</td>"; } echo "<td>{$resultado['operadorSom']}</td>"; echo "</tr>"; } echo "</table>"; // Adicionando a seção de orientações echo "<h2>ORIENTAÇÕES</h2>"; echo "<table>"; echo "<tr><th>Função</th><th>Descrição</th></tr>"; echo "<tr><td>Indicador de Entrada</td><td>A designação começa <strong>30 minutos antes de cada reunião e termina depois que todos os presentes terem deixado o local.</strong> Monitorar a entrada antes, durante e depois da reunião. <strong>Trancar os portões 5 minutos depois do início da reunião.</strong> Inspecionar o estacionamento 30 minutos depois do inicio da reunião e 15 minutos antes de a reunião terminar. Destrancar os portões depois da oração final. Trancar os portões e as portas depois que todos tiverem deixado o local. Ajudar o indicador do auditório se for necessário evacuar o local. Dar boas vindas aos presentes.</td></tr>"; echo "<tr><td>Indicador de Auditório</td><td>A designação começa <strong>30 minutos antes de cada reunião e termina depois que todos os presentes terem deixado o local.</strong> Dar instruções durante emergências (como evacuações, alarmes de incêndio e ameaças de bomba) e garantir que os serviços de emergências sejam contatados conforme a necessidade.<strong> Monitorar o auditório, o palco, a temperatura e a ventilação. Cuidar de situações que atrapalhem a reunião e de situações que envolvem sério risco de segurança.</strong> Trabalhar em conjunto com o indicador da entrada. Cuidar do bem estar dos irmãos durante a reunião, repondo copos e em outras situações. <strong>Anotar o numero de presentes na assistência e no zoom, e anotar no relatório.</strong> Dar boas vindas e ajudar os que chegam atrasados a encontrar lugares, sem atrapalhar o andamento da reunião.</td></tr>"; echo "<tr><td>1º Microfone e Assistente de Palco</td><td>Essa é uma designação dupla. <strong>Assistente de palco: Cuida de todas as necessidades do palco, como ajustar microfones, levar água ao orador e leitor, levar e trazer os microfones ao palco,</strong> ajudar quando existir algum problema tecnico e em possíveis mudanças nos moveis do palco. Manter o palco organizado e em bom funcionamento. <strong>Microfone Volante:</strong> Estar atento para levar o microfone sem fio a assistência para comentários. <strong>Utilizar a vara de extensão.</strong> No fim da reunião, recolher os microfones do palco, enrolar os cabos e trazer ao balcão do som, zelando pelo cuidado com os equipamentos, tendo cuidado para não bater nem derrubar os mesmos.</td></tr>"; echo "<tr><td>2º Microfone</td><td>Estar atento para levar o microfone sem fio a assistência para comentários. <strong>Utilizar a vara de extensão.</strong> Ao final, recolher as varas e guardar, zelando pelo cuidado com os equipamentos, tendo cuidado para não bater nem derrubar os mesmos.</td></tr>"; echo "</table>"; } else { echo "<p>Preencha todos os campos do formulário.</p>"; } } ?>
  14. Pessoal, Estou tentando montar um Select que visa extrair o mês e ano de uma data, e posteriormente preciso concatenar e fazer uma contagem desta mesma data concatenada. De inicial tenho esta select, porém não estou tendo sucesso . Alguém consegue me ajudar ? SELECT CNPJ_EMPRESA, contagem, COUNT(contagem), concat(EXTRACT(YEAR FROM contagem), '/' (EXTRACT(MONTH FROM contagem) AS contagem FROM COMISSAO WHERE EXTRACT(YEAR FROM contagem) GROUP BY EXTRACT(YEAR FROM contagem), CNPJ_EMPRESA
  15. Com a ajuda do Copilot, montei um algoritmo mais simples, onde ele relaciona os itens necessários para uma quantidade solicitada de hamburgueres, só que eu usei o Portugol Webstudio (https://portugol.dev/) programa { funcao inicio() { // Declaração das variáveis inteiro qtdHamburgueres real carne, pao, queijo, alface, tomate // Define a quantidade de ingredientes por hambúrguer carne = 0.15 // 150 gramas por hambúrguer pao = 1.0 // 1 pão por hambúrguer queijo = 0.05 // 50 gramas de queijo por hambúrguer alface = 0.02 // 20 gramas de alface por hambúrguer tomate = 0.03 // 30 gramas de tomate por hambúrguer // Pergunta ao usuário quantos hambúrgueres deseja fazer escreva("Quantos hambúrgueres você quer fazer? ") leia(qtdHamburgueres) // Calcula a quantidade total de cada ingrediente carne = carne * qtdHamburgueres pao = pao * qtdHamburgueres queijo = queijo * qtdHamburgueres alface = alface * qtdHamburgueres tomate = tomate * qtdHamburgueres // Exibe a lista de ingredientes necessários escreva("Para fazer ", qtdHamburgueres, " hambúrguer(es), você vai precisar de:\n") escreva(carne, " kg de carne\n") escreva(pao, " pães\n") escreva(queijo, " kg de queijo\n") escreva(alface, " kg de alface\n") escreva(tomate, " kg de tomate\n") } }
  16. Frank K Hosaka

    COUNT DISTINCT

    SELECT cnpj, YEAR(data) AS ano, MONTH(data) AS mes, SUM(comissao) AS total_comissao FROM comissao GROUP BY cnpj, YEAR(data), MONTH(data) ORDER BY ano, mes;
  17. Hoje recebi a mensagem de que a função não foi localizada, erro 404. Eu não consegui encontrar nenhum erro. O Copilot deu várias orientações, a mais estranha foi testar o Route, assim: Route::get('teste',function(){return 'teste';}); E, por incrível que parece, não consegui executar essa função. Foi aí é que o Copilot me passou a dica de limpar o cache do Route. E a partir daí tudo começou a funcionar como eu esperava.
  18. Estou pensando em usar o Bootstrap e oTailwinds no PHP, mas logo no primeiro teste, encontrei um problema aqui: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.tailwindcss.com"></script> <style> @media (min-width: 768px) { body {width: 750px; margin: auto} } </style> <div class="w-50 bg-success m-auto">Olá mundo</div> Aqui usei o CSS convencional para centralizar a <div> no meio da tela, mas o Tailwinds empurra tudo para esquerda. O único jeito que eu encontrei para resolver isso foi usando a seguinte gambiarra: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.tailwindcss.com"></script> <style> @media (min-width: 768px) { .gambiarra {width: 750px; margin: auto} } </style> <div class="gambiarra w-50 bg-success m-auto">Olá mundo</div>
  19. Interessante o desafio com a migração para MySQL! A abordagem com LIMIT no SELECT é realmente uma solução mais prática para paginação em bancos robustos. Aproveitando o tema, para quem busca soluções práticas e diversificadas, vale também explorar https://onabet-cassino.io/, uma plataforma que combina inovação e facilidade, assim como no desenvolvimento de sistemas eficientes!
  20. odiegodias

    COUNT DISTINCT

    Boa noite meus amigos ! Estou tentando criar um select que tem como objetivo trazer a contagem de datas distintas. Montei uma primeira select e o resultado foi parcialmente o que eu preciso. A sintaxe está correta, porém preciso fazer um pequeno ajuste. Sintaxe atual: Select cnpj_empresa, count(distinct data) from comissao group by cnpj_empresa; Preciso quebrar o campo data em Mês e Ano (Preciso fazer o distinct a partir desta quebra) Já tentei usar o Extract, mas não obtive êxito. Alguém tem alguma ideia de como contornar isso ? Agradeço desde já !
  21. Exercício visualg Linguagem Portugol Uma lanchonete chamada toninha lanches precisa de um sistema para calcular a compra mensal de insumos para fabricação de seus lanches. O objetivo é que sejam inseridas matérias primas que vão na fabricação dos lanches em um vetor. Em seguida será necessário outro vetor para cadastrar os lanches disponíveis e neste vetor além do nome do lanche deveremos vincular até 5 matérias primas para a fabricação do lanche. Por fim, o sistema deverá perguntar quantos lanches de cada tipo foram vendidos e apresentar a quantidade de matéria prima de cada item que seja necessária a compra. Travei só até aqui Algoritmo "semnome" Tipo Insumo = Registro nome : caracter preço : real FimRegistro Tipo Lanche = Registro nome : caracter ingrediente_1 : inteiro ingrediente_2 : inteiro ingrediente_3 : inteiro ingrediente_4 : inteiro ingrediente_5 : inteiro FimRegistro Var Ingredientes : vetor[1..5] de Insumo Sanduiches : vetor[1..5] de LancheInicio // Preenchendo o vetor de ingredientes... Ingredientes[1].nome <- "Pão" Ingrediente[1].preço <- 0.2 Ingredientes[2].nome <- "Hamburguer" Ingrediente[2].preço <- 2.5 // Preenchendo (manualmente) o vetor de Sanduiches Sanduiches[1].nome <- "X Burguer" Sanduiches[1].ingrediente_1 <- 1 // Pão Sanduiches[1].ingrediente_2 <- 2 // Hamburguer" Fimalgoritmo
  22. Que show... nunca chegaria nesse código, Frank muito obrigado mesmo. Só vou estudar ele agora para fazer um ajuste, os jogadores não enfrentam todos, é tipo monta-se as duplas e os vencedores avançam para a próxima etapa. Algo como chave 1 (aluno a x aluno b) e chave 2 (aluno c x aluno d), o vencedor da chave 1 enfrenta o vencedor da chave 2. Os perdedores já são eliminados. A resposta precisa ser: /* Categoria: iniciante Jogador 1 vs Jogador 15 Jogador 18 vs Jogador 21 Categoria: intermediario Jogador 8 vs Jogador 9 */
  23. Problema complicado, eu apelaria para o Copilot: <?php // Lista de jogadores $jogadores = [ ['aluno' => 1, 'escola' => 1, 'categoria' => 'iniciante'], ['aluno' => 8, 'escola' => 1, 'categoria' => 'intermediario'], ['aluno' => 9, 'escola' => 2, 'categoria' => 'intermediario'], ['aluno' => 15, 'escola' => 2, 'categoria' => 'iniciante'], ['aluno' => 18, 'escola' => 3, 'categoria' => 'iniciante'], ['aluno' => 21, 'escola' => 1, 'categoria' => 'iniciante'], ]; // Função para agrupar jogadores por categoria function agruparPorCategoria($jogadores) { $categorias = []; foreach ($jogadores as $jogador) { $categorias[$jogador['categoria']][] = $jogador; } return $categorias; } // Agrupar jogadores por categoria $categorias = agruparPorCategoria($jogadores); // Função para gerar chaves de jogos function gerarChaves($categoriaJogadores) { $chaves = []; $numJogadores = count($categoriaJogadores); for ($i = 0; $i < $numJogadores; $i++) { for ($j = $i + 1; $j < $numJogadores; $j++) { if ($categoriaJogadores[$i]['escola'] !== $categoriaJogadores[$j]['escola']) { $chaves[] = [ 'jogador1' => $categoriaJogadores[$i]['aluno'], 'jogador2' => $categoriaJogadores[$j]['aluno'] ]; } } } return $chaves; } // Gerar chaves de jogos por categoria $chavesPorCategoria = []; foreach ($categorias as $categoria => $categoriaJogadores) { $chavesPorCategoria[$categoria] = gerarChaves($categoriaJogadores); } // Exibir chaves de jogos foreach ($chavesPorCategoria as $categoria => $chaves) { echo "Categoria: $categoria<br>"; foreach ($chaves as $chave) { echo "Jogador {$chave['jogador1']} vs Jogador {$chave['jogador2']}<br>"; } echo "<br>"; } ?> /* Categoria: iniciante Jogador 1 vs Jogador 15 Jogador 1 vs Jogador 18 Jogador 15 vs Jogador 18 Jogador 15 vs Jogador 21 Jogador 18 vs Jogador 21 Categoria: intermediario Jogador 8 vs Jogador 9 */
  24. Para bloquear teclas como Ctrl+Alt+Del, Alt+Tab, tecla Windows e outras no Windows, você precisa utilizar APIs específicas do sistema operacional, mas há algumas limitações. O Ctrl+Alt+Del, por exemplo, é protegido pelo próprio sistema e não pode ser bloqueado diretamente por aplicativos comuns por questões de segurança. Aqui estão algumas orientações para as outras teclas: Tecla Windows e Alt+Tab: Use o registro de hooks no teclado através da API SetWindowsHookEx no modo WH_KEYBOARD_LL para interceptar os eventos dessas teclas e ignorá-los. Isso requer permissões elevadas. Tecla Alt+Esc: Também pode ser bloqueada usando um hook global, embora seja necessário cuidado para evitar instabilidade no sistema. Ctrl+Alt+Del: Esta combinação não pode ser desativada diretamente, mas você pode criar um ambiente de quiosque (kiosk mode) que limita o acesso ao desktop. Um exemplo prático pode ser usar frameworks como o .NET ou bibliotecas de terceiros para implementar essas funcionalidades. Dependendo da aplicação, o uso do modo de execução seguro (Secure Desktop) pode ser uma opção adicional para controle. Curiosamente, enquanto desenvolvo meus próprios projetos, como explorando mundos abertos em plataformas como o riorise.com, eu aprendi que a gestão de eventos de sistema pode ser complexa, mas fascinante!
  25. Preciso obter de resposta arrays com duplas de ID´s, essas duplas são jogadores de xadrez. Eu até fiz usando o array_rand porém como são alunos de escolas diferentes, na primeira chave de confrontos não pode haver alunos da mesma escola se enfrentando, gostaria de idéias de como posso fazer isso. TABELA_INSCRICOES ID | ID_aluno | ID_escola | Categoria 1 | 1 | 1 | Iniciante 2 | 8 | 1 | Intermediario 3 | 9 | 2 | Intermediario 4 | 15 | 2 | Iniciante 5 | 18 | 3 | Iniciante 6 | 21 | 1 | Iniciante Com base nesses dados (exemplo) a chaves de jogos da categoria iniciante precisam ser: [1,15] e [18,21] isso porque os alunos com ID 1 e 21 são da mesma escola e não podem se enfrentar. Tem como implementar algo no array_rand que crie esse filtro ou mesmo um select que traga os resultados ? Já queimei meus neuronios e não consigo pensar em nenhuma lógica. $input = array("1", "8", "9", "15", "18", "21"); $rand_keys = array_rand($input, 2); echo $input[$rand_keys[0]] . "\n"; echo $input[$rand_keys[1]] . "\n"; Os dados que tenho são: ID_aluno, ID_escola e Categoria. A categoria já uso no select para separar e então gerar o array com os alunos da sua categoria. Agradeço se me ajudarem, estou usando PHP e mysql.
  26. Sub Novo_RDO() 'código hospedado no módulo de programação em EstaPastaDeTrabalho 'esse código presume que o usuário pegou a última planilha com o formato nn NomePlanilha = ActiveSheet.Name Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count) 'cria nova planilha baseada na anterior ActiveSheet.Name = Format(NomePlanilha + 1, "00") Range("B1:B3").ClearContents 'limpa a área de dados Range("B1").Value = InputBox("Por favor, insira a data da obra") MsgBox "Por favor, altere as imagens para corresponder a essa RDO" End Sub
  27. Bom dia Frank, Primeiramente, obrigado pela resposta!! Esse código que enviou apaga o dia atual quando é inserida uma nova RDO, ou seja, fica visível apenas a RDO do dia e a intenção é ter todos os dias visíveis para acompanhamento. Como a planilha possui várias fórmulas e principalmente objetos, vou mantê-la bloqueada para não acontecer alterações indesejadas ou até mesmo propositais e com isso, consigo inserir fotos na RDO apenas clicando no botão de inserir em cada objeto de imagem. Gostaria que, clicando no botão "Inserir Novo RDO" abre uma aba nova, já com a data atualizada e toda em branco, para um novo preenchimento. Obrigado
  1. Mais Resultados


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...