Você está aqui: Cards de Hidrostática |
||
|
||
|
|
||
Python ::: Dicas & Truques ::: Formatação de datas, strings e números |
Como formatar inteiros com uma determinada quantidade de zeros à esquerda usando PythonQuantidade de visualizações: 11659 vezes |
|
Nesta dica eu mostro como formatar um valor inteiro com uma determinada quantidade de zeros à sua esquerda. Note que aqui eu estou combinando a função print() com o operador de módulo (%) para indicar os valores que serão formatados. Esta técnica foi muito usada na época do Python 2.5 e ainda está disponível no Python 3.0 (e creio que deverá continuar por muito tempo ainda). Veja o trecho de código completo:
# função principal do programa
def main():
valor1 = 343
valor2 = 3
# exibirá 000342
print("O valor é %06d" % (valor1))
# exibirá 0342 e 00000003
print("Os valor sao %04d e %08d" % (valor1, valor2))
if __name__== "__main__":
main()
Ao executar este código Python nós teremos o seguinte resultado: O valor é 000343 Os valor são 0343 e 00000003 |
Java ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular juros compostos e montante usando a linguagem Java - Fórmula de juros compostos em Java - RevisadoQuantidade de visualizações: 21392 vezes |
|
O regime de juros compostos é o mais comum no sistema financeiro e, portanto, o mais útil para cálculos de problemas do dia-a-dia. Os juros gerados a cada período são incorporados ao principal para o cálculo dos juros do período seguinte. Chamamos de capitalização o momento em que os juros são incorporados ao principal. Assim, após três meses de capitalização, temos: 1º mês: M = P .(1 + i) 2º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i) 3º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i) x (1 + i) Simplificando, obtemos a fórmula: M = P . (1 + i)^n Importante: a taxa i tem que ser expressa na mesma medida de tempo de n, ou seja, taxa de juros ao mês para n meses. Para calcularmos apenas os juros basta diminuir o principal do montante ao final do período: J = M - P Vejamos um exemplo: Considerando que uma pessoa empresta a outra a quantia de R$ 2.000,00, a juros compostos, pelo prazo de 3 meses, à taxa de 3% ao mês. Quanto deverá ser pago de juros? Veja o código Java para a resolução:
public class Estudos{
public static void main(String args[]){
double principal = 2000.00;
double taxa = 0.03;
int meses = 3;
double montante = principal * Math.pow((1 + taxa), meses);
double juros = montante - principal;
System.out.println("O total de juros a ser pago é: "
+ juros);
System.out.println("O montante a ser pago é: "
+ montante);
System.exit(0);
}
}
Ao executarmos este código nós teremos o seguinte resultado: O total de juros a ser pago é: 185.45400000000018 O montante a ser pago é: 2185.454 É claro que uma formatação para moeda deixaria os valores mais bonitos. Uma outra aplicação interessante é mostrar mês a mês a evolução dos juros. Veja o código a seguir:
public class Estudos{
public static void main(String args[]){
double principal = 2000.00;
double taxa = 0.03;
int meses = 3;
double anterior = 0.0;
for(int i = 1; i <= meses; i++){
double montante = principal * Math.pow((1 + taxa), i);
double juros = montante - principal - anterior;
anterior += juros;
System.out.println("Mês: " + i + " - Montante: "
+ montante + " - Juros: " + juros);
}
System.exit(0);
}
}
Ao executarmos este código nós teremos o seguinte resultado: Mês: 1 - Montante: 2060.0 - Juros: 60.0 Mês: 2 - Montante: 2121.7999999999997 - Juros: 61.79999999999973 Mês: 3 - Montante: 2185.454 - Juros: 63.65400000000045 Esta dica foi revisada e testada no Java 8. |
Angular ::: Artigos e Tutorias ::: CRUD - CREATE, READ, UPDATE, DELETE |
Tutorial Angular para iniciantes: Como criar uma aplicação que grava novos alunos em uma base de dados MySQL usando PHP como back-end - Versão Angular CLIQuantidade de visualizações: 7003 vezes |
|
Neste pequeno tutorial mostrarei como é possível usar o framework Angular para desenvolver um front-end que permite cadastrar alunos no banco de dados MySQL usando a linguagem PHP como back-end. É claro que você poderá trocar o PHP por Node.js ou qualquer linguagem do lado do servidor. O importante aqui é entender o processo de desenvolvimento. Então, se você ainda não o fez, verifique se o Angular CLI está devidamente instalado e funcionando na sua máquina. Isso pode ser feito abrindo-se uma nova janela de terminal e disparando o comando: c:\estudos_web>ng --version Sua máquina deverá retornar algo parecido com: Angular CLI: 11.2.1 Node: 14.15.4 OS: win32 x64 Obteve resultado semelhante? Então podemos prosseguir. Comece disparando o comando abaixo para criar uma nova aplicação Angular usando o Angular CLI: c:\docs_osmar>cd c:\estudos_angular c:\estudos_angular>ng new escola Veja que pedi para o comando ng do Angular CLI criar um novo projeto com o nome escola (você pode escolher o nome que desejar). Aguarde alguns minutos até que o processo seja finalizado. Criando a entidade Aluno, ou a classe Aluno, ou melhor ainda, o model Aluno Como nossa aplicação vai gravar alunos na base de dados, nada melhor do que começar criando nossa entidade ou model Aluno. Vá até a pasta "C:\estudos_angular\escola\src\app" e crie um arquivo chamado aluno.ts com o seguinte conteúdo:
export class Aluno{
id: number = 0;
matricula: number;
nome: string;
curso: string;
constructor(matricula: number, nome: string,
curso: string, id?: number) {
this.matricula = matricula;
this.nome = nome;
this.curso = curso;
}
}
Veja que nosso model Aluno possui os atributos matricula, nome, curso e id (que é opcional na classe, pois será gerado automaticamente pela tabela no banco de dados MySQL. O passo seguinte é criar o serviço que nos permitirá a comunicação com o servidor remoto, a saber: a página PHP que gravará os dados na base MySQL. Criando o serviço aluno.service para a comunicação com o servidor remoto Para criar o serviço que nos permitirá gravar os alunos na base de dados MySQL, abra uma janela de terminal (ou use a que você já tem aberta) e dispare o seguinte comando: c:\escola>ng generate service cadastros/aluno --flat CREATE src/app/cadastros/aluno.service.spec.ts (352 bytes) CREATE src/app/cadastros/aluno.service.ts (134 bytes) Note que este comando deve ser disparado dentro da pasta da sua aplicação. Agora, temos um arquivo aluno.service.ts dentro da pasta cadastros no diretório C:\estudos_angular\escola\src\app (o seu deve ser diferente, não se esqueça). Assim, abra o arquivo aluno.service.ts e vamos modificá-lo para o seguinte código:
import {Injectable} from '@angular/core';
// precisamos do serviço HTTP para fazer a requisição AJAX
import {HttpClient, HttpErrorResponse, HttpParams} from '@angular/common/http';
// precisamos também do Observable, do map e catchError
import {Observable, throwError} from 'rxjs';
import {map, catchError} from 'rxjs/operators';
// precisamos também da classe Aluno
import {Aluno} from '../aluno';
@Injectable({
providedIn: 'root'
})
export class AlunoService {
// url base do endereço do serviço remoto
baseUrl = 'http://localhost/servicos';
// vetor de alunos já gravados
alunos: Aluno[] = [];
// vamos fazer uma injeção de dependência aqui
constructor(private http: HttpClient){}
// método que permite fazer uma requisição HTTP e gravar
// o novo aluno
cadastrar(aluno: Aluno): Observable<Aluno[]> {
const dados = {
nome: aluno.nome, matricula: aluno.matricula,
curso: aluno.curso,
};
return this.http.post(`${this.baseUrl}/gravar_aluno.php`, {dados: aluno})
.pipe(map((res) => {
// adiciona o novo aluno no vetor de alunos
this.alunos.push(res['dados']);
// e o retorna para o chamador deste método
return this.alunos;
}),
catchError(this.tratarErro));
}
private tratarErro(error: HttpErrorResponse) {
// vamos mostrar o erro no console
console.log(error);
// e vamos matar a aplicação aqui, pois não há mais nada
// a fazer
return throwError('Houve um erro: ' + error);
}
}
Há algumas importações importantes neste serviço: Injectable do '@angular/core', HttpClient, HttpErrorResponse e HttpParams do '@angular/common/http', Observable e throwError do 'rxjs', map e catchError do 'rxjs/operators' e, mais importante, a classe Aluno de '../aluno'. Em outras dicas em nosso site você aprenderá melhor sobre cada um desses imports. No construtor da classe AlunoService nós fazemos uma injeção de dependência (DI) para um objeto HttpClient, que será usado para fazer uma requisição POST. Esta requisição ocorre no método cadastrar(), que recebe um objeto da classe Aluno e o fornece como JSON na requisição POST. Assim que o novo aluno é cadastrado na base de dados MySQL, este método retorna o novo aluno (como JSON) e nós o adicionamos a um vetor de alunos, que será exibido na tela de cadastro para indicar os alunos já cadastrados. Antes de prosseguirmos, que diacho é esse erro "implicitly has an 'any' type"? Se você tentar executar a aplicação agora, de imediato já notará duas mensagens de erro (ou pelo menos uma delas): Error: src/app/app.component.ts:24:18 - error TS7006: Parameter 'f' implicitly has an 'any' type. 24 cadastrarAluno(f) { Error: src/app/cadastros/aluno.service.ts:36:26 - error TS7053: Element implicitly has an 'any' type because expression of type '"dados"' can't be used to index type 'Object'. Property 'dados' does not exist on type 'Object'. 36 this.alunos.push(res['dados']); Se elas aparecem na sua versão do Angular, basta adicionar a linha "noImplicitAny": false no arquivo tsconfig.json na raiz da aplicação e o problema será resolvido. Já estamos bem adiantados. Hora de escrever o código do app.component.ts O Angular CLI já criou um arquivo app.component.ts. Abra-o e altere o seu código para a versão abaixo:
import {Component} from '@angular/core';
// importamos a classe Aluno
import {Aluno} from './aluno';
// importamos o serviço AlunoService
import {AlunoService} from './cadastros/aluno.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
alunos: Aluno[] = [];
// criamos uma nova instância da classe Aluno
aluno = new Aluno(0, '', '', 0);
erro = '';
sucesso = '';
// fazemos uma injeção de dependência aqui
constructor(private alunoService: AlunoService) {}
// aqui temos o método que permitirá cadastrar um novo aluno
cadastrarAluno(f) {
this.alunoService.cadastrar(this.aluno)
.subscribe(
(res: Aluno[]) => {
// recebemos a lista atualizada de alunos
this.alunos = res;
// enviamos um ok para o formulário
this.sucesso = 'Aluno cadastrado com sucesso.';
// finalmente resetamos o formulário
f.reset();
},
(err) => this.erro = err
);
}
}
Neste arquivo temos uns imports importantes: Component do '@angular/core', Aluno de './aluno' e AlunoService de './cadastros/aluno.service'. Em seguida, dentro da anotação @Component nós temos as definições para o selector, o templateUrl e o styleUrls. Finalmente, na classe AppComponent, nós temos as declaramos de um vetor de Aluno[], um objeto da classe Aluno e algumas variáveis auxiliares. No construtor dessa classe nós fazemos uma injeção de dependência (DI) para um objeto da classe AlunoService. Então temos o método cadastrarAluno(), que recebe o formulário HTML e o repassa para o método cadastrar() do aluno.service. Como retorno desse método nós obtemos a lista atualizada dos alunos já cadastrados nessa sessão (atenção: não estamos obtendo os alunos cadastrados anteriomente na base de dados MySQL. Isso será visto em outra parte do tutorial). Já temos o app.component.ts, vamos complementar o app.component.html Com o app.component.ts devidamente ajustado, vamos nos concentrar agora no app.component.html, que contém o formulário que nos permitirá cadastrar os alunos. Veja o código completo para ele:
<h3>Cadastrar Novo Aluno</h3>
<form #f="ngForm" name="cadastrarForm">
<table width="200" border="0" cellspacing="3" cellpadding="3">
<tr>
<td>Matrícula:</td>
<td><input type="text" name="matricula" [(ngModel)]="aluno.matricula"></td>
</tr>
<tr>
<td>Nome:</td>
<td><input type="text" name="nome" [(ngModel)]="aluno.nome"></td>
</tr>
<tr>
<td>Curso:</td>
<td><input type="text" name="curso" [(ngModel)]="aluno.curso"></td>
</tr>
<tr>
<td> </td>
<td><button (click)="cadastrarAluno(f)">Gravar</button></td>
</tr>
</table>
</form>
<div *ngIf="erro" class="alert alert-danger">{{erro}}</div>
<div *ngIf="sucesso" class="alert alert-success">{{sucesso}}</div>
<ul *ngFor="let aluno of alunos; let i = index;">
<li>{{i + 1}}; {{aluno.matricula}}; {{aluno.nome}}; {{aluno.curso}}</li>
</ul>
Veja que fiz um código HTML bem simples, sem firulas. Depois que você entender todos os elementos, então você poderá formatar e deixar mais bonito. O importante é observar como usamos ngModel para ligar os campos do formulário aos atributos da classe Aluno. Coloquei também dois ngIf para mostrar as mensagens de sucesso e de erro, e, finalmente, um ngFor para percorrer e exibir os alunos já cadastrados durante essa sessão. Vamos lá? Já podemos executar o exemplo. A partir da pasta raiz da aplicação, dispare o comando abaixo: c:\estudos_angular\escola>ng serve --open Depois de alguns segundos teremos o seguinte resultado: ![]() Obteve o mesmo resultado? Que maravilha! Mas não podemos cadastrar alunos ainda, pois a parte do back-end ainda não foi desenvolvida. Mas isso é coisa simples. Criando a tabela no banco de dados MySQL Nosso front-end já está completo e rodando. Chegou a hora de nos concentrarmos no back-end. Inicialmente vamos criar a tabela na base de dados MySQL. Veja sua estrutura e o código SQL DDL para a sua criação: CREATE TABLE `alunos` ( `id` int(11) NOT NULL, `matricula` int(11) NOT NULL, `nome` varchar(100) NOT NULL, `curso` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Marque o campo id como chave primária e auto-incremento. Agora vamos ao código PHP, que mantive muito simples também, sem validações, o que deixo por sua conta. A página PHP que recebe os alunos e os gravam na tabela MySQL Segue abaixo o código completo para a página gravar_aluno.php, colocada no diretório "C:\xampp\htdocs\servicos" (fique atento ao endereço onde você vai colocá-la, seja na sua máquina local ou em um servidor remoto):
<?php
// não deixe quebra de linha nos headers abaixo
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET,
PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin,
X-Requested-With, Content-Type, Accept');
header("Content-Type: application/json; charset=utf-8");
// vamos obter os dados vindo do formulário
// atenção: em um código real temos que validar
$dados = file_get_contents("php://input");
// a requisição foi post?
if(isset($dados) && !empty($dados)){
$request = json_decode($dados);
$nome = $request->dados->nome;
$matricula = $request->dados->matricula;
$curso = $request->dados->curso;
// vamos efetuar a conexão com o banco
$con = new mysqli("localhost", "root",
"osmar1234", "estudos");
// conexão efetuada com sucesso?
if($con->connect_errno){
echo "Não foi possível efetuar a conexão: " .
$mysqli->connect_error;
exit(); // vamos sair daqui
}
// comando sql
$query = "INSERT INTO alunos(id, matricula, nome,
curso) VALUES (null, '$matricula', '$nome', '$curso')";
// vamos disparar o comando sql
if(mysqli_query($con, $query)){
http_response_code(201);
$aluno = [
'matricula' => $matricula,
'nome' => $nome,
'curso' => $curso,
'id' => mysqli_insert_id($con)
];
// vamos retornar o aluno recém cadastrado
echo json_encode(['dados'=>$aluno]);
}
else{
http_response_code(422);
}
}
?>
Se você observar atentamente o nosso exemplo, verá que a aplicação Angular está rodando em http://localhost:4200 enquanto a página PHP estará rodando em http://localhost/servicos/gravar_aluno.php, ou seja, mesmo servidor mas portas diferentes. Dessa forma, a requisição AJAX feita a partir da aplicação Angular vai falhar, com a seguinte mensagem de erro: Access to XMLHttpRequest at 'http://localhost/servicos/gravar_aluno.php' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Por essa razão, a página PHP contém os headers que liberam o acesso cross-site (de servidor diferente): // não deixe quebra de linha nos headers abaixo header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS'); header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept'); header("Content-Type: application/json; charset=utf-8"); Um outro detalhe interessante é o uso da função PHP file_get_contents("php://input") para receber o JSON enviado pela aplicação Angular. Programadores PHP vão achar isso uma "gambiarra", mas, atualmente, essa é a única forma de recebermos uma requisição POST usando JSON no PHP. O restante do código é fácil de entender: criamos a conexão com o banco de dados, gravamos o aluno e retornamos um novo JSON contendo o novo aluno inserido. Note o uso de mysqli_insert_id() para obter o id do registro recém-inserido com o propósito de devolvermos o novo aluno com esse atributo já preenchido. E agora o resultado final. Veja a imagem abaixo: ![]() Conseguiu executar o exemplo também? Em outra dicas de Angular você encontra as demais partes do tutorial, a saber: listar, editar e excluir os alunos. Até lá e bons estudos. |
C++ ::: Dicas & Truques ::: Strings e Caracteres |
Como substituir todas as ocorrências de uma substring em uma string C++ usando uma função substituir_string() personalizadaQuantidade de visualizações: 11014 vezes |
|
Nesta dica mostrarei como podemos tirar proveito das funções empty(), size(), find(), replace() e length() da classe String do C++ para escrever uma função substituir_string() personalizada que nos permite substituir todas as ocorrências de uma substring em uma string. Veja o código C++ completo para o exemplo:
#include <string>
#include <iostream>
using namespace std;
// função personalizada para substituir todas as ocorrências
// de uma substring em uma string
void substituir_string(string& str, const string de,
const string para){
// variáveis auxiliares
int i = 0, indice;
// a string está vazia?
if(str.empty()){
str = de;
return;
}
// fazemos as substituições da substring
while(i < str.size()){
indice = str.find(de, 0);
if(indice >= 0){
str.replace(indice, de.length(), para);
}
else{
return;
}
i++;
}
}
// função principal do programa
int main(int argc, char *argv[]){
// vamos criar uma string
string frase = "Java? Gosto de Java, Java!";
cout << "A frase original é: " << frase << endl;
// Substitui as ocorrências de "Java" por "PHP"
substituir_string(frase, "Java", "PHP");
// e mostramos o resultado
cout << "Depois da substituição: " << frase << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
Ao executar este código C++ nós teremos o seguinte resultado: A frase original é Java? Gosto de Java, Java! Depois da substituição: PHP? Gosto de PHP, PHP! |
Python ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular porcentagem em Python - Como efetuar cálculos de porcentagem em PythonQuantidade de visualizações: 26657 vezes |
|
Cálculos de porcentagens estão presentes em boa parte das aplicações que desenvolvemos. Porém, há momentos em que a mente trava e não conseguimos lembrar com clareza como estes cálculos são feitos, principalmente em Python. Esta anotação tem o objetivo de ser uma fonte de pesquisa para os momentos em que suas habilidades matemáticas insistirem em continuar ocultas. Ex: 1 - Suponhamos que um produto que custe R$ 178,00 sofra um acréscimo de 15%. Qual o valor final do produto? Veja o código em Python:
# Algoritmo que calcula porcentagem em Python
def main():
valor = 178.00 # valor original
percentual = 15.0 / 100.0 # 15%
valor_final = valor + (percentual * valor)
# mostra o resultado
print("O valor final do produto é: {0}".format(valor_final))
# O resultado será 204,70
if __name__== "__main__":
main()
Ex: 2 - Um produto, cujo valor original era de R$ 250,00, teve um desconto de 8%. Qual foi seu valor final? Veja o código em Python:
# Algoritmo que calcula porcentagem em Python
def main():
valor = 250.00 # valor original
percentual = 8.0 / 100.0 # 8%
valor_final = valor - (percentual * valor)
# mostra o resultado
print("O valor final do produto é: {0}".format(valor_final))
# O resultado será 230,00
if __name__== "__main__":
main()
Ex: 3 - Em um concurso de perguntas e respostas, um jovem acertou 72 das 90 perguntas apresentadas. Qual foi a porcentagem de acertos? E a porcentagem de erros? Veja o código em Python:
# Algoritmo que calcula porcentagem em Python
def main():
perguntas = 90.0
acertos = 72.0
# mostra a porcentagem de acertos
print("Porcentagem de acertos: {0}%".format((acertos / perguntas) * 100))
# mostra a porcentagem de erros
print("Porcentagem de erros: {0}%".format(((perguntas - acertos) / perguntas) * 100))
# Os resultados serão 80% e 20%
if __name__== "__main__":
main()
Ex: 4 - Um aparelho de CD foi adquirido por R$ 300,00 e revendido por R$ 340,00. Qual foi a porcentagem de lucro na transação? Veja o código em Python:
# Algoritmo que calcula porcentagem em Python
def main():
valor_anterior = 300.0 # valor anterior
novo_valor = 340.0 # valor novo
# calcula a porcentagem de lucro
# efetua o cálculo
porcentagem_lucro = ((novo_valor * 100) / valor_anterior) - 100
print("A porcentagem de lucro foi de: {0}%".format(porcentagem_lucro))
# O resultado será 13,33
if __name__== "__main__":
main()
Ex: 5 - Uma loja repassa 5% do lucro a seus vendedores. Se um produto custa R$ 70,00, qual o valor em reais repassado a um determinado vendedor? Veja o código em Python:
# Algoritmo que calcula porcentagem em Python
def main():
valor = 70.0 # valor do produto
percentual = 5.0 / 100.0 # 5%
# calcula a comissão
comissao = percentual * valor
# mostra o resultado
print("O valor repassado ao vendedor é: {0}".format(comissao))
# O resultado será 3,5
if __name__== "__main__":
main()
|
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






