C++ ::: Fundamentos da Linguagem ::: Passos Iniciais

C++ do básico ao avançado - Conheça a origem da linguagem C++

Quantidade de visualizações: 13712 vezes
C++ começou como uma versão expandida de C. As extensões C++ foram inventadas primeiramente por Bjarne Stroustrup, em 1979, no Bell Laboratories em Murray Hill, New Jersey. Ele inicialmente chamou a nova linguagem de "C com classes". Contudo, em 1983 o nome foi mudado para C++.

Embora C fosse uma das linguagens preferidas e mais usadas para programação profissional em todo o mundo, a invenção de C++ se fez necessária devido a um fator de programação: o aumento da complexidade. No decorrer dos anos, programas de computador se tornaram maiores e mais complexos. Mesmo sendo uma excelente linguagem de programação, C tem seus limites. Em C, uma vez que um programa atinja a marca de 25.000 à 100.000 linhas de códigos, este se torna tão complexo que é difícil analisá-lo como um todo. A manutenção de seu código se torna um pesadelo. O propósito de C++ é quebrar esta barreira. A essência do C++ é permitir que programadores compreendam e gerenciem programas cada vez mais complexos.

A maioria das adições feitas ao C por Stroustrup suportam a programação orientada a objetos, às vezes chamada de POO. Stroustrup afirmou que algumas das características da orientação a objetos de C++ foram inspiradas em uma linguagem chamada Simula67. Assim, C++ representa a combinação de dois métodos poderosos de programação.

Desde que C++ foi inventada, ela já passou por três revisões importantes, com adições e modificações da linguagem. A primeira revisão ocorreu em 1985 e a segunda em 1990. A terceira ocorreu durante a padronização do C++. Há vários anos que este trabalho de padronização foi iniciado. Para esta finalidade, uma associação entre a ANSI (American National Standards Institute) e a ISO (International Standards Organization) resultou em um comitê de padronização.

O primeiro documento contendo o padrão proposto foi criado em 25 de janeiro de 1994. Neste documento, o comitê ANSI/ISO C++ manteve as características definidas por Stroustrup e acrescentou algumas outras. Mas, no geral, este documento inicial refletiu o estado de C++ na época.

Logo após a finalização do primeiro documento de padronização C++, um evento ocorreu e com ele a linguagem foi amplamente expandida: a criação da Standard Template Library (STL) por Alexander Stepanov. A STL é um conjunto de rotinas generícas que podemos usar para manipular dados. A STL não é somente poderosa e elegante, mas também muito extensa.


Python ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos

Exercício Resolvido de Python - Uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura

Quantidade de visualizações: 9703 vezes
Pergunta/Tarefa:

Crie uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura. Crie os métodos públicos necessários para sets e gets e também um método para imprimir todos dados de uma pessoa. Crie um método para calcular a idade da pessoa.

A data de nascimento pode ser informada como uma String (no formato 05/10/1982, por exemplo) e, no cálculo da idade, considere apenas o ano da data de nascimento informada.

Sua saída deverá ser parecida com:



Resposta/Solução:

Veja a resolução comentada deste exercício usando Python console:

Código para a classe Pessoa (pessoa.py):

from datetime import datetime

class Pessoa:
  # construtor da classe Pessoa
  def __init__(self, nome, data_nascimento, altura):
    self._nome = nome
    self._data_nascimento = data_nascimento
    self._altura = altura

  # método que imprime todos os dados da pessoa
  def imprimir_dados(self):
    print("Nome:", self._nome, "\nData de Nascimento:" ,
      self._data_nascimento, "\nAltura:", self._altura)

  # método que calcula a idade da pessoa
  def calcular_idade(self):
    # vamos obter o ano da data de hoje
    ano_data_atual = datetime.today().year
    
    # agora vamos obter o ano de nascimento da pessoa
    partes_data_nascimento = self._data_nascimento.split("/")
    ano_nascimento = partes_data_nascimento[2]
    
    # agora mostramos a idade da pessoa
    anos = ano_data_atual - int(ano_nascimento)
    print("A pessoa tem", anos, "anos.")

  # método que define o nome da pessoa
  def set_nome(self, nome):
    self._nome = nome

  # método que obtém o nome da pessoa
  def get_nome(self):
    return self._nome

  # método que define a data de nascimento da pessoa
  def set_data_nascimento(self, data_nascimento):
    self._data_nascimento = data_nascimento

  # método que obtém a data de nascimento da pessoa
  def get_data_nascimento(self):
    return self._data_nascimento

  # método que define a altura da pessoa
  def set_altura(self, altura):
    self._data_altura = altura

  # método que obtém a altura da pessoa
  def get_altura(self):
    return self._altura      

Código para o arquivo principal.py:

# importa a classe Pessoa
from pessoa import Pessoa

def main():
  # cria um novo objeto da classe Pessoa
  pessoa = Pessoa("Amanda Rodrigues", "12/03/1972", 1.65)

  # exibe os dados da pessoa
  pessoa.imprimir_dados()

  # mostra a idade da pessoa
  pessoa.calcular_idade()
  
if __name__== "__main__":
  main()



Java ::: Pacote java.lang ::: String

Java para iniciantes - Como verificar se duas strings são iguais ou diferentes usando os métodos equals() e equalsIgnoreCase() da classe String

Quantidade de visualizações: 4442 vezes
Podemos verificar se duas strings são iguais ou diferentes em Java usando os métodos equals() e equalsIgnoreCase(). O método equals() recebe um objeto do tipo String e o compara com o String atual. Veja sua assinatura:

public boolean equals(Object anObject)

O resultado será true se as duas strings forem iguais e false em caso contrário. Note que equals() diferencia letras maiúsculas e letras minúsculas. Veja um exemplo:

package estudos;

public class Estudos{
  public static void main(String[] args) {
    String palavra1 = "Java";
    String palavra2 = "java";
    
    // vamos verificar se as duas strings são iguais
    if(palavra1.equals(palavra2)){
      System.out.println("As duas strings são iguais");
    }
    else{
      System.out.println("As duas strings são diferentes");  
    }
  }
}

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

As duas strings são diferentes

O método equalsIgnoreCase(), por sua vez, não diferencia letras maiúsculas de letras minúsculas. Veja o exemplo anterior usando o método equalsIgnoreCase():

package estudos;

public class Estudos{
  public static void main(String[] args) {
    String palavra1 = "Java";
    String palavra2 = "java";
    
    // vamos verificar se as duas strings são iguais
    if(palavra1.equalsIgnoreCase(palavra2)){
      System.out.println("As duas strings são iguais");
    }
    else{
      System.out.println("As duas strings são diferentes");  
    }
  }
}

Ao executarmos este código o resultado será:

As duas strings são iguais



Firebird ::: Dicas & Truques ::: Tipos de Dados

Como usar os tipos CHAR e VARCHAR do Firebird

Quantidade de visualizações: 16206 vezes
O Firebird fornece dois tipos de dados básicos para armazenar informação em texto ou caracteres: CHAR e VARCHAR (O tipo BLOB também permite armazenar caracteres por meio de seu sub-tipo text).

CHAR e VARCHAR são tipos de dados que podem armazenar quaisquer informações do tipo texto. Números que não serão envolvidos em cálculos, tais como CEPs, números de ruas, etc, são geralmente armazenados em campos do tipo CHAR ou VARCHAR. O comprimento de um campo do tipo CHAR ou VARCHAR é informado entre parênteses, e pode ser um valor inteiro que vai de 1 até 32.767. Esta largura de caracteres é extremamente útil quando precisamos armazenar dados de tamanho fixo ou pré-definido, tais como códigos de CEPs para um determinado país.

Comparado com a maioria dos outros bancos de dados, o Firebird armazena somente as informações significantes. Se um campo é definido como CHAR(100), mas contém apenas 10 caracteres, os bytes definidos adicionalmente não são usados. Isso acontece porque o Firebird armazena os tipos CHAR e VARCHAR de forma igual, e não preenche o espaço não usado com caracteres vazios. Tanto CHAR quanto VARCHAR são guardados na memória em sua forma declarada, mas, o registro é comprimido antes da armazenagem.

Além disso, tenha em mente que os campos do tipo VARCHAR exigem mais espaço de armazenamento que os campos do tipo CHAR. Isso ocorre porque, ao armazenar um VARCHAR, o Firebird adiciona dois bytes que serão usados para guardar o real tamanho do campo (o tamanho declarado).

Desta forma, um CHAR ocupará menos espaço de armazenamento. Contudo, quando fazemos um SELECT envolvendo campos do tipo VARCHAR, o Firebird removerá os dois bytes adicionados anteriomente e retornará o valor armazenado. Quando um SELECT é efetuado com campos do tipo CHAR, o Firebird retorna o valor e os espaços em branco.

Em termos práticos podemos considerar esta regra: somente use CHAR se você for armazenar strings com poucos caracteres. A exceção a esta regra acontece quando estamos trabalhando com tabelas intermediárias exigidas para a exportação de dados para arquivos de tamanhos fixos. Neste caso os campos CHAR de tamanho fixo trarão uma enorme vantagem.

Esta forma eficiente de armazenamento do Firebird pode trazer algumas confusão, principalmente quando estamos importando dados, uma vez que bases de dados Paradox e dBase guardam também os espaços em branco. Assim, depois de importar um arquivo dBase de 10Mb para o Firebird, o resultado será algo em torno de 3-6Mb, ainda que todos os dados tenham sido importados corretamente.

Observe também que campos CHAR indexados não devem ter mais que 80 caracteres de comprimento (Firebird 2.5).

Quando estamos criando campos do tipo CHAR, este tipo de dados pode ser definido como CHAR ou CHARACTER. Já o tipo VARCHAR pode ser definido como VARCHAR, CHARACTER VARYING ou CHAR VARYING.

Veja um comando DDL CREATE TABLE usado para criar uma tabela do Firebird contendo campos do tipo CHAR e VARCHAR:

CREATE TABLE PESSOAS(
  ID     INTEGER NOT NULL,
  NOME   VARCHAR(40) NOT NULL,
  SEXO   CHAR(1) NOT NULL
);

Aqui o campo ID é do tipo INTEGER, NOME é do tipo VARCHAR(40) e SEXO é do tipo CHAR(1). Veja agora um comando DML INSERT INTO que mostra como inserir um novo registro nesta tabela:

INSERT INTO PESSOAS VALUES(12, 'OSMAR J. SILVA', 'M');


É importante notar que, se um campo for do tipo CHAR(1) e, na query INSERT ou UPDATE nós fornecermos dois ou mais caracteres, o Firebird se recusará a gravar ou atualizar o registro, exibindo a seguinte mensagem de erro:

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.


VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercício Resolvido de VB.NET - Como testar se um ano é bissexto em VB.NET - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou não

Quantidade de visualizações: 674 vezes
Pergunta/Tarefa:

Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016.

Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400.

Escreva um programa VB.NET que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não.

Sua saída deverá ser parecida com:

Informe o ano: 2024
O ano informado é bissexto.
Resposta/Solução:

Veja a resolução comentada deste exercício usando VB.NET console:

Imports System

Module Program
  ' função principal do programa VB.NET
  Sub Main(args As String())
    ' vamos solicitar que o usuário informe um ano
    Console.Write("Informe o ano: ")
    Dim ano As Integer = Int32.Parse(Console.ReadLine())

    ' vamos verificar se o ano informado é bissexto
    If (((ano Mod 4 = 0) And (ano Mod 100 <> 0)) Or (ano Mod 400 = 0)) Then
      Console.WriteLine("O ano informado é bissexto.")
    Else
      Console.WriteLine("O ano informado não é bissexto.")
    End If

    Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub

End Module



VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição

Exercícios Resolvidos de VB.NET - Um laço for que solicita ao usuário 10 números inteiros e mostra o menor e o maior valor informado

Quantidade de visualizações: 586 vezes
Pergunta/Tarefa:

Escreva um programa VB.NET que usa o laço for para solicitar ao usuário que informe 10 números inteiros. Em seguida mostre o maior e o menor valor lido. Não é permitido usar vetores ou matrizes (arrays).

Sua saída deve ser parecida com:

Informe o 1º valor: 5
Informe o 2º valor: 1
Informe o 3º valor: 20
Informe o 4º valor: 6
Informe o 5º valor: 3
Informe o 6º valor: 4
Informe o 7º valor: 7
Informe o 8º valor: 12
Informe o 9º valor: 9
Informe o 10º valor: 8

O maior valor lido foi: 20
O menor valor lido foi: 1
Resposta/Solução:

Veja a solução comentada deste exercício usando a linguagem VB.NET:

Imports System

Module Program
  Sub Main(args As String())
    Dim valor As Integer ' guarda o valor lido
    Dim maior, menor As Integer ' variáveis que guardarão
    ' o maior e o menor valor lido

    ' vamos pedir ao usuário que informe 10 valores inteiros
    For i As Integer = 1 To 10 Step 1
      Console.Write("Informe o " & i & "º valor: ")
      valor = Integer.Parse(Console.ReadLine())

      ' esta é a primeira iteração do laço? se for vamos assumir que o
      ' maior e menor valor lido são o primeiro valor informado
      If i = 1 Then
        maior = valor
        menor = valor
      Else ' não é a primeira iteração
        ' vamos verificar se é maior que o valor atual da variável maior
        If valor > maior Then
          maior = valor
        End If
        ' vamos verificar se é menor que o valor atual da variável menor
        If valor < menor Then
          menor = valor
        End If
      End If
    Next

    ' vamos exibir o maior e o menor valor lido
    Console.WriteLine(vbCrLf & "O maior valor lido foi: " & maior)
    Console.WriteLine("O menor valor lido foi: " & menor)

    Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub
End Module



Python ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres

Exercícios Resolvidos de Python - Como retornar o código ASCII associado a um caractere em Python - Ler um caractere e retornar o código ASCII correspondente

Quantidade de visualizações: 697 vezes
Pergunta/Tarefa:

Escreva um programa Python que pede para o usuário informar um caractere (letra ou número) e mostre o código ASCII correspondente.

Sua saída deverá ser parecida com:

Informe um caractere: A
Você informou o caractere: A
O código ASCII correspondente é: 65
Resposta/Solução:

Veja a resolução comentada deste exercício em Python:

# função principal do programa
def main():
  # vamos pedir para o usuário informar uma letra, símbolo ou pontuação
  caractere = input("Informe um caractere: ")
    
  # agora vamos obter o código ASCII correspondente
  codigo = ord(caractere)
    
  # e mostramos o resultado
  print("Você informou o caractere: {0}".format(caractere))
  print("O código ASCII correspondente é: {0}".format(codigo))
    
if __name__== "__main__":
  main()

O Código Padrão Americano para o Intercâmbio de Informação (do inglês American Standard Code for Information Interchange - ASCII, pronunciado [áski]) é um sistema de representação de letras, algarismos e sinais de pontuação e de controle, através de um sinal codificado em forma de código binário (cadeias de bits formada por vários 0 e 1), desenvolvido a partir de 1960, que representa um conjunto de 128 sinais: 95 sinais gráficos (letras do alfabeto latino, algarismos arábicos, sinais de pontuação e sinais matemáticos) e 33 sinais de controle, utilizando 7 bits para representar todos os seus símbolos.


C++ Builder ::: VCL - Visual Component Library ::: TEdit

Como obter o tamanho do texto de um TEdit usando a função SendMessage() da API do Windows e a mensagem WM_GETTEXTLENGTH usando C++ Builder

Quantidade de visualizações: 6087 vezes
Embora o C++ Builder já nos forneça as ferramentas necessárias para obter a quantidade de caracteres contidos em um TEdit em tempo de execução, é importante saber como realizar esta tarefa usando a API do Windows. Para isso, podemos usar a função SendMessage() em combinação com a mensagem WM_GETTEXTLENGTH.

A função SendMessage() da API do Windows possui a seguinte assinatura:

LRESULT SendMessage(          
  HWND hWnd,
  UINT Msg,
  WPARAM wParam,
  LPARAM lParam
);

Note que precisamos informar o HWND (parâmetro hWnd) para a caixa de texto e a mensagem que será enviada ao controle. Os valores para os parâmetros wParam e lParam devem ser 0 (zero). Veja:

void __fastcall TForm3::Button2Click(TObject *Sender)
{
  // vamos obter o tamanho do texto de um TEdit usando a função
  // SendMessage() e a mensagem WM_GETTEXTLENGTH
  int tam = SendMessage(Edit1->Handle, WM_GETTEXTLENGTH, 0, 0);

  // vamos mostrar o resultado
  ShowMessage("O Edit contém " + IntToStr(tam) + " caracteres.");
}

Ao executar este exemplo você terá um mensagem com um texto parecido com:

O Edit contém 10 caracteres.


Java ::: Fundamentos da Linguagem ::: Estruturas de Controle

Java para iniciantes - Como usar o laço do-while da linguagem Java

Quantidade de visualizações: 52973 vezes
O laço do-while é uma variação do laço while. A diferença é que, no laço do-while a condição de continuidade é testada após a execução do bloco de códigos desejado. Isso nos faz crer que este laço é executado no mínimo uma vez. Veja sua sintáxe:

do{
  // bloco de instruções
}while(condição);

Se a condição testada for verdadeira, o laço continua sua execução. Do contrário a execução do programa segue a partir do ponto onde o laço se encontra. Veja um exemplo:

import javax.swing.JOptionPane;

public class Estudos{
  public static void main(String[] args) {
    int valor;
    int soma = 0;

    // Lê continuamente até o usuário informar 0
    do{
      // efetua a próxima leitura
      String str = JOptionPane.showInputDialog(null,
        "Informe um valor inteiro:\n(ou 0 para sair)",
         "Estudos", JOptionPane.QUESTION_MESSAGE);

      valor = Integer.parseInt(str);

      soma += valor;
    }while(valor != 0);

    JOptionPane.showMessageDialog(null, "A soma é: " + soma,
       "Estudos", JOptionPane.INFORMATION_MESSAGE);
  }
}

Use o laço do-while quando você tiver instruções dentro do laço que precisem ser executadas no mínimo uma vez.


Ruby ::: Fundamentos da Linguagem ::: Passos Iniciais

Qual é a diferença entre print e puts em Ruby?

Quantidade de visualizações: 12420 vezes
Tanto a função print quanto a função puts do Ruby nos permite escrever na tela, ou seja, exibir ao usuário o resultado do processamento das operações requisitas. Então, qual a diferença entre elas?

A instrução puts é uma abreviação de "put string" e automaticamente move o cursor para a próxima linha. A instrução print é usada quando queremos escrever e manter o cursor na mesma linha.

Veja um exemplo completo a seguir:

# Este exemplo mostra a diferença entre as funções
# print e puts da linguagem Ruby

# vamos construir uma frase aqui
frase = "Gosto muito de Ruby"

# vamos exibir a frase usando duas chamadas print e
# depois duas chamadas puts
print frase
print frase
puts frase
puts frase

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

Gosto muito de RubyGosto muito de RubyGosto muito de Ruby
Gosto muito de Ruby

Note que as duas primeiras chamadas a print escreveram na mesma linha. Porém, a primeira chamada a puts escreveu na mesma linha anterior, mas já colocou uma quebra de linha após a escrita.

As duas funções, contudo, permitem o uso do caractere de quebra de linha. Veja:

# Este exemplo mostra a diferença entre as funções
# print e puts da linguagem Ruby

# vamos construir uma frase aqui
frase = "Gosto muito de Ruby"

# vamos exibir a frase usando duas chamadas print e
# depois duas chamadas puts
print frase + "\n"
print frase + "\n"
puts frase + "\n\n"
puts frase

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

Gosto muito de Ruby
Gosto muito de Ruby
Gosto muito de Ruby

Gosto muito de Ruby

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á 33 usuários muito felizes estudando em nosso site.