domingo, 22 de dezembro de 2024

Triângulo de Pascal em Python

 

def generate_pascals_triangle(n):

    triangle = []


    for i in range(n):

        # Cada linha começa com um '1'

        row = [1]

        if i > 0:

            last_row = triangle[i-1]

            for j in range(1, i):

                row.append(last_row[j-1] + last_row[j])

            row.append(1)  # Cada linha termina com um '1'

        triangle.append(row)


    return triangle


def print_pascals_triangle(triangle):

    for row in triangle:

        print(' '.join(map(str, row)).center(len(triangle[-1]) * 2))


# Número de linhas do Triângulo de Pascal

n = 5

pascals_triangle = generate_pascals_triangle(n)

print_pascals_triangle(pascals_triangle)



Explicação

  1. generate_pascals_triangle(n): Esta função gera o Triângulo de Pascal até a n-ésima linha. Cada linha começa e termina com 1, e cada número interno é a soma dos dois números acima dele.

  2. print_pascals_triangle(triangle): Esta função imprime o Triângulo de Pascal formatado centralizado para melhor visualização.

  3. Você pode ajustar o valor de n para gerar mais ou menos linhas do Triângulo de Pascal conforme necessário.


PASCAL - Verificar Número Par

 program Paridade;

var

  numero: integer;

begin

  writeln('Introduza um número:');

  readln(numero);

  if numero mod 2 = 0 then

    writeln(numero, ' é par')

  else

    writeln(numero, ' é ímpar');

end.


PASCAL - Cálculo de Área de Formas Geométricas

 program AreaQuadrado;

var

  lado: real;

begin

  writeln('Introduza o lado do quadrado:');

  readln(lado);

  writeln('A área do quadrado é: ', lado * lado:0:2);

end.


PASCAL - Cálculo Fatorial

program Fatorial;

var

  n, fatorial: integer;

begin

  writeln('Introduza um número:');

  readln(n);

  fatorial := 1;

  for i := 1 to n do

    fatorial := fatorial * i;

  writeln('O fatorial de ', n, ' é ', fatorial);

end.


Sobre o DART

Dart é uma linguagem de programação desenvolvida pelo Google, projetada por Lars Bak e Kasper Lund. Ela foi lançada em 2011 e está em constante evolução. Dart é uma linguagem multi-paradigma, o que significa que suporta programação funcional, imperativa e orientada a objetos.

Características Principais

  • Multi-Paradigma: Suporta paradigmas funcionais, imperativos e orientados a objetos.

  • Código Consistente e Conciso: Oferece uma sintaxe familiar e fácil de aprender, semelhante ao C e JavaScript.

  • Segurança de Tipos: Inclui recursos modernos como segurança de nulos e correspondência de padrões.

  • Desenvolvimento Produtivo: Utiliza o recurso de hot reload, que permite ver as mudanças no código instantaneamente no aplicativo em execução.

  • Portabilidade: Pode ser compilada para código de máquina, JavaScript ou WebAssembly, permitindo a criação de aplicativos web, móveis, desktop e de servidor com a mesma linguagem.

  • Suporte da Comunidade: Possui uma comunidade ativa e muitos recursos disponíveis para aprendizado e suporte.

Uso Comum

Dart é amplamente utilizada no desenvolvimento de aplicativos com o framework Flutter, que permite criar interfaces de usuário nativas para Android e iOS a partir de uma única base de código. Além disso, Dart pode ser usada para desenvolver aplicativos web, desktop e de servidor.

Exemplo Básico

Aqui está um exemplo simples de como definir uma função em Dart:

dart
void main() {
  print('Hello, World!');
}


Exemplo básico para criar uma API em PHP

Para criar uma API em PHP que permita realizar operações de INSERT, UPDATE, DELETE e SELECT em um banco de dados, podemos usar uma combinação de PHP, PDO (PHP Data Objects) e JSON para comunicação com o cliente. Vou te mostrar um exemplo simples de como fazer isso.

Estrutura do Projeto

  1. : Arquivo de configuração para conexão com o banco de dados.

  2. : Arquivo que lida com as requisições da API.

  3. .htaccess: (Opcional) Para redirecionar todas as requisições para api.php.

1. Arquivo de Configuração (config.php)

php
<?php
$host = 'localhost';
$db = 'nome_do_banco';
$user = 'usuario';
$pass = 'senha';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Erro na conexão: " . $e->getMessage());
}
?>

2. Arquivo da API (api.php)

php
<?php
header('Content-Type: application/json');

require 'config.php';

$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
    case 'GET':
        handleGet($pdo);
        break;
    case 'POST':
        handlePost($pdo);
        break;
    case 'PUT':
        handlePut($pdo);
        break;
    case 'DELETE':
        handleDelete($pdo);
        break;
    default:
        echo json_encode(['message' => 'Método não suportado']);
        break;
}

function handleGet($pdo) {
    $stmt = $pdo->prepare("SELECT * FROM tabela");
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($result);
}

function handlePost($pdo) {
    $data = json_decode(file_get_contents('php://input'), true);
    $stmt = $pdo->prepare("INSERT INTO tabela (coluna1, coluna2) VALUES (:valor1, :valor2)");
    $stmt->execute(['valor1' => $data['valor1'], 'valor2' => $data['valor2']]);
    echo json_encode(['message' => 'Registro inserido com sucesso']);
}

function handlePut($pdo) {
    $data = json_decode(file_get_contents('php://input'), true);
    $stmt = $pdo->prepare("UPDATE tabela SET coluna1 = :valor1 WHERE coluna2 = :valor2");
    $stmt->execute(['valor1' => $data['valor1'], 'valor2' => $data['valor2']]);
    echo json_encode(['message' => 'Registro atualizado com sucesso']);
}

function handleDelete($pdo) {
    $data = json_decode(file_get_contents('php://input'), true);
    $stmt = $pdo->prepare("DELETE FROM tabela WHERE coluna1 = :valor1");
    $stmt->execute(['valor1' => $data['valor1']]);
    echo json_encode(['message' => 'Registro deletado com sucesso']);
}
?>

3. (Opcional) Arquivo .htaccess

htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ api.php [QSA,L]

Como Testar a API

Você pode usar ferramentas como Postman ou cURL para testar as requisições à API.

Exemplo de Requisição GET

sh
curl -X GET http://localhost/api.php

Exemplo de Requisição POST

sh
curl -X POST http://localhost/api.php -d '{"valor1": "exemplo1", "valor2": "exemplo2"}'

Exemplo de Requisição PUT

sh
curl -X PUT http://localhost/api.php -d '{"valor1": "novo_valor", "valor2": "exemplo2"}'

Exemplo de Requisição DELETE

sh
curl -X DELETE http://localhost/api.php -d '{"valor1": "exemplo1"}'

Segurança e Boas Práticas

  • Validação e Sanitização: Certifique-se de validar e sanitizar todas as entradas do usuário.

  • Autenticação e Autorização: Implemente autenticação (como tokens JWT) para garantir que apenas usuários autorizados possam acessar e manipular os dados.

  • Erro e Exceção: Trate erros e exceções adequadamente para evitar a exposição de informações sensíveis.

Esse é um exemplo básico para te ajudar a começar. Dependendo das necessidades específicas do seu projeto, você pode expandir e aprimorar a API com funcionalidades adicionais e medidas de segurança.


OBSERVAÇÕES IMPORTANTES:

Vale lembrar que os exemplos citados acima, são utilizadas apenas para uso didático. Cada desenvolvedor deve ser responsável em aplicar medidas de segurança para evitar ataques de injeção de SQL ou de outro tipo em seu sistema. Também em implementar autenticação JWT ou outros recursos.


PHP - Evitar injeções de SQL

Para fazer operações de banco de dados em PHP de forma segura e evitar injeções de SQL, você deve usar declarações preparadas (prepared statements) fornecidas pela extensão PDO (PHP Data Objects) ou MySQLi. Ambas as extensões fornecem uma maneira segura de lidar com consultas SQL, evitando a injeção de SQL ao separar a lógica da consulta dos dados de entrada.

Usando PDO

Conexão ao Banco de Dados

php
<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'usuario', 'senha');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Erro: ' . $e->getMessage();
}
?>

INSERT

php
<?php
$stmt = $pdo->prepare("INSERT INTO tabela (coluna1, coluna2) VALUES (:valor1, :valor2)");
$stmt->execute(['valor1' => $valor1, 'valor2' => $valor2]);
?>

SELECT

php
<?php
$stmt = $pdo->prepare("SELECT * FROM tabela WHERE coluna = :valor");
$stmt->execute(['valor' => $valor]);
$resultado = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

UPDATE

php
<?php
$stmt = $pdo->prepare("UPDATE tabela SET coluna1 = :valor1 WHERE coluna2 = :valor2");
$stmt->execute(['valor1' => $novo_valor1, 'valor2' => $valor2]);
?>

DELETE

php
<?php
$stmt = $pdo->prepare("DELETE FROM tabela WHERE coluna = :valor");
$stmt->execute(['valor' => $valor]);
?>

Usando MySQLi

Conexão ao Banco de Dados

php
<?php
$mysqli = new mysqli("localhost", "usuario", "senha", "nome_do_banco");

if ($mysqli->connect_error) {
    die("Conexão falhou: " . $mysqli->connect_error);
}
?>

INSERT

php
<?php
$stmt = $mysqli->prepare("INSERT INTO tabela (coluna1, coluna2) VALUES (?, ?)");
$stmt->bind_param("ss", $valor1, $valor2);
$stmt->execute();
$stmt->close();
?>

SELECT

php
<?php
$stmt = $mysqli->prepare("SELECT * FROM tabela WHERE coluna = ?");
$stmt->bind_param("s", $valor);
$stmt->execute();
$resultado = $stmt->get_result();
$dados = $resultado->fetch_all(MYSQLI_ASSOC);
$stmt->close();
?>

UPDATE

php
<?php
$stmt = $mysqli->prepare("UPDATE tabela SET coluna1 = ? WHERE coluna2 = ?");
$stmt->bind_param("ss", $novo_valor1, $valor2);
$stmt->execute();
$stmt->close();
?>

DELETE

php
<?php
$stmt = $mysqli->prepare("DELETE FROM tabela WHERE coluna = ?");
$stmt->bind_param("s", $valor);
$stmt->execute();
$stmt->close();
?>

Importância das Declarações Preparadas

  • Segurança: Separar os dados da lógica da consulta impede a injeção de SQL, uma das vulnerabilidades mais comuns e perigosas.

  • Reutilização: Declarações preparadas podem ser reutilizadas com diferentes conjuntos de dados, aumentando a eficiência.

  • Leitura: Torna o código mais legível e mantém a estrutura SQL clara.


OBSERVAÇÕES IMPORTANTES:

Vale lembrar que os exemplos citados acima, são utilizadas apenas para uso didático. Cada desenvolvedor deve ser responsável em aplicar medidas de segurança para evitar ataques de injeção de SQL ou de outro tipo em seu sistema.