W jaki sposób dodać podświetlanie kodu w wordpress ?
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
Program w C++ do symulacji spłat kredytu, harmonogram spłat kredytu
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
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
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 :)
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.

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..
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…
Parser SQL w C – Flex, Bison czyli YACC problem
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 skryptyyparse();
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++
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.
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
Jak w kodzie dodać kontrolki w .NET 3.5 (WPF) ?
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 ?
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.



