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

Como copiar os caracteres de uma string para outra usando a função strcpy() da linguagem C

Quantidade de visualizações: 13095 vezes
Pessoas acostumadas com Delphi, Java ou PHP podem pensar que a tarefa de copiar o conteúdo de uma string para outra em C pode ser tão simples quanto o código a seguir:

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

int main(int argc, char *argv[]){
  char frase1[] = "Gosto de PHP";
  char frase2[50]; // pode receber até 49 caracteres

  // copia a primeira frase para a segunda
  frase2 = frase1;

  // exibe o resultado
  printf(frase2);

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

Este código não funciona. No Dev-C++ (MingW) a seguinte mensagem de erro de compilação é exibida:

incompatible types in assignment 
of `char[13]` to `char[50]` 

Em C, a forma correta de copiar os caracteres de uma string para outra é obtendo ponteiros para a posição inicial das duas strings, percorrer todos os caracteres da primeira e atribuí-los um de cada vez nas posições de memória reservadas para a segunda string. Veja o protótipo da função strcpy(), usada para tal finalidade:

char *strcpy(char *destino, const char *origem);

Como podemos ver, a função copiará todos os caracteres contidos na string origem para a string destino. É importante observar que a string destino deverá ser declarada de forma que todos os caracteres a serem copiados possam ser acomodados sem que o programa corra o risco de escrever em áreas de memória reservadas a outras finalidades. Veja um exemplo completo:

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

int main(int argc, char *argv[]){
  char frase1[] = "Gosto de PHP";
  char frase2[50]; // pode receber até 50 caracteres

  // copia a primeira frase para a segunda
  strcpy(frase2, frase1);

  // exibe o resultado
  printf(frase2);

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



MySQL ::: Dicas & Truques ::: Chaves, Índices e Restrições de Integridade Referencial

Como criar chaves primárias compostas em uma tabela do MySQL

Quantidade de visualizações: 1593 vezes
Sabemos que o uso do atributo PRIMARY KEY (PK) permite marcar um campo de uma tabela MySQL como chave primária. Assim, este campo não poderá ter valores repetidos nem conter o valor NULL.

Há, no entanto, situações nas quais precisamos marcar mais de um campo como chave primária, ou seja, a chave primária é composta de dois ou mais campos. Estas situações surgem nos cenários em que temos relacionamentos N x N (muitos para muitos) e uma tabela associativa que represente o relacionamento.

Um exemplo disso é a relação autor-livro: um autor pode escrever vários livros e um livro pode ser escrito por mais um autor (vários autores em conjunto). Mas, o mesmo autor não pode aparecer no mesmo livro mais de uma vez. Vamos representar isso passo-a-passo.

Comece criando a tabela autores. Veja o comando CREATE TABLE completo para esta tarefa:

CREATE TABLE autores(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nome VARCHAR(45) NOT NULL,
  email VARCHAR(45) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;


Este comando CREATE TABLE vai gerar a seguinte estrutura:

Field    Type               Null   Key    Default   Extra     
id       int(10) unsigned   NO     PRI    -         auto_increment
nome     varchar(45)        NO            -
email    varchar(45)        NO            -
Note que defini o engine como InnoDB, uma vez que este tipo de armazenamento permite o uso de restrições de chaves estrangeiras, diferente do armazenamento MyISAM.

Vamos agora criar a tabela livros. Veja o comando CREATE TABLE completo:

CREATE TABLE livros(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(45) NOT NULL,
  paginas INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY (id)
)
ENGINE = InnoDB;

Este comando CREATE TABLE vai gerar a seguinte estrutura:

Field     Type                Null    Key   Default    Extra
id        int(10) unsigned    NO      PRI   -          auto_increment
titulo    varchar(45)         NO            -
paginas   int(10) unsigned    NO            -
Pronto. Agora já podemos criar a tabela de ligação ou associativa que fará a ponte entre o autor e o livro que ele escreveu. Veja o comando CREATE TABLE que cria a tabela autores_livros:

CREATE TABLE autores_livros(
  id_autor int(10) unsigned NOT NULL,
  id_livro int(10) unsigned NOT NULL,
  PRIMARY KEY(id_autor,id_livro),
  KEY FK_autores_livros_2(id_livro),
  CONSTRAINT FK_autores_livros_2 FOREIGN KEY(id_livro) REFERENCES livros(id),
  CONSTRAINT FK_autores_livros_1 FOREIGN KEY(id_autor) REFERENCES autores(id)
) ENGINE=InnoDB

Este comando CREATE TABLE vai gerar a seguinte estrutura:

Field      Type               Null   Key    Default     Extra        
id_autor   int(10) unsigned   NO     PRI    -           -
id_livro   int(10) unsigned   NO     PRI    -           -
Note que nesta tabela eu criei as chaves estrangeiras (FOREIGN KEY) e apliquei as restrições de integridade referencial, ou seja, não será possível excluir um autor ou livro se seus ids estiverem registrados na tabela autores_livros.

Agora experimente inserir dados nas tabelas autores e livros. Em seguida faça o relaciomento na tabela autores_livros. Tente repetir o id do autor para o mesmo livro. Imediatamente o MySQL recusará a inserção com a mensagem de erro:

Error 1062: Duplicate entry '2-2' for key 1

E, como usamos chaves estrangeiras na tabela autores_livros, ao tentarmos excluir um livro já relacionado com um autor, teremos a seguinte mensagem de erro:

Cannot delete or update a parent row: a foreign key constraint fails (`estudos/autores_livros`, CONSTRAINT `FK_autores_livros_2` FOREIGN KEY (`id_livro`) REFERENCES `livros` (`id`))

Veja mais dicas nesta seção para aprender mais sobre chaves estrangeiras e restrições de integridade referencial.


PHP ::: Dicas & Truques ::: Programação Orientada a Objetos

Programação Orientada a Objetos em PHP - Como usar o modificador de acesso private em suas classes PHP

Quantidade de visualizações: 8797 vezes
O modificador private serve para indicar que as propriedades ou métodos (funções) de uma classe podem ser acessados somente por código residente na mesma classe. Veja um exemplo:

<?
  class Pessoa{
    private $nome;
  }

  $pessoa = new Pessoa;
  $pessoa->nome = "Osmar J. Silva";
?>

Ao executarmos este código teremos a seguinte mensagem de erro:

Fatal error: Cannot access private property 
Pessoa::$nome in C:\Apache_Web_Server\htdocs\testes.php 
on line 7

Esse erro ocorre porque a variável $nome, por estar marcada com o modificador private, não pode ser acessada por código fora da classe. Veja agora um exemplo envolvendo um método privado:

<?
  class Pessoa{
    private function somar($a, $b){
      return $a + $b;
    }
  }

  $pessoa = new Pessoa;
  echo $pessoa->somar(4, 2);
?>


Ao executarmos este código, a seguinte mensagem de erro será exibida:

Fatal error: Call to private method Pessoa::somar() 
from context '' in C:\Apache_Web_Server\htdocs\testes.php 
on line 9

Novamente, este erro é causado porque o método somar() não pode ser acessado por código fora da classe Pessoa.

É importante notar, contudo, que as propriedades e métodos privados de uma classe não podem ser acessados nem mesmo por suas classes derivadas (sub-classes).


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

POO - Programação Orientada a Objetos - Exercícios Resolvidos de Java - Ex. 2 - A classe Circulo (construtores, métodos, getters e setters e encapsulamento)

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

Escreva uma classe Circulo para representar círculos. Esta classe deverá conter os seguintes atributos e métodos:

a) Uma variável privada do tipo double chamada raio que guardará o valor do raio atual do circulo.

b) Métodos get() e set() públicos que permitem definir e acessar o valor da variável raio.

c) Um construtor que recebe o valor do raio como argumento.

d) Um método getArea() que calcula e retorna a área do círculo.

e) Um método getCircunferencia() que calcula e retorna a circunferência do círculo.

f) Um método aumentarRaio() que recebe um valor double e o usa como percentual para aumentar o raio do círculo.

Crie uma classe contendo um método main() para testar a funcionalidade da classe Circulo. Eis um exemplo de entrada e saída:



Resposta/Solução:

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

Circulo.java:

package estudos;

public class Circulo{
  private double raio; // guarda o raio atual do círculo

  // construtor que recebe o valor do raio como argumento
  public Circulo(double raio){
    this.raio = raio;  
  }
  
  // permite obter o raio do círculo
  public double getRaio(){
    return raio;
  }

  // permite definir o raio do círculo
  public void setRaio(double raio){
    this.raio = raio;
  }
  
  // obtém a área do círculo
  public double getArea(){
    double area = Math.PI * Math.pow(this.raio, 2); 
    return area;  
  }
  
  // obtém a circunferência do círculo
  public double getCircunferencia(){
    double circunferencia = (2 * Math.PI) * this.raio; 
    return circunferencia;  
  }
  
  // permite aumentar o raio de acordo com uma porcentagem fornecida
  public void aumentarRaio(double porcentagem){
    this.raio = this.raio + (porcentagem / 100.0) * this.raio;    
  }
}

Veja agora o método main() que nos permite testar a funcionalidade da classe Circulo:

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    // vamos criar uma instância da classe Circulo
    Scanner entrada = new Scanner(System.in);
    System.out.print("Informe o raio do círculo: ");
    double raio = Double.parseDouble(entrada.nextLine());
    Circulo c = new Circulo(raio);
    
    // vamos mostrar o valor do raio atual
    System.out.println("Raio: " + c.getRaio());
    // vamos mostrar a área
    System.out.println("Área: " + c.getArea() + " metros quadrados");
    // vamos mostrar a circunferência
    System.out.println("Circunferência: " + c.getCircunferencia() + " metros");
    
    // vamos aumentar o raio do circulo em uma determinada porcentagem
    System.out.print("\nInforme o percentual de aumento do raio: ");
    double percentual = Double.parseDouble(entrada.nextLine());
    c.aumentarRaio(percentual);
    
    // vamos mostrar o valor do raio atual
    System.out.println("Raio: " + c.getRaio());
    // vamos mostrar a área
    System.out.println("Área: " + c.getArea() + " metros quadrados");
    // vamos mostrar a circunferência
    System.out.println("Circunferência: " + c.getCircunferencia() + " metros");
  }
}



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

Exercícios Resolvidos de Python - Como calcular salário líquido em Python - Calculando o salário líquido de um professor

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

Escreva um programa Python que calcule o salário líquido de um professor. Seu programa deverá solicitar que o usuário informe o valor da hora aula (como float), o número de horas trabalhadas no mês (como inteiro) e o percentual de desconto do INSS (como float). Em seguida mostre o salário líquido, formatado de acordo com a moeda brasileira em vigor (na resolução eu usei o Real). Dica: Use locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8').

Sua saída deverá ser parecida com:

Informe o valor da hora aula: 28
Informe o número de horas trabalhadas no mês: 12
Informe o percentual de desconto do INSS: 8
Salário Bruto: R$ 336,00
Total de Descontos: R$ 26,88
Salário Líquido: R$ 309,12
Resposta/Solução:

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

import locale

# função principal do programa
def main():
  locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
  
  # vamos ler o valor do hora aula
  valor_hora_aula = float(input("Informe o valor da hora aula: "))
    
  # vamos ler o número de horas trabalhadas no mês
  horas_trabalhadas = int(input("Informe o número de horas trabalhadas no mês: "))
    
  # vamos ler o percentual de desconto do INSS
  percentual_desconto_inss = float(input("Percentual de desconto do INSS: "))
    
  # vamos calcular o salário bruto
  salario_bruto = valor_hora_aula * horas_trabalhadas
    
  # agora calculamos o total do desconto
  total_desconto = (percentual_desconto_inss / 100) * salario_bruto
    
  # finalmente calculamos o salário líquido
  salario_liquido = salario_bruto - total_desconto
    
  # mostramos o resultado
  print("Salário Bruto: R$ {0}".format(locale.currency(salario_bruto, 
    grouping=True, symbol=None)))
  print("Total de Descontos: R$ {0}".format(locale.currency(total_desconto, 
    grouping=True, symbol=None)))
  print("Salário Líquido: R$ {0}".format(locale.currency(salario_liquido, 
    grouping=True, symbol=None)))
  
if __name__== "__main__":
  main()



JavaScript ::: Dicas & Truques ::: Data e Hora

Como exibir a data e hora atual em JavaScript usando o objeto Date

Quantidade de visualizações: 8312 vezes
O objeto Date da linguagem JavaScript pode ser usado quando queremos retornar ou exibir a data e hora atual. Nesta dica eu mostro como criar um objeto Date e em seguida mostrar os resultados na página.

Veja o código HTML completo para o exemplo:

<!doctype html>
<html>
<head>
  <title>Datas em JavaScript</title>
</head>
<body>

<script type="text/javascript">
  // vamos obter a data e hora atual
  var data = Date();
  
  // e mostramos o resultado
  document.write("Data e hora atual: " + data);
</script>
  
</body>
</html>

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

Data e hora atual: Sat Feb 04 2023 15:08:32 GMT-0300 (Horário Padrão de Brasília)


Java ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como somar os valores dos elementos de um vetor de inteiros em Java

Quantidade de visualizações: 27146 vezes
Nesta dica eu mostro como podemos usar um laço for para obter a soma dos valores dos elementos de um vetor (ou matriz) de inteiros em Java. Veja que aqui eu criei um método que recebe o vetor e retorna um valor int contendo a soma de todos os elementos.

Veja o código completo para o exemplo:

package arquivodecodigos;
 
public class Estudos{
  public static void main(String[] args){
    int[] valores = new int[5];
  
    // inicializa os elementos do array
    valores[0] = 23;
    valores[1] = 65;
    valores[2] = 2;
    valores[3] = 87;
    valores[4] = 34;
     
    // obtém a soma
    int soma = soma(valores);
     
    System.out.println("A soma dos valores é: " + soma);
   
    System.exit(0);
  }
 
  public static int soma(int[] a){
    int total = 0;
    for(int i = 0; i < a.length; i++){
      total += a[i];  
    }
     
    return total;
  }
}

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

A soma dos valores é: 211


Java ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o arco cosseno de um número em Java usando o método acos() da classe Math

Quantidade de visualizações: 11881 vezes
O arco cosseno, ou arco coseno (também chamado de cosseno inverso) pode ser representado por cos-1 x, arccos x ou acos x. Esta função é a inversa do cosseno, ou seja, se o cosseno é a relação entre o cateto adjacente ao ângulo e a hipotenusa, o arco cosseno parte desta relação para encontrar o valor do ângulo.

Em Java, o arco cosseno de um número pode ser obtido por meio do método acos() da classe Math. Este método recebe um valor double e retorna também um double, na faixa 0 <= x <= PI, onde PI vale 3.1416.

Veja um código Java completo no qual informamos um número e em seguida calculamos o seu arco-cosseno:

package arquivodecodigos;

public class Estudos{
  public static void main(String args[]){
    double numero = 0.5;
    System.out.println("O arco cosseno de " +
      numero + " é " + Math.acos(numero));
  }
}

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

O arco cosseno de 0.5 é 1.0471975511965979

Não se esqueça de que as funções trigonométricas são usadas para modelar o movimento das ondas e fenômenos periódicos, como padrões sazonais. Elas formam a base para análises avançadas em engenharia elétrica, processamento digital de imagem, radiografia, termodinâmica, telecomunicações e muitos outros campos da ciência e da tecnologia.


Java ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de dados em Java - Como criar uma lista singularmente ligada, inserindo e exibindo os valores contidos em cada nó

Quantidade de visualizações: 12121 vezes
Em dicas posteriores você aprendeu sobre listas singularmente e duplamente ligadas. Nesta dica você aprenderá a criar uma lista singularmente ligada (com referências apenas para o próximo nó), inserir alguns nós (sempre no final da lista) e usará um laço while para visitar todos os nós e exibir seus valores.

A classe usada para representar cada nó é a seguinte (No.java):

// classe No
public class No{
  public int valor;
  public No proximo;
}
// fim da classe No

Note que cada nó contém apenas um valor inteiro e uma referência para o próximo nó. Ao analisar o código você perceberá que tanto a inserção quanto a exibição dos nós são feitas usando métodos. Isso permitirá o reaproveitamento deste código em suas próprias implementações. Veja o código para a lista ligada (Lista.java):

public class Lista{
  No inicio; // início da lista  

  // função que permite exibir os valores de
  // todos os nós da lista
  public void exibir(){
    if(inicio != null){
      do{
        System.out.println(inicio.valor);
        inicio = inicio.proximo;
      }while(inicio != null);
    }
    else
      System.out.println("A lista esta vazia\n\n");
  }

  // função que permite inserir nós na lista.
  // veja que a função recebe o valor a ser
  // armazenado em cada nó
  public void inserir(int v){
    No temp;

    // verifica se a lista está vazia
    if(inicio == null){
      // reserva memória para o novo nó
      inicio = new No();
      inicio.valor = v;
      // é o primeiro nó...não deve apontar para
      // lugar nenhum
      inicio.proximo = null;
    }
    else{ // não está vazia....vamos inserir o nó no final
      temp = inicio;
      // vamos varrer a lista até encontrar o último nó
      while(temp.proximo != null)
        temp = temp.proximo;

      // estamos no último nó...vamos criar um novo nó agora
      temp.proximo = new No();
      // atribui o valor do nó
      temp.proximo.valor = v;
      // define o campo proximo do nó como null
      temp.proximo.proximo = null;
    }
  }
}

Compile as classes No.java e Lista.java e vamos fazer o teste (TesteJava.java):

public class TesteLista{
  public static void main(String args[]){
    // vamos criar uma nova lista
    Lista lista = new Lista();

    // vamos inserir quatro valores na lista
    lista.inserir(45);
    lista.inserir(3);
    lista.inserir(98);
    lista.inserir(17);

    // exibe os valores na lista
    lista.exibir();

    System.exit(0);   
  }  
}



C++ ::: Fundamentos da Linguagem ::: Estruturas de Controle

Como usar o laço do...while da linguagem C++ - Apostila C++ para iniciantes

Quantidade de visualizações: 24650 vezes
O laço do..while é usado quando queremos executar um bloco de códigos repetidamente ENQUANTO uma condição for satisfeita. Porém, ao contrário do laço while, o laço do..while é sempre executado no mínimo uma vez, visto que a condição é testada antes da segunda interação, ou seja, o teste só ocorre no final da interação atual. Veja:

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

Veja um exemplo de um laço do..while que conta de 10 à 0:

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // um laço do..while que conta de
  // 10 até 0
  int valor = 10;

  do{
    cout << valor << "\n";
    valor--;
  }while(valor >= 0);

  cout << "\n\n";

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}


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