Articole de pe: blogs.perl.org — blogging the onion

ARTICOLE: Announcing meta::hack v2I’m wondering how to learn good perlPerl 5 Porters Mailing List Summary: October 2nd-9thDocker based Continuous Integration for perl projectsDancer 2017 Survey: UpdatePerl 6 at the London Perl Workshop – 25 Nov 2017Fancy a Game of (Code) Golf?Machine learning in Perl, Part3: Deep Convolutional Generative Adversarial networkIridium Flare End-Of-LifeCPAN6 Is HereRakudo.js update – passes 64.65% roast testPerl less buggy than Python?Strawberry Perl 5.26.1.1 and 5.24.3.1 releasedCall for Lightning Talks — London Perl WorkshopPerl 5 Porters Mailing List Summary: September 25th – October 1stDancer Survey 2017How to do Bit Operation Correctly in Perl? One Answer is SPVM.Not-Perl: Career Advice for ProgrammersYAML::PP Grant Report August/September 20176lang: The Naming Discussion Update

Libraria STL din Cpp

Standard Template Library(STL) este un set de funcții si algoritmi capabile să manipuleze datele definite de utilizator. Containerul vector din STL poate fi utilizat pentru stocarea datelor de orice tip.

 

Un vector este un array(tablou) care are dimensiunea variabila. Utilizarea clasei vector intr-un program cpp:


#include
#include

using namespace std;

int main()
{
    cout << "Hello world, from Vector test!" << endl;
    //use constructors from vector class
    vector vint;
    vector vdouble(4, 2.34);
    vector vfloat(vdouble.begin(), vdouble.end());
    vector vchar={'a', 'b', 'c','d'};
    //add element to vector vint
    vint.push_back(2);
    vint.push_back(10);
    //iterate in vector and print elements
    cout<<"The content of vector vint: ";
    for(vector::iterator it = vint.begin(); it!=vint.end(); ++it)
        cout<<" "<<*it;
    cout<<"\n";

    cout<<"The content of vector vdouble: ";
    for(vector::iterator it = vdouble.begin(); it!=vdouble.end(); ++it)
        cout<<" "<<*it;
    cout<<"\n";

    cout<<"The content of vector vdouble: ";
    for(vector::iterator it = vfloat.begin(); it!=vfloat.end(); ++it)
        cout<<" "<<*it;
    cout<<"\n";

    cout<<"The content of vector vdouble: ";
    for(vector::iterator it = vchar.begin(); it!=vchar.end(); ++it)
        cout<<" "<<*it;
    cout<<"\n";
    return 0;
}

Proiectul este disponibil pentru descarcare pe: //www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13977&lngWId=3.

Code::Blocks

Code::Blocks 16.01 este un editor de programe(IDE) multiplatformă disponibil pentru Linux, Windows și MacOS. Se pot edita și rula o serie largă de programe dintre care amintim C, C++, Fortran, etc. Este disponibil gratuit și open source.

#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("Hello world!\n");

printf("%d biti sunt utilizati pt stocarea char.\n", sizeof(char));
printf("%d biti sunt utilizati pt stocarea short int.\n", sizeof(short int));

printf("%d biti sunt utilizati pt stocarea int.\n", sizeof(int));
printf("%d biti sunt utilizati pt stocarea int*.\n", sizeof(int*));
printf("%d biti sunt utilizati pt stocarea long int.\n", sizeof(long int));

return 0;
}

KDE

KDE este o interfață grafică care este produsul unor entuziaști și nu al unor echipe plătite. În plus, este complet gratuit și  poate fi instalat pe aproape orice sistem de operare.

 

O interfață grafică are rolul de a fi mijlocitorul dintre inima sistemului de operare și utilizator. Prin intermediul său, un utilizator are posibilitatea să introducă niște comenzi și să primească răspunsurile de la sistemul de operare într-o formă grafică, ușor de înțeles și preferabil cu un aspect plăcut. Cu cât această interfață grafică este mai simplu de utilizat și folosit, cu atât va fi mai căutată de utilizatori.

 

În lumea Linux sunt disponibile mai multe interfețe grafice disponibile, ca de exemplu Xfce, MATE, Cinnamon, LXDE, GNOME și KDE, proiecte libere și open source la care poate contribui oricine dorește acest lucru.

 

Despre acestea v-om scrie in articole viitoare.

Stiva in Cpp

 Stiva (engleza stack) este o structura de date abstractă pentru care atat operația de inserare a unui element in structura, cat si operatia de extragere a unui element se realizeaza la un singur capat, denumit vârful stivei.

 

Stiva este o structura care suportă urmatoarele operatii:

  • push(ob): adauga un obiect in varful stivei.
  • pop(): elimina obiectul din varful stivei.
  • top(): returneaza o referinta catre varful stivei fara a elimina obiectul.
  • size(): returneaza numarul obiectelor din stiva.
  • isEmpty(): returneaza true daca stiva este vida, altfel false.

 

In informatica,  stiva joaca un rol important. Pentru a intelege mecanismele fundamentale ale programarii (de exemplu, functiile si recursivitatea) este necesara cunoasterea notiunii de stiva.

 

#include <iostream>

using namespace std;

struct nod{

int info;

nod *back;

};

nod *varf;

void push(nod* &v, int x){

nod *c;

if(!v){

v = new nod;

v->info = x;

v->back=0;

} else {

c = new nod;

c->back = v;

c->info = x;

v=c;

}

}

void afisare(nod* v){

nod *c;

c=v;

while(c) {

cout<< c->info <<” „;

c=c->back;

}

}

void pop(nod* &v){

nod* c;

if(!v) cout<<„Stiva este vida si nu mai ai ce elimina!!!”;

else {

c=v;

v=v->back;

delete c;

}

}

int main()

{

cout << „Hello world!” << endl;

int n, a;

cout<<„Numarul initial de noduri: „;

cin >> n;

for(int i=1; i<=n; i++){

cout<<„Valoarea de adaugat in stiva: „;

cin >> a;

push(varf, a);

}

cout<< endl;

afisare(varf);

int nre, nra;

cout<<endl<<„cate adaugari?” ;

cin >> nra;

for(int i=1; i<=nra; i++){

cout << „valoarea de adaugat „;

cin >> a;

push(varf, a);

}

cout << endl <<” dupa adaugare” << endl;

n = n+nra;

cout <<„stiva are „<<n<<” elemente”<<endl;

afisare(varf);

cout<<endl<<” cate eliminari?”;

cin >>nre;

for( int i=1; i<=nre; i++){

pop(varf);

}

cout << endl << ” dupa eliminare” <<endl;

afisare(varf);

varf->info = 2*varf->info;

cout<<endl<<” dupa dublarea valorii varfului ” <<endl;

afisare(varf);

return 0;

}

 

O stiva poate fi implementata in diferite moduri. Aceasta se poate imlementa si ca un vector in care retinem elementele stivei. In urmatoarele randuri implementam o stiva cu elemente de tip int.

 

#define DimMax 100

typedef int Stiva{DimMax];

Stiva s;

int vf;

Pentru a crea o stiva vida initializam varful stivei cu -1( varful stivei indica intotdeauna pozitia ultimului element introdus in stiva; elementele sunt memorate in vector incepand cu pozitia 0):

vf = -1;

 

Pentru a insera un element  x in stiva S trebuie sa verificam in primul rand daca exista loc, deci daca stiva nu este plina. Daca stiva este plina, inserarea nu se poate face, astfel vom mari varful stivei si vom plasa la varf noul element.

if(vf == DimMax-1) // stiva este plina

cout<<„Eroare – stiva este plina \n”;

else

S[++vf] = x;

Extragerea unui element din stiva S necesită verificarea existenței elementelor in stiva (deci daca stiva nu este vidă). Daca da, retinem elementul de la varful stivei intr-o variabila (să o notam x), dupa care micșoram cu o unitate varful stivei.

if(vf<0)

cout<<„Eroare – stiva este vida\n”;

else

x=S[vf–];

Stiva permite numai accesarea elementului de la varf. Dacă dorim sa aflam valoarea unui alt element al stivei, ar trebui sa golim stiva (extragem succesiv elementele) până la elementul dorit. Accesarea elementului de la varf presupune determinarea valorii acestuia, valoare pe care noi o vom retine intr-o variabila x.

x = S[vf];

 

Trebuie sa stiți ca Standard Template Library (STL) implementează o structură de tip stivă in clasa Stack, ce se găsește in headerul stack. Aceasta suportă urmatoarele operații:

  • constructor

explicit stack ( const container_type& ctnr = container_type());

 

  • empty
  • size
  • top
  • push
  • emplace
  • pop
  • swap

Acest document este disponibil la: //docs.google.com/document/d/1YBTqbV9j7y0mVwVuBh4f3jREbyhJ6M-nWuiUWEz1_V0/edit

Limbajul de programare C

C este un limbaj de programare standardizat, compilat, de nivel mediu. Este implementat pe majoritatea platformelor de calcul existente azi si este cel mai popular limbaj de programare pentru scrierea de software de sistem. Este apreciat pentru eficienta codului obiect pe care il poate genera si pentru portabilitatea sa.

 

C este un limbaj de programare relativ minimalist ce opereaza in stransa legatura cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare fata de majoritatea celorlalte limbaje de programare ceea ce il face mai usor de invatat.

 

C este prezentat uneori ca “ asamblor portabil”, facandu-se astfel diferentele principale fata de limbajele de asamblare: codul unui program C poate fi compilat si rulat pe aproape orice tip de masina. Limbajul C apartine clasei limbajelor de nivel scazut sau de nivel mediu, aceasta indicand stransa legatura intre interoperabilitate si echipamentul hardware.

 

Urmatorul exemplu de  program a aparut in prima editie a cartii lui Brian Kenigram si Dennis Ritchie(“Limbajul de programare C”) si a devenit un exemplu standard de program introductiv in majoritatea cartilor de programare indiferent de limbajul de programare. Programul afiseaza “Hello, World!” la iesirea standard care este de obicei, un terminal sau monitor. Poate sa fie, totusi, si un fisier sau alt dispozitiv hardware, depinzand de maparea iesirii standard in momentul executiei programului.

#include <stdio.h>

main(){

printf(„Hello, World! \n”);

}

 

Programul prezentat mai sus va fi compilat corect de marea majoritate a compilatoarelor moderne. Totusi, va produce unele mesaje de avertizare daca va fi compilat de un compilator ce respecta standardul ANSI C. Mai mult, codul nu va fi compilat, returnand mesaje de eroare, daca se respecta standardul C99, deoarece variabila de intors, de tip int, nu va putea fi dedusa daca nu a fost specificata in codul sursa. Aceste mesaje pot fi eliminate aducand cateva schimbari minore programului initial:

#include <stdio.h>

int main(void){

printf(„Hello, World! \n”);

return 0;

}

 

GTK+, sau The Gimp Toolkit, este un sistem de dezvoltare a interfetelor grafice. Este unul dintre cele mai populare sisteme pentru X Window System, alaturi de Qt si Motif.

#include <stdlib.h>

#include <gtk/gtk.h>

static void helloWorld (GtkWidget *wid, GtkWidget *win)

{

GtkWidget *dialog = NULL;

dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, „Hello World!”);

gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);

gtk_dialog_run (GTK_DIALOG (dialog));

gtk_widget_destroy (dialog);

}

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

{

GtkWidget *button = NULL;

GtkWidget *win = NULL;

GtkWidget *vbox = NULL;

/* Initialize GTK+ */

g_log_set_handler („Gtk”, G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);

gtk_init (&argc, &argv);

g_log_set_handler („Gtk”, G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);

/* Create the main window */

win = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_container_set_border_width (GTK_CONTAINER (win), 8);

gtk_window_set_title (GTK_WINDOW (win), „Hello World”);

gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);

gtk_widget_realize (win);

g_signal_connect (win, „destroy”, gtk_main_quit, NULL);

/* Create a vertical box with buttons */

vbox = gtk_vbox_new (TRUE, 6);

gtk_container_add (GTK_CONTAINER (win), vbox);

button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);

g_signal_connect (G_OBJECT (button), „clicked”, G_CALLBACK (helloWorld), (gpointer) win);

gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);

g_signal_connect (button, „clicked”, gtk_main_quit, NULL);

gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

/* Enter the main loop */

gtk_widget_show_all (win);

gtk_main ();

return 0;

}

 

Cea mai simpla aplicatie utilizand C si GTK+:

#include <stdlib.h>

#include <gtk/gtk.h>

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

GtkWidget *window;

gtk_init(&argc, &argv);

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window),”Fereastra”);

g_signal_connect(window, „destroy”, G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show(window);

gtk_main();

return 0;

}

Acest articol este si pe:  //docs.google.com/document/d/1SoWIa0RyQNaG_IkKPRR1W3YRg5c0AjRM9rD4z3gX78k/edit

Afișarea șirurilor near și far

Pe scurt, pointerii near si far reprezinta adresele variabilelor in interiorul zonei de memorie alocate programului. Programele care ruleaza in cadrul sistemelor mai vechi, cum ar fi MS-DOS, folosesc pointerii far pentru a mari zona de memorie in care programul poate sa pastreze informatia.

Atunci cand programul foloseste pointerii far pentru referirea variabilelor de tip sir, poate aparea situatia in care doriti sa afisati continutul sirului folosind functia printf. Insa, asa cum veti invata in capitolul “Functiile”, compilatorul va genera o eroare daca transmiteti un pointer far unei functii care asteapta o adresa near. Daca doriti sa afisati unui sir far (al carui inceput este indicat de un pointer far) folosind functia printf, trebuie sa anuntati functia ca folositi un pointer far. Pentru a face aceasta, plasati o majuscula F (pentru far) imediat dupa % in specificatorul de format, cum se arata in continuare:

 

printf(„%Fs\n”, un_sir_far);

 

Pentru ca specificatorul %Fs arata functiei printf ca utilizati un pointer far, apelarea functiei este corecta. In mod similar, puteti plasa o majuscula N in specificatorul de format pentru a indica functiei printf ca-i transferati un sir near. Dar cum functia printf asteapta in mod prestabilit siruri near, specificatorii de format %Ns si %s dau acelasi rezultat.

 

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

printf(„Hello world!\n”);

char *near_titlu = „Totul despre C”;

char *far_titlu =”Totul despre noi”;

printf(„Titlul este: %Ns\n”, near_titlu);

printf(„Titlul este: %Fs\n”, far_titlu);

return 0;

}

 

Windows command line

Windows-ul, ca mai toate sistemele de operare majore, are implementate interfete grafice de interactiune cu utilizatorii sai astfel ca utilizarea acestuia este intuitiva si rapida. Insa comenzile execute in cadrul windows-ului cat si cele rulate in unele aplicatii care se executa in sistemul de operare au ca baza un sistem propriu de comenzi sub forma textuala numit CMD (Command Prompt) care interpreteaza comenzile introduse si le executa. Interfetele windows-ului ofera solutii pentru gestiunea generala a sistemului, insa uneori fie acestea nu sunt bine organizate astfel ca utilizatorul trebuie sa acceseze multiple interfete intr-un mod nepractic, fie nu exista o solutie automatizata de executare a comenzilor sau a operatiilor astfel ca utilizatorul trebuie sa acceseze manual diferite interfete sau sa ruleze diferite programe sau comenzi interne. In plus, exista si cazuri in care sistemul de operare Windows nu ofera interfate avansate pentru controlul sau gestiunea unor caracteristici proprii sau a unor dispozitive conectate la sistem.

 

 Despre Command Prompt (CMD)

 

CMD este o aplicatie de tip DOS (Disk Operating System), care pe langa faptul ca face parte din nucleul Windows-ului si este apelat de catre foarte multe programe care ruleaza in sistem, ofera si posibilitatea de a executa comenzi din line de comanda si nu neaparat din interfetele existente. Mai pe scurt CMD este o consola in care se poate introduce text ce reprezinta sintaxa unei comenzi de executat iar la apasarea tastei Enter sistemul va analiza comanda introdusa si o va executa asa cum a fost ea definita intern.

 

Pe oricare calculator cu Windows exista in mod standard si interpretorul de comenzi Command Prompt iar deschiderea lui se face prin mai multe modalitati. Una dintre ele este rularea unei aplicatii interne menita sa deschida rapid programe, se numeste Run si poate fi rulat prin apasarea tastelor Windows + R (tasta windows este situata intre Ctrl si Alt, avand logo-ul specific Windows); in fereastra deschisa tasteaza cmd si apasa Enter si se va deschide CMD. Alte modalitati de a accesa CMD este prin delasarea la meniul Start si cautarea programului scriind in caseta de cautare cmd – in cazul in care versiunea windowsului este mai recenta sau egala cu Vista-, daca versiunea este anterioara acesteia, de exemplu Win XP, Run este prezent direct in meniul de start.

 

Pentru a rula o comanda acceseaza cmd folosind una din modalitatile descrise mai sus, cu mentiunea ca sunt unele comenzi care necesita drepturi de administrator si deci in cazul Windows Vista, 7, 8, 8.1 si 10 trebuie ca programul cmd sa fie pornit cu astfel de drepturi. O posibila cale de a face acest lucru este prin cautarea cmd-ului in meniul de start, apoi se da click dreapta pe el si se alege optiunea „Run as administrator„. Un mesaj de confirmare va aparea si va trebui sa se dea click pe Yes pentru a finaliza deschiderea interpretorului de comenzi cu drepturi depline asupra sistemului.

 

 Cum sa creezi un script cu comenzi CMD

 

Un script cmd, cunoscut si ca batch, este un fisier de tip text care contine o succesiune de comenzi cmd. Odata ce este rulat, adica este deschis asa cum este deschis un program (de ex. o aplicatie EXE) programul va lua pe rand fiecare comanda continuta in fisier si o va executa. Avantajul acestui lucru este ca pot fi imbinate o serie de operatii si comenzi care altfel nu ar fi fost posibile din cadrul interfetelor de sistem.

 

Procesul prin care se poate crea un script este foarte simplu. In locatia dorita, unde se doreste a exista scriptul (un bun exemplu ar fi desktop-ul) se da click dreapta in spatiu liber fara sa fie selectat in prealabil ceva si se alege New apoi Text Document, si se introduce un nume de fisier (de exemplu script) si apoi se apasa Enter. Va fi creat deci un document de tip text cu extensia txt. Deschideti fisierul si introduceti cate o comanda pe line apoi salvati modificarea facuta apasand Ctrl+S.

 

Exemplu de script cmd:

echo „Se incepe executarea scriptului”
@set a=%username%
msg * „Numele de utilizator este „%a%
pause

 

In acest stagiu, documentul nu poate fi executat pentru ca este de tipul text si de aceea trebuie sa fie modificata extenisa fisierului in .bat sau .cmd  Redenumiti deci fisierul astfel ca extensia .txt sa fie inlocuita cu una din cele doua mentionate anterior. Daca extensia nu apare la sfarsitul numelui de fisier, de exemplu script.txt atunci trebuie sa setezi din windows sa fie afisate extensiile tuturor fisierelor (vezi tutorialul de aici: Cum sa faci sa se afiseze extensia fisierelor in Windows). Dupa redenumire documentul trebuie sa fie de forma script.bat sau script.cmd.

 

Pentru a rula scriptul trebui sa dai dublu click pe acesta, caz in care va fi afisata consola cmd si stagiul executarii comenzilor din cadrul scriptului, eventual mesajele pe care comenzile le genereaza. Scriptul cmd dat exemplu mai sus va avea drept rezultat afisarea intr-o casuta de dialog a numelui utilizatorului

 

Exemplu de rulare script din command prompt (CMD).