Programmi C++ Se avete idee, proponete :P
#1
Inviato 04 March 2009 - 22:08
Principalmente lo sviluppo viene incentrato nell'uso O della libreria allegro (si usa anche per i giochi) O della libreria QT utile per i programmi a finestra, le cui potenzialità comunque sono molto grandi.
Le mie conoscenze sono limitate.
Se vorreste vedere realizzato un programma che ancora non esiste, fatemi sapere e prenderò in considerazione le vostre idee (ovviamente se vedo che è al di sopra delle mie capacità non prendo in considerazione l'idea).
In ogni caso:
1) NON PROMETTO che realizzerò alcun programma di quelli eventualmente suggeriti
2) NON GARANTISCO alcuna tempistica (anche diversi mesi) né alcun risultato
3) QUALUNQUE programma eventualmente realizzi sarà rilasciato sotto licenza GPL o sotto licenza più libera (liberamente distribuibile, codice sorgente disponibile)
4) La decisione se usare QT o Allegro è a mia esclusiva discrezione
-------
NOTE: Sicuramente non sono in grado di programmare sistemi Network o programmi che si occupino di protocolli/collegamenti internet.
#2
Inviato 05 March 2009 - 10:01
ops scusa ho fatto troppo OT.
#3
Inviato 05 March 2009 - 16:54
Oppure (forse ora vado troppo oltre) un programma su pc per accordare la chitarra...
#4
Inviato 05 March 2009 - 19:28
almeno da quanto ho studiato io
#5
Inviato 05 March 2009 - 19:50
Comunque il software di accordatura di chitarra è assolutamente fuori dalla mia portata.
Bisognerebbe conoscere nel tecnico le frequenze giuste e riconoscerle. Questo presuppone un lavoro sull'hardware che richiede necessariamente una libreria apposita oppure una programmazione specifica in assembler. Senza contare che un microfono, essendo un amplificatore, non garantisce un risultato ottimale, potendo produrre una distorsione in fase di registrazione e verifica del suono che non permetterebbe l'accuratezza necessaria per l'accordatura di uno strumento
In ogni caso sarebbe un programma inutile: primo luogo perché esistono gli accordatori elettrici (quindi avrebbe poco senso fare un programma per PC, in quanto questi strumenti sono stati costruiti apposta a questo scopo), in secondo luogo perché il miglior mezzo per accordare uno strumento è l'orecchio (unito al diapason)
----
per quanto riguarda le gif... devo vedere se trovo la libreria GIF ed utilizzarla. In ogni caso, per un programma del genere (non essendo un formato riconosciuto da allegro) dovrei più probabilmente ricorrere o a SDL che conosco poco. In ogni caso, per creare GIF ci sono alcuni programmi che ti posso suggerire:
1) ZCharCad / FF -> questi due programmi sono in grado di creare una GIF da una animazione Air (le immagini devono risiedere ovviamente in un SFF)
2) The Gimp -> un gran programma di disegno, che gareggia con Photoshop ed è gratuito. Però la creazione delle GIF potrebbe non risultare semplice.
In ogni caso un programma del genere sarebbe più interessante svilupparlo sotto QT per avere una migliore interfaccia utente, solo che non so come integrare le GIF in QT... (in QT c'è la possibilità di installare la libreria aggiuntiva per le GIF ma QT l'ho già installato e non ce l'avevo messa altrimenti mi si appesantiva troppo) comunque ci penserò e ti farò sapere se prenderò in carica questa seconda proposta.
#6
Inviato 06 March 2009 - 12:52
e in C creare una replica di ls che prende gli stessi argomenti che prende ls
http://unixhelp.ed.a.../CGI/man-cgi?ls
dopo che crei ls in C, provo a creare grep, se hai successo prova mv e cp.
quando hai finito e' il momento di ritornare al Cpp (avrai anche le idee molto + chiare su come usarla) e crare un find, e quando il fine e' creato re inventare un locate
se completi tutti i soprastanti programmi poi vai da chiunque e ti fai assumere, che ti assicuro sarei un programmatore con i controcoglioni.
non crederai mai a quanti errori puoi trovare se prendi in mano il sourcecode di ls, mv, o cp... a cominciare dal fatto che 3/4 dei char array non sono ridimensionati con malloc e causano un errore di segmentazione a finire con il fatto che alcuni commenti non rispecchiano quello che fa' davvero il programma...
una volta che riesci a maneggiare tranqullamente anche la replica di locate (e dbupdate), sarebbe il momento di passare a file nuovi, come SFF extract... ti sarebbe di fatto molto + semplice capirne il funzionamento che gia capisci per altro :P
io per ora sto ri inventando mv e cp, ma ho gia fatto sia find che locate...
dbupdate e' un po' + problematico, io qunato sto' cercando di renderlo molto + veloce, ma e' quasi impossibile :P
ho anche creato un bel programmino che fa cio:
rmtxtblock [-f -l -c [# of occurence]] -s <start text> [-e <end text>] <file>
rimuovi blocco di testo da un file.
se -s e' specificato rimove da s in poi, se -e e' specificato rimuove da s a e, se ed e possono essere sia altri file, che "testo"
un esemio di questo programma:
file di testo ciao.php dice "c'e' il sole<p>ciao stronzone!</p> ciao ciao!"
chiamando cosi'
rmtxtblock -s "<p>" -e "<\/p>" ./ciao.php
si ottine che il file dica "c'e' il sole ciao ciao!"
-f -l e -c servone per specificare quale occorrenza va cercata :
-f First occurrence, prima occorrenza di -s ed -e dentro il file in questione
-l Last occurence, ultima occorrenza di -s ed -e dentro il file
-c costum occurrence, occorrenza specificata, puoi sceglere tu con un numero intero.
sto anche modificando per aggiungere -a
che significa che si deve considerare il file di source come un file contenente una lista di file da modificare, e quindi di prendere tali file elencati in considerazione.
ovviamente il file e' per linux, ma essendo C++ si puo' compilare anche su windows, e farlo girare tranqullamente, anche se i file NON sono case insensitive, e qindi windows li considera tali...
#7
Inviato 06 March 2009 - 12:56
http://www.libgd.org/Main_Page
Quote
Yes. Support for GIF was restored in gd 2.0.28 on July 21st, 2004. Support for creating GIF animations is also available. Note that gdlib-config --features can be used to list the image formats supported by gd. Versions of gdlib-config prior to recent updates do not support the --features option, which can be understood to mean that GIF is not available.
#8
Inviato 06 March 2009 - 19:38
Però non mi viene molto in mente...mmmmmmmmmmmmmmmmmmmmmmmm...
Forse un programma che ti fa suonare uno strumento... anche se un po stupido... oppure..muble,muble...
Un programma che crei soldi lo sapresti fare? :rotfl:
#9
Inviato 10 March 2009 - 00:43
SlayerGatsu, su Mar 6 2009, 13:52, detto:
e in C creare una replica di ls che prende gli stessi argomenti che prende ls
http://unixhelp.ed.a.../CGI/man-cgi?ls
Per chi non sa di cosa parliamo... ls, mv, cp, find etc sono tutti programmi di linux per la gestione della linea di comando (ls visualizza la lista di file di una cartella oppure se esiste un determinato file; mv sposta o rinomina un file, cp copia un file in un'altra posizione, find ricerca un file - non esistendo per ls il corrispondente del comando dos DIR /s).
Fare ls sarebbe una sfida non da poco. Mentre riprodurre mv e cp potrebbe essere relativamente semplice sfruttando le librerie standard (in C++ usando iostream e fstream, in C usando probabilmente stdio o conio... ora non ricordo dove sia definito il comando fopen) ls lo vedo arduo.
Non ho idea di come ricercare nativamente un file (ovvero usando programmazione pura senza ricorrere al terminale) e vedere il contenuto di una cartella. Non esistono comandi del genere in C, almeno quelli che conosco io non sarebbero in grado di vedere una lista indifferenziata (es. la lista di tutti i file, oppure di tutti i file con una determinata estensione). L'unica soluzione credo sarebbe ricorrere agli interrupt, ma non ho intenzione di arrischiarmi a scrivere qualcosa che comporti l'uso di nozioni assembler o sulla struttura di un calcolatore, perché assembler non lo conosco e nemmeno ho fondamenti su teoria dei sistemi informatici (la programmazione per me è un hobby che ho imparato da me... non ho mai fatto corsi, anche perché il mio settore di competenza "professionale" non c'entra assolutamente nulla con la programmazione).
Riprodurre un programma come ls sarebbe una sfida non da poco, ma non credo di esserne all'altezza.
In ogni caso mi sembra strano ci siano errori di allocazione di memoria (per i non addetti: malloc, realloc e free sono comandi, tipici del C [nel C++ si usano di rado], che servono per la gestione dinamica della memoria, assegnando uno spazio della RAM, ridimensionandolo e liberandolo).
Infatti sotto linux (ricordo che ls & co sono programmi Linux) la gestione della memoria è sottoposta delle procedure più ferree che in Windows, tanto che UNO STESSO IDENTICO PROGRAMMA, che sotto windows funziona ma che contiene delle imperfezioni minime sulla gestione della memoria e sulla sua inizializzazione, sotto Linux viene arrestato in tempo di esecuzione dando un errore di "Segmentation Fault".
Quote
Ora come ora non ricordo a che serve Grep.
Quote
Non vorrei contraddirti, ma stai parlando con uno che programma in C++ che, quando va a fare domande su forum di programmazione, viene rimproverato per il fatto di usare tecniche più proprie del C in un programma C++ :rotfl: :rotfl:
Ora come ora spero di imparare bene QT perché una ottima miniera per imparare davvero la programmazione orientata agli oggetti. Le funzionalità più tipiche del C++ (come eredità e polimorfismo) non le ho quasi mai usate e vorrei capirle. Alcune delle cose del C le conosco. Ovviamente altre (presumo molte) probabilmente le ignorerò.
Quote
non crederai mai a quanti errori puoi trovare se prendi in mano il sourcecode di ls, mv, o cp... a cominciare dal fatto che 3/4 dei char array non sono ridimensionati con malloc e causano un errore di segmentazione a finire con il fatto che alcuni commenti non rispecchiano quello che fa' davvero il programma...
Come ti ho detto, mi torna strano... perché poi nel terminale funzionano correttamente i programmi (se il programma ricompilato da sorgente da "segmentation fault" e non l'originale già presente nel tuo sistema, questo vuol dire che il codice forse non è quello giusto). Sei sicuro di aver reperito il codice originale?
Quote
Effettivamente del sorgente di SffExtract mi sfuggono molte cose. In parte alcune sue scelte sono state dettate da "scoperte" da parte di Winane (colui che ha portato avanti il progetto) su alcune vulnerabilità contenute nell'SFF (tipo l'offset sulla dimensione del blocco del singolo sprite che è un valore non affidabile, essendo più affidabile i valori di indicizzazione degli offset che stanno in un altro punto del sub-header). Inoltre parte del codice mi è oscuro perché non sono mai riuscito a capire a fondo la struttura del formato PCX (che subisce delle mutazioni a seconda di determinati fattori, e comunque non ne ho una documentazione COMPLETA) e mi sembra lui lo gestisca nativamente. Comunque, in linea di massima, ho capito grosso modo come è strutturato quel programma (tra l'altro è veramente professionale, ha un sacco di controlli per analizzare ogni minimo aspetto dell'SFF, anche quelli che normalmente vengono trascurati perché di solito non sono utilizzati... una cosa che io non avrei mai la pazienza di fare... impazzirei :rotfl: :rotfl: :rotfl: )
Quote
Complimenti!
Bhe... forse se mi impegno "find" riuscirei a riprodurlo... ma come fare per i famosi "file generici"? (es. qualcosa.*)
Quote
Azz! :ehhh:
Stai facendo veramente passi da gigante (mi hai superato da un bel pezzo, mi sa... :rotfl: )
Quote
rmtxtblock [-f -l -c [# of occurence]] -s <start text> [-e <end text>] <file>
rimuovi blocco di testo da un file.
se -s e' specificato rimove da s in poi, se -e e' specificato rimuove da s a e, se ed e possono essere sia altri file, che "testo"
un esemio di questo programma:
file di testo ciao.php dice "c'e' il sole<p>ciao stronzone!</p> ciao ciao!"
chiamando cosi'
rmtxtblock -s "<p>" -e "<\/p>" ./ciao.php
si ottine che il file dica "c'e' il sole ciao ciao!"
-f -l e -c servone per specificare quale occorrenza va cercata :
-f First occurrence, prima occorrenza di -s ed -e dentro il file in questione
-l Last occurence, ultima occorrenza di -s ed -e dentro il file
-c costum occurrence, occorrenza specificata, puoi sceglere tu con un numero intero.
sto anche modificando per aggiungere -a
che significa che si deve considerare il file di source come un file contenente una lista di file da modificare, e quindi di prendere tali file elencati in considerazione.
ovviamente il file e' per linux, ma essendo C++ si puo' compilare anche su windows, e farlo girare tranqullamente, anche se i file NON sono case insensitive, e qindi windows li considera tali...
Veramente carino come programma. Per un programma del genere (parlo del rimpiazzamento di stringhe) sarebbe più semplice ricorrere al "tipo" string (definito in #include <string>) piuttosto che alla "classica" gestione delle "stringhe" (intese come array di chars)
es.
std::string mystring = "ciao, come va?";
string è un typedef della classe basic_string che è definita ora nella libreria <string> (insieme ai classici strcpy, strcat, etc per la gestione dei classici array di caratteri).
Tra l'altro nel libro "Thinking in C++" (libro liberamente scaricabile dalla rete) ho trovato del codice per poter trasformare in "string" ogni cosa e viceversa (es. float, int).. sono poche righe... te le passo domani... ora sono collegato da Windows e tali codici ce li ho sotto Linux. Passare da "string" ad array di char e viceversa è poi facile (può essere utile se hai bisogno di scrivere una "string" su un file binario... nel libro non c'è scritto come far interagire la classe string con un ifstream già aperto, senza quindi ricorrere al prototipo stringstream).
#10
Inviato 10 March 2009 - 09:12
quasi tutti gli eseguibili linux e le loro source sono in C, non C++...
:P
certo, e' possibile usare gli stessi prototipi di string in C, basta convertirli... ma essendo che non li usano neanche nei sorgenti di cose come mv, ls, cp ecc...
non vedo perche "complicarsi" la vita :P
RE le segmenation fault, un po' dipendono anche dalla versione di linux...
RHEL8 ad esempio non da problemi ma lo stesso sorgente su RHEL4 da segmentation fault...
Poi chi in C non usa malloc, e non utilizza il costrutto string, non dovrebbe programmare :P
Altra cosa divertente e' che LS se compilato in C++ (invece di C) ha 15-20 errori max, se li sistemi (che e' possibile) e' compatibile con C++ e a mio dire funziona anche meglio :P
Per tua info...
grep si usa per trovare qualcosa da qualche parte... esempio...
ls -hal | grep root
ritorna tutti i file che sono o di gruppo o di owner root, perche root figura nella "stringa" del risultato
oppure
locate index.php |grep my_site
ritorna solo i risultati del file index.php che si trova in un folder (o sub folder) di my_site
es:
index/my_site/index.php
index/my_site/about/index.php
oppure trovare un certo pezzo di testo in un file...
altro esempio...
grep "ciao" *.htm
cerca in ogni file html della directory dove stai per la parola ciao
ma invece di *.htm puoi scrivere anche /my_dir/*.html
e cerca quella directory...
e ovviamente ci sono anche gli switch che ti fanno scegliere cosa ritorna come valuta!
ad esempio puoi scegliere di ritornare solo il nome del file, o il nome del file e il num della linea, o la linea stessa del file.
secondo me e' il tool piu' utile e il programma + figo di tutto linux :)
#11
Inviato 10 March 2009 - 18:45
Quote
Bhe, è abbastanza logico (anche perché il C++ è nato dopo). In ogni caso, tendenzialmente, un programma scritto in C è più performante rispetto ad uno in C++... solo che il C ha molte più limitazioni ed è molto più facile incorrere in errori.
(comunque i miei primissimi programmi stupidi li scrissi in C)
Quote
Non credo proprio. basic_string è una classe di tipo template, quindi non è utilizzabile in C (dove le classi non esistono). string altro non è che un typedef di basic_string in forma array di chars.
Quote
non vedo perche "complicarsi" la vita :P
Mah... in realtà la semplifica anziché complicarla. La classe string contiene un sacco di metodi per la gestione (tipo .remove .replace) tra l'altro esiste un modo per creare un proprio typedef di basic_string che gestisca le stringhe come fossero case-insensitive. (appena posso ti passo il codice).
Quote
In C++ si tende ad evitare malloc/realloc/free per alcuni motivi, tra cui il fatto che non sono in grado di chiamare i costruttori e i distruttori di classe. Se c'è necessità di riallocare la maggior parte usa gli STL container, soprattutto vector
Quote
grep si usa per trovare qualcosa da qualche parte... esempio...
ls -hal | grep root
ritorna tutti i file che sono o di gruppo o di owner root, perche root figura nella "stringa" del risultato
oppure
locate index.php |grep my_site
ritorna solo i risultati del file index.php che si trova in un folder (o sub folder) di my_site
es:
index/my_site/index.php
index/my_site/about/index.php
oppure trovare un certo pezzo di testo in un file...
altro esempio...
grep "ciao" *.htm
cerca in ogni file html della directory dove stai per la parola ciao
ma invece di *.htm puoi scrivere anche /my_dir/*.html
e cerca quella directory...
e ovviamente ci sono anche gli switch che ti fanno scegliere cosa ritorna come valuta!
ad esempio puoi scegliere di ritornare solo il nome del file, o il nome del file e il num della linea, o la linea stessa del file.
secondo me e' il tool piu' utile e il programma + figo di tutto linux :)
Grazie per la info :)
----------
EDIT:
Ecco i codici che ti avevo promesso.
//stringConv.h
//Chuck Allison's string converter
//
//This code was found in "Thinking in C++ volume 2"
#ifndef STRINGCONV_H
#define STRINGCONV_H
#include <string>
#include <sstream>
template <typename T>
T fromString(const std::string &s) {
std::istringstream is(s);
T t;
is >> t;
return t;
}
template <typename T>
std::string toString(const T &t) {
std::ostringstream s;
s << t;
return s.str();
}
//-----------------------------------------
// End of code of Chuck Allison's
//-----------------------------------------
#endiftoString e fromString convertono i tipi (es, float ed int) in std::string e viceversa. Ecco come si usano.
utilizzo:
Es. 1
#include <iostream>
#include "stringConv,h"
int main() {
int i = 1234;
long j = 456;
cout<<toString(i)<<"\n";
cout<<toString(j)<<"\n";
return 0;
}Es. 2
#include <iostream>
#include "stringConv,h"
int main() {
int i = fromString<int> ( string("1234") );
long j = fromString<long> ( string("345") );
return 0;
}-------------
esempio di conversione da Array a "string" (questa volta il codice è mio).
#include <string>
#include <iostream>
int main() {
char * src = new char [18];
std::strcpy(src, "ciao, come stai?");
std::string dest = src;
std::cout<<"\n\n"<<dest<<"\n\n\n"
;
delete [] src;
return 0;
}esempio di conversione da "string" ad "Array" (codice mio)
#include <string>
#include <iostream>
int main() {
std::string src = "ciao, come stai?";
char * dest = new char [src.size()+1];
std::strcpy(dest, src.c_str() );
std::cout<<"\n\n"<<dest<<"\n\n";
delete [] dest;
return 0;
}----------------------------------------------------
Prossimamente, quando sto meglio (ho la febbre) ti posto il codice per creare un prototipo istring, ovvero una "string" che si differenzia per un metodo di comparazione case-insensitive (anche questo preso da Thinking in C++).
#12
Inviato 15 March 2009 - 15:02
o un player per pc che legga i dvd blue-ray disc
#13
Inviato 24 March 2009 - 18:36

Aiuto










