momente şi schiţe de informatică şi matematică
To attain knowledge, write. To attain wisdom, rewrite.

Subrutină performantă pentru calculul factorialului

factorial
2007 oct

Optimizări (faţă de programul în limbaj de asamblare pentru n!, realizat în "Hello World!") asupra algoritmului, asupra conversiei (baza 109) şi asupra folosirii instrucţiunii de împărţire DIV.

Se înlocuieşte înmulţirea cu fiecare factor, prin înmulţire cu produs de factori, iar operaţiile sunt modelate acum în baza 232 (în loc de modelul iniţial, bazat pe reprezentarea în baza 216). Conversia la forma zecimală este realizată acum prin intermediul bazei 109 (numerele 0..109-1 - "încap" pe 32 biţi), în loc de 104, din varianta precedentă.

Instrucţiunea microprocesorului DIV necesită cel puţin 16/24/40 tacţi pe I80486 şi 17/25/41 tacţi pe Pentium, după cum împărţitorul are 8/16/32 biţi; se rescrie programul, înlocuind împărţirea la operand (cu DIV) prin înmulţirea cu inversul operandului (MUL fiind mai rapidă ca DIV).

Extinderea funcţionalităţii serverului, prin CGI

CGI | env | factorial | funcții | grafice | telnet
2007 sep

scriere nu înseamnă neapărat "scriere pe ecran", ci comunicare (între procese); parametrii pot fi transmişi prin intermediul "variabilelor de mediu" (de ex., prin QUERY_STRING).

CGI extinde funcţionalitatea clasică a serverului; browserul cere serverului nu un anumit fişier, ci rezultatul execuţiei unui anumit program; serverul lansează programul respectiv şi transmite browserului ceea ce "scrie" la STDOUT programul executat. Acest program poate să fie cam în orice limbaj (fie ca script, fie ca "executabil"), dar trebuie să fie locat într-un anumit director (/cgi-bin/) şi trebuie să-şi formuleze "outputul" prefixându-l cu anumite headere HTTP ('Content-type').

Se prezintă exemple de programe CGI: mimeTeX analizează o expresie matematică primită ca parametru şi returnează imaginea GIF corespunzătoare; programe în C, în perl, în limbaj de asamblare pentru lista de "environment variables".

"Hello World!"

30 de ani | GMP | GNU as | Linux | Math::BigInt | PHP | Python | assembler | int 0x80 | mmap() | perl
2007 sep

Formulăm în diverse limbaje, soluţionarea unei aceleiaşi probleme—calculul factorialului (recursiv). Vizăm aspecte de elaborare, aspectele algoritmice necesare şi corelaţii fireşti între limbaje.

Câte cifre are n!; aplicaţie (javascript + HTML) bazată pe logaritmi. Aplicaţie pentru compararea numărului de operaţii cifră-cu-cifră necesare calculului n! în baza 10, respectiv în baza 256.

n! în limbajele bc, PHP, Python; modelare OOP în javascript folosind baza 106; program perl folosind modulul Math::BigInt; modelare OOP în perl folosind baza 106; program C folosind biblioteca GMP; modelare OOP în C++ (GCC g++) folosind baza 216 (şi conversie la baza 104); program în limbaj de asamblare GNU as şi elemente de programare în limbaj de asamblare sub Linux (transmiterea parametrilor, funcţia mmap(), folosirea apelurilor de sistem, instrucţiunea int 0x80; folosirea instrucţiunilor FPU; investigaţii asupra fişierului executabil).

Adăugarea cuprinsului, folosind XML::Twig

TOC | XML | XML::Twig | perl
2007 aug

Se generează TOC cu javascript (dinamic - după încărcarea sursei HTML în browser), respectiv transformând cu perl fişierul-sursă HTML iniţial (static - fişierul rezultat conţine şi TOC).

Printr-o funcţie javascript se colectează elementele "heading" din cadrul documentului încărcat şi se adaugă fiecăruia un atribut ID (pentru a referi secţiunea respectivă); apoi, se creează elemente <a> având ca valoare a atributului href tocmai id-ul fixat anterior; aceste link-uri constituie apoi, elementul TOC.

my $tw = new XML::Twig() construieşte un obiect de memorie conţinând datele şi "pointeri" la metodele specifice modulului XML::Twig (pentru construcţia în memorie a arborelui elementelor HTML), dar şi "pointeri" la funcţii de transformare ("handlere") specificate de utilizator - în cazul de faţă, pentru crearea subarborelui TOC.

Grila coeficienţilor - introducere practică în XML şi XSLT

DOM | XML | XSLT
2007 jul

Plecând de la necesităţile apărute într-o aplicaţie concretă de salarizare, se concepe un DOCTYPE şi se construieşte un document XML; se prezintă apoi elemente de perl pentru extragerea/actualizarea datelor dintr-un document XML, elemente de limbaj XSLT şi un program în XSLT pentru prezentarea documentului ("Grila coeficienţilor de salarizare").

"Centralizatorul" Educaţiei Naţionale - de la Word la XML

SQL | Word | XML | XSLT
2007 jun

Documente tabelare mari… cu Microsoft-Word? adică ignorând principiul esenţial separă! datele de prezentarea lor. Evidenţiem - dar cam întortochiat - posibilitatea de a folosi XML (reprezentarea datelor) şi XSLT (prezentare). Cam "întortochiat", fiindcă mai e vorba şi de un act oficial fundamental pentru sistemul de învăţământ şi se pune măcar problema consistenţei, dacă nu şi chestiunea mai generală a restricţiilor pe care le poate suporta un sistem (până să fie sufocat) din partea unui aparat birocratic externalizat (în raport cu procesul de învăţământ) şi amplificat continuu.

Centralizatorul Educaţiei Naţionale este o operă de politică meschină, generată de "Statutul personalului didactic" şi nu de conţinutul intrinsec al procesului de învăţământ. Datorită prestaţiei funcţionăreşti, sistemul de învăţământ tinde să devină un sistem închis, fără perspective reale de evoluţie; începe să se bazeze pe birocraţie, pe standarde mediocre şi pe "dascăli", nu pe profesori (sau Profesori) iar scopul ajunge acuşi să fie acela de a produce/reproduce funcţionari (de tip point-and-click).

Profesorul de Informatică ajunge să fie "calificat", nu fiindcă aşa scrie pe Diplomă şi undeva pe Centralizator; înveţi ceva informatică şi înveţi să programezi cam în 10 ani iar ca să înveţi pe alţii (dar a nu confunda aceasta, cu "să-i pregăteşti pentru BAC") este necesar să ai tu însuţi o anumită experienţă nebanală (şi continuă!) de realizare a unor aplicaţii mai complexe. Per total, această experienţă nu poate fi ştampilată, nici cuantificată undeva - dar tocmai procesul de a o dobândi şi capacitatea de a o împărtăşi, face deosebirea reală între pretenţii.


Prev
Next
ALL (386 titluri)

vezi Cărţile mele (de programare)

despre acesta ~ Home
(sau https://vlad.bazon.net/

Factoriale | Graficul funcţiilor

PGN browser | chess JS engine

Load

in /slightchess

/slightchess

626 partide analizate cu Crafty

(R) Computer Art | Decoraţiuni

Aplicaţii şcolare (javaScript)

Sinteze: