W jaki sposób dodać podświetlanie kodu w wordpress ?

Marzec 27, 2011 Dodaj komentarz

Wielu z użytkowników wordpress.com zastanawiało się, w jaki sposób dodawać i prezentować swoje kawałki kodu programistycznego. Odpowiedź znajduje się w dziale pomocy, w artykule pod poniższym adresem.

http://en.support.wordpress.com/code/posting-source-code/

Wyjaśnia on, iż wystarczy w edytorze wizualnym dodać następujące tagi pomiędzy nasz kod:

 

 

 

 

Atrybut „css” możemy podmienić na użyty przez nas język,

obsługiwane są następujące języki:

  • actionscript3
  • bash
  • coldfusion
  • cpp
  • csharp
  • css
  • delphi
  • erlang
  • fsharp
  • diff
  • groovy
  • javascript
  • java
  • javafx
  • matlab (keywords only)
  • objc
  • perl
  • php
  • text
  • powershell
  • python
  • r
  • ruby
  • scala
  • sql
  • vb
  • xml
Kategorie:Bez kategorii

Program w C++ do symulacji spłat kredytu, harmonogram spłat kredytu

Marzec 27, 2011 Dodaj komentarz

Jako że zadano mi napisanie takie programiku jako cześć interview, postanowiłem podzielić się swoją twórczością.

Raty kredytu dzielą się na dwie kategorie, raty malejące i raty stałe.

Program kompiluje się bez problemu w Dev-CPP, natomiast aby uzyskać polskie znaki po uruchomieniu, korzystamy z komendy „chcp 1250″


#include <iostream>
#include <string>
#include <iomanip>
#include <math.h>

using namespace std;

char KWOTA_KREDYTU[18], ILOSC_RAT[3], STOPA_PROCENTOWA[22], TYP_SPLATY[2];
int I_KWOTA_KREDYTU, I_ILOSC_RAT, I_STOPA_PROCENTOWA, I_TYP_SPLATY;

/**
* DODAWANIE
*/
double add(double n1, double n2){
return n1 + n2;
}
/**
* ODEJMOWANIE
*/
double sub(double n1, double n2){
return n1 - n2;
}
/**
* MNOŻENIE
*/
double mul(double n1, double n2){
return n1 * n2;
}
/**
* DZIELENIE
*/
double div(double n1, double n2){
if(n2 == 0) cout << "Ostrzeżenie: dzielenie przez zero. " << endl;
return n1 / n2;
}
double calc(double(*f)(double,double), double n1, double n2, char op){
cout << n1 << " " << op << " " << n2 << " = " << f(n1,n2);
}

void __s_kredyt(){
int a = 0;
char* tab_input = new char[2];

char temp;
do{
temp = cin.get();
if(!isprint(temp)) temp = '';
*(tab_input + a++) = temp;
*(tab_input + a) = '';
char* tab_input_temp = new char[a + 1];
strcpy(tab_input_temp,tab_input);
delete [] tab_input;
tab_input = new char[a + 2];
strcpy(tab_input,tab_input_temp);
delete [] tab_input_temp;
}while(temp != '');

cout << "\nWPROWADZONO: " << tab_input
<< " , czy o taką kwotę Ci chodziło (T/N)?\n";
}

char c;

void __ns_kredyt(){
cin >> I_KWOTA_KREDYTU;
cout << "\nWPROWADZONO: " << I_KWOTA_KREDYTU
<< " , czy o taką kwotę Ci chodziło (T/N)?\n\n";
cin >> c;
c = toupper(c);
while (c != 'T'){
cout << "\nWprowadź ponownie kwotę:\n\n";
cin >> I_KWOTA_KREDYTU;
cout << "\nWPROWADZONO: " << I_KWOTA_KREDYTU
<< " , czy o taką kwotę Ci chodziło (T/N)?\n\n";
cin >> c;
}
}

void __ns_raty(){
cin >> I_ILOSC_RAT;
cout << "\nWPROWADZONO: " << I_ILOSC_RAT
<< " , czy o taką liczbę rat Ci chodziło (T/N)?\n\n";
cin >> c;
c = toupper(c);
while (c != 'T'){
cout << "\nWprowadź ponownie liczbę rat:\n\n";
cin >> I_KWOTA_KREDYTU;
cout << "\nWPROWADZONO: " << I_KWOTA_KREDYTU
<< " , czy o taką liczbę rat Ci chodziło (T/N)?\n\n";
cin >> c;
}
}

void __ns_stopa(){
cin >> I_STOPA_PROCENTOWA;
cout << "\nWPROWADZONO: " << I_STOPA_PROCENTOWA << "% "
<< " , czy o taką stopę Ci chodziło (T/N)?\n\n";
cin >> c;
c = toupper(c);
while (c != 'T'){
cout << "\nWprowadź ponownie stopę procentową:\n\n";
cin >> I_STOPA_PROCENTOWA;
cout << "\nWPROWADZONO: " << I_STOPA_PROCENTOWA << "% "
<< " , czy o taką liczbę procentową Ci chodziło (T/N)?\n\n";
cin >> c;
}
}

void __ns_typ(){
string SI_TYP_SPLATY;
cin >> SI_TYP_SPLATY;
I_TYP_SPLATY = -1;
transform(SI_TYP_SPLATY.begin(), SI_TYP_SPLATY.end(),
SI_TYP_SPLATY.begin(), ::toupper);
if ( SI_TYP_SPLATY.compare("RS") == 0 ) I_TYP_SPLATY = 1;
if ( SI_TYP_SPLATY.compare("RM") == 0 ) I_TYP_SPLATY = 0;
cout << "\nWPROWADZONO: " << SI_TYP_SPLATY
<< " , czy na pewno nie chcesz wybrać innego sposobu spłaty (T/N)?\n\n";
cin >> c;
c = toupper(c);
while (c != 'T'){
cout << "\nWprowadź ponownie sposób spłaty kredytu:\n\n";
cin >> SI_TYP_SPLATY;
I_TYP_SPLATY = -1;
transform(SI_TYP_SPLATY.begin(), SI_TYP_SPLATY.end(),
SI_TYP_SPLATY.begin(), ::toupper);
if ( SI_TYP_SPLATY.compare("RS") == 0 ) I_TYP_SPLATY = 1;
if ( SI_TYP_SPLATY.compare("RM") == 0 ) I_TYP_SPLATY = 0;
cout << "\nWPROWADZONO: " << SI_TYP_SPLATY
<< " , czy o taki sposób Ci chodziło (T/N)?\n\n";
cin >> c;
}
}

void ___print_header(){
// print table header
cout << setw(10) << "Nr raty" << setw(20)
<< "Wysokość spłaty" << setw(15)
<< "Odsetki"
<< setw(20) << "Część kapitałowa" << setw(20)
<< "Kapitał do spłaty" << endl << endl;
}

void ___print_data(){

}

char* splaty, odsetki, raty, saldo;

double liczrate(double kredyt, double oprocentowanie , int liczba_rat){
double q1 = oprocentowanie / 12;
double q2 = 1;

for (int i = 0 ; i < liczba_rat ; i++){
q2 = q2 * (1 + q1);
}
return kredyt * q2 * q1 /(q2 - 1);
}

/**
*
*/
void calculate(int a /*KWOTA KREDYTU*/, int b /*RATY W MIESIACACH*/, int c /*STOPA PROCENTOWA*/){
int nr_raty = 0;
double s = c * 0.01;
double saldo = a;

double ll = liczrate(a, s, b);
double kapital = a;

cout.precision(2);

for(int i = 0 ; i < b ; i++){
double odsetki = kapital * s / 12;
double czesc = ll - odsetki;
kapital = kapital - ll + odsetki;
//cout << ++nr_raty << " " << d1 << " " << d3 << " " << d2 << " " << saldo << endl;
cout << setw(10) << fixed << ++nr_raty ; cout << setw(20) << fixed << ll ; cout << setw(15) << fixed << odsetki ;
cout << setw(20) << fixed << czesc ; cout << setw(20) << fixed << kapital << endl;
}
}

/**
*
*/
void calculate_decreasing(int a /*KWOTA KREDYTU*/, int b /*RATY W MIESIACACH*/, int c /*STOPA PROCENTOWA*/){
int nr_raty = 0;

double s = c * 0.01;
double saldo = a;

cout.precision(2);

for(int i = 0 ; i < b ; i++){
//miesieczna spłata
double d1 = (( ( (saldo * s) * ( b / 12 ) ) + a) / b);
//rata kapitalowa
double d2 = ( a / b);
//odestki
double d3 = ( d1 - d2 );
//saldo
saldo -= d2;

//cout << ++nr_raty << " " << d1 << " " << d3 << " " << d2 << " " << saldo << endl;
cout << setw(10) << fixed << ++nr_raty ; cout << setw(20) << fixed << d1 ; cout << setw(15) << fixed << d3 ;
cout << setw(20) << fixed << d2 ; cout << setw(20) << fixed << saldo << endl;
}
}

/******************************************************************************/
int main(){

cout << "Kwota kredytu\n";
cout << " * Środki pieniężne oddane do dyspozycji Kredytobiorcy przez " <<
"bank na warunkach wyszczególnionych w umowie kredytowej.\n";
cout << "Proszę podaj kwotę kredytu, o jaką się ubiegasz [200000]:\n\n";
__ns_kredyt();

cout << "\nIlość rat miesięcznych\nNa ile rat rozłożyć kredyt:\n";
cout << " * Okres na jaki została zawarta umowa kredytowa pomiędzy Kredytobiorcą a bankiem\n";
cout << "Proszę podaj ilość rat w miesiącach [12]:\n\n";
__ns_raty();

cout << "\nStopa procentowa:\n\nIle wynosi stopa procentowa?:\n";
cout << " * Oprocentowanie podawane przez bank, jest to stopa odsetek od" <<
" kredytu przy spłacie jednorazowej na koniec okresu rocznego.\n";
cout << "Proszę podaj stopę procentową [20]%:\n\n";
__ns_stopa();

cout << "\nTyp spłaty (rata stała/rata malejąca):\n\nW jaki sposób będzie spłacany kredyt?:\n\n";
cout << " * Każda kolejna rata kredytu jest mniejsza, obciążenie na początku spłaty " <<
"kredytu jest najwyższe. Odsetki naliczane są od równomiernie spłacanego kapitału" <<
" dlatego w miarę upływu czasu są coraz mniejsze\n";
cout << "Proszę podaj typ spłaty [RS/RM]:\n\n";
__ns_typ();

cout << "Harmonogram spłaty: " << endl << endl;
___print_header();

if (I_TYP_SPLATY == 1) calculate(I_KWOTA_KREDYTU, I_ILOSC_RAT, I_STOPA_PROCENTOWA); else
if (I_TYP_SPLATY == 0) calculate_decreasing(I_KWOTA_KREDYTU, I_ILOSC_RAT, I_STOPA_PROCENTOWA); else
cout << "błąd...";

___print_data();

system("pause");

}

 

Program pyta użytkownika o parametry kredytu, następnie sam tworzy (rysuje) tabelkę ze scenariuszem spłat.

W programie znajdują się niewykorzystane zmienne i inne dziwolągi, także zostawiam tobie – czytelniku – kwestię udoskonaleń.

C# webaplikacja ASP.NET, Przesyłanie plików na serwer – przykład i tutorial

Czerwiec 12, 2010 Dodaj komentarz

1. W projekcie tworzysz nowy folder, przykładowo „resources”, tam będą trafiać pliki przesyłane przez aplikację kliencką.

2. Natomiast na stronie aspx umieszczasz następujący kod (opakowany w <form>). Jest to bardzo ważne, aby kod znajdował się w formie z akcją „post” oraz ustawionym atrybutem enctype

<form id=”adminForm” runat=”server” method=”post” name=”adminForm” enctype=”multipart/form-data” >
<input type=file id=File1 name=File1 runat=”server” /><font> (Maksymalny rozmiar pliku: 4 MB)</font>
<br>
<asp:button type=”submit” id=”Submit1″ Text=”Wyślij plik” runat=”server” ToolTip=”Prześlij wskazany plik jako dodatek do szczegółów wydarzenia” onclick=”Submit1_ServerClick” />

3. Następnie do przycisku Submit1 dołączasz następującą akcję w odpowiadającym pliku .cs

protected void Submit1_ServerClick(object sender, System.EventArgs e)
{
TextBox id_tb = (FormView1.FindControl(„idTextBox”) as TextBox);
String id_due_path = id_tb.Text;
System.IO.Directory.CreateDirectory(Server.MapPath(„resources”) + „\\” + id_due_path + „\\”);
if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
{
string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
string SaveLocation = Server.MapPath(„resources”) + „\\” + id_due_path + „\\” + fn;
try
{
File1.PostedFile.SaveAs(SaveLocation);
Console.WriteLine(„The file has been uploaded.”);
Response.Write(„The file has been uploaded.”);
}
catch (Exception ex)
{
Response.Write(„Error: ” + ex.Message);
Console.WriteLine(„Error: ” + ex.Message);
//Note: Exception.Message returns a detailed message that describes the current exception.
//For security reasons, we do not recommend that you return Exception.Message to end users in
//production environments. It would be better to put a generic error message.
}
}
else
{
Response.Write(„Please select a file to upload.”);
Console.WriteLine(„Please select a file to upload.”);
}
}

4. Violla, można przesyłać pliki na serwer (domyślny limit to 4MB)

Więcej szczegółów tutaj: (świetny artykuł)

Nachalność i hamstwo telelofonistki sieci Play GSM

Marzec 30, 2010 Dodaj komentarz

Zużyłem 90% transferu w swoim Play Online (dostęp do internetu za pomocą bezprzewodowego modemu gsm, czyli internet w dowolnym miejscu w Polsce), następnego dnia zadzwoniła do mnie z numeru zastrzeżonego jakaś kobieta, pytając się mnie o moją godność, następnie przeszła od razu do rzeczy. Na nic moje nieustanne odmowy po wyjściu z auli na pytanie o przedłużenie umowy, ta kobieta koniecznie chciała sprzedać produkt, podałem moje dane adresowe w celu weryfikacji (a pytałem się tylko kiedy kończy się abonament), następnie uparczywie wmawiała mi, iż przyda mi się przedłużenie umowy i większy transfer. Ale czy pytania w stylu:

- Na pewno Pan nie chce? Przecież kończy się Panu abonament. Mamy promocję.. [taką i owaką].. Dlaczego nie chce Pan internetu Play ? Co Pan będzie robił bez niego ? Zużył Pan już..

są na miejscu ?

I co najlepsze, w punkcie sprzedaży Play rzekomo nie można załatwić tego samego co oferuje „telefonistka”..

Język Ruby – lekkie i krótkie wprowadzenie :)

Marzec 24, 2009 Dodaj komentarz

Inspiracja rozdziałem 29-tym, Joel Spolsky, „Sztuka pisania oprogramowania”

W zamieszłych czasach, których wielu z nas zapewne nie zaznała (aczkolwiek nie tak bardzo odległych, nie mówię tutaj o epoce gdy składano komputer Odra z części przywiezionych wagonem, około 10-15 lat później), istniał taki komputer Apple II (8-bitowy komputer domowy z lat 70-tych), który to dostarczany był z podręcznikiem napisanym w iście artystycznym stylu.

Nie chciałbym się rozpisywać o historii informatyzacji, w tym celu można sprawdzić na Wiki takie hasła, jak: Odra, Apple, Commodore (na którym zresztą znajomy rodzinny podobno pisał pracę dyplomową), a pragnąłem pokazać, w jaki sposób zmienił się styl pisania wszelkiej maści książek użytkownika, podręczników i tutoriali.

Chwytano się iście Monty-Pythowskiego humoru, historyjek komiksowych, anegdot, przede wszystkim aby zaciekawić użytkownika i łagodnie wprowadzić go w temat z danej dziedziny, który mógł być następnie poszerzony już w różnej innej technicznej literaturze.

Dzisiaj? Niektórzy powiedzieliby, że dominują książki o możliwie grubym grzbiecie i koncentracji faktów w jednym. Niech spojrzę na swoją półkę: „Java 2 Podstawy”, „Thinking In Java”, „SCJP..” (ta jeszcze zachowała odpowiednią dozę humoru), „EJB 3.0”, „PHP Programming”.. każdą z tych pozycji można z sukcesem nastawić bark w przychodni (tak jak to kiedyś ujrzałem w filmie, ale tam użyto Tołstoja „Wojna i pokój”).

Ale w temacie wyraźnie jest napisane że miało być o Rubym.

Ruby nie koniecznie jest językiem komputerowym, jest po prostu językiem. Językiem programowania zrozumiałym również dla szarych ludzi (aczkolwiek nie od razu). Spójrzcie na składnię:

5.times { print „Odelay!” }
co można przeczytać jako:
Five times print “Odelay”

exit unless „restaurants”.include? „aura”
czyli:
Exit unless the word restaurant includes the word aura

[toast, cheese, wine].each { |food| eat food }
to chyba trudniejsze:
With toast, cheese, and wine, take each type of food and eat that food.

thefoxes-3

Zaciekawiłem?
Do sprawdzenia:
http://whytheluckystiff.net/

komiksowy humor w służbie edukacji

http://poignantguide.net/ruby/

w jaki sposób można w przyjemny sposób przedstawić język z 1995 roku stworzony przez Yukihiro Matsumoto, czyli RUBY

Niech żyją informatycy..

Styczeń 29, 2009 Dodaj komentarz

Nałogowcowi komputerowemu spadła na ulicy na głowe cegła.
- Tetris – pomyslał nałogowiec komputerowy.
- Nałogowiec – pomyslała cegła.
- Level 2 – pomyslał Bóg.

Impreza . Wódka leje się szerokopasmowym strumieniem. Dwóch adminów
pije bruderszafta:
- To co? Mówmy sobie po IP!

Prawdziwy student informatyki ma więcej jedzenia na klawiaturze niż
w lodówce.

Przychodzi Informatyk do lekarza:
- Panie Doktorze wątroba mi nawala…
- Dziwne, u mnie działa…

Komputerowiec podrywa dziewczynę:
- Chcesz herbaty?
- Nie.
- Kawy?
- Nie!
- Hm, może wódki?
- NIE!!!
- Dziwne, standardowe sterowniki nie pasują…

Ludzie dzielą się na tych, którzy robią backupy i na tych, którzy
będą robili backupy.

Napis na grobie informatyka: „kowalski.zip”

- Ostatnie stadium znudzenia w pracy?
- Zaczynasz czytać spam.

Jaka jest różnica między informatykiem 1 i 5 roku?
- informatyk 1 roku myśli, że 1 kB to 1000 B.
- informatyk 5 roku myśli, że kilometr to 1024 metry.

Na pracowniczy bal maskowy przyszli:
- sekretarka w masce kota,
- księgowa w masce królika,
- dyrektor w masce lwa,
- informatyk w masce 255.255.255.0.

- Co to jest patch?
Program usuwający drobne błędy w programie i dodający nowe.
- Co to jest upgrade?
Program usuwający poważniejsze błędy i dodający nowe, równie uciążliwe.
- Co to jest nowa wersja programu?
Jest to zmodyfikowany program zawierający błędy, których nie można
było dodać przez patch lub upgrade.

- Dlaczego w Microsofcie nigdy nie napiszą wirusa?
- Bo zajmowałby 3 dyskietki.

Honorowy programista wiesza się razem ze swoim programem…

Jak guru unixowy uprawia seks?
- unzip; strip; touch; finger; mount; fsck; more; yes; umount;
sleep;

Co jest najszybsze w 286?
- Wiatraczek.

Przychodzi administrator rano do pracy, siada do komputera, aby
zobaczyć co się działo w nocy i śpiewa:
- Chcę oglądać twoje logi, logi, logi, logi.

Dzwoni klient do serwisu, odbiera obsługa:
- Używam Windows…
- Tak.
- No i komputer nie działa poprawnie.
- To już pan powiedział…

Wsiada informatyk do taksówki. Taksiarz pyta:
- Dokąd jedziemy?
- 192.168.4.1.

Oprogramowanie jest jak katedra.
- Budujesz, budujesz, budujesz, budujesz, a potem… już tylko się
modlisz!

Na egzaminie na uczelnie o profilu informatycznym pytaja się nowego
kandydata jakie zna komendy jakiegoś języka programowania.
- Góra, dół, lewo, prawo i fajer…

Siedzi kilku informatyków na imprezie i cały czas nawijają o
komputerach. W końcu jeden mówi:
- Słuchajcie, pogadajmy o czyms innym np. o dupach…
Nastąpiła chwila ciszy i konsternacja… jeden się odzywa:
- Moja karta graficzna jest do dupy…

Kategorie:1

Parser SQL w C – Flex, Bison czyli YACC problem

Styczeń 29, 2009 Dodaj komentarz

Ktoś by pewnie spytał się po co generować własny parser plików zapytań SQL, skoro są one walidowane w każdym silniku bazodanowym. Jedne z możliwych odpowiedzi to: hobbistycznie, lub też dla celów akademickich, czyli aby pokazać zasadę działania uniksowych parserów.

Bison (generator utworzony w ramach projektu GNU) zazwyczaj jest używany razem z programem flex (program podobny do lex, też wolny). Te dwa narzędzia pozwolą również na napisanie pretty-printera, a w zasadzie nieograniczona ilość na kod C w instrukcji main() pozwala pisać całkiem przyzwoite programy.

Pliki z gramatyką, które będziemy tworzyć, są to pliki tekstowe składające się z trzech części oddzielonych od siebie podwójnym znakiem procentu („%%”) w kolejności: deklaracje, reguły gramatyczne, kod w języku C. Plik z rozszerzeniem .y jest to program dla bisona, natomiast plik z rozszerzeniem .l jest to program flex’a.

Pisanie parserów w C++ jest dużo trudniejsze (z wykorzystaniem g++ a nawet flex++), tutaj można znaleźć przykładowy tutorial:
http://tldp.org/HOWTO/Lex-YACC-HOWTO-5.html

sql.l:

%{
#include „sql.tab.h” //<>
#include <stdlib.h>
#include <string.h>

/*prototypy funkcji*/
void lexError(const char *);
static int getToken(const char *);

%}

%option yylineno

single_line_comment        „//”.*|”///”.*
white_space                [ \t\n\r]

%%

„select” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return SELECT;}
„from” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return FROM;}
„where” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return WHERE;}
„order” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return ORDER;}
„group” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return GROUP;}
„by” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return BY;}
„like” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return LIKE;}
„as” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return AS;}
„insert” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return INSERT;}
„update” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return UPDATE;}
„delete” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return DELETE;}
„set” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return SET;}
„into” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return INTO;}
„values” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return VALUES;}
„join” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return JOIN;}
„on” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return ON;}

„primary” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return PRIMARY;}
„foreign” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return FOREIGN;}
„references” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return REFERENCES;}
„key” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return KEY;}
„grant” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return GRANT;}
„create” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return CREATE;}
„alter” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return ALTER;}
„to” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return TO;}
„with grant option” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return WITHGRANT;}

„table” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return TABLE;}
„database” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return DATABASE;}

„–” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return SC;}

„(” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return START;}
„)” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return END;}

=|==|=!|<=|>=|<|> {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return ZNAK;}

„;” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return SR;}
„*” {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return AST;}

[0-9]+ {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext));  return LICZBA;}
[0-9A-Za-z"',]+ {yylval=(char*) malloc (strlen(yytext)); strncpy(yylval, yytext, strlen(yytext)); return TEXT;}

[:space:]+    ;
[ \n|\t]+     ;
„/*”(.|\n)*”*/”  ;

%%

/*metoda zwraca opis bledu leksykalnego*/
void lexError(const char *msg)
{
fprintf(stderr,”LINE:%d:lexical error (%s) [TEXT: %s]\n”, yylineno, msg, yytext);
}

sql.y:

%{
#include <stdio.h>
#include <stdlib.h>
#include „lex.yy.c”

typedef char* string;

int test = 1;
char* beg;

int yyerror(char *s){
printf(„Linia nr %d\nBlad %s\n”, yylineno, s);
fprintf(yyout, „Linia nr %d\nBlad %s\n”, yylineno, s);
test = 0;
};

int yylex(void);

#define YYERROR_VERBOSE
#define FALSE 0
#define TRUE 1

/*Numer linii parsera.*/
extern int yylineno;

/*Plik wejscia i wyjscia.*/
extern FILE *yyin, *yyout;

struct Intern{
string pl;
string en;
};

%}

%token SELECT
%token FROM
%token WHERE
%token ORDER
%token GROUP
%token BY
%token LIKE
%token AS
%token INSERT
%token UPDATE
%token DELETE
%token SET
%token INTO
%token VALUES
%token JOIN
%token ON

%token PRIMARY
%token FOREIGN
%token KEY
%token GRANT
%token CREATE
%token DROP
%token ALTER
%token REFERENCES
%token TO
%token WITHGRANT

%token DATABASE
%token TABLE

%token START
%token END
%token SR
%token AST
%token ZNAK
%token LICZBA
%token TEXT

%token SC

/*poczatek programu*/

%%

/* SQL 1992 */

statement_sql92: statement_sql92 SELECT TEXT FROM TEXT SR {
printf(„select %s from %s;\n”, $3, $5);
fprintf(yyout, „select %s from %s;\n”, $3, $5);
}
| statement_sql92 select_ast_st
| statement_sql92 select_where_st
| statement_sql92 delete_st
| statement_sql92 insert_st
| statement_sql92 update_st
| statement_sql92 statement_ddl
| statement_sql92 grant_st
| statement_sql92 other_statement {printf(„\n”);}
| ‘\n’
|
;

select_ast_st: SELECT AST FROM TEXT
{
printf(„select * from %s;\n”, $4);
fprintf(yyout, „select * from %s;\n”, $4);
}
| select_ast_st WHERE TEXT ZNAK TEXT
| select_ast_st ORDER BY TEXT
| select_ast_st SR
;

select_where_st: SELECT TEXT FROM TEXT WHERE TEXT ZNAK TEXT {
printf(„select %s from %s where %s %s %s”, $2, $4, $6, $7, $8);
fprintf(yyout, „select %s from %s where %s %s %s”, $2, $4, $6, $7, $8);
}
| select_where_st ORDER BY TEXT {
printf(” order by %s”, $4);
fprintf(yyout, ” order by %s”, $4);
}
| select_where_st SR {
printf(„;\n”);
fprintf(yyout, „;\n”);
}
;

delete_st: DELETE FROM TEXT SR {
printf(„delete from %s;\n”, $3);
fprintf(yyout, „delete from %s;\n”, $3);
}
| DELETE FROM TEXT WHERE TEXT ZNAK TEXT SR {
printf(„delete from %s where %s %s %s;\n”, $3, $5, $6, $7);
fprintf(yyout, „delete from %s where %s %s %s;\n”, $3, $5, $6, $7);
}
;

insert_st: INSERT INTO TEXT START TEXT END VALUES START TEXT END SR {
printf(„insert into %s (%s) values (%s);\n”, $3, $5, $9);
fprintf(yyout, „insert into %s (%s) values (%s);\n”, $3, $5, $9);
}
;

update_st: UPDATE TEXT SET TEXT ZNAK TEXT WHERE TEXT ZNAK TEXT SR {
printf(„update %s set %s %s %s where %s %s %s;\n”, $2, $4, $5, $6, $8, $9, $10);
fprintf(yyout, „update %s set %s %s %s where %s %s %s;\n”, $2, $4, $5, $6, $8, $9, $10);
}
;

/* DATABASE DESIGN LANGUAGE – DLL */

statement_ddl: drop_st
| create_st
| alter_st
;

drop_st: DROP TABLE TEXT SR {
printf(„drop table %s;\n”, $3);
fprintf(yyout, „drop table %s;\n”, $3);
}
;

create_st: CREATE create_table
| CREATE create_database
;

create_table: TABLE TEXT START TEXT {
printf(„create table %s(%s”, $2, $4);
fprintf(yyout, „create table %s(%s”, $2, $4);
}
| create_table TEXT {
printf(” %s”, $2);
fprintf(yyout, ” %s”, $2);
}
| create_table END SR {
printf(„);\n”);
fprintf(yyout, „);\n”);
}
;

create_database: DATABASE TEXT SR {
printf(„create database %s;\n”, $2);
fprintf(yyout, „create database %s;\n”, $2);
}
;

alter_st: ALTER TEXT START TEXT END SR {
printf(„alter %s (%s);\n”, $2, $3);
fprintf(yyout, „alter %s (%s);\n”, $2, $3);
}
;

/* STATEMENTS DATA CONTROL LANGUAGE */

grant_st: GRANT TEXT ON TEXT TO TEXT WITHGRANT SR {
printf(„grant %s on %s to %s with grant option;\n”, $2, $4, $6);
//fprintf(yyout, ” on %s to %s with grant option;”, $3, $5);
}
;

/* OTHER STATEMENTS LIKE SINGLE LINE COMMENTS AND BLOCK COMMENTS */

other_statement: SC {
printf(„– „);
fprintf(yyout, „– „);
}
| other_statement TEXT {
printf(” %s”, $2);
fprintf(yyout, ” %s”, $2);
}
;

%%

main(int argc, char *argv[]) {

int revokeL = TRUE;

struct Intern lang[] = { {„1) Wybierz standard jezyka zapytan\n”, „1) Choose SQL standard\n”},
{„2) Wybierz jezyk\n”, „2) Choose language\n”},
{„3) Waliduj skrypt SQL\n”, „3) Validate SQL file\n”},
{„4) Formatuj skrypt SQL\n”, „4) Pretty-print SQL script\n”},
{„5) Wyjscie\n”, „5) Exit from program\n” }
};

FILE *fp = NULL;
fpos_t dlugosc;
char stringInput;
if(argc != 3) {
printf(„Uzycie: %s <nazwa pliku wejscia> <nazwa pliku wyjscia>\n”, argv[0]);
do{
printf(„Czy chcesz przejsc do trybu interaktywnego (menu programu) ? [T/N]„);
stringInput = getchar();
__fpurge(stdin);
}while(stringInput != ‘T’ && stringInput != ‘N’);
if(stringInput == ‘N’)
return 1;
}
int choice = 0;

yyin = stdin;
yyout = stdout;

/* Jezeli zostal zdefiniowany plik wejscia i/lub wyjscia */
if (argc >= 2)
{
/* Otworz plik do czytania */
yyin = fopen(argv[1], „r”);

/* Jezeli nie udalo sie otworzyc pliku */
if(yyin == NULL)
{
fprintf(stderr, „ERROR: Input file not exists.\n”);
return 1;
}

/* Jezeli zostal zdefiniowany plik wyjscia */
if(argc >= 3)
{
/* Otworz plik do zapisu */
yyout = fopen(argv[2], „w”);
}

/* Jezeli nie udalo sie otworzy pliku wyjscia */
if(yyout == NULL)
{
fprintf(stderr, „ERROR: Output file not exists.\n”);

return 1;
}
}

while(choice != 4)
{
printf(„\nSQL miniStudio:\n”);
if(revokeL) printf(lang[0].pl); else printf(lang[0].en);
if(revokeL) printf(lang[1].pl); else printf(lang[1].en);
if(revokeL) printf(lang[2].pl); else printf(lang[2].en);
if(revokeL) printf(lang[3].pl); else printf(lang[3].en);
if(revokeL) printf(lang[4].pl); else printf(lang[4].en);

scanf(„%d”,&choice);

switch(choice)
{
case 1:
{ // wybierz standard
break; }

case 2:
{ // wybierz jezyk
if(revokeL){
revokeL = FALSE;
printf(„\nLanguage changed to ENGLISH!\n”);
} else{
revokeL = TRUE;
printf(„\nZmieniono jezyk na POLSKI!\n”);
}

break; }

case 3:
{ // waliduj skrypt

yyparse();
if(test){
printf(„Test OK!\n”);
fprintf(yyout, „Test OK!\n”);
}

break; }

case 4:
{ // formatuj
break; }

case 5:
{ // wyjscie
exit(0);
break; }

default:
{ break; }
}

}

}

dane wejściowe:

select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select
fasdfagtergddfa49384934
from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select * from tabelka;

select kolumna
from tabela;

select dsfy87dsayfsadf7 from ffsadfadsfasdfasfs;
select kjfds8ay7f8as8f    from ffsadfadsfasdfasfs;
delete from pracownicy;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;

update tabelka set umowa = ‘OK’ where umowa = NULL;

delete from pracownicy where imie = ‘andrzej’;

insert into tabelka(kol1,kol2) values(‘JaN’,'Kowalski’);

select TYTUL from BOOK WHERE   autor = ‘Profesor’   ORDER BY tytul;

select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
delete from zamowienia;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;

– komentarz, ponizej instrukcje ddl czyli tworzenia baz

create database testowa;
create database drugabazka;

create table waznedane (kol1 int, wartosc varchar);

create table fjdskfjkldsfkl (kol2 int, kol4 int, kol3 bool);

grant uprawnienie on employee to piotr with grant option;

wyjście:

select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fasdfagtergddfa49384934 from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select * from tabelka;
select kolumna from tabela;
select dsfy87dsayfsadf7 from ffsadfadsfasdfasfs;
select kjfds8ay7f8as8f from ffsadfadsfasdfasfs;
delete from pracownicy;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
update tabelka set umowa = ‘OK’ where umowa = NULL;
delete from pracownicy where imie = ‘andrzej’;
insert into tabelka (kol1,kol2) values (‘JaN’,'Kowalski’);
select TYTUL from BOOK where autor = ‘Profesor’ order by tytul;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
delete from zamowienia;
select fadsiouuwaruwf from ffsadfadsfasdfasfs;
–  komentarz, ponizej instrukcje ddl czyli tworzenia bazcreate database testowa;
create database drugabazka;
create table waznedane(kol1 int, wartosc varchar);
create table fjdskfjkldsfkl(kol2 int, kol4 int, kol3 bool);
Test OK!

Dzięki programowi w flexie możemy skopiować string dla każdego tokena (zamiast alokować pamięć i używać strcpy wystarczy użyć instrukcji yylval=text; , jednak kopiowanie stringów jest bezpieczniejsze jeżeli mamy zamysł pisania pretty-printera kodu), natomiast w bisonie każda instrukcja jest przetwarzana pod kątem naszej gramatyki i jeżeli w pliku wejściowym wpiszemy nieprawidłową instrukcję (niezgodną z nasza gramatyką), otrzymamy komunikat o błędzie.

Program kompiluje się w następujący sposób:

#!/bin/bash
flex -i sql.l
bison -d sql.y
gcc -o sql sql.tab.c -lfl

Regexp – vc++

Listopad 11, 2008 Dodaj komentarz

Niesamowite możliwości udostępniają wyrażenia regularne. Istnieje narzędzie, które nazywa się Regex Builder w wersji 2.05, za jego pomocą można w wygodny sposób testować wyrażenia na dowolnym łańcuchu znaków, aby te prawidłowe móc potem użyć we własnym programie.

regex builder

I tak na przykład, aby wyciągnąć wartości i wykładniki z wielomianów za pomocą wyrażenia regularnego, możemy użyć następująco:

Regex ^expression = gcnew Regex(„x\\^(\\d+)”);
// wielomian jest dzielony wyrażeniem regularnym na poszczególne wykładniki (n>1)
expression = gcnew Regex(„[+-]*(\\d)*x[^^]|[+-][x]„);
// wielomian jest dzielony wyrażeniem regularnym na poszczególne wykładniki (n==1)
expression = gcnew Regex(„(.?)((\\d)+).”);
// wielomian jest dzielony wyrażeniem regularnym na poszczególne wykładniki (n==0)
MatchCollection ^polyMatch = expression->Matches(text);

5x+54+4784x^5+x+389x^2+5x+4x+3x+89x^3+2x^2+4+8x^8+5345+85x+4+x

Składowe wpisanego wielomianu:
współczynnik: 4784 wykładnik: 5
współczynnik: 389 wykładnik: 2
współczynnik: 89 wykładnik: 3
współczynnik: 2 wykładnik: 2
dodawanie współczynników: (389 + 2) x^2
współczynnik: 8 wykładnik: 8
współczynnik: 5 wykładnik: 1
współczynnik: 1 wykładnik: 1
(5 + 1) x^1
współczynnik: 5 wykładnik: 1
(6 + 5) x^1
współczynnik: 4 wykładnik: 1
(11 + 4) x^1
współczynnik: 3 wykładnik: 1
(15 + 3) x^1
współczynnik: 85 wykładnik: 1
(18 + 85) x^1
współczynnik: 1 wykładnik: 1
(103 + 1) x^1
współczynnik: 54 wykładnik: 0
współczynnik: 4 wykładnik: 0
(54 + 4) x^0
współczynnik: 5345 wykładnik: 0
(58 + 5345) x^0
współczynnik: 4 wykładnik: 0
(5403 + 4) x^0
ostatecznie w2: 8x^8 +4784x^5 +89x^3 +391x^2 +104x^1 +5407

Kategorie:1

Jak w kodzie dodać kontrolki w .NET 3.5 (WPF) ?

Czerwiec 16, 2008 Dodaj komentarz

Jak w kodzie dodać kontrolki w .NET 3.5 (WPF) ?

W pracy dyplomowej mam funkcjonalność do zaimplementowania – mapa stolików w restauracji. Na mapie stolików wykonanej w AutoCAD nakładam przyciski, więc wczytuje z pliku XML położenia moich stolików na mapie bitowej (wysokość i szerokość w pikselach), po czym właśnie w tym miejscu dodaję nową kontrolkę – button, posiadającą handler dla Click.

foreach (Seat seat in seats)

{

System.Windows.Controls.Button button = new Button();

button.Content = seat.Sala + „-” + seat.Stolik;

//ustawienie pozycji przycisku

button.Width = 40;

button.Height = 40;

Thickness thick = new Thickness();

thick.Left = seat.Width + 160;

thick.Top = seat.Height + 20;

thick.Right = 0;

thick.Bottom = 0;

button.Margin = thick;

// ulozenie

button.HorizontalAlignment = HorizontalAlignment.Left;

button.VerticalAlignment = VerticalAlignment.Top;

// przypisanie akcji przyciskowi

button.Click += new RoutedEventHandler(newButt_Click);

// koloryzacja

button.IsEnabled = false;

button.Background = buttonBrushes[2];

// dodanie do layoutu

{… implementacja …}

if (seat.Sala == Image.selected + 1) LayoutRoot.Children.Add(button);

}

}

private void newButt_Click(object sender, RoutedEventArgs e)

{

Button button = (Button)sender;

if (button.Background.Equals(buttonBrushes[3]))

{

// odzaznaczenie rezerwacji w przypadku edycji

}

{…kod implementacji…}

}

Polecam lekturę:

http://arcanecode.wordpress.com/2007/09/07/adding-wpf-controls-progrrammatically/

Milionerzy ?

Kwiecień 13, 2008 Dodaj komentarz

Pewnie każdy z nas od czasu ogląda ten tvn-owski teleturniej, ale nie wie dokładnie, jak wygląda proces eliminacji. Należy wysłać dokładnie 3 smsy na numer 7244, z czego pierwszy jest tylko zgłoszeniowy, dwa następne to twoje odpowiedzi na pytania z bazy danych pytań, a wygląda ona następująco:

1. Blues narodził się w:
B) Ameryce Północnej

2. Czy słodka włóknista masa z nasion oleistych i karmelu to:
C) chałwa

3. Słynny 24-godzinny wyścig samochodowy odbywa się we Francji w
C) Le Mans

4. Czy łacińska maksyma chwytaj dzień to w oryginale
A) carpe diem

5. Marszałkiem pierwszego sejmu III RP zwanego kontraktowym był
C) Kozakiewicz

6. Przechodzenie ciała stałego w stan lotny bez topnienia to
B) sublimacja

Jeżeli jesteś w pierwszej setce osób, które odpowiedziały najszybciej (dlatego najlepiej wysyłać odpowiedzi z komputera poprzez PC-Suite), to w przeciągu miesiąca do trzech miesięcy zadzwoni do ciebie konsultant, po czym wypyta o dane osobowe, zainteresowania i zada od siedmiu do dwudziestu pytań.. i teraz nie ma wariantów abc, tylko musisz znać odpowiedź ;P Finalnie zaproszenie do studia w Krakowie. Ja na razie czekam aż ktoś oddzwoni ;P. Może będę miał równie łatwe pytania jak te, które zostały zadane przy głównej wygranej.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.