QuantLib GUI is possible and reasonable easy with Ultimatepp (www.ultimatepp.org).
The most serious problem is the namespace, you can't use Quantlib namespace due conflicts with upp.
Compilation and example with MingW.
Source Code & Executable - static linked with debug symbols
http://www.4shared.com/rar/qjiaYH1g/QuantLibGuiExample.html
Thursday, May 31, 2012
Wednesday, November 03, 2010
Kleber,
Let's follow the code:
count = 1
mtrx[0][0] = 1
print Linha:0 Col:0 INT:1
------new loop-----------
count = 2
mtrx[0][1] = 2
print Linha:0 Col:1 INT:2
------new loop-----------
etc.
First from i=0 -> 19
Then from j=0 -> 9
This is equivalent to:
0,0
0,1
0,2
(...)
0,9
1,0
(...)
19,9 <- Latest Matrix Address.
It's just like a spreadsheet:
0 1 2
0 [0,0] [0,1] [0,2]
1 [1,0] [1,1] [1,2]
2 [2,0] [2,1] [2,2]
3 [3,0] [3,1] [3,2]
4 [4,0] [4,1] [4,2]
Let's follow the code:
count = 1
mtrx[0][0] = 1
print Linha:0 Col:0 INT:1
------new loop-----------
count = 2
mtrx[0][1] = 2
print Linha:0 Col:1 INT:2
------new loop-----------
etc.
First from i=0 -> 19
Then from j=0 -> 9
This is equivalent to:
0,0
0,1
0,2
(...)
0,9
1,0
(...)
19,9 <- Latest Matrix Address.
It's just like a spreadsheet:
0 1 2
0 [0,0] [0,1] [0,2]
1 [1,0] [1,1] [1,2]
2 [2,0] [2,1] [2,2]
3 [3,0] [3,1] [3,2]
4 [4,0] [4,1] [4,2]
#include <stdio.h>
int main ()
{
int mtrx [20][10];
int i,j,count;
count=1;
for (i=0;i<20;i++)
for (j=0;j<10;j++)
{
mtrx[i][j]=count;
count++;
printf("\nLinha:%d Col:%d INT:%d",i,j,mtrx[i][j]);
}
getchar(); //No exemplo acima, a matriz mtrx é preenchida, sequencialmente por linhas, com os números de 1 a 200.
}
Monday, June 21, 2010
Recentemente eu resolvi um problema usando CGI.
Faz um certo tempo que ninguém mais utiliza C++ CGI... Foi interessante.
Separei um código simples e de fácil uso com banco de dados Oracle.
O executável irá receber uma variável GET, tal que:
http://server/cgi-bin/oraclecgi.exe?id=2345
Isso irá buscar o resultado no BD e devolvê-lo no browser.
Faz um certo tempo que ninguém mais utiliza C++ CGI... Foi interessante.
Separei um código simples e de fácil uso com banco de dados Oracle.
O executável irá receber uma variável GET, tal que:
http://server/cgi-bin/oraclecgi.exe?id=2345
Isso irá buscar o resultado no BD e devolvê-lo no browser.
#include <Core/Core.h>
#include <Oracle/Oracle8.h>
using namespace Upp;
CONSOLE_APP_MAIN
{
Oracle8 oracle;
String raw_get = getenv("QUERY_STRING");
String id_code;
id_code = raw_get.Mid(3, 12);
oracle.Open("user/pwd@INFOREAM:1521/sid", false, NULL);
Sql sql(oracle);
sql.Execute("SELECT ADD_TEXT FROM SOMETABLE WHERE ADD_ENTITY = 'TASK' AND ADD_CODE = '" + id_code + "'");
sql.Fetch();
Cout() << "Content-type: text/html\n\n";
Cout() << "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\"/></head>";
Cout() << "<body>";
Cout() <<"<pre style=\"font-family:verdana;size:10\">" + sql[0].ToString() + "</pre>";
Cout() << "</body></html>";
}
Sunday, September 13, 2009
Calculadora simples de inteiros
Segue o código da calculadora de inteiros. Dá para melhorar muito, mas nada mal para um programa feito em 20 minutos! O modo como é tratado os eventos, com uma procedure por botão, não é dos mais elegantes, mas resolve.
No arquivo .h certifique-se de ter o objeto EditInt no lugar de LineEdit (troque no layout também!!).
O arquivo main.cpp:
No arquivo .h certifique-se de ter o objeto EditInt no lugar de LineEdit (troque no layout também!!).
#ifndef _calculadora_calculadora_h
#define _calculadora_calculadora_h
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
#define LAYOUTFILE <calculadora/calculadora.lay>
#include <CtrlCore/lay.h>
class calculadora : public WithcalculadoraLayout<TopWindow> {
public:
typedef calculadora CLASSNAME;
Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button btn5;
Button btn6;
Button btn7;
Button btn8;
Button btn9;
Button btn0;
Button btnigual;
Button btnclear;
Button btnmais;
Button btnmenos;
Button btnvezes;
Button btndivide;
EditInt visor;
Label anterior;
Label operacao;
void apertamais();
void apertamenos();
void apertavezes();
void apertadivide();
void apertaigual();
void apertaclear();
void apertabtn1();
void apertabtn2();
void apertabtn3();
void apertabtn4();
void apertabtn5();
void apertabtn6();
void apertabtn7();
void apertabtn8();
void apertabtn9();
void apertabtn0();
calculadora();
};
#endif
O arquivo main.cpp:
#include "calculadora.h"
void calculadora::apertamais()
{
anterior.SetLabel(visor.GetData().ToString());
visor.SetData("");
operacao.SetLabel("+");
}
void calculadora::apertamenos()
{
anterior.SetLabel(visor.GetData().ToString());
visor.SetData("");
operacao.SetLabel("-");
}
void calculadora::apertavezes()
{
anterior.SetLabel(visor.GetData().ToString());
visor.SetData("");
operacao.SetLabel("*");
}
void calculadora::apertadivide()
{
anterior.SetLabel(visor.GetData().ToString());
visor.SetData("");
operacao.SetLabel("/");
}
void calculadora::apertaclear()
{
anterior.SetLabel("");
visor.SetData("");
operacao.SetLabel("");
}
void calculadora::apertaigual()
{
ConvertInt ant;
//verifica se já há número para somar
if (anterior.GetText().ToString() != "")
{
if (operacao.GetText().ToString() == "+")
{
visor.SetData((int)ant.Scan(anterior.GetText()) + (int)visor.GetData());
}
else if (operacao.GetText().ToString() == "-")
{
visor.SetData((int)ant.Scan(anterior.GetText()) - (int)visor.GetData());
}
else if (operacao.GetText().ToString() == "*")
{
visor.SetData((int)ant.Scan(anterior.GetText()) * (int)visor.GetData());
}
else if (operacao.GetText().ToString() == "/")
{
//sem proteção contra divisão por zero!
visor.SetData((int)ant.Scan(anterior.GetText()) / (int)visor.GetData());
}
anterior.SetLabel("");
operacao.SetLabel("");
}
}
void calculadora::apertabtn1()
{
visor.SetData(visor.GetData().ToString() + "1");
}
void calculadora::apertabtn2()
{
visor.SetData(visor.GetData().ToString() + "2");
}
void calculadora::apertabtn3()
{
visor.SetData(visor.GetData().ToString() + "3");
}
void calculadora::apertabtn4()
{
visor.SetData(visor.GetData().ToString() + "4");
}
void calculadora::apertabtn5()
{
visor.SetData(visor.GetData().ToString() + "5");
}
void calculadora::apertabtn6()
{
visor.SetData(visor.GetData().ToString() + "6");
}
void calculadora::apertabtn7()
{
visor.SetData(visor.GetData().ToString() + "7");
}
void calculadora::apertabtn8()
{
visor.SetData(visor.GetData().ToString() + "8");
}
void calculadora::apertabtn9()
{
visor.SetData(visor.GetData().ToString() + "9");
}
void calculadora::apertabtn0()
{
visor.SetData(visor.GetData().ToString() + "0");
}
calculadora::calculadora()
{
CtrlLayout(*this, "Window title");
btnmais.WhenPush = THISBACK(apertamais);
btnmenos.WhenPush = THISBACK(apertamenos);
btnvezes.WhenPush = THISBACK(apertavezes);
btndivide.WhenPush = THISBACK(apertadivide);
btnclear.WhenPush = THISBACK(apertaclear);
btn1.WhenPush = THISBACK(apertabtn1);
btn2.WhenPush = THISBACK(apertabtn2);
btn3.WhenPush = THISBACK(apertabtn3);
btn4.WhenPush = THISBACK(apertabtn4);
btn5.WhenPush = THISBACK(apertabtn5);
btn6.WhenPush = THISBACK(apertabtn6);
btn7.WhenPush = THISBACK(apertabtn7);
btn8.WhenPush = THISBACK(apertabtn8);
btn9.WhenPush = THISBACK(apertabtn9);
btn0.WhenPush = THISBACK(apertabtn0);
btnigual.WhenPush = THISBACK(apertaigual);
}
GUI_APP_MAIN
{
calculadora().Run();
}
Thursday, April 23, 2009
Projeto Agenda I
Nesta semana iremos escrever um programa C mínimo para uma agenda simples. O arquivo contendo o banco de dados está no skydrive e se chama agenda.db (faça o upload). Salve esse arquivo no mesmo local onde o LCCWIN32 salva os executáveis do seu programa, isto é, o EXECUTÁVEL e o ARQUIVO agenda.db precisam estar na mesma pasta.
Nossa agenda será capaz de guardar nomes, telefones e emails, salvos para consulta posterior, com direito a função de "procura". O programa irá se desenvolver com a minha disponibilidade de tempo.
O código abaixo apenas inicializa o Banco de Dados e faz uma consulta rápida, está longe do nosso objetivo final! Acompanhem as cenas dos próximos capítulos!
Nossa agenda será capaz de guardar nomes, telefones e emails, salvos para consulta posterior, com direito a função de "procura". O programa irá se desenvolver com a minha disponibilidade de tempo.
O código abaixo apenas inicializa o Banco de Dados e faz uma consulta rápida, está longe do nosso objetivo final! Acompanhem as cenas dos próximos capítulos!
#include <stdio.h>
#include <sqlite3.h>
// Função de Callback, mostra os resultados da query
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=0; i<argc; i++)
{
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
//--------------------------------------------------------------------------
int main()
{
sqlite3 *db;
char *Error = 0;
int rc;
rc = sqlite3_open("agenda.db", &db);
//rc recebe o valor da função sqlite3_open, se falhar retorna verdadeiro
//e encerramos o programa
if(rc){
fprintf(stderr, "Erro ao abrir banco de dados: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
//Vamos pegar os valores salvos na tabela de contatos
rc = sqlite3_exec(db, "select * from contatos", callback, 0, &Error);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL erro: %s\n", Error);
sqlite3_free(Error);
}
//fechamos o banco de dados e saímos
sqlite3_close(db);
return 0;
}
Friday, April 10, 2009
O mundo sem o For...
Ainda resolvendo a questão das dúvidas de sala de aula.
Imagine que você precise mostrar os números de 1 à 10, há uma maneira trivial de realizar isso:
Resolve o problema, certo? Mas é uma maneira horrorosa!!! E se precisássemos de 100, ou mesmo 1000 números? Você consegue imaginar isso sem o FOR? Eu não!!!
Não existe complexidade sem razão, lembrem-se sempre disso!
Imagine que você precise mostrar os números de 1 à 10, há uma maneira trivial de realizar isso:
#include <stdio.h>
int main()
{
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
printf("6\n");
printf("7\n");
printf("8\n");
printf("9\n");
printf("10\n");
return 0;
}
Resolve o problema, certo? Mas é uma maneira horrorosa!!! E se precisássemos de 100, ou mesmo 1000 números? Você consegue imaginar isso sem o FOR? Eu não!!!
#include <stdio.h>
int main()
{
int i;
for(i = 0; i < 1000; i++)
printf("%d\n", i);
return 0;
}
Não existe complexidade sem razão, lembrem-se sempre disso!
Thursday, April 09, 2009
Dúvidas de sala de aula
Pessoal, com as dúvidas de sala de aula eu notei que falta alguns entendimentos basilares, vou comentá-los em sequência:
1) A biblioteca padrão do C são funções que vêm embutidas junto com a linguagem/compilador, vocês sabem que se int x e x = 3+2; logo x assumirá o valor 5. Essa naturalidade já não é tão evidente na função printf, vocês conseguem imaginar as complexidades da implementação de uma rotina que escreve caracteres no monitor? É muito difícil! A biblioteca padrão existe para isso, para encapsular algumas dessas coisas muito difíceis... como por exemplo, o seno(x). Não é óbvio escrever funções trigonométricas, pois decoramos tabelas com os principais valores (30 graus, 45 graus, etc). Reflita sobre isso e entenderá por que existe a biblioteca, mais que isso, por que ela é essencial!
2) As funções de loop com while e for são muito necessárias, no próximo post eu vou dar exemplos práticos.
3) Quase todos os alunos são incapazes de começar um programa do zero, isso é comum, só posso dizer para ter perseverança. São necessários anos de prática para atingir a maturidade!
1) A biblioteca padrão do C são funções que vêm embutidas junto com a linguagem/compilador, vocês sabem que se int x e x = 3+2; logo x assumirá o valor 5. Essa naturalidade já não é tão evidente na função printf, vocês conseguem imaginar as complexidades da implementação de uma rotina que escreve caracteres no monitor? É muito difícil! A biblioteca padrão existe para isso, para encapsular algumas dessas coisas muito difíceis... como por exemplo, o seno(x). Não é óbvio escrever funções trigonométricas, pois decoramos tabelas com os principais valores (30 graus, 45 graus, etc). Reflita sobre isso e entenderá por que existe a biblioteca, mais que isso, por que ela é essencial!
2) As funções de loop com while e for são muito necessárias, no próximo post eu vou dar exemplos práticos.
3) Quase todos os alunos são incapazes de começar um programa do zero, isso é comum, só posso dizer para ter perseverança. São necessários anos de prática para atingir a maturidade!
Subscribe to:
Posts (Atom)