Ir ao conteúdo
  • Cadastre-se

Lipeco

Membro Pleno
  • Posts

    107
  • Cadastrado em

  • Última visita

Tudo que Lipeco postou

  1. Boa noite tenho uma ideia para fazer dentro do meu site algo parecido com que a Suvinil e a Coral fazem, tipo ter uma paleta de cores e a partir daí ao escolher a cor, ela mudar uma imagem específica. Site de referência https://www.visualizecolor.com/TintasRenner#/Colors/ColorFamilies?projectid=4b44692c-50b1-4e32-bb21-9d5c17dcc5ff Existe algum plugin no wordpress para fazer isso? Ou seria possível fazer isso dentro do meu site Wordpress? Agradeço muito.
  2. Boa noite. Eu montei um Pc com uma placa-mãe ax370 Gaming com um Ryzen 5 5500, e eu já tinha o windows instalado no meu SSD, estava funcionando normalmente, mas decidi formatar, porque não estava com desempenho que eu gostaria nos meus jogos. Enfim fui formatar pelo pendrive, na hora de carregar o pendrive para começa a instalação, dava tela preta, Pc ficava ligado, mas o teclado apagava e o mouse também, só conseguia desligar o PC pela chave da fonte. Tentei outro pendrive, outros windows e etc e a mesma coisa. Tirei o SSD e coloquei em outro Pc , formatei o SSD e instalei o windows, depois voltou para esse computador, ele inicia o windows, não fica 1 minuto e dá tela preta novamente. Já fiz de tudo, testei placa de vídeo em outro Pc, as memórias ram, fonte, cabos e etc. Na BIOS já fiz tudo que pesquisei e que eu conhecia, já atualizei a BIOS, e está com a versão que aceita esse processador em específico, já fiz tudo que eu tinha conhecimento. Só que agora eu desisto. Antes eu deixasse ele do jeito que tava. Se alguém tiver dicas, agradeço .
  3. Boa tarde. Eu tenho um monitor da ASUS 144hz , 27 polegadas, porém os 144hz só é possível com o DVI Dual-Link. Bom eu tinha uma RTX 2060 Super que tinha entrada Dvi, com ela conseguia usar o monitor com 144hz. Enfim, troquei a placa recentemente por uma RTX 2070 Super, mas ela só tem entrada Display Port e HDMI. Gostaria de saber se existe algum adaptador/conversor de Display Port para Dvi que funcione os 144hz? Ou se exista algum de HDMI para DVi e que funcione os 144hz? Eu acho vários no mercado livre, porém só funciona 60hz. Ou será que terei que trocar de monitor? Agradeço a todos
  4. @Talvez não Limpa a placa de vídeo, o pc e encaixa tudo certinho. Liga o pc em modo segurança, desinstala a placa de vídeo, depois instala novamente, baixa do site principal da sua placa.
  5. @washalbano Opa irmão, era pra eu colocar nome_envia, mas coloquei sem querer id_envia, mas depois eu mudo lá. Valeu
  6. Só atualizando, consegui :D, refiz tudo, provavelmente eu devo ter errado alguma linha. Agradeço demais a todos que me ajudaram
  7. @DiF Bom dia amigo, implementei da maneiro como explicou, funcionou, a página agora abre, porém aparece um problema que não estou conseguindo arrumar. Mandei como imagem o que está acontecendo, é o seguinte, faço um login qualquer, com Thales, quando eu uso o XAMPP, funciona perfeitamente, eu clico em avaliar algum usuario, faço a avaliação e o banco de dados recebe tudo Ok. Já quando eu estou no webhost, quando entro na página de avaliar, não consigo enviar o formulário como o Thales., envia a mensagem, mas a página não reconhece Thales como Usuario logado e não envia para o Banco de dados que foi o Thales que enviou, fica em branco, o formulário é enviado, porém em branco a parte de quem enviou. Utilizei o mesmo código nos dois, não fiz alteração. Vou mandar em anexo. <?php #include ('conexao.php'); #include('protect.php'); session_start(); setcookie("ck_authorized", "true", 0, "/"); date_default_timezone_set("Brazil/East"); if(!isset($_SESSION["email"])) header("location:login.php"); else //atribui na varíável de sessão o login do usuário, aqui pode ser um username ou email $email = $_SESSION["email"]; //atribui na variável de sessão o código id do usuário $id_colaboradores = $_SESSION["id_colaboradores"]; //atribui na variável de sessão o nome do usuário $nome = $_SESSION["nome"]; require 'conexao.php'; ?> <!-- Sidebar Start --> <div class="sidebar pe-4 pb-3"> <nav class="navbar bg-secondary navbar-dark"> <a href="painel.php" class="navbar-brand mx-4 mb-3"> <h3 class="text-primary"><img src="img/AutoU.png" style="max-width: 30px;">utoU</h3> </a> <div class="d-flex align-items-center ms-4 mb-4"> <div class="position-relative"> <img class="rounded-circle" src="<?php echo $_SESSION['foto']; ?>" alt="" style="width: 40px; height: 40px;"> <!-- CARREGAR FOTO DEPOIS--> <div class="bg-success rounded-circle border border-2 border-white position-absolute end-0 bottom-0 p-1"></div> </div> <div class="ms-3"> <h6 class="mb-0"><?php echo $nome; echo ' '.$id_colaboradores; ?></h6> <span>Cargo: <?php echo $_SESSION['cargo']; ?></span> </div> </div> <div class="navbar-nav w-100"> <div class="nav-item dropdown"> <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown"><i class="far fa-file-alt me-2"></i>Perfil</a> <div class="dropdown-menu bg-transparent border-0"> <a href="informacao.php" class="dropdown-item">Informações</a> <a href="logout.php" class="dropdown-item">Sair</a> </div> </div> <a href="painel.php" class="nav-item nav-link "><i class="fa fa-tachometer-alt me-2"></i>Dashboard</a> <a href="meu_feedback.php" class="nav-item nav-link"><i class="fa fa-chart-bar me-2"></i>Meus Feedbacks</a> <div class="nav-item dropdown"> <a href="#" class="nav-link dropdown-toggle active" data-bs-toggle="dropdown"><i class="far fa-file-alt me-2"></i>Avaliar</a> <div class="dropdown-menu bg-transparent border-0"> <a href="colaboradores.php" class="dropdown-item">Lista de Colaboradores</a> </div> </div> </div> </nav> </div> <!-- Sidebar End --> <div class="content"> <!-- Widgets Start --> <div class="container-fluid pt-4 px-4"> <div class="row g-4"> <div class="col-sm-12 "> <div class="h-100 bg-secondary rounded p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="mb-0">Avalie um colaborador:</h6><br><br><br> </div> <div class="d-flex w-100 justify-content-between"> <?php //consultar no banco de dados //recebe o valor id vindo da URL $ID = $_GET["id_colaboradores"]; #$id_envia = $consulta_feedbacks['id_envia']; //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores WHERE id_colaboradores = $ID"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); #$result_usuario = "SELECT * FROM colaboradores"; #$resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th scope="col" style="color: red;">NOME </th> <th scope="col" style="color: red;">ID de quem Envia </th> <th scope="col" style="color: red;">ESCREVA UM FEEDBACK</th> <th scope="col" style="color: red;">RECONHECIMENTO</th> <!--<th scope="col" style="color: red;">DÊ UMA PONTUAÇÃO</th> --> <th scope="col" style="color: red;">DATA DO ENVIO</th> <th scope="col" style="color: red;"></th> </tr> </thead> <tbody> <?php #$row_usuario = mysqli_fetch_assoc($consulta_colaboradores); $row_id = mysqli_fetch_assoc($resultado_usuario); $nome = $_SESSION['nome']; ?> <form method="POST" action="processamento_feedback.php"> <tr> <select style="display: none;" name="escolha_nome"> <option selected="selected"><?php echo $row_id['id_colaboradores']; ?></option> </select> <select name="escolha_idenvio"> <option selected="selected"><?php echo $_SESSION['nome']; ?><?php echo ' '.$_SESSION['sobrenome']; ?></option> </select> <!--<th scope="row"><?php #echo $row_id['id_colaboradores']; ?></th> TESTANDO--> <th scope="row"><?php echo $row_id['nome']; ?><?php echo' '. $row_id['sobrenome']; ?></th> <th scope="row"><?php echo $id_colaboradores; ?></th> <!--<td><?php #echo $row_id[#'sobrenome']; ?></td> --> <td> <!--<input type="text" name="mensagem" placeholder="Digite seu feedback..." required><br>--> <div class="form-floating"> <textarea required class="form-control" placeholder="Deixe um feedback..." name="mensagem" id="mensagem" style="height: 70px;"></textarea> <label for="floatingTextarea">Deixe seu feedback...</label> </div> <td> <select class="form-select mb-3" aria-label="Default select example" name="reacao" id="reacao" required> <option value="" selected="selected" hidden="hidden">Clique Aqui</option> <option value="Bom">Bom</option> <option value="Muito Bom">Muito Bom</option> <option value="Excelente">Excelente</option> <!--<option value="Conhecimento">Conhecimento</option> <option value="Companheirismo">Companheirismo</option> --> </select> </td> <!--<td> <select class="form-select mb-3" aria-label="Default select example" name="ponto" id="ponto" required> <option value="" selected="selected" hidden="hidden">ESTRELAS</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </td>--> <td> <input type="date" id="data" name="data" class="form-control" style="background-color: #696969; color: white;" required></td> <td><input type="submit" class="btn btn-success m-2" style="width: 80%;" value="ENVIAR"> </td> </form> </tr> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> </div> </div> </div> </div> </div> </div> </div> <!-- Widgets End --> </body> </html>
  8. @MailingTester Iniciei @MailingTester <?php include ('conexao.php'); include('protect.php'); ?> <div class="d-flex w-100 justify-content-between"> <?php //consultar no banco de dados //recebe o valor id vindo da URL $ID = $_GET["id_colaboradores"]; //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores WHERE id_colaboradores = $ID"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); #$result_usuario = "SELECT * FROM colaboradores"; #$resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th scope="col" style="color: red;">NOME </th> <th scope="col" style="color: red;">ESCREVA UM FEEDBACK</th> <th scope="col" style="color: red;">RECONHECIMENTO</th> <!--<th scope="col" style="color: red;">DÊ UMA PONTUAÇÃO</th> --> <th scope="col" style="color: red;">DATA DO ENVIO</th> <th scope="col" style="color: red;"></th> </tr> </thead> <tbody> <?php #$row_usuario = mysqli_fetch_assoc($consulta_colaboradores); $row_id = mysqli_fetch_assoc($resultado_usuario); $nome = $_SESSION['nome']; ?> <form method="POST" action="processamento_feedback.php"> <tr> <select style="display: none;" name="escolha_nome"> <option selected="selected"><?php echo $row_id['id_colaboradores']; ?></option> </select> <select style="display: none;" name="escolha_idenvio"> <option selected="selected"><?php echo $_SESSION['nome']; ?><?php echo ' '.$_SESSION['sobrenome']; ?></option> </select> <!--<th scope="row"><?php #echo $row_id['id_colaboradores']; ?></th> TESTANDO--> <th scope="row"><?php echo $row_id['nome']; ?><?php echo' '. $row_id['sobrenome']; ?></th> <!--<td><?php #echo $row_id[#'sobrenome']; ?></td> --> <td> <!--<input type="text" name="mensagem" placeholder="Digite seu feedback..." required><br>--> <div class="form-floating"> <textarea required class="form-control" placeholder="Deixe um feedback..." name="mensagem" id="mensagem" style="height: 70px;"></textarea> <label for="floatingTextarea">Deixe seu feedback...</label> </div> <td> <select class="form-select mb-3" aria-label="Default select example" name="reacao" id="reacao" required> <option value="" selected="selected" hidden="hidden">Clique Aqui</option> <option value="Bom">Bom</option> <option value="Muito Bom">Muito Bom</option> <option value="Excelente">Excelente</option> <!--<option value="Conhecimento">Conhecimento</option> <option value="Companheirismo">Companheirismo</option> --> </select> </td> <!--<td> <select class="form-select mb-3" aria-label="Default select example" name="ponto" id="ponto" required> <option value="" selected="selected" hidden="hidden">ESTRELAS</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </td>--> <td> <input type="date" id="data" name="data" class="form-control" style="background-color: #696969; color: white;" required></td> <td><input type="submit" class="btn btn-success m-2" style="width: 80%;" value="ENVIAR"> </td> </form> </tr> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> </div> @MailingTester Eu testei o mesmo código usando o XAMPP, conectando com meu banco,funciona certinho. Quando faço o upload no webhost, tá esse problema, mas ele faz o login corretamente, acessa as páginas corretamente, só essa página que está dando problemas. É como se eu não tivesse logado, mas eu estou, tanto que nas outras páginas funciona também
  9. Boa tarde. Fiz um sistema de login, fiz testes usando o xampp e funcionou tudo ok, porém quando faço o upload para o 000webhost com a conexão toda correta com BD, eu consigo fazer o login, entroas paginas e quando vou enviar um formulário, diz que eu preciso estar logado. Não estou conseguindo achar o problema, já que quando testo no meu XAMPP funciona tudo perfeito. MEU PROTECT.PHP PARA FAZER COM QUE SOMENTE O USUARIO LOGADO POSSA FAZER TAL AÇÃO <?php if(!isset($_SESSION)) { session_start(); } if(!isset($_SESSION['email']) || !isset($_SESSION['id_colaboradores'])) { die("Você não pode acessar esta página porque não está logado.<p><a href=\"index.php\">Entrar</a></p>"); } ?> AQUI É MEU LISTARUSUARIOS.PHP LISTA TODAS PESSOAS INCLUSAS NO MEU BANCO DE DADOS, PARA QUE EU POSSA ESCOLHER PARA QUEM MANDAR MEU FORMULARIO <?php include_once "conexao.php"; include('protect.php'); $name = $_SESSION['nome']; //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores WHERE nome != '$name' ORDER BY nome"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th style="color: red;">NOME</th> <th style="color: red;">SOBRENOME</th> <th style="color: red;">DEPARTAMENTO</th> <th style="color: red;">CARGO</th> <th style="color: red;"> </th> </tr> </thead> <tbody> <?php while($row_usuario = mysqli_fetch_assoc($resultado_usuario)){ $id_colaboradores = $row_usuario['id_colaboradores']; ?> <form method="_POST"> <tr> <th><?php echo $row_usuario['nome']; ?></th> <td><?php echo $row_usuario['sobrenome']; ?></td> <td><?php echo $row_usuario['departamento']; ?></td> <td><?php echo $row_usuario['cargo']; ?></td> <td style="text-align: center;"><a href="avaliar_colaborador.php?id_colaboradores=<?php echo $id_colaboradores; ?>" type="submit" class="btn btn-success m-2" style="width: 80%;">AVALIAR</a></td> </tr> </form> <?php }?> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?>
  10. @MailingTester OBS: Tem como colona parte Data do envio para pegar a data atual ? Curiosidade. Imagem 1. Imagem 2 - Seria a página do usuario logado, onde se pode ver os feedbacks recebidos- meu_feedback.php 1 - Seria possível eu impedir que a pessoa envie um novo feedback para a mesma pessoa? Tipo, O Lucas fez um feedback no dia 12-11-2022, queria impedir ele por um determinado tempo, 1 semana, mês, tanto faz, tentei fazer uma lógica mas não evolui, tipo uma variável que receba a data atual - a data que a pessoa envia, aí se fosse mais de tantos dias, pode enviar, se não, não pode adicionar um feedback para mesma pessoa, apenas para outra pessoa. Imagem 3 - Seria a pagina do dashboard, Na primeira parte eu queria receber o total de pontos, ou seja, receber a variável $qtd_ pontos da página meu_feedback.php, não estou conseguindo pegar essa variável e colocar nessa página. Nas outras partes seria a mesma coisa. Eu deveria criar uma tabela, ou uma coluna para guardar essas informações de quantidades, ou posso simplesmente criar uma variável e guardar o valor e ir passando para outras páginas? Segue em anexo as fotos em ordem. Aqui é da página meu_feedback.php <h6 class="mb-0">FEEDBACKS RECEBIDOS</h6><br><br><br> </div> <div class="d-flex w-100 justify-content-between"> <?php //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th scope="col" style="color: red;">NOME</th> <th scope="col" style="color: red;">ENVIADO POR</th> <!--<th scope="col" style="color: red;">SOBRENOME</th> --> <th scope="col" style="color: red;">FEEDBACKS RECEBIDOS</th> <th scope="col" style="color: red;">PONTOS</th> <th scope="col" style="color: red;">REAÇÕES RECEBIDAS</th> <th scope="col" style="color: red;">DATA DO ENVIO</th> </tr> </thead> <tbody> <?php $qtd_pontos = 0; #$colaboradores = $_POST['nome']; while($row_usuario = mysqli_fetch_assoc($consulta_colabefeed)){ if ($row_usuario['nome'] == $nome) { $qtd_pontos = $row_usuario['pontos'] + $qtd_pontos; ?> <form method="_POST"> <tr> <th scope="row"><?php echo $row_usuario['nome']; ?><?php echo ' '.$row_usuario['sobrenome']; ?></th> <th scope="row"><?php echo $row_usuario['id_envia']; ?></th> <!--<td><?php #echo $row_usuario['sobrenome']; ?></td> --> <td><?php echo $row_usuario['mensagem']; ?></td> <td name="ponto"><?php echo $row_usuario['pontos']; ?></td> <td><?php echo $row_usuario['reacao']; ?></td> <td><?php echo $row_usuario['data_mensagem']; ?></td> </tr> </form> <?php } ?> <?php } ?> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> </div> <br><h6 class="mb-0" style="text-align: center;">PONTUAÇÃO TOTAL = <?php echo $qtd_pontos;?> </h6><br> </div> Imagem 3 - painel.php <div class="container-fluid pt-4 px-4"> <div class="row g-4"> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i><img src="img/Auto.jpg" alt="" style="width: 50px; height: 50px;"></i> <div class="ms-3"> <p class="mb-2">Meus Pontos Totais</p> <h6 class="mb-0">75 </h6> </div> </div> </div> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i class="fa fa-chart-bar fa-3x text-primary"></i> <div class="ms-3"> <p class="mb-2">Maior Pontuador: Nome</p> <h6 class="mb-0">Aqui pega os pontos do maior</h6> </div> </div> </div> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i class="fa fa-chart-area fa-3x text-primary"></i> <div class="ms-3"> <p class="mb-2">Recebeu mais Reações: Nome</p> <h6 class="mb-0">Mostrar pontos</h6> </div> </div> </div> </div> </div> Imagem 1 Imagem 2 Imagem3
  11. Boa noite, estou com umas dificuldades e gostaria de algumas dicas, se possível. Se tiver alguma dica do que posso implementar para melhorar, também apreciaria. Na imagem explico melhor. Segue o código abaixo Aqui é da página meu_feedback.php <h6 class="mb-0">FEEDBACKS RECEBIDOS</h6><br><br><br> </div> <div class="d-flex w-100 justify-content-between"> <?php //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th scope="col" style="color: red;">NOME</th> <th scope="col" style="color: red;">ENVIADO POR</th> <!--<th scope="col" style="color: red;">SOBRENOME</th> --> <th scope="col" style="color: red;">FEEDBACKS RECEBIDOS</th> <th scope="col" style="color: red;">PONTOS</th> <th scope="col" style="color: red;">REAÇÕES RECEBIDAS</th> <th scope="col" style="color: red;">DATA DO ENVIO</th> </tr> </thead> <tbody> <?php $qtd_pontos = 0; #$colaboradores = $_POST['nome']; while($row_usuario = mysqli_fetch_assoc($consulta_colabefeed)){ if ($row_usuario['nome'] == $nome) { $qtd_pontos = $row_usuario['pontos'] + $qtd_pontos; ?> <form method="_POST"> <tr> <th scope="row"><?php echo $row_usuario['nome']; ?><?php echo ' '.$row_usuario['sobrenome']; ?></th> <th scope="row"><?php echo $row_usuario['id_envia']; ?></th> <!--<td><?php #echo $row_usuario['sobrenome']; ?></td> --> <td><?php echo $row_usuario['mensagem']; ?></td> <td name="ponto"><?php echo $row_usuario['pontos']; ?></td> <td><?php echo $row_usuario['reacao']; ?></td> <td><?php echo $row_usuario['data_mensagem']; ?></td> </tr> </form> <?php } ?> <?php } ?> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> </div> <br><h6 class="mb-0" style="text-align: center;">PONTUAÇÃO TOTAL = <?php echo $qtd_pontos;?> </h6><br> </div> Imagem 3 - painel.php <div class="container-fluid pt-4 px-4"> <div class="row g-4"> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i><img src="img/Auto.jpg" alt="" style="width: 50px; height: 50px;"></i> <div class="ms-3"> <p class="mb-2">Meus Pontos Totais</p> <h6 class="mb-0">75 </h6> </div> </div> </div> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i class="fa fa-chart-bar fa-3x text-primary"></i> <div class="ms-3"> <p class="mb-2">Maior Pontuador: Nome</p> <h6 class="mb-0">Aqui pega os pontos do maior</h6> </div> </div> </div> <div class="col-sm-12 col-xl-4"> <div class="bg-secondary rounded d-flex align-items-center justify-content-between p-4"> <i class="fa fa-chart-area fa-3x text-primary"></i> <div class="ms-3"> <p class="mb-2">Recebeu mais Reações: Nome</p> <h6 class="mb-0">Mostrar pontos</h6> </div> </div> </div> </div> </div>
  12. @DiF Passei o dia todo estudando, você me explicou muito bem, melhor entendimento que tive. Já consegui graças a você, muito obrigado. Agora vou tentar criar um gráficos com as informações .
  13. @DiF Consegui criar a chave estrangeira, consegui fazer uns testes de inserção no mysql, unico problema é que não estou conseguindo essa última parte. Segue foto explicando. CODIGO DA PAGINA QUE LISTA OS USUARIOS <?php include_once "conexao.php"; include('protect.php'); $name = $_SESSION['nome']; //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores WHERE nome != '$name' ORDER BY nome"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th style="color: red;">NOME</th> <th style="color: red;">SOBRENOME</th> <th style="color: red;">DEPARTAMENTO</th> <th style="color: red;">CARGO</th> <th style="color: red;"> </th> </tr> </thead> <tbody> <?php while($row_usuario = mysqli_fetch_assoc($resultado_usuario)){ $id_colaboradores = $row_usuario['id_colaboradores']; ?> <form method="_POST"> <tr> <th><?php echo $row_usuario['nome']; ?></th> <td><?php echo $row_usuario['sobrenome']; ?></td> <td><?php echo $row_usuario['departamento']; ?></td> <td><?php echo $row_usuario['cargo']; ?></td> <td><a href="avaliar_colaborador.php?id_colaboradores=$_GET['id_colaboradores']" type="submit" class="btn btn-success m-2" ">AVALIAR</a></td> </tr> </form> <?php }?> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> PAGINA PARA AVALIAR <?php include_once "conexao.php"; include('protect.php'); ?> <!-- Widgets Start --> <div class="container-fluid pt-4 px-4"> <div class="row g-4"> <div class="col-sm-12 "> <div class="h-100 bg-secondary rounded p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="mb-0">Meus Feedbacks</h6> </div> <div class="d-flex w-100 justify-content-between"> <?php //consultar no banco de dados $result_usuario = "SELECT * FROM colaboradores"; $resultado_usuario = mysqli_query($mysqli, $result_usuario); //Verificar se encontrou resultado na tabela "auto_u" if(($resultado_usuario) AND ($resultado_usuario->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th scope="col" style="color: red;">NOME</th> <th scope="col" style="color: red;">SOBRENOME</th> <th scope="col" style="color: red;">FEEDBACKS RECEBIDOS</th> <th scope="col" style="color: red;">REAÇÕES RECEBIDAS</th> </tr> </thead> <tbody> <?php $row_usuario = mysqli_fetch_assoc($consulta_colabefeed); ?> <form method="_POST"> <tr> <th scope="row"><?php echo $row_usuario['nome']; ?></th> <td><?php echo $row_usuario['sobrenome']; ?></td> <td><?php echo $row_usuario['mensagem']; ?></td> <td><?php echo $row_usuario['reacao']; ?></td> </tr> </form> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Nenhum usuário encontrado!</div>"; } ?> </div> </div> </div> </div> </div> </div> </div> <!-- Widgets End -->
  14. Boa noite. Criei meu banco de dados, fiz a area do login e graças a ajuda de vocês está tudo Ok. Agora estou tentando fazer o seguinte, quando faço o login com uma determinada conta, eu posso avaliar outros usuarios dessa tabela do meu banco de dados, onde eu listo elas. Aí gostaria de ao clicar no botão, me redirecionar para uma página, onde eu possa avaliar esse Usuario, caso eu clique no Luiz, eu posso avaliar ele e deixar uma mensagem pra ele, minhas dúvidas são: Devo criar outra tabela no banco de dados, por exemplo, uma tabela chama avaliação e nela conter um id, mensagem e nota, com isso posso ter várias mensagens e notas? Ou devo adicionar por exemplo uma coluna mensagem e nota na mesma tabela de usuários? Depois disso vou pegar essas informações todas e jogar num gráfico, essa é a ideia. No caso da minha página cada usuário poderá dar notas e deixar uma mensagem para cada um, e na quando eu listo a tabela, eu já retirei o próprio usuário, para que ele não possa se avaliar. Essa seria a pagina que lista todos usuários da minha tabela do banco de dados <?php include_once "conexao.php"; include('protect.php'); $name = $_SESSION['nome']; //consultar no banco de dados $listaOrdenada = "SELECT * FROM usuarios WHERE nome != '$name' ORDER BY nome"; $resultado = mysqli_query($mysqli, $listaOrdenada); //Verificar se encontrou resultado na tabela "usuarios" if(($resultado) AND ($resultado->num_rows != 0)){ ?> <table class="table table-striped table-bordered table-hover"> //usado bootstrap <thead> <tr> <th style="color: red;">NOME</th> <th style="color: red;">SOBRENOME</th> <th style="color: red;"> </th> </tr> </thead> <tbody> <?php while($row_usuario = mysqli_fetch_assoc($resultado)){ ?> <tr> <th><?php echo $row_usuario['nome']; ?></th> <td><?php echo $row_usuario['sobrenome']; ?></td> <td><button onclick="window.location.href = 'avaliacao.php'" type="button" class="btn btn-success m-2">AVALIAR</button></td> </tr> <?php }?> </tbody> </table> <?php }else{ echo "<div class='alert alert-danger' role='alert'>Não foi encontrado nenhum usuario!</div>"; } ?>
  15. @MailingTester Acho que fica até mais fácil, é que realmente não sabia assim, vou tentar, agradeço.
  16. Criei o Banco de dados com id, nome, email, e foto, na foto do tipo longblob, como eu faria para quando o usuario entrar com seu login, carregar a foto de acordo com seu perfil. Nesse exemplo eu faço o login com email, e funciona tudo ok, com todos cadastrados, porém estou com dificuldade de colocar a foto carregada na pagina. <img class="rounded-circle" src="img/user.jpg" alt="" style="width: 40px; height: 40px;"> <!-- COMO CARREGAR A FOTO AQUI -->
  17. Boa noite. Já criei a pagina login e a conexao com php com meu banco de dados, porém gostaria de saber se é possível colocar no login , ao invés de ser somente o email, colocar também um numero, tipo matricula, ou numero de telefone. Caso eu digite um numero, ele verifica se tem no BD, ou se eu digitar o Email, verifica se tem no BD. <form action="" method="POST"> <p> <label>E-mail/ Numero</label> <input type="text" name="email" placeholder="Número ou E-mail"> </p> <button type="submit" >Entrar</button> </form>
  18. Lipeco

    C Criação de um labirinto

    @devair1010 Coloquei o código incompleto, não prestei atenção, estava tão cansado, vou colocar o código inteiro separando o main.c dos outros. Segue abaixo //Arquivo main.c //fontes Programação descomplicada #include <windows.h> #include <time.h> #include "Labirinto.h" LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); void EnableOpenGL(HWND hwnd, HDC*, HGLRC*); void DisableOpenGL(HWND, HDC, HGLRC); int tipo = 0; LABIRINTO *lab = NULL; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { int op; printf("\t\tDeseja iniciar o Labirinto?\n\n"); printf("\t\t1 - SIM ou 2 - não\n\n"); printf("\t\tDigite sua opcao: "); scanf("%d", &op); printf("\n\n"); if (op == 1){ printf("\t\t\tAPOS ABRIR A INTERFACE\n"); printf("\t\tAPERTE A TECLA 'ESPACO' PARA MOSTRAR\n \t\t OS CAMINHOS ATE ACHAR A SAIDA\n\n"); system("pause\n\n"); WNDCLASSEX wcex; HWND hwnd; HDC hDC; HGLRC hRC; MSG msg; BOOL bQuit = FALSE; /* register window class */ wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_OWNDC; wcex.lpfnWndProc = WindowProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wcex.lpszMenuName = NULL; wcex.lpszClassName = "GLSample"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);; if (!RegisterClassEx(&wcex)) return 0; /* cria janela principal do OpenGl */ hwnd = CreateWindowEx(0, "GLSample", "OpenGL Sample", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 650, 650, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); /* Ativa OpenGL para janela */ EnableOpenGL(hwnd, &hDC, &hRC); //Inicia Tudo //srand(time(NULL)); lab = monta_labirinto(); /* program main loop */ while (!bQuit) { /* check for messages */ if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { /* handle or dispatch messages */ if (msg.message == WM_QUIT) { bQuit = TRUE; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } else { /* OpenGL animation code goes here */ glClearColor(1.0f, 1.0f, 1.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); desenha_labirinto(lab,tipo); glPopMatrix(); SwapBuffers(hDC); Sleep(10); } } destroi_labirinto(lab); /* shutdown OpenGL */ DisableOpenGL(hwnd, hDC, hRC); /* destroy the window explicitly */ DestroyWindow(hwnd); return msg.wParam; }else{ exit(1); } } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_DESTROY: return 0; case WM_KEYDOWN: { switch (wParam) { case VK_ESCAPE: PostQuitMessage(0); break; case VK_SPACE: tipo = (tipo + 1) % 7; if(tipo > 3) inicia_animacao(lab); break; } } break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC) { PIXELFORMATDESCRIPTOR pfd; int iFormat; /* get the device context (DC) */ *hDC = GetDC(hwnd); /* set the pixel format for the DC */ ZeroMemory(&pfd, sizeof(pfd)); pfd.nSize = sizeof(pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat(*hDC, &pfd); SetPixelFormat(*hDC, iFormat, &pfd); /* create and enable the render context (RC) */ *hRC = wglCreateContext(*hDC); wglMakeCurrent(*hDC, *hRC); } void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC) { wglMakeCurrent(NULL, NULL); wglDeleteContext(hRC); ReleaseDC(hwnd, hDC); } // labirinto.h #include <gl/gl.h> typedef struct labirinto LABIRINTO; void desenha_circulo(GLfloat x, GLfloat y, GLfloat radius); void desenha_linha(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, int cor); LABIRINTO* monta_labirinto(); void destroi_labirinto(LABIRINTO* lab); void desenha_arvore_geradora(int *arv); void desenha_paredes_labirinto(int *arv); void desenha_labirinto(LABIRINTO *lab,int tipo); void inicia_animacao(LABIRINTO *lab); void desenha_procura_caminho(LABIRINTO *lab); void desenha_menor_caminho(LABIRINTO *lab); void desenha_busca_largura(LABIRINTO *lab); //labirinto.c #include "Labirinto.h" #include "Grafo.h" #include <math.h> #include <stdlib.h> #include <stdio.h> struct labirinto{ int *arv; int *ant; int dist; ARESTA *ar_largura; ARESTA *ar; AR_PILHA *ph; int idx; }; //========================================================= // Tamanho da matriz do labirinto #define N 3 // Tamanho de cada bloco da matriz na tela #define TAM (2.0f / N) //Funções que convertem a linha e coluna da matriz em uma coordenada de [-1,1] #define MAT2X(j) ((j)* TAM - 1.0) //#define MAT2Y(i) (1.0 - (i) * TAM) #define MAT2Y(i) (1.0 - (i) * TAM) //========================================================= void desenha_linha(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, int cor){ switch(cor){ case 0: glColor3f(0.0,0.0,0.0); glLineWidth(5); break; case 1: glColor3f(1.0,0.0,0.0); glLineWidth(2); break; case 2: glColor3f(1.0,1.0,1.0); glLineWidth(5); break; } glBegin(GL_LINES); glVertex2f(x1, y1); glVertex2f(x2, y2); glEnd(); } void desenha_circulo(GLfloat x, GLfloat y, GLfloat radius){ int i, triangleAmount = 20; //# of triangles used to draw circle GLfloat twicePi = 2.0f * acos(-1.0); glColor3f(0.0,0.0,0.0); glBegin(GL_TRIANGLE_FAN); glVertex2f(x, y); // center of circle for(i = 0; i <= triangleAmount;i++) { glVertex2f(x + (radius * cos(i * twicePi / triangleAmount)), y + (radius * sin(i * twicePi / triangleAmount))); } glEnd(); } LABIRINTO* monta_labirinto(){ LABIRINTO* lab = malloc(sizeof(LABIRINTO)); if(lab == NULL) return NULL; int i,j; Grafo* gr = cria_Grafo(N*N, 4); for(i=0; i<N; i++){ for(j=0; j<N; j++){ int v1 = i * N + j; //v1 Origem printf("V1: %d ",v1); if(j+1 < N){ int v2 = i * N + (j+1); printf("V2: %d ",v2); if(!insereAresta(gr,v1,v2,0,rand()%9 + 1)) printf("\nErro 1: %d %d",i,j); } if(i+1 < N){ int v2 = (i+1) * N + j; //v2 destino printf("V2 depois: %d \n",v2); if(!insereAresta(gr,v1,v2,0,rand()%9 + 1)) printf("\nErro 2: %d %d",i,j); } } } lab->arv = malloc(N*N*sizeof(int)); lab->ant = malloc(N*N*sizeof(int)); int *dist = malloc(N*N*sizeof(int)); arvoreGeradoraMinimaPRIM_Grafo(gr, 0, lab->arv); libera_Grafo(gr); // ============================================= //criar um novo grafo com a árvore geradora... gr = cria_Grafo(N*N, 4); int N2 = N*N; for(i=1; i < N2; i++){ if(!insereAresta(gr,i,lab->arv[i],0,1)) printf("Erro ARV: %d %d",i,lab->arv[i]); } lab->ar = menorCaminho_Grafo(gr, 0, lab->ant, dist); lab->dist = dist[N*N-1]; free(dist); lab->ph = buscaProfundidade_Grafo(gr, 0, N*N-1); lab->ar_largura = buscaLargura_Grafo(gr, 0); libera_Grafo(gr); return lab; } void destroi_labirinto(LABIRINTO* lab){ if(lab == NULL) return; free(lab->arv); free(lab->ant); free(lab->ar); free(lab->ar_largura); free(lab->ph); free(lab); } void desenha_arvore_geradora(int *arv){ int i, j; int N2 = N*N; int i1, i2, j1, j2; for(i=1; i < N2; i++){ i1 = i / N; j1 = i % N; i2 = arv[i] / N; j2 = arv[i] % N; desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),1); } for(i=0; i<N; i++){ for(j=0; j<N; j++){ desenha_circulo(MAT2X(j+0.5), MAT2Y(i+0.5),0.0175); } } } void desenha_paredes_labirinto(int *arv){ int i,j; //Desenha parede externa do labirinto desenha_linha(MAT2X(0.025), MAT2Y(0.025),MAT2X(0.025), MAT2Y(N-0.025),0); desenha_linha(MAT2X(0.025), MAT2Y(N-0.025),MAT2X(N-0.025), MAT2Y(N-0.025),0); desenha_linha(MAT2X(N-0.025), MAT2Y(0.025),MAT2X(N-0.025), MAT2Y(N-0.025),0); desenha_linha(MAT2X(0.025), MAT2Y(0.025),MAT2X(N-0.025), MAT2Y(0.025),0); for(i=0; i<N; i++){ for(j=0; j<N; j++){ int v1 = i * N + j; if(j+1 < N){ int v2 = i * N + (j+1); if(arv[v2] != v1 && arv[v1] != v2){ desenha_linha(MAT2X(j+1), MAT2Y(i), MAT2X(j+1), MAT2Y(i+1),0); } } if(i+1 < N){ int v2 = (i+1) * N + j; if(arv[v2] != v1 && arv[v1] != v2){ desenha_linha(MAT2X(j), MAT2Y(i+1), MAT2X(j+1), MAT2Y(i+1),0); } } } } } void inicia_animacao(LABIRINTO *lab){ lab->idx = 0; } void desenha_procura_caminho(LABIRINTO *lab){ int i1, i2, j1, j2; int cont = 0; while(cont <= lab->idx){ i1 = lab->ar[cont].orig / N; j1 = lab->ar[cont].orig % N; i2 = lab->ar[cont].dest / N; j2 = lab->ar[cont].dest % N; desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),1); desenha_circulo(MAT2X(j1+0.5), MAT2Y(i1+0.5),0.0175); desenha_circulo(MAT2X(j2+0.5), MAT2Y(i2+0.5),0.0175); cont++; if(lab->ar[cont].orig == -1) break; } if(lab->idx < 4*N*N) lab->idx++; } void desenha_menor_caminho(LABIRINTO *lab){ int v1, v2 = N*N-1; int i1, i2, j1, j2; int cont = 0; while(cont < lab->idx){ v1 = lab->ant[v2]; i1 = v1 / N; j1 = v1 % N; i2 = v2 / N; j2 = v2 % N; desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),1); desenha_circulo(MAT2X(j1+0.5), MAT2Y(i1+0.5),0.0175); desenha_circulo(MAT2X(j2+0.5), MAT2Y(i2+0.5),0.0175); cont++; v2 = v1; if(cont == lab->dist) break; } if(lab->idx < lab->dist) lab->idx++; } void desenha_busca_profundidade(LABIRINTO *lab){ int v1, v2 = N*N-1; int i1, i2, j1, j2; int cont = 0; while(cont < lab->idx){ v1 = lab->ph[cont].orig; v2 = lab->ph[cont].dest; i1 = v1 / N; j1 = v1 % N; i2 = v2 / N; j2 = v2 % N; if(lab->ph[cont].tipo == 0){ desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),1); }else{ desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),2); } desenha_circulo(MAT2X(j1+0.5), MAT2Y(i1+0.5),0.0175); desenha_circulo(MAT2X(j2+0.5), MAT2Y(i2+0.5),0.0175); cont++; v2 = v1; if(lab->ph[cont].orig == -1) break; } if(lab->idx < 8*N*N) lab->idx++; } void desenha_busca_largura(LABIRINTO *lab){ int i1, i2, j1, j2; int cont = 0; //printf("busca_largura\n"); while(cont <= lab->idx){ i1 = lab->ar_largura[cont].orig / N; j1 = lab->ar_largura[cont].orig % N; i2 = lab->ar_largura[cont].dest / N; j2 = lab->ar_largura[cont].dest % N; desenha_linha(MAT2X(j1+0.5), MAT2Y(i1+0.5), MAT2X(j2+0.5), MAT2Y(i2+0.5),1); desenha_circulo(MAT2X(j1+0.5), MAT2Y(i1+0.5),0.0175); desenha_circulo(MAT2X(j2+0.5), MAT2Y(i2+0.5),0.0175); cont++; //printf("cont = %d\n",cont); if(lab->ar_largura[cont].orig == -1) break; } if(lab->idx < 4*N*N) lab->idx++; } void desenha_labirinto(LABIRINTO *lab,int tipo){ if(lab == NULL) return; switch(tipo){ case 0: desenha_arvore_geradora(lab->arv); break; case 1: desenha_arvore_geradora(lab->arv); desenha_paredes_labirinto(lab->arv); break; case 2: desenha_paredes_labirinto(lab->arv); break; case 3: desenha_paredes_labirinto(lab->arv); desenha_procura_caminho(lab); break; case 4: desenha_paredes_labirinto(lab->arv); desenha_menor_caminho(lab); break; case 5: desenha_paredes_labirinto(lab->arv); desenha_busca_profundidade(lab); break; case 6: desenha_paredes_labirinto(lab->arv); desenha_busca_largura(lab); break; default: desenha_paredes_labirinto(lab->arv); } } //grafo.c #include <stdio.h> #include <stdlib.h> #include "Grafo.h" //inclui os Protótipos //Definição do tipo Grafo struct grafo{ int nro_vertices; int grau_max; int** arestas; int** pesos; int* grau; }; Grafo* cria_Grafo(int nro_vertices, int grau_max){ Grafo *gr; gr = (Grafo*) malloc(sizeof(struct grafo)); if(gr != NULL){ int i; gr->nro_vertices = nro_vertices; gr->grau_max = grau_max; gr->grau = (int*) calloc(nro_vertices,sizeof(int)); gr->arestas = (int**) malloc(nro_vertices * sizeof(int*)); gr->pesos = (int**) malloc(nro_vertices * sizeof(int*)); for(i=0; i<nro_vertices; i++){ gr->arestas[i] = (int*) malloc(grau_max * sizeof(int)); gr->pesos[i] = (int*) malloc(grau_max * sizeof(int)); } } return gr; } void libera_Grafo(Grafo* gr){ if(gr != NULL){ int i; for(i=0; i<gr->nro_vertices; i++){ free(gr->arestas[i]); free(gr->pesos[i]); } free(gr->arestas); free(gr->pesos); free(gr->grau); free(gr); } } int insereAresta(Grafo* gr, int orig, int dest, int eh_digrafo, int peso){ if(gr == NULL) return 0; if(orig < 0 || orig >= gr->nro_vertices) return 0; if(dest < 0 || dest >= gr->nro_vertices) return 0; gr->arestas[orig][gr->grau[orig]] = dest; gr->pesos[orig][gr->grau[orig]] = peso; gr->grau[orig]++; if(eh_digrafo == 0) insereAresta(gr,dest,orig,1,peso); return 1; } int procuraMenorDistancia(int *dist, int *visitado, int NV){ int i, menor = -1, primeiro = 1; for(i=0; i < NV; i++){ if(dist[i] >= 0 && visitado[i] == 0){ if(primeiro){ menor = i; primeiro = 0; }else{ if(dist[menor] > dist[i]) menor = i; } } } return menor; } ARESTA* menorCaminho_Grafo(Grafo *gr, int ini, int *ant, int *dist){ int i, pos, cont, NV, ind, *visitado, vert; cont = NV = gr->nro_vertices; visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++){ ant[i] = -1; dist[i] = -1; visitado[i] = 0; } ARESTA *ar = (ARESTA*) malloc(4*NV * sizeof(ARESTA)); for(i=0; i < 4*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; } dist[ini] = 0; pos = 0; while(cont > 0){ vert = procuraMenorDistancia(dist, visitado, NV); if(vert == -1) break; visitado[vert] = 1; cont--; for(i=0; i<gr->grau[vert]; i++){ ind = gr->arestas[vert][i]; ar[pos].orig = vert; ar[pos].dest = ind; pos++; if(dist[ind] < 0){ dist[ind] = dist[vert] + 1;//ou peso da aresta ant[ind] = vert; }else{ if(dist[ind] > dist[vert] + 1){ dist[ind] = dist[vert] + 1;//ou peso da aresta ant[ind] = vert; } } } } free(visitado); return ar; } void arvoreGeradoraMinimaPRIM_Grafo(Grafo *gr, int orig, int *pai){ int i, j, dest, NV, primeiro; int menorPeso; NV = gr->nro_vertices; for(i=0; i < NV; i++) pai[i] = -1;// sem pai pai[orig] = orig; while(1){ primeiro = 1; for(i=0; i < NV; i++){//percorre todos os vértices if(pai[i] != -1){//achou vértices já visitado for(j=0; j<gr->grau[i]; j++){ // percorre os vizinhos do vértice visitado if(pai[gr->arestas[i][j]] == -1){//achou vértice vizinho não visitado if(primeiro){//procura aresta de menor custo menorPeso = gr->pesos[i][j]; orig = i; dest = gr->arestas[i][j]; primeiro = 0; }else{ if(menorPeso > gr->pesos[i][j]){ menorPeso = gr->pesos[i][j]; orig = i; dest = gr->arestas[i][j]; } } } } } } if(primeiro == 1) break; pai[dest] = orig; } } void buscaProfundidade(Grafo *gr, int ini, int dest, int *visitado, AR_PILHA* ar, int *cont, int *achou){ int i; visitado[ini] = 1; for(i=0; i<gr->grau[ini]; i++){ if(*achou == 1) return; if(!visitado[gr->arestas[ini][i]]){ ar[*cont].orig = ini; ar[*cont].dest = gr->arestas[ini][i]; ar[*cont].tipo = 0; (*cont)++; if(gr->arestas[ini][i] == dest){ *achou = 1; return; } buscaProfundidade(gr,gr->arestas[ini][i],dest,visitado,ar,cont,achou); if(*achou == 0){ ar[*cont].orig = ini; ar[*cont].dest = gr->arestas[ini][i]; ar[*cont].tipo = 1; (*cont)++; } if(*cont > 8*gr->nro_vertices) printf("ERRO!!!\n"); } } } AR_PILHA* buscaProfundidade_Grafo(Grafo *gr, int ini, int dest){ int i, cont = 0, achou = 0; int NV = gr->nro_vertices; int *visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++) visitado[i] = 0; AR_PILHA *ar = (AR_PILHA*) malloc(8*NV * sizeof(AR_PILHA)); for(i=0; i < 8*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; ar[i].tipo = 0; } buscaProfundidade(gr,ini,dest,visitado,ar,&cont,&achou); free(visitado); return ar; } ARESTA* buscaLargura_Grafo(Grafo *gr, int ini){ int i, vert, NV, cont = 1; int *fila, IF = 0, FF = 0; int ind, pos = 0; NV = gr->nro_vertices; int *visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++) visitado[i] = 0; ARESTA *ar = (ARESTA*) malloc(4*NV * sizeof(ARESTA)); for(i=0; i < 4*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; } fila = (int*) malloc(NV * sizeof(int)); FF++; fila[FF] = ini; visitado[ini] = cont; while(IF != FF){ IF = (IF + 1) % NV; vert = fila[IF]; cont++; for(i=0; i<gr->grau[vert]; i++){ ind = gr->arestas[vert][i]; if(!visitado[ind]){ ar[pos].orig = vert; ar[pos].dest = ind; pos++; //printf("pos = %d\n",pos); FF = (FF + 1) % NV; fila[FF] = ind; visitado[ind] = cont; } } } free(fila); return ar; } Arquivo Modificado algumas coisas. FONTES: Programação Descomplicada
  19. Boa noite, estou aproveitando as aulas do Programação Descomplicada. Já tentei e estou com dificuldade de criar um labirinto específico como na imagem abaixo. Com esse código ele gera um labirinto aleatório. Teriam alguma dica de como eu criar exatamente o labirinto específico? //Arquivo Grafo.c //Definição do tipo Grafo struct grafo{ int nro_vertices; int grau_max; int** arestas; int** pesos; int* grau; }; Grafo* cria_Grafo(int nro_vertices, int grau_max){ Grafo *gr; gr = (Grafo*) malloc(sizeof(struct grafo)); if(gr != NULL){ int i; gr->nro_vertices = nro_vertices; gr->grau_max = grau_max; gr->grau = (int*) calloc(nro_vertices,sizeof(int)); gr->arestas = (int**) malloc(nro_vertices * sizeof(int*)); gr->pesos = (int**) malloc(nro_vertices * sizeof(int*)); for(i=0; i<nro_vertices; i++){ gr->arestas[i] = (int*) malloc(grau_max * sizeof(int)); gr->pesos[i] = (int*) malloc(grau_max * sizeof(int)); } } return gr; } void libera_Grafo(Grafo* gr){ if(gr != NULL){ int i; for(i=0; i<gr->nro_vertices; i++){ free(gr->arestas[i]); free(gr->pesos[i]); } free(gr->arestas); free(gr->pesos); free(gr->grau); free(gr); } } int insereAresta(Grafo* gr, int orig, int dest, int eh_digrafo, int peso){ if(gr == NULL) return 0; if(orig < 0 || orig >= gr->nro_vertices) return 0; if(dest < 0 || dest >= gr->nro_vertices) return 0; gr->arestas[orig][gr->grau[orig]] = dest; gr->pesos[orig][gr->grau[orig]] = peso; gr->grau[orig]++; if(eh_digrafo == 0) insereAresta(gr,dest,orig,1,peso); return 1; } int procuraMenorDistancia(int *dist, int *visitado, int NV){ int i, menor = -1, primeiro = 1; for(i=0; i < NV; i++){ if(dist[i] >= 0 && visitado[i] == 0){ if(primeiro){ menor = i; primeiro = 0; }else{ if(dist[menor] > dist[i]) menor = i; } } } return menor; } ARESTA* menorCaminho_Grafo(Grafo *gr, int ini, int *ant, int *dist){ int i, pos, cont, NV, ind, *visitado, vert; cont = NV = gr->nro_vertices; visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++){ ant[i] = -1; dist[i] = -1; visitado[i] = 0; } ARESTA *ar = (ARESTA*) malloc(4*NV * sizeof(ARESTA)); for(i=0; i < 4*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; } dist[ini] = 0; pos = 0; while(cont > 0){ vert = procuraMenorDistancia(dist, visitado, NV); if(vert == -1) break; visitado[vert] = 1; cont--; for(i=0; i<gr->grau[vert]; i++){ ind = gr->arestas[vert][i]; ar[pos].orig = vert; ar[pos].dest = ind; pos++; if(dist[ind] < 0){ dist[ind] = dist[vert] + 1;//ou peso da aresta ant[ind] = vert; }else{ if(dist[ind] > dist[vert] + 1){ dist[ind] = dist[vert] + 1;//ou peso da aresta ant[ind] = vert; } } } } free(visitado); return ar; } void arvoreGeradoraMinimaPRIM_Grafo(Grafo *gr, int orig, int *pai){ int i, j, dest, NV, primeiro; int menorPeso; NV = gr->nro_vertices; for(i=0; i < NV; i++) pai[i] = -1;// sem pai pai[orig] = orig; while(1){ primeiro = 1; for(i=0; i < NV; i++){//percorre todos os vértices if(pai[i] != -1){//achou vértices já visitado for(j=0; j<gr->grau[i]; j++){ // percorre os vizinhos do vértice visitado if(pai[gr->arestas[i][j]] == -1){//achou vértice vizinho não visitado if(primeiro){//procura aresta de menor custo menorPeso = gr->pesos[i][j]; orig = i; dest = gr->arestas[i][j]; primeiro = 0; }else{ if(menorPeso > gr->pesos[i][j]){ menorPeso = gr->pesos[i][j]; orig = i; dest = gr->arestas[i][j]; } } } } } } if(primeiro == 1) break; pai[dest] = orig; } } void buscaProfundidade(Grafo *gr, int ini, int dest, int *visitado, AR_PILHA* ar, int *cont, int *achou){ int i; visitado[ini] = 1; for(i=0; i<gr->grau[ini]; i++){ if(*achou == 1) return; if(!visitado[gr->arestas[ini][i]]){ ar[*cont].orig = ini; ar[*cont].dest = gr->arestas[ini][i]; ar[*cont].tipo = 0; (*cont)++; if(gr->arestas[ini][i] == dest){ *achou = 1; return; } buscaProfundidade(gr,gr->arestas[ini][i],dest,visitado,ar,cont,achou); if(*achou == 0){ ar[*cont].orig = ini; ar[*cont].dest = gr->arestas[ini][i]; ar[*cont].tipo = 1; (*cont)++; } if(*cont > 8*gr->nro_vertices) printf("ERRO!!!\n"); } } } AR_PILHA* buscaProfundidade_Grafo(Grafo *gr, int ini, int dest){ int i, cont = 0, achou = 0; int NV = gr->nro_vertices; int *visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++) visitado[i] = 0; AR_PILHA *ar = (AR_PILHA*) malloc(8*NV * sizeof(AR_PILHA)); for(i=0; i < 8*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; ar[i].tipo = 0; } buscaProfundidade(gr,ini,dest,visitado,ar,&cont,&achou); free(visitado); return ar; } ARESTA* buscaLargura_Grafo(Grafo *gr, int ini){ int i, vert, NV, cont = 1; int *fila, IF = 0, FF = 0; int ind, pos = 0; NV = gr->nro_vertices; int *visitado = (int*) malloc(NV * sizeof(int)); for(i=0; i < NV; i++) visitado[i] = 0; ARESTA *ar = (ARESTA*) malloc(4*NV * sizeof(ARESTA)); for(i=0; i < 4*NV; i++){ ar[i].orig = -1; ar[i].dest = -1; } fila = (int*) malloc(NV * sizeof(int)); FF++; fila[FF] = ini; visitado[ini] = cont; while(IF != FF){ IF = (IF + 1) % NV; vert = fila[IF]; cont++; for(i=0; i<gr->grau[vert]; i++){ ind = gr->arestas[vert][i]; if(!visitado[ind]){ ar[pos].orig = vert; ar[pos].dest = ind; pos++; //printf("pos = %d\n",pos); FF = (FF + 1) % NV; fila[FF] = ind; visitado[ind] = cont; } } } free(fila); return ar; }
  20. @Ojoojao Boa tarde irmão. Se você está com condições e não vai te faltar, aconselharia dentre essas, a GTX 1660 super, pois os jogos que virão, vão usar bastante VRAM, eu não investiria em uma placa abaixo de 8GB, porém nas que você citou, a melhor é a GTX 1660 pelo custo dela. Ou se você puder esperar e investir numa RTX de entrada como a RTX 2060, seria melhor, hoje deve encontrar na faixa dos 2 mil, porém eu entendo se não tiver condição de investir mais, logo eu iria na GTX 1660 logo, pois o preço está bem bacana.
  21. @Paulo Ianda Boa tarde amigo. Eu particularmente iria na 3070 (dependendo do preço e da diferença entre as duas, pois nenhuma das duas vão te decepcionar), e no futuro pegaria um processador um pouco mais atual.
  22. @mauro_b Exatamente isso, consegui fazer. Agradeço demais a ajuda.
  23. Bom dia. Estou com o seguinte problema, tenho um exercicio pra fazer, que é praticamente: Pegar uma expressao INFIXA, como exemplo (4+2)*(6-4) e tenho que converter para POS FIXA, tendo como resultado : 4 2 + 6 4 - * E ter o resultado dessa expressao POSFIXA, que nesse exemplo seria = 12. Li em vários lugares e consegui fazer, segue o codigo abaixo. O problema é que ele converte para POSFIXA, e fiz uma funcao para calcular a expressao POSFIXA, porém não consigo pegar o resultado do POSFIXA e trazer para funcao calcular. No codigo dá pra entender melhor. Deixei comentarios. Se alguém puder ajudar #include <stdio.h> #include <stdlib.h> #include "pilha.h" int main() { char expInfixa[] = "(7 + 3) * (6 - 4)"; printf("\n\tExpressao INFIXA: %s \n\n", expInfixa); printf("\tExpressao POSFIXA: "); converteInPos(expInfixa); //Função para converter expressão //AGORA ESSA PARTE NÃO CONSEGUE OBTER O RESULTADO, POIS ESSA FUNCAO CALCULA NÃO CONSEGUE CALCULAR O AUX RECEBIDO, DA ALGUM ERRO printf("\n\tResultado: %.2f\n", calcula_expressao(expPosFixa)); //QUANDO EU FAÇO DIGITANDO DAQUI EM DIANTE ELE MANDA O VALOR QUE EU DIGITO E CALCULA CERTINHO /* printf("\n\n\tDigite a expressao POSFIXA convertida acima: "); //Dar espeços para cada numero formado, Digitar da mesma forma a expressão convertida gets(expPosFixa); printf("\n\tResultado: %.2f\n", calcula_expressao(expPosFixa)); */ return 0; } //arquivo pilha.c struct lista { float info; struct lista *proximo; }; typedef struct no{ //Struct NO para RESOLVER EXPRESSÃO POSfIXA float valor; struct no *proximo; int n; //Numero de elementos }No; struct pilha { Lista* prim; //A pilha vai ser representada por um ponteiro para o primeiro no da lista }; Pilha* criar_pilha() { Pilha* p = (Pilha*)malloc(sizeof(Pilha)); p->prim = NULL; return p; } void push(Pilha* p, float v) { Lista *n = (Lista*)malloc(sizeof(Lista)); //N = novo n->info = v; n->proximo = p->prim; p->prim = n; } float pop(Pilha* p) { Lista* t; float v; if(vazia(p)) { printf("Pilha Vazia"); exit(1); } t = p->prim; v = t->info; p->prim = t->proximo; free(t); //Acertar o encadeamento } int vazia(Pilha* p) { return(p->prim == NULL); } void liberar(Pilha* p) { Lista *q = p->prim; while(q!=NULL) { Lista *t = q->proximo; //Foi guardado em q, logo libero o Q free(q); q = t; //Para liberar todos elementos da lista } free(p); } float topo(Pilha* p) { if(vazia(p)) { printf("Pilha Vazia"); exit(1); } return p->prim->info; } //CONVERTER PILHA void converteInPos(char expressao[]){ Pilha *p; int i = 0; int cont = 0; int max; //QTD de caractere char caractere,caracTemp; char aux[max]; //Guarda expressão char espaco = ' '; //char aux2[50]; p = criar_pilha(); push(p, '('); do{ caractere = expressao[i]; //Recebe a Expressao "(7 + 3)*(6 - 4)"; i++; if(caractere >= '0' && caractere <= '9'){ printf("%c", caractere); aux[cont] = caractere; printf("%c", espaco); //printf("[%c]", aux[cont]); //TESTES cont++; aux[cont] = espaco; //printf("[%c]", aux[cont]); //TESTES cont++; } else if(caractere == '(' ){ push(p, '('); //Coloco "(" na pilha } else if(caractere == '+' || caractere == '-' || caractere == '*' || caractere== '/') { while(1){ caracTemp = pop(p); if(prioridades(caractere,caracTemp)){ push(p, caracTemp); push(p, caractere); break; } else { printf("%c", caracTemp); } } } else if(caractere == ')' || caractere == '\0'){ do{ caracTemp = pop(p); //Tira da pilha o "(" if(caracTemp != '(') printf("%c", caracTemp); //Imprime sinais if(caracTemp == '+' || caracTemp == '-') //Recebe + ou - { aux[cont] = caracTemp ; printf("%c", espaco); cont++; aux[cont] = espaco; cont++; } else if(caracTemp == '*' || caracTemp == '/') { aux[cont] = caracTemp; // printf("TESTE%c", aux[cont]); cont++; aux[cont] = espaco; cont++; } }while(caracTemp != '('); } }while(caractere != '\0'); //max = cont ; //Contador de caractere , inclui espaço //printf("\n\nMAX = %d", max); //Teste //printf("\n\n\nAUX[i] : %s\n", aux); /* for(cont=0;cont<max;cont++) { printf("%c",aux[cont]); } printf("\n"); */ char t[] = "7 3 + 6 4 - *"; printf("\n\n\nResultado: %s \n",calcula_expressao(t)); //QUANDO EU PASSO T PARA FUNCAO CALCULAR, NÃO CALCULA, USEI T COMO TESTE //MAS NA REALIDADE QUERIA PEGAR O AUX E PASSAR PRA LÀ< POIS AUX RECEBE O RESULTADO DA CONVERSAO //return aux; liberar(p); } int prioridades(char carac1, char carac2){ int pCarac1,pCarac2; if(carac1 == '*' || carac1== '/'){ pCarac1 = 3; } else if(carac1 == '+' || carac1 == '-'){ pCarac1 = 2; } else if(carac1 == '('){ pCarac1 = 1; } if(carac2 == '*' || carac2 == '/'){ pCarac2 = 3; } else if(carac2 == '+' || carac2 == '-'){ pCarac2 = 2; } else if(carac2 == '('){ pCarac2 = 1; } return (pCarac1 > pCarac2); } //RESOLUÇÃO Expressao No* desempilhar(No **pilha){ No *remover = NULL; if(*pilha){ //Se o conteúdo apontado por esse ponteiro for diferente de Nulo remover = *pilha; //Recebe o topo da pilha *pilha = remover->proximo; //Remove do topo da pilha } else printf("\tPILHA VAZIA\n"); return remover; } No* empilhar(No *pilha, float num){ No *novo = malloc(sizeof(No)); if(novo){ novo->valor = num; novo->proximo = pilha; return novo; } else printf("\tErro ao alocar memória!\n"); return NULL; } float calculo(float a, float b, char exp){ switch(exp){ case '+': return a+b; break; case '-': return a-b; break; case '/': return a/b; break; case '*': return a*b; break; default: return 0.0; } } float calcula_expressao(char expressao[]){ char *ptrExp; //ponteiro que recebe expressao float resultado; No *elem1, *elem2; //Elementos para desempilhar os sinais da pilha No *pilha = NULL; Pilha *p; printf("\nTestando recebimento: %s", expressao); ptrExp = strtok(expressao," "); //Recebe uma string e consegue dividílas em espaço, pois está " "; while(ptrExp){ if(ptrExp[0] == '+' || ptrExp[0] == '-' || ptrExp[0] == '/' || ptrExp[0] == '*'){ elem1 = desempilhar(&pilha); elem2 = desempilhar(&pilha); resultado = calculo(elem2->valor, elem1->valor, ptrExp[0]); pilha = empilhar(pilha, resultado); free(elem1); free(elem2); } else{ resultado = strtol(ptrExp, NULL, 10); //funcao para converter string para decimal, utiliza NULL pois já está divido os números por espaços. pilha = empilhar(pilha, resultado); } ptrExp = strtok(NULL," "); //devolve um ponteiro para a próxima palavra na string apontada } elem1 = desempilhar(&pilha); resultado = elem1->valor; free(elem1); return resultado; } //arquivo piha.h typedef struct lista Lista; typedef struct pilha Pilha; typedef struct no No; Pilha* criar_pilha();//Aloca dinamicamente a estrutura da pilha e inicializar os campos e retornar seus pontreiros void push(Pilha* p, float v); //Inserir float pop(Pilha* p);//Remover int vazia(Pilha* p);//Verifica se está vazia void liberar(Pilha* p);//Liberar o que foi alocado float topo(Pilha* p); void converteInPos(char expressao[]); int prioridades(char c, char t); float calcula_expressao(char expressao[]); float calculo(float a, float b, char exp); No* empilhar(No *pilha, float num); No* desempilhar(No **pilha); void teste(char teste[]); Gostaria de dicas de otimização, como deixar bem mais estruturado. AGradeço demais.
  24. Preciso de ajuda. Muitas dificuldades. Na imagem mostra o que o exercicio pede, mas resumidamente é o seguinte: O usuario digita uma expressão INFIXA, como por exemplo: (51+13*12) Quando eu digitar essa expressão, ela tem que converter para POSFIXA , que no caso ficaria 51 13 12 * + Quando ele converter ele mostrar o resultado dessa expressao, que seria = RESPOSTA: 207 Eu tentei fazer de varios modos, apaguei, refiz e nada de evoluir, alguém poderia ajudar?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...