Você está aqui: Python ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Escreva um programa Python para encontrar o segundo maior valor em um vetor de inteiros - Desafio de Programação Resolvido em PythonQuantidade de visualizações: 714 vezes |
Pergunta/Tarefa: Dado o seguinte array de inteiros: # vamos declarar e construir um vetor com 5 inteiros valores = [4, 8, 7, 1, 2] Sua saída deverá ser parecida com: O maior valor é: 8 O segundo maior valor é: 7 Veja a resolução comentada deste exercício usando Python: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- # método principal def main(): # vamos declarar e construir um vetor com 5 inteiros valores = [4, 8, 7, 1, 2] # vamos assumir que tanto o maior quanto o segundo # maior são o primeiro elemento do vetor maior = valores[0] segundo_maior = valores[0] # percorremos todos os elementos do vetor for i in range(0, len(valores)): # o elemento atual é maior que o maior? if (valores[i] > maior): # o segundo maior recebe quem era o maior segundo_maior = maior # e o maior recebe o elemento atual maior = valores[i] # o elemento atual é menor que o maior e maior que o # segundo maior? if (valores[i] < maior and valores[i] > segundo_maior): # segundo maior recebe o elemento atual segundo_maior = valores[i] # mostra o resultado print("O maior valor é {0}".format(maior)) print("O segundo maior valor é {0}".format(segundo_maior)) if __name__== "__main__": main() |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Dicas & Truques ::: Threads |
Threads em Java - Como definir as prioridades das threads JavaQuantidade de visualizações: 12066 vezes |
Quando estamos trabalhando com threads em Java, precisamos estar cientes de que cada thread possui uma prioridade de execução. É por meio da prioridade de cada uma que o gerenciador de threads decidirá qual thread deverá ser executada primeiro. Por padrão, todas as threads possuem prioridade NORM_PRIORITY. Esta é uma constante que possui o valor 5 e está declarada na classe Thread. Além disso, cada thread herda automaticamente a prioridade da thread que a criou. As constantes MAX_PRIORITY (prioridade máxima), MIN_PRIORITY (prioridade mínima) e NORM_PRIORITY (prioridade normal) são usadas para definir as prioridades das threads Java. Veja um exemplo no qual temos duas threads. A primeira possui a prioridade máxima enquanto a segunda possui a prioridade mínima: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // criamos uma classe que servirá como thread class MinhaThread extends Thread{ private String nome; public MinhaThread(String nome){ this.nome = nome; } public void run(){ for(int i = 1; i <= 20; i++){ System.out.println(nome + ": " + i); } } } public class Estudos{ public static void main(String[] args){ // vamos criar duas threads MinhaThread t1 = new MinhaThread("Thread 1"); t1.setPriority(Thread.MAX_PRIORITY); // prioridade máxima t1.start(); MinhaThread t2 = new MinhaThread("Thread 2"); t2.setPriority(Thread.MIN_PRIORITY); // prioridade mínima t2.start(); } } Execute este exemplo e veja como a segunda thread só é executada quando a primeira finaliza. Remova as linhas que definem a prioridade e note como o tempo de cada thread é novamente fracionado. É importante ter em mente que aqui estamos falando de um ambiente de processador único. Em ambientes de múltiplos processadores o comportamento pode ser diferente do abordado na dica. Não devemos confiar em prioridades de threads quando o objetivo é aguardar a finalização de uma thread e só então permitir o processamento das instruções contidas no método run() de outra thread. Para estes casos o recomendável é usar alguma forma para sinalizar as demais threads de que a thread atual concluiu sua tarefa. |
HTML5 ::: HTML5 + JavaScript ::: Canvas |
Como usar o método arc() do objeto Canvas do HTML5 para desenhar arcos, curvas e círculosQuantidade de visualizações: 3893 vezes |
O método arc() do objeto Canvas do HTML5 nos permite criar figuras tais como arcos, curvas e círculos. Para isso é importante entender os seus parâmetros:arc(x, y, radius, ang1, ang2, direction); Os parâmetros x e y indicam as coordenadas do centro do círculo. O parâmetro radius indica o raio do círculo. Os parâmetros ang1 e ang2 indicam o ângulo inicial e o ângulo final. O parâmetro direction indica a direção do desenho. Se o valor true for informado, a direção será anti-horário. Se for false, o desenho será no sentido horário. É importante observar que os ângulos são medidos em radianos, não em graus. Assim, o ângulo 0 representa a posição 3 horas no relógio. A posição de 9 horas é (1 * PI), 12 horas é (1.5 * PI) e 6 horas é (0.5 * PI). Portanto, se você quiser desenhar um círculo completo, deverá sair do ângulo 0 e ir até (2 * PI). Veja um trecho de código que desenha um arco equivalente a um quarto de uma pizza, ou seja, 25%, saindo do ângulo 90º (em graus) e indo até 180º (graus): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <html> <head> <meta charset="utf-8"> <title>Estudos HTML5</title> </head> <body> <Canvas id="canvas1" width="500" height="350"></Canvas> <script type="text/javascript"> // obtemos uma referência ao elemento Canvas var canvas = document.getElementById("canvas1"); // obtemos o contexto de desenho var contexto = canvas.getContext("2d"); // vamos desenhar um arco sem preenchimento com raio de 80 contexto.beginPath(); // início um novo caminho // o arco começa no x = 100, y = 100, começa no ângulo 90 (em graus) // e vai até o ânculo 180 (graus) // as medidas na função arc() são em radianos, não em graus contexto.arc(100, 100, 80, Math.PI, 1.5 * Math.PI, false); contexto.lineWidth = 2; // largura da linha contexto.strokeStyle = '#990000'; // cor da linha contexto.stroke(); // realiza o desenho </script> </body> </html> Execute este código e veja que o arco realmente foi desenhado. Seu resultado deverá ser parecido com: No entanto, para parecer um pedação de pizza, ou seja, o ponto de partida para um gráfico de pizza, é preciso que tenhamos duas linhas ligado esse arco ao centro do círculo. Veja a modificação que fiz: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <html> <head> <meta charset="utf-8"> <title>Estudos HTML5</title> </head> <body> <Canvas id="canvas1" width="500" height="350"></Canvas> <script type="text/javascript"> // obtemos uma referência ao elemento Canvas var canvas = document.getElementById("canvas1"); // obtemos o contexto de desenho var contexto = canvas.getContext("2d"); // vamos desenhar um arco sem preenchimento com raio de 80 contexto.beginPath(); // início um novo caminho // primeiro movemos a caneta de desenho para o centro do círculo contexto.moveTo(100, 100); // o arco começa no x = 100, y = 100, começa no ângulo 90 (em graus) // e vai até o ânculo 180 (graus) // as medidas na função arc() são em radianos, não em graus contexto.arc(100, 100, 80, Math.PI, 1.5 * Math.PI, false); contexto.lineWidth = 2; // largura da linha contexto.strokeStyle = '#990000'; // cor da linha // agora desenhamos uma linha de volta para o arco contexto.lineTo(100, 100); contexto.stroke(); // realiza o desenho </script> </body> </html> Execute novamente e veja que agora o efeito ficou bem melhor. Seu resultado deverá ser parecido com: Para finalizar, vamos colorir o pedação de pizza. Veja a nova versão (com o código completo): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <!doctype html> <html> <head> <title>O objeto Canvas do HTML5</title> </head> <body> <Canvas id="canvas1" width="500" height="350"></Canvas> <script type="text/javascript"> // obtemos uma referência ao elemento Canvas var canvas = document.getElementById("canvas1"); // obtemos o contexto de desenho var contexto = canvas.getContext("2d"); // vamos desenhar um arco sem preenchimento com raio de 80 contexto.beginPath(); // início um novo caminho // primeiro movemos a caneta de desenho para o centro do círculo contexto.moveTo(100, 100); // o arco começa no x = 100, y = 100, começa no ângulo 90 (em graus) // e vai até o ânculo 180 (graus) // as medidas na função arc() são em radianos, não em graus contexto.arc(100, 100, 80, Math.PI, 1.5 * Math.PI, false); contexto.lineWidth = 2; // largura da linha contexto.strokeStyle = '#990000'; // cor da linha // agora desenhamos uma linha de volta para o arco contexto.lineTo(100, 100); // vamos preencher o gráfico contexto.fillStyle = "#CCCCCC"; // cor do preenchimento contexto.fill(); // preenche de fato contexto.stroke(); // realiza o desenho </script> </body> </html> Agora o resultado será: |
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Como substituir todas as ocorrências de uma substring em uma string em Delphi sem considerar maiúsculas e minúsculas usando a função ReplaceText()Quantidade de visualizações: 11608 vezes |
Algumas vezes precisamos substituir todas as ocorrências de uma substring em uma string mas não queremos diferenciar letras maiúsculas de letras minúsculas. Em Delphi isso pode ser feito com o auxílio da função ReplaceText(). Esta função requer a string na qual a substituição ocorrerá, a substring a ser substituída e a nova substring. O resultado será uma nova string resultante da substituição. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var frase: string; begin frase := 'PHP? Sim, eu gosto muito de PHP'; // vamos substituir todas as ocorrências de "PHP" por "Delphi' // sem considerar maiúsculas e minúsculas frase := ReplaceText(frase, 'Php', 'Delphi'); // vamos exibir o resultado ShowMessage(frase); end; Lembre-se de que esta função não diferencia maiúsculas e minúsculas. Não se esqueça de adicionar a unit StrUtils no uses do seu formulário. Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
C++ Windows API - Como ler o conteúdo de um arquivo usando a função ReadFile() da Win32 APIQuantidade de visualizações: 8654 vezes |
A função ReadFile() é usada quando queremos ler o conteúdo de um arquivo. A leitura se inicia na posição zero do arquivo e mantém um ponteiro de arquivo, a partir do qual as leituras subsequentes ocorrerão. Esta função pode ser usada para leituras síncronas e assíncronas. Para leituras apenas assíncronas devemos usar ReadFileEx(). Veja seu protótipo na documentação da API do Windows: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- BOOL WINAPI ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); Antes de vermos um exemplo de como usar a função ReadFile(), vamos dar uma olhada em seus parâmetros: a) HANDLE hFile - Este é o handle para o arquivo a partir do qual queremos ler. Tal handle deve ser criado com o direito de acesso GENERIC_READ. b) LPVOID lpBuffer - Um ponteiro para o buffer que receberá os dados lidos do arquivo. c) DWORD nNumberOfBytesToRead - O número máximo de bytes a serem lidos de cada vez. Geralmente este número está relacionado à quantidade de bytes dos elementos do buffer. d) LPDWORD lpNumberOfBytesRead - Um ponteiro para uma variável que receberá o número de bytes lidos. A função ReadFile() define o valor desta variável como 0 antes de cada leitura e verificação de erros. e) LPOVERLAPPED lpOverlapped - Um ponteiro para um estrutura OVERLAPPED. Esta estrutura é exigida se o handle para o arquivo for obtido usando FILE_FLAG_OVERLAPPED para o parâmetro dwFlagsAndAttributes da função CreateFile(). Geralmente usamos NULL para este parâmetro. A função ReadFile() retorna quando um erro ocorre ou a quantidade de bytes solicitados é alcançada. Veja um trecho de código no qual lemos o conteúdo de um arquivo chamado testes.txt: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <windows.h> #define TAM_BUFFER 256 // tamanho do buffer em bytes using namespace std; int main(int argc, char *argv[]){ // nome do arquivo CHAR arquivo[] = "C:\\testes.txt"; CHAR buffer[TAM_BUFFER]; // buffer para o conteúdo do arquivo DWORD nIn; // bytes lidos // vamos abrir o arquivo para leitura. // se o arquivo não existir uma mensagem de erro é exibida. HANDLE hArquivo = CreateFile(arquivo, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hArquivo == INVALID_HANDLE_VALUE){ cout << "Erro ao abrir o arquivo: " << GetLastError() << endl; } else{ // arquivo aberto com sucesso. Vamos ler while(ReadFile(hArquivo, buffer, TAM_BUFFER, &nIn, NULL) && nIn > 0){ cout << "Efetuei a leitura de " << nIn << " bytes." << endl; // vamos adicionar o caractere de final de linha // caso os bytes lidos não preencham todo o buffer buffer[nIn] = 0; cout << "Conteudo da leitura: " << buffer << endl; } } // vamos fechar o handle CloseHandle(hArquivo); system("PAUSE"); return EXIT_SUCCESS; } |
PHP ::: Fundamentos da Linguagem ::: Tipos de Dados |
PHP para iniciantes - Como usar o tipo de dados float do PHPQuantidade de visualizações: 12260 vezes |
Números de ponto-flutuante, ou float (também conhecido com double ou real) representam números com casas decimais. Assim como o tipo integer, a faixa de limite deste tipo depende da arquitetura da máquina na qual o PHP está sendo executado. A faixa de números de ponto-flutuante em PHP equivale à faixa do tipo de dados double de seu compilador C. Geralmente esta faixa está entre 1.7E-308 e 1.7E+308 com 15 dígitos de precisão. Se precisarmos de uma precisão ainda maior, podemos usar as extensões BC e GMP. O PHP reconhece números de ponto-flutuante escritos de duas formas diferentes. Eis a que usamos mais comumente: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 3.14 0.017 -7.1 E a forma usando notação científica: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 0.314E1 // 0.314*101, ou 3.14 17.0E-3 // 17.0*10-3, ou 0.017 Valores de ponto-flutuante são apenas representações aproximadas de números. Por exemplo, em muitos sistemas, 3,5 é na verdade representado como 3,4999999999. Isso quer dizer que devemos ter cuidado ao comparar valores de ponto-flutuante usando ==. O mais correto é comparar usando várias casas decimais: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- if(int($a * 1000) == int($b * 1000)){ // comparação baseada em três casas decimais } Se quisermos verificar se uma variável é do tipo float, podemos usar as funções is_float() ou is_real(). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <? $valor = 0.6; if(is_float($valor)){ echo 'A variável $valor é do tipo float'; } ?> |
Desafios, Exercícios e Algoritmos Resolvidos de PHP |
Veja mais Dicas e truques de PHP |
Dicas e truques de outras linguagens |
Java - Java para iniciantes - Como pesquisar uma substring em uma string e retornar sua posição inicial Android Java - Como usar o método startActivity() da classe Activity ou AppCompatActivity do Android para mudar de telas |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |