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

Como concatenar strings em C usando a função strcat() - Aprenda a programar na linguagem C

Quantidade de visualizações: 42359 vezes
Concatenar strings é a operação de anexar uma string a outra. Em C, isso é feito com o auxílio da função strcat(), disponível no header string.h. Esta função recebe a string de destino, a string de origem, anexa a string de destino no final da string de origem e retorna um ponteiro para o resultado final. Veja um exemplo no qual usamos esta função para concatenar três strings:

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

int main(int argc, char *argv[])
{
  char frase1[100] = "Gosto";
  strcat(frase1, " muito de ");
  strcat(frase1, " programar em C");

  // exibe o resultado
  printf("%s\n\n", frase1);

  system("PAUSE");
  return 0;
}


Veja que a string de destino deve ser declarada com um tamanho suficiente para acomodar as strings que serão anexadas a ela. Veja agora um exemplo que usa o ponteiro retornado pela função strcat() para inicializar um ponteiro do tipo char:

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

int main(int argc, char *argv[])
{
  // declara e inicializa duas strings
  char frase1[100] = "Gosto muito de ";
  char frase2[15] = "programar em C";
  char *res = strcat(frase1, frase2);

  // exibe o resultado
  printf("%s\n\n", res);

  system("PAUSE");
  return 0;
}



Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercícios Resolvidos de Java - Java Básico - Lendo a nota de um aluno e classificando-a com as letras A, B, C, D ou E

Quantidade de visualizações: 4180 vezes
Exercício Resolvido de Java - Java Básico - Lendo a nota de um aluno e classificando-a com as letras A, B, C, D ou E

Pergunta/Tarefa:

Escreva um programa Java que lê a nota de um aluno e a classifica de acordo com as seguintes regras:

1) Maior ou igual a 9,00 - A
2) Maior ou igual a 8,0 e menor que 9,0 - B
3) Maior ou igual a 7,0 e menor que 8,0 - C
4) Maior ou igual a 6,0 e menor que 7,0 - D
5) Menor que 6,0 - E

Sua saída deverá ser parecida com:



Resposta/Solução:

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

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    
    // vamos solicitar que o usuário informe a nota do aluno
    System.out.print("Informe a nota do aluno: ");
    double nota = Double.parseDouble(entrada.nextLine());
    char letra = 'A'; // vai guardar a letra de classificação
    
    // a nota está dentro da faixa esperada?
    if((nota < 0) || (nota > 10)){
      System.out.println("A nota esta fora da faixa esperada.");  
    }
    else{
      if(nota < 6.0){
        letra = 'E';  
      }
      else if((nota >= 6.0) && (nota < 7.0)){
        letra = 'D';  
      }
      else if((nota >= 7.0) && (nota < 8.0)){
        letra = 'C';  
      }
      else if((nota >= 8.0) && (nota < 9.0)){
        letra = 'B';  
      }
      else{
        letra = 'A';  
      }
    }
    
    // vamos mostrar a classificação
    System.out.println("A classificação desta nota é: " + letra);
    
    System.out.println("\n");
  }
}



Delphi ::: VCL - Visual Component Library ::: TListBox

Como excluir o item ou itens selecionados em uma TListBox do Delphi usando a função DeleteSelected

Quantidade de visualizações: 13396 vezes
Em algumas ocasiões nós precisamos excluir o item ou os itens selecionados em uma TListBox. Isso pode ser feito com o auxílio do método DeleteSelected da classe TListBox. Veja um trecho de código no qual excluímos apenas o item selecionado:

procedure TForm3.FormCreate(Sender: TObject);
begin
  // vamos adicionar alguns itens na ListBox
  ListBox1.Items.Add('Goiânia');
  ListBox1.Items.Add('Curitiba');
  ListBox1.Items.Add('Brasilia');
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  // vamos excluir o item selecionado
  ListBox1.DeleteSelected;
end;

É possível conseguir o mesmo resultado usando o método Delete() do objeto Items (do tipo TStrings). Veja:

procedure TForm3.Button1Click(Sender: TObject);
begin
  // vamos excluir o item selecionado
  ListBox1.Items.Delete(ListBox1.ItemIndex);
end;

Note que o método Delete() do objeto Items exige o índice do elemento a ser removido. Com o método DeleteSelected da classe TListBox esta exigência não existe. Além disso, o método DeleteSelected permite excluir mais de um elemento selecionado, ou seja, ele excluir todos os elementos selecionados. Veja:

procedure TForm3.FormCreate(Sender: TObject);
begin
  // vamos adicionar alguns itens na ListBox
  ListBox1.Items.Add('Goiânia');
  ListBox1.Items.Add('Curitiba');
  ListBox1.Items.Add('Brasilia');

  // para que este exemplo funcione corretamente, a ListBox
  // deverá permitir seleção múltipla
  ListBox1.MultiSelect := True;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  // vamos excluir todos os itens selecionados
  ListBox1.DeleteSelected;
end;

Execute este código, selecione mais de um item e clique no botão para verificar o resultado.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


C# ::: Namespace System.Drawing ::: Graphics

C# Windows Forms - Como passar um objeto da classe Graphics como argumento para um método e usá-lo para desenhar na superfície do formulário

Quantidade de visualizações: 6143 vezes
Em algumas situações gostaríamos de escrever um método que recebe um objeto da classe Graphics como argumento e usar este objeto para alguma tarefa, por exemplo, desenhar na superfície do formulário. Nesta dica eu mostro como isso é possível. Comece escrevendo o seguinte método:

// um método que recebe um objeto da classe Graphics
private void desenhar(ref Graphics g){
  // vamos desenhar uma linha horizontal de 300 pixels na
  // cor preta e espessura de 1 pixel
  g.DrawLine(new Pen(Color.Black, 1), new Point(20, 80),
    new Point(320, 80));

  // vamos liberar o objeto Graphics
  g.Dispose();
}

Note que, na definição do parâmetro do método nós usamos a palavra-chave ref. Isso foi necessário porque queremos que o objeto Graphics seja passado por referência, uma vez que o estamos liberando dentro do corpo do método com uma chamada ao método Dispose().

Veja agora como obter o objeto Graphics relacionado ao formulário atual e passá-lo ao método desenhar():

private void button1_Click_1(object sender, EventArgs e){
  // vamos obter o objeto Graphics relacionado ao formulário atual
  Graphics graphics = this.CreateGraphics();

  // vamos passar o objeto Graphics para o método desenhar
  desenhar(ref graphics);
}



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

Como converter de octal para decimal usando o método parseInt() da classe Integer da linguagem Java

Quantidade de visualizações: 10179 vezes
Nesta dica eu mostrarei como podemos tirar proveito do método parseInt() da classe Integer do Java para converter um valor octal para decimal. Para isso nós só precisamos fornecer o valor 8 como segundo argumento para esta função.

Veja o código completo:

package arquivodecodigos;

public class Estudos{
  public static void main(String args[]){
    String octal = "10";
     
    // efetua a conversão de octal para
    // decimal
    int decimal = Integer.parseInt(octal, 8);
 
    // exibe o resultado
    System.out.println("O octal " + octal + " em decimal é " +
      decimal);
 
    System.exit(0);
  }
}

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

O octal 10 em decimal é 8


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: 175 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.


Ruby ::: Dicas & Truques ::: Strings e Caracteres

Como testar se uma string começa com uma determinada substring em Ruby usando uma função personalizada

Quantidade de visualizações: 7643 vezes
O Ruby, até a versão 1.8.6, não dispõe de um método para verificar se uma string começa com uma determinada substring. Assim, veja abaixo como escrever uma função starts_with(). Esta função recebe a string e a substring e retorna true se a string começar com a substring.

Eis a listagem completa:

# método auxiliar que permite verificar se
# uma string começa com uma substring
def starts_with(string, substring)
  if string.index(substring) == 0   
    return true
  else
    return false
  end
end

# declara e inicializa uma variável string
frase = "Gosto muito de Ruby"

# vamos verificar a string começa com "Gosto"
if starts_with(frase, "Gosto")
  puts "A string começa com \"Gosto\""
else
  puts "A string NÃO começa com \"Gosto\""
end

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

A string começa com "Gosto"


MySQL ::: Dicas & Truques ::: Data e Hora

Como adicionar horas ao valor de um campo DATETIME ou TIME usando a função ADDTIME() do MySQL

Quantidade de visualizações: 13425 vezes
A função ADDTIME() é usada quando queremos adicionar horas, minutos, segundos ou milisegundos ao valor de um campo DATETIME ou TIME. Suponhamos que você tenha um campo DATETIME chamado data_hora_compra com o valor 2008-03-30 02:30:15. Veja como adicionar 3 horas ao valor deste campo:

SELECT ADDTIME(data_hora_compra, '3:00:00') FROM
tabela_estudos

O valor retornado será 2008-03-30 05:30:15. Veja agora a função aplicada a um campo TIME com o nome de hora_inicio e o valor 02:30:15. Agora vamos adicionar 20 minutos:

SELECT ADDTIME(hora_inicio, '00:20:00') FROM
tabela_estudos

O valor retornado será 02:50:15.

É possível ainda usar a função ADDTIME() para adicionar dias ao valor de um campo DATETIME. Por exemplo, se o valor do campo for 2008-03-30 02:30:15 e usarmos a query abaixo:

SELECT ADDTIME(data_hora_compra, '5 00:00:00') FROM
tabela_estudos

O resultado será 2008-04-04 02:30:15.


Java ::: Dicas & Truques ::: Strings e Caracteres

Java para iniciantes - Como pesquisar uma substring em uma string e retornar sua posição inicial

Quantidade de visualizações: 197 vezes
Nesta dica mostrarei como é possível usar o método indexOf() da classe String para obter o índice (começando em 0) da primeira ocorrência de uma substring em uma string. Se a substring não for encontrada, o retorno será -1.

Veja o código completo para o exemplo:

package arquivodecodigos;

public class Estudos{
  public static void main(String[] args){
    String frase = "Programar em Java é muito bom";
    System.out.println("Frase: " + frase); 
    
    // verifica se a frase contém a palavra Java
    int res = frase.indexOf("Java");
     
    if(res > 0){
      System.out.println("A substring foi encontrada " +
        " na posicao (índice): " + res);
    }
    else{
      System.out.println("A substring nao foi encontrada");
    }
     
    System.exit(0);
  }
} 

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

Frase: Programar em Java é muito bom
A substring foi encontrada na posicao (índice): 13


QGIS ::: PyQGIS API ::: Aplicações com código fonte completo

Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completo

Quantidade de visualizações: 424 vezes
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS.

Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer.

Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios.

Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio.

Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression().

O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression().

Veja o código completo para o exemplo:

# uma classe para guardar cada um dos municípios
# do Estado de Goiás
class Municipio:
  # método construtor
  def __init__(self, codigo, nome, estado, area):
    self.codigo = codigo
    self.nome = nome
    self.estado = estado
    self.area = area
  
# para guardar os municípios
municipios = []
  
# vamos criar um novo objeto QgsVectorLayer com o local
# do nosso shapefile
camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp",
  "Municípios do Estado de Goiás", "ogr")
 
# vamos testar se a camada é válida  
if not camada.isValid():
  print("Não foi possível carregar a camada %s" % camada.name())
else:
  # vamos percorrer todas as feições da camada
  # e obter os seus atributos
  feicoes = camada.getFeatures()  
  for f in feicoes:
    # vamos obter os atributos desta feição
    atributos = f.attributes()  
    # e criamos um novo objeto da classe Municipio
    municipio = Municipio(atributos[0], atributos[1],
      atributos[2], atributos[3])
    # adicionamos este município na lista
    municipios.append(municipio)
    
  # agora vamos ordenar a lista por área da maior para
  # a menor  
  municipios = sorted(municipios, 
    key=lambda municipio:municipio.area, reverse=True)
  
  # vamos adicionar a camada à relação de camadas  
  QgsProject.instance().addMapLayer(camada)
  
  # vamos calcular a área ocupada pelos 5 maiores municípios
  # do Estado de Goiás
  area_5_maiores = 0
  for i in range(5):
    area_5_maiores = area_5_maiores + municipios[i].area
  
  # agora vamos selecionar os 5 maiores municípios na
  # camada do QGIS  
  codigos = ""
  
  for i in range(5):
    codigos = codigos + municipios[i].codigo + ", "
  
  codigos = codigos[0:len(codigos) - 2]
  camada.selectByExpression('"CD_MUN" IN (' + codigos + ')')
  
  # e mostramos os resultados
  print("Os 5 maiores municípios do Estado de Goiás são:\n")
  for i in range(5):
    print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome,
      municipios[i].area))
  print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format(
    area_5_maiores))
    
  # finalmente vamos exibir os nomes dos municípios. Essa foi
  # a parte mais desafiadora do código, pois eu queria mostrar
  # somente os rótulos dos cinco maiores municípios
  settings = QgsPalLayerSettings()
  settings.isExpression = True
  settings.placement = QgsPalLayerSettings.Line
  settings.placement = QgsPalLayerSettings.Horizontal
  # mostra o nome do município
  settings.fieldName = "NM_MUN"

  format = QgsTextFormat()
  format.setColor(QColor('Black'))
  
  settings.setFormat(format)
  settings.enabled = True

  # cria e adiciona uma nova regra
  root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
  rule = QgsRuleBasedLabeling.Rule(settings)
  rule.setDescription("5 Maiores Municípios do Estado de Goiás")
  
  # define o campo que será usado no filtro. Note que somente
  # serão listados os rótulos dos municípios com área maior ou
  # igual ao quinto elemento da lista municípios
  campo_area = "AREA_KM2"
  rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}")
  root.appendChild(rule)

  # define as configurações do rótulo
  camada.setLabelsEnabled(True)
  rules = QgsRuleBasedLabeling(root)
  camada.setLabeling(rules)
  # redesenha a camada no canvas do QGIS
  camada.triggerRepaint() 

Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado:

Os 5 maiores municípios do Estado de Goiás são:

1) Niquelândia - Área: 9846.293 km2
2) Mineiros - Área: 9042.844 km2
3) Caiapônia - Área: 8627.961 km2
4) Rio Verde - Área: 8374.255 km2
5) Nova Crixás - Área: 7308.681 km2

Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2

Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren.

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