Java ::: Pacote java.awt ::: Graphics

Como desenhar linhas em determinados ângulos usando o método drawLine() da classe Graphics - Computação Gráfica em Java

Quantidade de visualizações: 13800 vezes
É possível usar o método drawLine() da classe Graphics para desenhar linhas em determinados ângulos. Observe atentamente a assinatura deste método:

public abstract void drawLine(int x1,
  int y1, int x2, int y2)


Aqui x1 e x2 representam as coordenadas iniciais da linha e x2 e y2 representam as coordenadas finais. Assim, vamos analisar a fórmula matemática que permite definir o ângulo de desenho.

Comece definindo os valores para as coordenadas iniciais x1 e y1, o ângulo desejado e o comprimento da linha:

int x1 = 30;
int y1 = 50;
int ang = 0;
int comp = 100;


Vamos começar obtendo a coordenada x final, que chamaremos de x2. Já sabemos que o ângulo é 0, então obteremos uma linha horizontal para a direita. Vamos ao cálculo:

int x2 = (int)(x1 + 
  Math.cos(ang / 180.0 * Math.PI) * comp);


Já sabemos que o valor de x2 é igual a 0 pois (pode testar na barra de endereços de seu browser):

javascript:alert(0 / 180.0 * Math.PI)


resulta em 0 e:

javascript:alert(Math.cos(0))


resulta em 1. Assim: x1 + (1 * 100) = 130. Para que nosso código esteja correto, o valor de y2 deverá ser igual a y1. Vejamos:

int y2 = (int)(y1 - 
  Math.sin(ang / 180.0 * Math.PI) * comp);


Já sabemos que (ang / 180.0 * Math.PI) resulta em 0 e que o seno de 0 é 0. Assim: y1 - (0 * 100) = 50. Veja o código completo:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Estudos extends JFrame{
  JLabel label;  

  public Estudos() {
    super("Desenhando em um JLabel");
    
    Container c = getContentPane();
    c.setLayout(new BorderLayout());

    // Cria um JLabel
    label = new JLabel();
    c.add(label, BorderLayout.CENTER);

    // Cria um botão
    JButton btn = new 
      JButton("Desenhar uma linha (ângulo)");
    btn.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          
          // Desenha uma string no JLabel
          int x1 = 30; // coordenada inicial x
          int y1 = 50; // coordenada inicial y
          int ang = 0; // ângulo
          int comp = 100; // comprimento
          // coordenada x final
          int x2 = (int)(x1 + 
            Math.cos(ang / 180.0 * Math.PI) * comp);
          // coordenada y final
          int y2 = (int)(y1 - 
            Math.sin(ang / 180.0 * Math.PI) * comp);

          Graphics graphics = label.getGraphics();
          
          graphics.drawLine(x1, y1, x2, y2);    

        }
      }
    );
    
    // Adiciona o botão à janela
    c.add(btn, BorderLayout.SOUTH);

    setSize(350, 250);
    setVisible(true);
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Experimente agora fornecer ângulos diferentes, por exemplo, 45 (uma linha diagonal para a direita e para cima), 90 (uma linha vertical para cima), 135 (uma linha diagonal para a esquerda e para cima), 180 (uma linha horizontal para a esquerda), 225 (uma linha diagonal para a esquerda e para baixo), 270 (uma linha vertical para baixo), 315 (uma linha diagonal para a direita e para baixo) e 360 (uma linha horizontal para a direita).

Há algo de interessante neste código. Se você maximizar, minimizar ou redimensionar a janela verá que o desenho é apagado. Isso acontece porque todas as vezes que a janela sofre alguma alteração, ela é pintada novamente, juntamente com seus componentes filhos. Se você deseja que o desenho seja feito automaticamente novamente, é melhor fazer uma sub-classe do componente desejado e sobrescrever seu método paintComponent(). Nesta mesma seção você encontrará exemplos de como fazer isso.


Java ::: Coleções (Collections) ::: ArrayList

Java Collections para iniciantes - Arrays (vetores) ou a ArrayList? Qual devo usar?

Quantidade de visualizações: 16272 vezes
Uma das perguntas mais frequentes que os usuários do nosso site nos fazem é aquela sobre o uso de simples arrays (vetores e matrizes) ou objetos da classe ArrayList. Se o número de elementos for fixo ou você precisar de muita eficiência ao lidar com tipos primitivos, então arrays podem ser a melhor escolha.

Porém, muitos problemas envolvendo o armazenamento de dados requerem estruturas de dados que possam ser redimensionadas de acordo com a necessidade do algorítmo. Neste caso, uma ArrayList (ou qualquer uma das outras classes Collections) pode ser a escolha certa.

Veja um trecho de código para ficar mais fácil o entendimento:

package arquivodecodigos;
 
public class Estudos{
  public static void main(String args[]){
    int valores[] = {4, 12, 8, 5, 13};
    System.out.println("Primeiro elemento no vetor: " 
      + valores[0]);
  }
}

Ao executar este código nós teremos o seguinte resultado:

Primeiro elemento no vetor: 4

Como podemos ver neste exemplo, um array (nesse caso um vetor) possui um tamanho fixo, ou seja, o compilador não nos permite reduzir ou aumentar a quantidade de elementos em um vetor ou matriz criado a partir da notação de arrays. Assim, apesar de todas as facilidades que os arrays trazem consigo, este pode ser um empecilho para o tipo de aplicação que queremos desenvolver em um determinado momento.

A classe ArrayList, por outro lado, possui tamanho variado. Isso quer dizer que seu tamanho é aumentado ou reduzido de acordo com as necessidades do seu código.

Uma outra questão que diferencia arrays de ArrayList, é que não podemos armazenar tipos primitivos em um objeto da classe ArrayList. Se precisarmos fazer isso, o tipo primitivo deve ser colocado em uma classe encapsuladora, por exemplo, a classe Integer. Em algumas situações o compilador faz isso nos bastidores, e esta operação é chamada de auto-boxing.


C ::: Dicas & Truques ::: Strings e Caracteres

Como escrever uma função C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas)

Quantidade de visualizações: 9860 vezes
Esta dica mostra como escrever uma função em linguagem C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas, ou seja, case insensitive). O nome da função é str_equal(). Esta função aceita duas strings como argumentos e retorna 1 se estas forem iguais e 0 em caso contrário. Experimente, faça as devidas alterações e adicione mais esta função ao seu repertório de códigos C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// função personalizada que permite verificar
// se duas strings são iguais ou diferentes sem
// considerar maiúsculas e minúsculas
int str_equal(const char *str1, const char *str2){
  while((toupper(*str1) == toupper(*str2)) && (*str1)){
    str1++;
    str2++;
  }

  return((*str1 == 0) && (*str2 == 0));
}

int main(int argc, char *argv[]){
  char palavra1[] = "Java";
  char palavra2[] = "Java";

  if(str_equal(palavra1, palavra2) == 1)
    printf("As palavras sao iguais");
  else
    printf("As palavras sao diferentes");

  puts("\n\n");
  system("PAUSE");
  return 0;
}



Python ::: Dicas & Truques ::: Matemática e Estatística

Como calcular MDC em Python - Python para matemática

Quantidade de visualizações: 12667 vezes
Python para matemática - Como calcular o MDC (Máximo Divisor Comum) em Python

Atualmente a definição de Máximo Divisor Comum (MDC) pode ser assim formalizada:

Sejam a, b e c números inteiros não nulos, dizemos que c é um divisor comum de a e b se c divide a (escrevemos c|a) e c divide b (c|b). Chamaremos D(a,b) o conjunto de todos os divisores comum de a e b.

O trecho de código abaixo mostra como calcular o MDC de dois números informados:

# função que permite calcular o MDC
def MDC(a, b):
  while(b != 0):
    resto = a % b
    a = b
    b = resto
 
  return a

# função principal do programa
def main():
  print("Este programa permite calcular o MDC\n")
  x = int(input("Informe o primeiro valor: "))
  y = int(input("Informe o segundo valor: "))
  
  print("\nO Máximo Divisor Comum de", x, "e", y, "é", MDC(x, y))
  
if __name__== "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

Este programa permite calcular o MDC
Informe o primeiro número: 12
Informe o segundo número: 9
O Máximo Divisor Comum de 12 e 9 é 3


C ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de Dados em C - Como remover um nó no final de uma lista ligada simples em C - Listas encadeadas em C

Quantidade de visualizações: 2025 vezes
Nesta dica mostraremos como é possível excluir o nó no fim (o último nó) de uma lista encadeada simples (singly linked list) em C. Veja a função:

// função que permite remover um nó no fim
// da lista, ou seja, o último nó da lista.
// A função retorna um ponteiro para o início da lista
struct No *remover_final(struct No *inicio){
  struct No *n; // nó que será removido
  
  // nó que antecede o nó a ser removido. Isso
  // faz sentido, já que ele será o último nó
  // agora
  struct No *anterior;
  n = inicio; // aponta para o início da lista
  
  // varremos os nós da lista e paramos um nó antes do
  // nó a ser excluído
  while(n->proximo != NULL){
    anterior = n; // anterior assume o lugar de n
    n = n->proximo; // e n assume o seu próximo  
  }
  
  // anterior passa a ser o último nó agora
  anterior->proximo = NULL;
  
  // mostra o nó removido
  printf("\nNo removido: %d\n", n->valor);
  
  free(n); // libera o nó que antes era o último
  
  return inicio;
} 

Note que a função recebe um ponteiro para o início da lista e retorna também um ponteiro para o início da lista. Tenha o cuidado de verificar se a lista não está vazia antes de tentar fazer a exclusão. No exemplo eu fiz isso na função main(). Veja a listagem completa abaixo:

#include <stdio.h>
#include <stdlib.h>
 
// estrutura Nó
struct No{
  int valor;
  struct No *proximo;
};
// fim da estrutura Nó
 
// função que permite exibir os valores de
// todos os nós da lista
void exibir(struct No *n){
  if(n != NULL){
    do{
      printf("%d\n", n->valor);
      n = n->proximo;
    }while(n != NULL);
  }
  else
    printf("A lista esta vazia\n\n");
}
 
// função que permite remover um nó no fim
// da lista, ou seja, o último nó da lista.
// A função retorna um ponteiro para o início da lista
struct No *remover_final(struct No *inicio){
  struct No *n; // nó que será removido
  
  // nó que antecede o nó a ser removido. Isso
  // faz sentido, já que ele será o último nó
  // agora
  struct No *anterior;
  n = inicio; // aponta para o início da lista
  
  // varremos os nós da lista e paramos um nó antes do
  // nó a ser excluído
  while(n->proximo != NULL){
    anterior = n; // anterior assume o lugar de n
    n = n->proximo; // e n assume o seu próximo  
  }
  
  // anterior passa a ser o último nó agora
  anterior->proximo = NULL;
  
  // mostra o nó removido
  printf("\nNo removido: %d\n", n->valor);
  
  free(n); // libera o nó que antes era o último
  
  return inicio;
} 
 
// função que permite inserir nós no
// final da lista.
// veja que a função recebe o valor a ser
// armazenado em cada nó e um ponteiro para o
// início da lista. A função retorna um
// ponteiro para o início da lista
struct No *inserir_final(struct No *n, int v){
  // reserva memória para o novo nó
  struct No *novo = (struct No*)malloc(sizeof(struct No));
  novo->valor = v;
 
  // verifica se a lista está vazia
  if(n == NULL){
    // é o primeiro nó...não deve apontar para
    // lugar nenhum
    novo->proximo = NULL;
    return novo; // vamos retornar o novo nó como sendo o início da lista
  }
  else{ // não está vazia....vamos inserir o nó no final
    // o primeiro passo é chegarmos ao final da lista
    struct No *temp = n; // vamos obter uma referência ao primeiro nó
    // vamos varrer a lista até chegarmos ao último nó
    while(temp->proximo != NULL){
      temp = temp->proximo;
    }
    // na saída do laço temp aponta para o último nó da lista
   
    // novo será o último nó da lista...o campo próximo dele deve
    // apontar para NULL
    novo->proximo = NULL;
    // vamos fazer o último nó apontar para o nó recém-criado
    temp->proximo = novo;
    return n; // vamos retornar o início da lista intacto
  }
}
 
int main(int argc, char *argv[])
{
  // declara a lista
  struct No *inicio = NULL;
 
  // vamos inserir quatro valores no final
  // da lista
  inicio = inserir_final(inicio, 45);
  inicio = inserir_final(inicio, 3);
  inicio = inserir_final(inicio, 98);
  inicio = inserir_final(inicio, 47);
 
  // vamos exibir o resultado
  printf("Valores presentes na lista ligada antes da remocao:\n");
  exibir(inicio);
 
  // vamos remover o nó no fim da lista
  if(inicio != NULL){
    inicio = remover_final(inicio);
  }
  
  // vamos exibir o resultado
  printf("\nValores presentes na lista ligada apos a remocao:\n");
  exibir(inicio);
  
  system("pause");
  return 0;
}

Ao executar esse código você terá o seguinte resultado:

Valores presentes na lista ligada antes da remocao:
45
3
98
47

No removido: 47

Valores presentes na lista ligada apos a remocao:
45
3
98

Pressione qualquer tecla para continuar. . .



C# ::: Dicas & Truques ::: Sistema

Como obter a quantidade de processadores na máquina atual usando a propriedade ProcessorCount da classe Environment do C#

Quantidade de visualizações: 9713 vezes
Nesta dica eu mostrarei como é possível usar a propriedade ProcessorCount da classe Environment para obter e retornar um inteiro contendo a quantidade de processadores na máquina atual.

Veja o código C# completo para o exemplo:

using System;

namespace Estudos{
  class Program{
    static void Main(string[] args) {
      int proc = Environment.ProcessorCount;
      Console.WriteLine("Esta máquina possui: " + proc +
        " processador(s).");

      Console.ReadKey();
    }
  }
}

Ao executar este código nós teremos o seguinte resultado:

Esta máquina possui: 4 processador(s).


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Operadores de Manipulação de Bits (Bitwise Operators)

Exercícios Resolvidos de Java - Como converter de decimal para binário usando os operadores de bits em Java

Quantidade de visualizações: 972 vezes
Este exercício faz parte da nossa lista de desafios de programação em Java.

Pergunta/Tarefa:

Escreva um programa Java para pede para o usuário informar um número decimal e faça a conversão para binário usando os operadores de bits.

Sua saída deverá ser parecida com:

Informe um número decimal: 9
O número binário é: 00000000000000000000000000001001
Resposta/Solução:

Veja a resolução completa para o exercício em Java, comentada linha a linha:

package estudos;

import java.util.Scanner;

public class Estudos {
  // vamos definir o tamanho do vetor para guardar
  // os dígitos do número binário
  final static int TAM_INT = Integer.BYTES * 8;
  
  public static void main(String[] args){
    // para ler a entrada do usuário
    Scanner entrada = new Scanner(System.in);
    
    // variáveis para ajudar a resolver o problema
    int decimal, indice, i;
  
    // vetor para guardar o número binário
    int binario[] = new int[TAM_INT];

    // vamos pedir para o usuário informar um decimal inteiro
    System.out.print("Informe um número decimal: ");
    decimal = Integer.parseInt(entrada.nextLine());

    // ajustamos índice para o último elemento do vetor
    indice = TAM_INT - 1;

    // enquanto índice for maior ou igual a 0
    while(indice >= 0){
      // vamos guardar o bit menos significativo LSB
      binario[indice] = decimal & 1;
    
      // diminuímos o índice  100010
      indice--;

      // desloca bits para a direita uma posição
      decimal = decimal >> 1;
    }

    // agora vamos exibir o número binário
    System.out.print("O número binário é: ");
    for(i = 0; i < TAM_INT; i++){
      System.out.print(binario[i]);
    }
    
    System.out.println("\n\n");
  }
}



Portugol ::: Dicas & Truques ::: Laços de Repetição

Como usar o laço de repetição PARA da linguagem Portugol - Apostila de Portugol para iniciantes em Algorítmos e Lógica de Programação

Quantidade de visualizações: 224 vezes
O laço de repetição PARA da linguagem Portugol é usado quando queremos repetir uma ou mais instruções de nosso código um DETERMINADO número de vezes. Isso quer dizer que esse laço de repetição é usado quando sabemos exatamente quantas vezes uma instrução ou grupo de instruções será repetida.

Vamos começar com um exemplo básico? Veja um laço PARA que escreve "Gosto de programação" cinco vezes na saída do programa:

programa {
  funcao inicio() {
    // um laço PARA que escreve uma frase 5 vezes
    para (inteiro i = 0; i < 5; i++) {
      escreva("Gosto de programar\n")
    }
  }
}

Ao executar este código Portugol nós teremos o seguinte resultado:

Gosto de programar
Gosto de programar
Gosto de programar
Gosto de programar
Gosto de programar

Note que, em Portugol, a palavra chave que representa o laço, ou seja, a palavra "para" deve ser escrita sempre em letras minúsculas. Além disso, o laço para possui uma variável de controle que, na maioria das vezes, se chama "i" e é do tipo inteiro.

Vamos ver mais um exemplo? Veja um laço PARA que escreve os números de 1 até 10 na saída do programa:

programa {
  funcao inicio() {
    // um laço PARA que conta de 1 até 10
    para (inteiro i = 1; i <= 10; i++) {
      escreva(i, "  ")
    }
  }
}

Ao executar este código Portugol nós teremos o seguinte resultado:

1 2 3 4 5 6 7 8 9 10

E que tal contar de trás para frente, ou seja, de 10 até 1? Veja:

programa {
  funcao inicio() {
    // um laço PARA que conta de 10 até 0
    para (inteiro i = 10; i >= 1; i--) {
      escreva(i, "  ")
    }
  }
}

Ao executar o código Portugol novamente nós teremos o seguinte resultado:

10 9 8 7 6 5 4 3 2 1

Para finalizar, veja algumas observações importantes em relação ao laço de repetição PARA da linguagem Portugol:

a) O laço com variável de controle possui três partes. A inicialização da variável contadora, a definição do valor final do contador e a definição do incremento. Estas três partes são escritas juntas, no início do laço.

b) A sintaxe é respectivamente a palavra reservada para, abre parênteses, a declaração de uma variável de controle, ponto e virgula, a condição a ser testada, ponto e virgula, uma alteração na variável de controle a ser feita a cada iteração, fecha parenteses, e entre chaves as instruções do programa.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição

Exercícios Resolvidos de Java - Laços - Faça um programa para calcular o valor das seguintes expressões

Quantidade de visualizações: 2138 vezes
Exercício Resolvido de Java - Laços - Faça um programa para calcular o valor das seguintes expressões

Pergunta/Tarefa:

Faça um programa para calcular o valor das seguintes expressões:

1) __$S_1 = \frac{1}{1} + \frac{3}{2} + \frac{5}{3} + \frac{7}{4} + \text{...} + \frac{99}{50} __$

2) __$S_2 = \frac{2^1}{50} + \frac{2^2}{49} + \frac{2^3}{48} + \text{...} + \frac{2^\text{50}}{1} __$

3) __$S_3 = \frac{1}{1} - \frac{2}{4} + \frac{3}{9} - \frac{4}{16} + \frac{5}{25} - \text{...} - \frac{10}{100} __$

Resposta/Solução:

Em ambas as expressões nós temos o último termo nos informando os valores limites. Dessa forma, basta fixarmos um laço for ou laço while com estes limites.

Veja a resolução deste exercício em código Java console:

package arquivodecodigos;

public class Estudos{
  public static void main(String[] args){
    // primeira expressão
    int numerador = 1;
    int denominador = 1;
    double resultado = 0.0;
    
    // laço while para montar os termos e fazer a somatória
    while(numerador <= 99){
      resultado = resultado + ((numerador * 1.0) / denominador);
      numerador = numerador + 2;
      denominador++;
    }
    
    // agora mostramos o resultado
    System.out.println("Primeira expressão: " + resultado);
    
    // segunda expressão
    int expoente = 1;
    denominador = 50;
    resultado = 0.0;
    
    // laço while para montar os termos e fazer a somatória
    while(denominador >= 1){
      resultado = resultado + ((Math.pow(2, expoente) * 1.0) / denominador);
      expoente++;
      denominador--;
    }
    
    // agora mostramos o resultado
    System.out.println("Segunda expressão: " + resultado);
    
    // terceira expressão
    numerador = 1;
    denominador = 1;
    resultado = 0.0;
    int sinal = 1;
    
    // laço while para montar os termos e fazer a somatória
    while(numerador <= 10){
      if(sinal > 0){ // somar
        resultado = resultado + ((numerador * 1.0) / denominador);
      }
      else{ // subtrair
        resultado = resultado - ((numerador * 1.0) / denominador);
      }
      
      numerador++;
      denominador = numerador * numerador;
      sinal = sinal * -1;
    }
    
    // agora mostramos o resultado
    System.out.println("Terceira expressão: " + resultado);
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Primeira expressão: 95.5007946616706
Segunda expressão: 1.5608286920413398E15
Terceira expressão: 0.6456349206349207


Java ::: Coleções (Collections) ::: HashSet

Java HashSet - Como usar o método add() para adicionar novos elementos a um HashSet da linguagem Java

Quantidade de visualizações: 5354 vezes
Novos elementos podem ser adicionados a um HashSet por meio do método add(), definido originalmente na interface Collection<E> e sobrescrevendo a versão herdada de AbstractCollection<E>. Este método possui a seguinte assinatura:

public boolean add(E e)
Veja que este método recebe o elemento a ser adicionado e retorna true se o elemento foi inserido com sucesso e false em caso contrário. Note que o elemento será inserido somente se este ainda não estiver contido no conjunto. Veja o seguinte trecho de código:

package estudos;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Estudos{
  public static void main(String[] args) {
    // vamos criar uma instância da classe HashSet
    Set<Integer> conjunto = new HashSet<>();
    
    // vamos tentar inserir três inteiros neste conjunto
    if(conjunto.add(5)){
      System.out.println("Elemento inserido com sucesso.");  
    }
    else{
      System.out.println("O elemento não foi inserido.");
    }
    
    if(conjunto.add(7)){
      System.out.println("Elemento inserido com sucesso.");  
    }
    else{
      System.out.println("O elemento não foi inserido.");
    }
    
    if(conjunto.add(5)){
      System.out.println("Elemento inserido com sucesso.");  
    }
    else{
      System.out.println("O elemento não foi inserido.");
    }
    
    // vamos exibir os elementos inseridos com sucesso
    Iterator iterator = conjunto.iterator();
    while(iterator.hasNext()){
      System.out.println(iterator.next());
    }
  }
}

Ao executar este código teremos o seguinte resultado:

Elemento inserido com sucesso.
Elemento inserido com sucesso.
O elemento não foi inserido.
5
7
Veja que o segundo valor 5 não foi inserido, uma vez que o mesmo já estava na coleção. Lembre-se de que objetos da classe HashSet aceitam o elemento null.

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 34 usuários muito felizes estudando em nosso site.