Author Topic: Programmini di esempio/test  (Read 6734 times)

0 Members and 1 Guest are viewing this topic.

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Programmini di esempio/test
« on: Wed 17 December 2008, 13:55 »
Provate a scaricare questo, e sappiatemi dire: leggete il file README.txt prima di tutto.

Nuove versioni seguiranno. :whustling:

Offline Raid

  • Administrator
  • Membro esperto
  • *****
  • Posts: 2200
    • www.darkforge.it
Re: Programmini di esempio/test
« Reply #1 on: Wed 17 December 2008, 13:59 »
ho letto, mi sembra fantastico, ma non l'ho provato ancora, questa sera ci proverò sul mio windows xp.

se vuoi pubblicare il programma, inseriscilo pure nella sezione download tra i programmi utili

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Re: Programmini di esempio/test
« Reply #2 on: Wed 17 December 2008, 14:44 »
Per il momento fa qualcosa come il 25% delle cose che voglio fargli fare, funziona un po' come wc in sistemi UNIX. Devo anche implementare un sistema per fargli leggere stdin. Non è troppo difficile, ho già un'ideuzza.

Solo che devo cambiare l'approccio allo stream. Inoltre ho visto che stdin, stdout e stderr non possono essere riavvolti tramite rewind() o fseek(FILE* fp, long offset, int whence).

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Re: Programmini di esempio/test
« Reply #3 on: Wed 24 December 2008, 11:10 »
Studio sui puntatori.

Per una buona esecuzione scrivete il nome del programma e un argomento, meglio se numerico.

Compilandolo in GNU/Linux con
Code: [Select]
gcc -O2 -g -Wall ptr1.cdovrebbe dare degli innocui warning di gestione signed/unsigned. Proverò a vedere se sono davvero innocui.

Per continuare con altri programmini di test o esempio devo per forza passare attraverso alcuni studi forzati: uno di questi è appunto lo studio sui puntatori, importantissimo. L'ho fatto altre 3-4 volte in passato, ma i puntatori proprio non mi entrano in testa :sdentato:

Sto sistemando un programma per il conteggio di elementi di un array e la divisione in token di una stringa. Ma mi sa che lo dividerò in due parti.



Ups... ora funziona.
« Last Edit: Wed 24 December 2008, 12:02 by MsZ »

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Re: Programmini di esempio/test
« Reply #4 on: Tue 30 December 2008, 12:05 »
Studio sul filtraggio di una stringa.

E' stata dura, ma alla fine ce l'ho fatta e dovrebbe funzionare con qualsiasi stringa e qualsiasi carattere ASCII riconosciuto dalla tastiera e dal sistema operativo.

Usarla è semplice.

Code: [Select]
<programma> "<stringa>" "<caratteri_da_filtrare>"
La stringa è una qualsiasi stringa di cui volete filtrare la lista di caratteri elencata in <lista da filtrare>. Raccomando l'uso dei doppi apici ("") per delimitare l'argomento 1 e il 2: se la stringa ha degli spazi e li volete filtrare dovete per forza mettere i doppi apici.

Avendo
Code: [Select]
filter "stringa da filtrare" " "il risultato sarà
Code: [Select]
stringadafiltrare
*===================*
Qua dentro c'è tutto quello che ho imparato finora, tra cui quelle due brutte bestie dei puntatori e del passaggio degli argomenti ad una funzione per riferimento. C'è anche un po' di principio di minimo privilegio, cosa che dovrò studiarmi un po' meglio.
Questo studio fa parte del programmino per lo split di un file di testo. Serve ad un corretto parsing della riga di comando: rimozione dei trattini (-), filtraggio di caratteri in generale per far capire al programma che cosa si vuole fare.

Se volete fate un po' di betatesting con tutto quello che vi salta in mente. Se non vi torna qualcosa o non funziona come pensate fatemi un fischio.

Sto mettendo tutte le funzioni ausiliarie in un header chiamato "mainheader.h". Per compilare correttamente i sorgenti che ne fanno riferimento dovete creare un albero di sorgenti come il seguente:
Code: [Select]
cartella\headers\mainheader.h
cartella\programma\programma.c

perchè nell'intestazione dei sorgenti C mainheader.h è posto in ..\headers\mainheader.h.
Oppure potete modificare direttamente i sorgenti affinchè puntino alla directory o al file che più vi aggradano. :sdentato:
Comunque allego l'eseguibile Win32 e GNU/Linux (estensione .GNU) per una prova immediata.

!!!IMPORTANTE!!!

Se volete compilarlo su GNU/Linux e tenete la struttura dei sorgenti come evidenziata sopra dovete andare in filter.c e cambiare da backslash a slash. Vale a dire, da così
Code: [Select]
#include "..\headers\mainheader.h"a così
Code: [Select]
#include "../headers/mainheader.h"
altrimenti gcc non troverà il file header necessario.

Segato un bug che dava segfault... migliorata la descrizione :dots:
« Last Edit: Tue 30 December 2008, 12:25 by MsZ »

Offline MsZ

  • Il Manutentore
  • Militante
  • ******
  • Posts: 913
  • GNUru Meditation
Re: Programmini di esempio/test
« Reply #5 on: Wed 31 December 2008, 10:15 »
Probabilmente qualcuno un po' esperto si chiederà "Ma perchè questo qua non usa le funzioni della libreria standard e reinventa continuamente la ruota?"

Domanda legittima. Le risposte sono essenzialmente due.

La prima: E' vero che sto a reinventare la ruota, ma se non la reinvento io non capirò mai come funziona. Siccome io sono uno che vuole comprendere come ogni singolo bit di istruzione viaggia e si comporta in memoria e fa quello che fa nel programma, ho creato delle piccole funzioni personalizzate che fanno esattamente quello che io voglio che facciano, e le conosco una per una, riga per riga. Le ho chiuse nel file mainheader.h che uso in molti sorgenti .c. Se mi servono altre funzioni di base le scrivo e le metto in quell'header. Forse quando mi sarò stancato o non capirò come funziona qualche cosa userò anche la libreria standard. Comunque stdio.h la uso sempre :sdentato:

La seconda: vado a vedermi le mie funzioni, quelle che ho scritto io, e posso modificarle a seconda delle mie esigenze o dei miei obiettivi. Poi chissà, magari ci perdo un po' di sicurezza, però potrei guadagnarci in spazio in memoria in runtime. La sicurezza arriva naturalmente durante il betatesting.

 

Creative Commons License All ValerioCipriani.com contents are published according to Creative Common License, except different instructions. The Staff is not responsible of eventually guide, article and publishing mistakes. All published items are patent free. All trade marks reported are right reserved. Contact us, Info.