Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO

Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.

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

Estruturas de Dados em C - Como inserir antes de um determinado nó em uma lista encadeada simples usando C

Quantidade de visualizações: 2112 vezes
Em algumas situações nós precisamos inserir o novo nó antes de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores:

45 | 3 | 98 | 47

Suponha que queremos inserir o valor 50 antes do 98, então o novo conteúdo da lista será:

45 | 3 | 50 | 98 | 47

Observe que neste exemplo eu tratei o caso de inserir antes do primeiro nó, ou seja, antes do 45, mas não tratei a lista vazia. Há também a questão do laço infinito caso o usuário queira inserir antes de um nó não existente (não tratada). Veja o código completo:

#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 inserir um novo nó
// antes de um determinado valor
struct No *inserir_antes_valor(struct No *n, int v, int v_antes){
  // reserva memória para o novo nó
  struct No *novo = (struct No*)malloc(sizeof(struct No));
  novo->valor = v;

  // guarda o nó antes do valor que procuramos
  struct No *anterior = NULL; 
  struct No *temp = n; // aponta para o início da lista
  // enquanto for diferente do valor que estamos procurando
  while(temp->valor != v_antes){
    anterior = temp; // anterior recebe temp
    // e temp recebe o seu próximo
    temp = temp->proximo;
  }
  
  // ATENÇÃO: não estamos tratando a condição
  // de lista vazia. Para isso veja minha dica
  // sobre como inserior no início da lista
  
  // devemos inserior no início da lista?
  if(anterior == NULL){
    // o próximo do novo nó é o início da lista
    novo->proximo = n;
    n = novo; // início da lista é o novo nó
  }
  else{
    // o proximo do anterior é o novo nó
    anterior->proximo = novo;
    // e o próximo do novo nó é temp
    novo->proximo = temp;
  }
  
  return n;
}

// 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 a lista
  puts("Valores atuais:\n");
  exibir(inicio);
  
  // vamos inserir o valor 50 antes do 98
  inicio = inserir_antes_valor(inicio, 50, 98);
  
  // vamos exibir a lista novamente
  puts("\nValores agora:\n");
  exibir(inicio);
  
  puts("\n\n");
  system("pause");
  return 0;
}



PHP ::: Dicas & Truques ::: Arquivos e Diretórios

Como renomear um arquivo em PHP usando a função rename()

Quantidade de visualizações: 26908 vezes
Arquivos podem ser renomeados em PHP usando a função rename(). Esta função recebe o caminho e nome atual do arquivo e o novo caminho e nome. Se o destino for diferente, o arquivo será movido de um diretório para outro. Veja um exemplo:

<?php
  // renomeia o arquivo testes.txt para testes2.txt
  $de = "/site/public_html/testes.txt";
  $para = "/site/public_html/testes2.txt";
  
  if(rename($de, $para)){
    echo "Arquivo renomeado com sucesso.";
  }
  else{
    echo "Não foi possível renomear o arquivo.";
  }
?>

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

Arquivo renomeado com sucesso.

A função rename() da linguagem PHP retorna um valor boolean (verdadeiro ou falso) indicando se a operação foi realizada com sucesso ou se houve um erro.


Python ::: Python para Engenharia ::: Engenharia Civil - Cálculo Estrutural

Como calcular o peso que um pilar aguenta usando Python - Python para Engenharia Civil

Quantidade de visualizações: 302 vezes


O sonho de todo estudante de Engenharia Civil é poder responder, com segurança, a uma das perguntas mais recorrentes no nosso dia-a-dia: Quanto de peso um pilar aguenta?

Para responder, basta nos lembrarmos de que o concreto é muito resistente à compressão, e, no caso dos pilares, a armadura é usada, em sua maior parte, para combater a flambagem, que é quando o pilar tende a fletir para os lados, parecendo-se com um arco ou com uma barriga de chope.

Então, uma vez que o pilar recebe sua carga em seu eixo (carga axial) e o concreto é muito resistente à compressão, só precisamos nos concentrar na resistência característica do concreto à compressão e na área da seção transversal do pilar.

Sempre que falamos de resistência do concreto, nós estamos falando de FCK C15, C20, C25, C30, etc, que são os termos usados para designar sua resistência. Assim, um concreto C25 é o mesmo que 25 MPa, ou seja, esse concreto resiste a 250Kg/cm2.

Os concretos usinados, em geral, vêm com resistência de 25 MPa para cima, enquanto aquele concreto que fazemos na obra, na betoneira, usando a combinação de 3x1, chega no máximo a 15 MPa. Além disso, é importante nos lembrarmos de que a norma NBR 6118/2014 exige que o concreto seja igual ou superior a 25 MPa.

Há também o fator de segurança de 40%, também exigido pela norma NBR 6118/2014. Dessa forma, se o concreto for de 25 MPa, aplicado o fator de segurança, só podemos contar com 15 MPa mais ou menos, o que daria 150Kg/cm2.

Vamos ver código agora? Veja o código Python completo que pede os lados b (base) e h (altura) do pilar e o FCK do concreto usado e retorna o peso que o pilar suporta (já aplicado o fator de segurança):

# Algoritmo Python que calcula o peso suportado por um pilar
# dados os seus lados e o FCK do concreto

# função principal do programa
def main():
  # vamos ler o lado b do pilar
  base = float(input("Informe a base (b) do pilar em cm: "))
  # vamos ler a altura h do pilar
  altura = float(input("Informe a altura (h) do pilar em cm: "))

  # vamos calcular a área da seção transversal do pilar
  area = base * altura

  # agora vamos ler o FCK do concreto em MPa
  fck = float(input("Informe o FCK do concreto em MPa: "))

  # vamos calcular o peso suportado pelo pilar
  peso_suportado = area * (fck * 10)
  # vamos aplicar o fator de segurança de 40%
  peso_suportado = peso_suportado / 1.4

  # e mostramos o resultado
  print("A área da seção transversal é: {0} cm2".format(area))
  print("Esse pilar suporta {0} kg".format(peso_suportado))

if __name__== "__main__":
  main()

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

Informe a base (b) do pilar em cm: 14
Informe a altura (h) do pilar em cm: 26
Informe o FCK do concreto em MPa: 20
A área da seção transversal é: 364.0 cm2
Esse pilar suporta 52000.0 kg

Lembre-se de que a área mínima da seção de um pilar, de acordo com a NBR 6118/2014 é de 360 cm2.


C# ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercícios Resolvidos de C# - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30

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

Considere os seguintes vetores:

// dois vetores de 5 inteiros cada
int[] a = { 50, -2, 9, 5, 17 };
int[] b = new int[5];
Escreva um programa C# que preencha o segundo vetor de forma que a soma dos respectivos elementos individuais de cada vetor seja igual a 30.

Sua saída deverá ser parecida com:

Valores no vetor a: 50   -2   9   5   17   
Valores no vetor b: -20   32   21   25   13
Resposta/Solução:

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

using System;

namespace Estudos {
  class Principal {
    // função principal do programa C#
    static void Main(string[] args) {
      // dois vetores de 5 inteiros cada
      int[] a = { 50, -2, 9, 5, 17 };
      int[] b = new int[5];

      // vamos preencher o segundo vetor de forma que a soma dos
      // valores de seus elementos seja 30
      for (int i = 0; i < b.Length; i++) {
        b[i] = 30 - a[i];
      }

      // vamos mostrar o resultado
      Console.Write("Valores no vetor a: ");
      for (int i = 0; i < a.Length; i++) {
        Console.Write(a[i] + "   ");
      }

      Console.Write("\nValores no vetor b: ");
      for (int i = 0; i < b.Length; i++) {
        Console.Write(b[i] + "   ");
      }

      Console.WriteLine("\n\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}



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

Como retornar a diferença em dias entre duas datas usando JavaScript

Quantidade de visualizações: 18756 vezes
Nesta dica mostrarei como podemos usar a linguagem JavaScript para calcular a quantidade de dias, ou seja, a diferença de dias entre duas datas. Note que o truque é subtrair um objeto Date de outro objeto Date.

Veja o código JavaScript completo para o exemplo:

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; 
  charset=iso-8859-1" />
<title>Estudos JavaScript</title>
</head>
<body>
  
<script type="text/javascript">
  function diferencaDias(data1, data2){
    var dif =
      Date.UTC(data1.getYear(),data1.getMonth(),data1.getDate(),0,0,0)
      - Date.UTC(data2.getYear(),data2.getMonth(),data2.getDate(),0,0,0);
    return Math.abs((dif / 1000 / 60 / 60 / 24));
  }

  // datas no formato ano/mês/dia
  document.write("A diferença de dias é: " + 
    diferencaDias(new Date(2007, 0, 10), 
    new Date(2007, 0, 20)) + " dias.");
</script>
   
</body>
</html>

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

A diferença de dias é: 10 dias.


Java ::: Aplicativos Completos ::: Fontes

Como criar um visualizador de fontes em Java Swing - Código fonte completo

Quantidade de visualizações: 10619 vezes
Código completo Java: Como escrever um visualizador de fontes em Java Swing

Nesta dica eu mostro o código completo para uma aplicação GUI usado Java Swing e que permite visualizar as fontes instaladas no sistema. Ao clicar em uma das fontes exibidas em uma JList, o texto da JLabel é formatado de acordo com a fonte escolhida.

Note que montei toda a GUI em código mesmo, ou seja, sem usar o editor visual do Netbeans ou outra IDE. Esse é um bom exercício para entender os elementos que compõem interfaces gráficas do Java Swing.

Eis o código completo para o exemplo:

package arquivodecodigos;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
 
public class Estudos extends JFrame
    implements ListSelectionListener{
  JLabel label = new JLabel("Observe este texto");  
 
  public Estudos(){
    super("Visualizados de Fontes");
     
    String[] fontNames; // nomes das fontes
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    fontNames = 
      GraphicsEnvironment.getLocalGraphicsEnvironment().
      getAvailableFontFamilyNames();
    Vector fonts = new Vector();
 
    for(int i = 0; i < fontNames.length; i++){
      fonts.add(new Font(fontNames[i], Font.PLAIN, 16));
    }    
 
    JList fontList = new JList(fonts);
    fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    fontList.setCellRenderer(new FontCellRenderer());
    JScrollPane scrollPane = new JScrollPane(fontList);
 
    JPanel p = new JPanel();
    p.add(scrollPane);
    fontList.addListSelectionListener(this);
    getContentPane().add(p, "Center");
    getContentPane().add(label, "South");
 
    setSize(500, 250);
    setVisible(true);
  }
 
  @Override
  public void valueChanged(ListSelectionEvent evt){
    JList source = (JList) evt.getSource();
    Font font = (Font) source.getSelectedValue();
    label.setFont(font);
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
 
// Classe personalizada que implementa ListCellRenderer 
class FontCellRenderer implements ListCellRenderer{
  @Override
  public Component getListCellRendererComponent(
    final JList list, final Object value, 
    final int index, final boolean isSelected,
    final boolean cellHasFocus){
     
    return new JPanel(){
      @Override
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        Font font = (Font) value;
        String text = font.getFamily();
        FontMetrics fm = g.getFontMetrics(font);
        g.setColor(isSelected ? list.getSelectionBackground() 
          : list.getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(isSelected ? list.getSelectionForeground() 
          : list.getForeground());
        g.setFont(font);
        g.drawString(text, 0, fm.getAscent());
      }
 
      @Override
      public Dimension getPreferredSize() {
        Font font = (Font) value;
        String text = font.getFamily();
        Graphics g = getGraphics();
        FontMetrics fm = g.getFontMetrics(font);
        return new Dimension(fm.stringWidth(text), fm.getHeight());
      }
    };
  }
}

Ao executá-lo você terá um resultado parecido com:




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

Como calcular o seno de um número ou ângulo em Python usando a função sin() do módulo Math

Quantidade de visualizações: 1650 vezes
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função seno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula:

\[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \]

Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função sin() da linguagem Python. Este método, que faz parte do módulo Math, recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja:

# importamos a biblioteca Math
import math as math
  
def main():
  print("Seno de 0 = ", math.sin(0))
  print("Seno de 1 = ", math.sin(1))
  print("Seno de 2 = ", math.sin(2))
  
if __name__== "__main__":
  main()

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

Seno de 0 = 0.0
Seno de 1 = 0.8414709848078965
Seno de 2 = 0.9092974268256817

Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo:




Python ::: Dicas & Truques ::: Formatação de datas, strings e números

Como inserir uma determinada quantidade de espaços à esquerda de um valor numérico usando Python

Quantidade de visualizações: 7615 vezes
Este trecho de código Python mostra como definir uma quantidade de caracteres de espaço à esquerda de um valor numérico. Este exemplo funciona com inteiros. Para ponto-flutuante você deve trocar "d" por "f".

Veja o código:

# método principal
def main():
  valor = 54

  # com três espaços
  print("O valor é %5d" % valor)

  # com nove espaços
  print("O valor é %11d" % valor)

  # com quatro espaços
  print("O valor é %6d" % valor)

if __name__== "__main__":
  main()

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

O valor é    54
O valor é          54
O valor é     54



Python ::: Dicas & Truques ::: Formatação de datas, strings e números

Como formatar valores de ponto-flutuante com uma determinada quantidade de zeros à esquerda em Python

Quantidade de visualizações: 9175 vezes
Este trecho de código Python mostra como formatar um valor de ponto-flutuante com uma determinada quantidade de zeros à sua esquerda.

Veja:

# método principal
def main():
  valor1 = 343.1
  valor2 = 3.5

  # exibirá 0342.10
  print("O valor é %07.2f" % valor1) 

  # exibirá 0342.10 e 00003.50
  print("Os valor são %06.2f e %08.2f" % (valor1, valor2))

if __name__== "__main__":
  main()

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

O valor é 0343.10
Os valor são 343.10 e 00003.50


Python ::: Dicas & Truques ::: Arquivos e Diretórios

Como usar a função exists() do módulo os.path para testar a existência de um arquivo ou diretório em Python

Quantidade de visualizações: 3304 vezes
Antes de efetuarmos qualquer ação em um arquivo ou diretório, é sempre uma boa idéia testar primeiro se tal arquivo ou diretório existe no sistema. Isso pode ser feito por meio do método exists() do módulo os.path.

Este método retorna True se o arquivo ou diretório existir, e False em caso contrário. Veja um exemplo no qual checamos a existência de um arquivo chamado "teste.txt":

from os import path

def main():
  # vamos verificar se este arquivo existe, neste local
  if path.exists("C:\\estudos_python\\teste.txt"):
    print("Arquivo foi encontrado")
  else:
    print("Arquivo não foi encontrado")

if __name__== "__main__":
  main()

Se o arquivo existir no caminho informado, o texto "Arquivo foi encontrado" será impresso na tela. Se o arquivo não puder ser encontrado, o texto "Arquivo não foi encontrado" será exibido.

Veja agora como podemos verificar se um diretório existe ou não no sistema operacional:

from os import path

def main():
  # vamos verificar se este diretório existe
  if path.exists("C:\\estudos_python"):
    print("Diretório existe.")
  else:
    print("Diretório não existe.")

if __name__== "__main__":
  main()

Execute este código e veja o resultado. Se o diretório pesquisado existir, o texto "Diretório existe." será exibido.

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


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 Apenas R$ 19,90


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