#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
using namespace std;
struct mydata
{
int ano, mes, dia;
string aaaammdd;
};
int main()
{
mydata d1, d2;
ostringstream c1, c2;
//Definir a primeira data
d1.ano = 1970;
d1.mes = 1;
d1.dia = 9;
c1 << fixed << setfill('0') << setw(4) << d1.ano << setw(2) << d1.mes << setw(2) << d1.dia;
d1.aaaammdd = c1.str();
cout << d1.aaaammdd << endl;
//Definir a segunda data
d2.ano = 2015;
d2.mes = 10;
d2.dia = 12;
c2.clear();
c2 << fixed << setfill('0') << setw(4) << d2.ano << setw(2) << d2.mes << setw(2) << d2.dia;
d2.aaaammdd = c2.str();
cout << d2.aaaammdd << endl;
// Comparar as datas = comparar inteiros :)
if(d1.aaaammdd < d2.aaaammdd)
cout << d1.aaaammdd;
else
cout << d2.aaaammdd;
cout << endl;
return 0;
}
Atenção! Este artigo não pretende ser exaustivo quanto ao assunto em análise, ou seja, a manipulação de strings tendo como base os objetos da classe string. Trata-se apenas de um conjunto de dicas muito simples para quem quer fazer um consulta rápida e seguir viagem … Recomendo a consulta de //www.cplusplus.com/reference/string/string/ Vou passar diretamente para os exemplos. #1 – Declaração e leitura de strings Neste exemplo vou declarar 3 strings e proceder à respetiva inicialização de várias formas distintas. Continue a ler “Dicas sobre manilupação de “strings” em C++ com base na classe “string””
Quando estamos a escrever pequenos programas, que utilizam o objeto cin para fazer a leitura de valores, é frequente depararmos com situações deste tipo:
#include <iostream> using namespace std; int main() { int nota; cin >> nota; if(nota<0 || nota>20) cout << "Inseriu uma nota inválida" << endl; else if(nota<10) cout << "O aluno foi reprovado" << endl; else cout << "O aluno foi aprovado" << endl; return 0; }Se repararem, o programa funciona muito bem se o utilizador for “educadinho”, ou seja, se fornecer apenas números inteiros.
No caso de este ser distraído, ou malandreco, em vez de um número inteiro, os resultados podem ser imprevisíveis. Experimentem e vejam o que acontece para os seguintes exemplos de input:
Pois é! Todos reprovados, mesmo sem se saber a nota. Nem uma satisfação!
Uma forma muito simples de contornar esta limitação é a seguinte:
#include <iostream> using namespace std; int main() { int nota; if(!(cin >> nota) || nota<0 || nota>20) cout << "Inseriu uma nota inválida" << endl; else if(nota<10) cout << "O aluno foi reprovado" << endl; else cout << "O aluno foi aprovado" << endl; return 0; }Atendendo a que nota é uma variável do tipo int, cin >> nota irá devolver o valor lógico falso caso não receba um número inteiro (int).
Assim sendo, basta adicionais mais uma condição ao nosso if!
Trata-se de uma estrutura de repetição, controlada pela avaliação do valor lógico de uma condição.
Este tipo de estruturas são geralmente designadas por “ciclos“.
Assim temos:
- <condição> é uma expressão lógica que, sendo verdadeira, determina que se voltem a executar as instruções contidas no ciclo. Caso esta expressão tenha o valor lógico falso, o controlo passa para a instução seguinte, sendo o ciclo abandonado.
- instrução 1 … instrução n corresponde ao bloco de instruções que vão ser executados em cada iteração (entenda-se iteração como uma “volta”, tendo presente a noção de cliclo).
Este tipo de estrutura tem infinitas aplicações mas, em termos genéricos, podemos afirmar que se utiliza sempre que:
- pretendermos repetir 0 bloco de instruções um número indeterminado de vezes;
- o número de iterações, ou seja, o número de vezes que se repete o ciclo, depende do valor lógico da candição;
- fazendo variar os valores das variáveis que são utilizadas na condição permite controlar o respetivo valor lógico, consequentemente, continuar a iterar ou terminar.
Vamos pensar, a título de exemplo, no seguinte problema:
“Dada uma sequência de números, terminada por um número negativo, calcular a média dos seus elementos.”
Algoritmo em pseudocódigo
Nome MédiaN Descrição Dada uma sequência de números, cujo fim é assinalado por um número negativo, este algoritmo calcula a respetiva média. Variáveis contar: Inteiros num, soma, média: Real Início contar ← 0 soma ← 0 ler (num) enquanto ( num >= 0 ) fazer contar ← contar + 1 soma ← soma + num ler (num) fimfazer média ← soma / contar escrever (média) fimSeguem-se uma implementação deste problema.
Em linguagem C++
#include <iostream> using namespace std; int main() { int contar; double num, soma, media; contar = 0; soma = 0; cin >> num; while(num >=0) { contar = contar + 1; soma = soma + num; cin >> num; } media = soma/contar; cout << media; return 0; }
Depois de alguns exercício a aplicar a estrutura se… então… senão… fimse, provavelmente acabamos por concluir que, em certos casos específicos, não é muito prática a sua utilização.
Vamos pensar, a título de exemplo, no seguinte problema:
“Dado um número inteiro, compreendido entre 1 e 4, representando os quatro trimestres do ano, vamos fazer corresponder a sua descrição por extenso.”
Algoritmo em pseudocódigo
Nome Trimestres Descrição Dado um número inteiro, compreendido entre 1 e 4, representando os quatro trimestres do ano, este programa faz corresponder a sua descrição por extenso. Variáveis trimestre: Inteiro Início ler (trimestre) se trimestre = 1 então escrever("Primeiro trimestre") senão se trimestre = 2 então escrever("Segundo trimestre") senão se trimestre = 3 então escrever("Terceiro trimestre") senão se trimestre = 4 então escrever("Quarto trimestre") senão escrever("ERRO!") fimse fimse fimse fimse fimNeste ponto já somos convidados a pensar como ficaria esta estrutura encadeada para outros exemplos como:
- os dias da semana;
- os meses do ano;
- os signos;
- …
Continue a ler “Construção de algoritmos em Pseudocódigo – selecionar caso … fimselecionar”
Observa o seguinte programa.
Exemplo 1
#include <iostream> using namespace std; int main() { int A = 15; cout << A/3 << endl; cout << A/2 << endl; cout << A/30 << endl; return 0; }Output do Exemplo 1 Continue a ler “Divisão inteira em linguagem C++”
Trata-se apenas de um exemplo muito simples, que pretende demonstrar como podemos formatar de forma rápida os números que enviamos para o output através do stream cout.
O que está em causa são dois aspetos:
- espaço em carateres que o valor ocupa no stream
- precisão em termos de casas decimais
A formatação é conseguida com recurso aos manipuladores tendo em conta os dois aspetos acima referidos, daí a utilização da bilbioteca iomanip.
#include <iostream> #include <iomanip> using namespace std; int main() { double pi = 34.1415926535897932384626433; int x = 27; // Formatar o número para ocupar um determinado espaço em carateres cout << "Numero minimo de carateres:" << endl; cout << setw(5) << x << endl; cout << setw(1) << x << endl; cout << setw(10) << pi << endl; cout << setw(3) << pi << endl; cout << endl; // Formatar geral da precisão em números de vírgula flutuante cout << "Formatacao geral da precisao em numeros de virgula flutuante:" << endl; cout << setprecision(0) << pi << endl; cout << setprecision(1) << pi << endl; cout << setprecision(2) << pi << endl; cout << setprecision(3) << pi << endl; cout << setprecision(4) << pi << endl; cout << setprecision(5) << pi << endl; cout << endl; // Formatar fixa da precisão em números de vírgula flutuante cout << "Formatacao fixa da precisao em numeros de virgula flutuante:" << endl; cout << fixed; cout << setprecision(0) << pi << endl; cout << setprecision(1) << pi << endl; cout << setprecision(2) << pi << endl; cout << setprecision(3) << pi << endl; cout << setprecision(4) << pi << endl; cout << setprecision(5) << pi << endl; cout << endl; // Combinado as duas anteriores cout << "Combinado as duas anteriores:" << endl; cout << fixed << setw(8) << setprecision(4) << pi << endl; cout << fixed << setw(6) << setprecision(3) << pi << endl; cout << fixed << setw(10) << setprecision(6) << pi << endl; cout << endl; return 0; }A imagem seguinte mostra o output obtido.
A Classe QPushButton disponibiliza uma infinidade de membros que permitem controlar o aspeto e comportamento do botão.
Mesmo assim, perante tamanha fartura, podemos desejar alterar o comportamento destes Widgets.
O processo mais simples que encontrei consiste em:
- Criar uma classe derivada(myQPushButton) de QPushButton;
- Personalizar alguns aspetos relativos a estes novos botões (tamanho, … );
- Reimplementar os métodos virtuais ao meu gosto.
Neste exemplo, utilizei o botão no centro de uma QMainWindow, apenas para teste das suas funcionalidade.
E para testar um botão, nada melhor do que um botão. Claro!
Exemplo em vídeo:
Baixar exemplo: //app.box.com/s/azg2gs33nxzx79jzd4gd
Esta é apena uma dica rápida para executar uma GUI, baseada na classe QDialog, em modo Full Screen.
Basta acrescentar uma instrução que define esta propriedade (ver linha 8)
#include "dialog.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog w; w.setWindowState(Qt::WindowFullScreen); w.show(); return a.exec(); }Baixar um exemplo
Although the essential is explained here, i will write a short version of “how to build the QSerialPort module on Windows 7” (this seem to be changing very fast).
This module allows easy access to comunication between devices using a serial port.
I will assume tha Qt 5 is installed according to this description: //gracianotorrao.com/2013/04/10/como-instalar-o-qt-em-windows-7/
#1 – Get the source code
Access the following URI: //qt-project.org/wiki/QtSerialPort and search for the download link or click here.
Note that, in my case, the download was made to this folder C:\Users\Admin\Transferências.
#2 – Create a file structure for building
In the download folder, create a build folder named qt-qtserialport-build, in order not to change the content of the sources.
After that, we have something like this:
#3 – Build the module
After opening the console (run cmd.exe as administrator) go to the qt-qtserialport-build directory.
Then, once again, as administrator, type:
qmake ../qt-qtserialport/qtserialport.pro
mingw32-make
mingw32-make install
Note: You must have perl installed.
If this error happens, try downloading a 32 bits version, install it and reboot. Then, try the same steps.
Download Strawberry Perl 5.16.3.1 (32bit)
#4 – Test with a small example
You can use this one: QSerialPort – Como identificar um dispositivo de comunicação série