#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 http://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“. enquanto <condição> fazer instrução 1 instrução 2 . . . instrução n fimfazerAssim temos:
Este tipo de estrutura tem infinitas aplicações mas, em termos genéricos, podemos afirmar que se utiliza sempre que:
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 Neste ponto já somos convidados a pensar como ficaria esta estrutura encadeada para outros exemplos como:
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:
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:
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: https://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: http://gracianotorrao.com/2013/04/10/como-instalar-o-qt-em-windows-7/ #1 – Get the source code Access the following URI: http://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. #4 – Test with a small example You can use this one: QSerialPort – Como identificar um dispositivo de comunicação série |