mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Matrici, indici e funzioni...

Ciao a tutti,
ho un problema stupido, ma questa mattina non riesco a cavarne nulla, 
sar� "l'assenza" dal C da qualche annetto o saranno i miei neuroni che 
iniziano a disperdersi, ma...
In un programmino stupido come il seguente di esempio:
*****
#include <stdio.h>
#define M 5
typedef struct matrice {
	int a;
	int b;
	int c;
}matrice;
void stampa( matrice m[M][M] );
int main( void )
{
	matrice m[M][M];
	...bla bla bla...
 
	stampa( m );
	...bla bla bla...
}
void stampa( matrice m[M][M])
{
	...bla bla bla...
}
*****
Come posso fare a non essere "dipendente" da quel "#define M 5"?
Grazie per le eventuali risposte e scusate la banalit� della domanda...
Ivan

 Come posso fare a non essere "dipendente" da quel "#define M 5"?
cosa intendi con "non essere dipendente dal *define M 5"?
Se vuoi variare dinamicamente la dimensione della matrice dei usare
malloc e compagnia bella e usare i puntatori quando passi la martice
alla funzione.
Ciao Jack

 Ciao Jack
Ecco cosa dimenticavo!
Non mi ricordavo piï¿œ esistessero le matrici dinamiche e malloc O___O'
Che figura :(
Grazie!
Ivan

 
Ci ho lavorato ieri pomeriggio e devo dire che non mi ï¿œ andata male, per 
quel che mi ricordavo era sempre un bagno di sangue lavorare con 
allocazioni dinamiche, non mi ricordavo molto, ma dopo il suggerimento 
ricevuto piï¿œ sopra ï¿œ stato facile cercare nella giusta zona del manuale ;)
Sinceramente mi da molti piï¿œ grattacapi la gestione dell'input, non so, 
non ci vado d'accordo... O_O
Ciau
un Ivan... che tanta ruggine sul C...

 non ci vado d'accordo... O_O
Non ï¿œ un caso, secondo me. La gestione dell'input ï¿œ sempre la parte piï¿œ 
complicata... Per questo io prediligo i programmi da riga di comando ;-)
E.


Il problema ï¿œ che non sto parlando di chissï¿œ quale input... Faccio 
fatica a gestire in modo "sano" una serie di interi separati da spazi O_O'
Bah! Beata ruggine!
Torno a smanualare ;)
Ciau
Ivan

 fatica a gestire in modo "sano" una serie di interi separati da spazi O_O'
...ottimo per la riga di comando:
int main(int argc, char *argv[]) {
   int i;
   for (i=1;i<argc;++i) {
     printf("l'intero n. %d vale %d\n",i,atoi(argv[i]));
   }
}
E.
Newsgroup: it.comp.lang.c
Titolo: limits.h e valori

Questo e' il sorgente:
#include <stdio.h>
#include <limits.h>
main ( )
{
printf("UINT_MAX     %d\n",UINT_MAX);
printf("INT_MAX      %d\n",INT_MAX);
printf("LONG_MAX     %ld\n",LONG_MAX);
printf("ULONG_MAX    %ld\n",ULONG_MAX);
}
  dopo averlo compilato con:
   gcc aaa.c -o aaa
mi da questo risultato
  UINT_MAX      -1
  INT_MAX       
2147483647
  LONG_MAX      
2147483647
  ULONG_MAX      -1
UINT_MAX,LONG_MAX e ULONG_MAX  hanno un valore completamente diverso su
limits.h
Come posso ottenere i valori corretti ?
    Vi ringrazio per l'aiuto.
    Jo

limits.h
Sbagli ad usare %d che significa intero con segno, quindi questi
valore senza segno viene interpretato come int e quindi ottieni
risultati sbagliati. Usa "%ud". Stesso discorso per i long, devi usare
"%ul"
-- 
Marco Barisione (ICQ 84277092)

Marco Barisione wrote:

  Ti ringrazio :))
    ciao
     Jo

 "%ul"
"%u" per gli unsigned int
"%lu" per gli unsigned long int
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Un apostolo vedendo Gesu` camminare sulle acque:
- Cazzo se e` buono 'sto fumo!!!

"%lu" per gli unsigned long int
Ops... hai ragione
Per punizione scriverò 100 volte: "Prima di dire qualcosa sul C che
non usi nel C++ apri il K&R (o almeno MSDN per cui basta un click)".
:-(


Marco Barisione wrote:

Grazie comunque a tutti e due :)
   ciao
   Jo

Newsgroup: it.comp.lang.c
Titolo: chiusura dei socket

Ciao,
sto` facendo alcune prove coi socket in C (sotto linux), all'apertura di un
socket server sulla porta 6500 il netstat mi restituisce:
# netstat -na | grep 6500
tcp	0	0 
0.0.0.0:6500
	0.0.0.0:*	LISTEN
Quando apro un client socket sulla porta:
tcp	0	0 
127.0.0.1:6500
 
127.0.0.1:4796
	ESTABLISHED
tcp	0	0 
127.0.0.1:4796
 
127.0.0.1:6500
	ESTABLISHED
tcp	0	0 
0.0.0.0:6500
			0.0.0.0:*				LISTEN
Quando chiudo il client socket:
tcp	0	0	
127.0.0.1:6500
 
127.0.0.1:4796
	TIME_WAIT
tcp	0	0 
0.0.0.0:6500
			0.0.0.0:*				LISTEN
La domandona e`: Perche mai, nonostante abbia chiuso la connessione
facendo un bel "close(clientsocket);", rimane una connessione TIME_WAIT
per svariate decine di secondi? dimentico qualcosa? non e` sufficiente un
close? tutto cio` e` normale?
grazie, ciao!

close? tutto cio` e` normale?
premesso che siamo OT, la cosa e' normalissima, e dipende dalle
caratteristiche del TCP/IP. Puoi trovare una spiegazione qui:
http://www.lcg.org/sock-faq/
(e' la faq 148)
ciao
bepin

Newsgroup: it.comp.lang.c
Titolo: Mailing list

Nessuno sa darmi qualche informazione su mailing list di C ( non GNU )

...

Newsgroup: it.comp.lang.c
Titolo: SMS su ENEL.IT

...premetto che ne capisco MOoOoOoOoOoOoOoOoOLTOOOOO poco.
...ma stavo vedendo come inserire, sul web, senza link, direttemente da una
pagine html o php la possibilità di inviare SMS.
Ho visto che 
ENEL.IT
 e' un servizio che funziona abbastanza bene, meglio di
altri insomma...
Ho fatto un giro tra le pagine e ho visto che dopo aver inserito:
- prefisso cellulare (es: 335)
- numero cellulare (es: 9999999)
- messaggio
si collega alla pagina in ASP
https://www.enel.it/sms/scrivisms.asp
che contiene questo form:
<FORM NAME="sms" METHOD="post">
<INPUT TYPE=hidden NAME=message VALUE="TEST" >
<INPUT TYPE=hidden NAME=prefix VALUE="335" >
<INPUT TYPE=hidden NAME=gsm VALUE="9999999" >
<INPUT TYPE=hidden NAME=accetta VALUE="yes">
<INPUT TYPE=image SRC="/img/vai.gif" BORDER=0 WIDTH=7 HEIGHT=12 ALT="vai">
</FORM>
ho modificato il form inserendo:
action="
https://www.enel.it/sms/scrivisms.asp
"
ma niente...
sembra non funzionare :(
Qualcuno mi potrebbe dare una manina?
GRAZIE !!!!! :)
P.S: Potete rispondermi x EMAIL?
Riccardo.

Molto probabilmente ci saranno delle altre variabili che il sitoi 
ENEL.IT
passerà a quella pagina. Prova a scrivere nell'action la pagina prima di
"
https://www.enel.it/sms/scrivisms.asp
".
Ciao
---------------------------------------------------------------------------
Messaggio inviato attraverso 
http://www.trucchiperpc.it
 - sezione newsgroup
Newsgroup: it.comp.lang.c
Titolo: Problema con mktime()...

Salve a tutti.
Ho un problema fastidioso con mktime credo...
Ho fatto una funzione semplice di questo genere:
time_t setTime( int year, int mon, int mday, int hour, int min, int sec ) {
	struct tm *ptm = localtime( &nullTime );
	ptm->tm_year = year - 1900;
	ptm->tm_mon = mon - 1;
	ptm->tm_mday = mday;
	ptm->tm_hour = hour;
	ptm->tm_min = min;
	ptm->tm_sec = sec;
	return mktime( ptm );
}
Il mio problema e' che il valore che mi viene restituito ha SEMPRE 1 ora 
in piu'. Facendo diverse prove, anke azzerando la struttura tm con 
memset o usando gmtime al posto di localtime non cambia nulla... con 
alcune prove mi e' parso che il problema sia in mktime.
Utilizzo quella e mi viene aggiunta 1 ora.
Come toppa posso impostare tutto con 1 ora in meno ma mi piace molto 
poco e vorrei capire come mai si comporta in questo modo...
Qualcuno sa' dirmi qualcosa in proposito?
Grazie in anticipo
-Mat-

 }
Ops... mi correggo.
Ora non sembra darmi lo sfasamento di un'ora se isolo la funzione...
Devo valutare meglio il problema

Come non detto... tutto risolto.
Non avevo considerato il campo
	tm_isdst
Relativo all'ora legale.
Impostando l'ora legale quindi a 1 ( oppure impostando che 
l'informazione non e' disponibile con -1 ) l'orario che mi viene 
restituito e' corretto.
Ora mi chiedo pero' quale dei due valori e' sia piu' corretto...

Funzione corretta nuovamente:
time_t setTime( int year, int mon, int mday, int hour, int min, int sec ) {
	const time_t nullTime = time( NULL );
	struct tm *ptm = localtime( &nullTime );
	ptm->tm_year = year - 1900;
	ptm->tm_mon = mon - 1;
	ptm->tm_mday = mday;
	ptm->tm_hour = hour;
	ptm->tm_min = min;
	ptm->tm_sec = sec;
	return mktime( ptm );
}
Ora non ci sono problemi riguardo all'ora legale

... a volte basta parlarne.
Newsgroup: it.comp.lang.c
Titolo: Problema da Newbie

Slave a tutti,
sarň breve..
sono alle prime armi col C e su un programmino elementare ricevo un msg
di errore nella compilazione...
"
prova.c: In function `lungh':
prova.c:40: warning: passing arg 1 of `strlen' makes pointer from
integer without a cast
"
che vol dě??  (codice  incluso in basso)
grazie mille
bye
#include <stdio.h>
#include <string.h>
int byte(int y);
long funz(int x);
int lungh(char z);
 int prova;
main()
{
 long total;
 int altro;
 puts("Quanti?: \n");
 scanf("%d", &prova);
 printf("Eccoti il numero: %d\n", prova );
 total= funz(prova);
 printf("Total: %d\n",total);
printf("Lunghezza in byte: %d\n", byte(prova));
printf("Lunghezza in byte: %d\n", lungh(prova);
 return(0);
}
long funz(int x)
{
return(prova*2);
}
int byte(int y)
{
return(sizeof(y));
}
int lungh(char z)
{
return(strlen(z));
}

 }
Semplice: z non è una stringa (char *) e quindi non ne puoi calcolare la
lunghezza con strlen(). Inoltre la funzione si aspetta un char e tu gli
passi un int.
EMG

 passi un int.
ok, ma se allora io volessi sapere la "lunghezza" dei numeri digitati
(ovvero i campi) ??
tipo 101 sono 3 campi, 1404 sono 4 .. ecc..
thz

}
strlen() riceve un argomento "char", che si trova costretto a
convertire in puntatore, in quanto questa funzione accetta un (char*).
Pertanto il warning e' giustificato dal fatto che strlen() accetta un
valore intero (i char sono considerati interi) trasformandolo in
puntatore, senza che vi sia un cast esplicito da parte del
programmatore, che puo' cioe' dare una garanzia che le cose vadano
fatte effettivamente a quel modo.
C'e' un po' di confusione nell'uso delle variabili :
lungh() accetta un char, le passi un int, con la pretesa di lavorare
su un (char*) ... ;)
--
Andrea Laforgia
andrea_...@bigfoot.com

tipo 101 sono 3 campi, 1404 sono 4 .. ecc..
a questo punto, o ti conviene chiedere un numero sotto forma di
stringa, oppure compi una trasformazione in un secondo momento, cioe'
#include <stdio.h>
#include <string.h>
main()
{
    int num ;
    char cifra[10] ;
    printf( "digita un numero : " ) ;
    scanf( "%d", &num ) ;
 
    sprintf( cifra, "%d", num ) ;
    printf( "%d campi\n", strlen( cifra ) ) ;
}    
--
Andrea Laforgia
andrea_...@bigfoot.com

 tipo 101 sono 3 campi, 1404 sono 4 .. ecc..
Penso ti convenga inserire i numeri come stringhe di caratteri, trovarne
la lunghezza con strlen() e, alla fine, convertirli in numeri con
atoi().
EMG
Newsgroup: it.comp.lang.c
Titolo: Puntatore a puntatore: come ottenere il valore ?

Ho una funzione di questo tipo:
gboolean SpawnSyncCompressorProcess (const gchar *command)
{
GError *error = NULL;
	int status;
	gchar **argv , **stdout , **stderr;
	int argcp;
	g_shell_parse_argv ( command , &argcp , &argv , NULL );
	if ( ! g_spawn_sync (
		NULL,
		argv,
		NULL,
		G_SPAWN_SEARCH_PATH,
		NULL,
		NULL,
		stdout,
		stderr,
		&status,
		&error) )
La funzione gtk "g_spawn_sync" mette in stdout e in stderr il contenuto
dello standard output e error. Quando faccio una printf di stdout
ottengo dei caratteri NON ascii segno che sto stampando l'indirizzo
della memomoria; come faccio per ottenere il valore ?
Grazie,
Colossus

Ho risolto dichiarando stdout e stderr come puntatori e mettendo il &
davanti nella funzione.
Colossus

                &error) )
A parte il problema dei puntatori che hai risolto, hai fatto una pessima
scelta di nomi. Non solo stdout e stderr sono i nomi degli stream
predefiniti del ISO C (e fin qui tutto bene, le variabili locali
oscurerebbero quelle globali - anche se rimarebbe una pessima idea), ma
stdin, stdout, stderr a norma di standard sono delle macro che vengono
espanse in oggetti di tipo FILE*.
Nel tuo caso sei stato fortunato e l'espansione e` innuocua perche`
probabilmente gli stream sono definiti come:
extern FILE *stdout;
#define stdout stdout
e quindi non succede nulla. Pensa se invece le macro fossero qualcosa
del tipo:
#define stdout (std_streams.stdout)
o magari ancora qualcosa di piu` fantasioso! Ti consiglio vivamente di
cambiare i nomi a quelle due variabili.
Luca
-- 
Home: 
http://kronoz.cjb.net
La somma dell'intelligenza sulla terra e` una costante.
La popolazione e` in aumento.

Ti ringrazio non ci avevo pensato !
Colossus
Newsgroup: it.comp.lang.c
Titolo: Preprocessore

Ciao a tutti,
in un mio progetto uso questo #define per specificare da quale file
proviene l'errore:
#define ERR __FILE__ ": "
...
fprintf(stderr, ERR "blablabla");
ERR viene espanso come stringa e tutto funziona.
Vorrei anche aggiungere il numero di riga ma sto incontrando qualche
problema:
#define ERR __FILE__ "(" __LINE__ "): "
non funziona perche` __LINE__ viene espanso come numero, non
come stringa.
#define ERR __FILE__ "(" #__LINE__ "): "
non funziona perche` cosi` ___LINE__ non viene espanso.
C'e` un  modo per  fare ottenere  una stringa  del tipo  "file.c(123): "
usando il preprocessore (vorrei evitare l'overhead di una funzione)?
grazie
Kronos
-- 
Home: 
http://kronoz.cjb.net
La vispa candela bruciava l'erbetta
creando un'essenza alquanto sospetta;
sembrava l'odore di una sacrestia
ma presto mi accorsi che era maria.

non funziona perche` cosi` ___LINE__ non viene espanso.
Ma scusa, anche se venisse espanso si avrebbe:
"("123"):" che e' un errore di sintassi.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it

 "("123"):" che e' un errore di sintassi.
C'e` davanti # che serve proprio per attaccarci gli apici.
Cosi` mi  ritrovo con "("  "__LINE__" ")" (#  previene l'espansione). Io
vorrei in  qualche modo forzare l'espansione  di __LINE__ e usare  # per
racchiudere il valore espanso fra apici.
ciao


racchiudere il valore espanso fra apici.
Che io sappia # non serve a piazzarci gli apici davanti
(puo' darsi ricordi male, l'ho utilizzato pochissimo), ma ##
sicuramente non produce il risultato voluto.


 Che io sappia # non serve a piazzarci gli apici davanti
Serve  per  sostituire  ad  un  parametro  della  macro  il  suo  valore
circondato da apici.
#define FOO(x) printf(#x);
FOO(pippo); --> printf("pippo");
Io  avevo provato  ad utilizzarlo  come nell'esempio,  ma non  funziona.
Ho risolto cosi` (occhio agli spazi!):
#define eprintf(s, args...) \
fprintf(stderr, __FILE__ "%d: " s, __LINE__ , ## args)
Il  problema e`  che la  gestione degli  argomenti variabili  con ##  e`
un'estensione di gcc e non e` portabile. Ma non saprei come altro fare.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

un'estensione di gcc e non e` portabile.
Non so se l'utilizzo di ## con gli argomenti variabili sia
supportato anche da qualche altro compilatore, ma ## e' un
operatore standard.

Newsgroup: it.comp.lang.c
Titolo: strlen sul K&R

Guardando a pag. 37 del libro di Kernighan e Ritchie Linguaggio C (o
39 della versione in inglese), vedo che gli autori realizzano una loro
versione della funzione strlen, e scrivono: "questa è la nostra
versione" lasciando intendere che sia una loro implementazione della
funzione di libreria mentre, invece, è una funzione che restituisce un
valore diverso (pari al risultato della strlen di libreria + 1).
 
Infatti, mentre quella della libreria string.h, come annotano gli
autori, conteggia la lunghezza della stringa priva del terminatore \0,
la versione di K&R (ripresa anche in altra forma nel cap. 5)
restituisce la lunghezza comprensiva del terminatore. Cosicché le due
funzioni danno risultati diversi.
 
Secondo voi non era meglio evidenziare esplicitamente questa
differenza?


?!?
Controlla meglio!
Entrambe tornano il numero di caratteri *senza* il terminatore.
 
Ciao!

 
 
Magari hai un'altra edizione, io parlo della implementazione della seconda 
edizione, in inglese, sezione 2.3 a pg. 39 :)
 
Ciao!

 edizione, in inglese, sezione 2.3 a pg. 39 :)
 
Postalo. Secondo te andiamo a consultare un libro esautito solo 
per provare il tuo pezzo di codice?

 per provare il tuo pezzo di codice?
 
No ce n'e' bisogno sono io che ho scritto una scempiaggine, Ho anch'io
la 2^ edizione inglese.
 
 
Grazie ad entrambi per l'attenzione.
FN
Newsgroup: it.comp.lang.c
Titolo: Parte di codice che esegue indipendentemente... [C]

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** This space intentionally left **---

 Grazie, e ciao.
Lascia a te la scelta sulla gestione dei segnali, ma per quanto riguarda
le variabili condivise ti propongo una PIPE tra i due processi.
Buon divertimento.

 anch'esso... Inoltre, il subprocesso dovrebbe poter scrivere delle
A parte che fare un loop di polling non sempre e' consigliato e sarebbe
meglio usare qualcosa come gli "interrupt"... comunque puoi usare i thread.
Ora come ora non mi ricordo dove ho trovato la documentazione per linux
(sicuramente sulle pagine man c'e' qualcosa), ma li ho usati senza
difficolta' (almeno per un utilizzo proprio base base).
Un thread e' un processo figlio che condivide i dati. Io li ho usati per un
programma client-server multitask dove un modulo era un semplice "kernel"
per la spedizione di pacchetti in rete (un mini TCP) e il programma
principale infilava i pacchetti nel bufer di questo...
Tanto per darti un'idea.
(quando l'ho scritto un anno fa i thread mi avevano dato qualche problema
sul Solaris, ma su linux andavano benissimo)
--
Stefano Lissa
http://www.dei.unipd.it/~dolce
ICQ: 37248103


Potresti usare memoria condivisa (include/sys/shm.h) e semafori
(include/sys/sem.h)
mi sembra tutto piu' pulito.
Pezzi di codice velocemente non ne ho sotto mano,
se ti servono scrivimi e ti mando degli esempi fatti all'universita'  dei
classici problemi
dei 5 philosofi, condivisione risorse ... (che girano sotto LINUX), parto
sempre da la'
quando affronto un problema multitask
Ciao.
--
---------------------------------------------------------------
 
ma...@aurora.it
                            Federico Manzan
Linux - Debian 2.1                      Conegliano - TV - Italy
---------------------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: novellino

salve a tutti
sto studiando dal K&R,
ma già a pag.19 la prima difficoltà..........
in un esempio mi viene chiesto di calcolare i caratteri,
for (c=0, getchar()!=EOF; ++c)
ecc. ecc.
EOF = ctrl+z sul mio win... (mi è stato spiegato ), lo digito e il programma
non mi degna di una risposta...
raggiro il problema sostituendo a EOF , '\n'... nel listato...
il problema vero è che a pag. 19 l'altro esempio mi chiede di contare le
linee... con l'EOF non funziona...
(può essere colpa del compilatore??? del sistema operativo???)
cmq... come faccio ad aggirare il problema stavolta???
grazie cmq
    Francesco


wrote:


(puņ essere colpa del compilatore??? del sistema operativo???)
Sei sicuro che hai dichiarato la variabile come 'int' invece
che come 'char' o peggio 'unsigned char' ?
EOF non e' un carattere e non puo' essere rappresentato
correttamente da un char; un loop che facesse
   char c;
   while ((c=getc(f))!=EOF)
   {
     ...
   }
non sarebbe corretto; quello che avviene e' che la chiamata
getc restituisce un int che viene poi troncato (per farlo
stare dentro la variabile c) e viene quindi riconvertito
in int per il confronto con con EOF.
Se, come avviene in molti casi, EOF corrisponde a -1 ecco
che il carattere 0xFF farebbe ingiustamente terminare il
loop se i char hanno segno, mentre si avrebbe un loop
senza fine se i char non hanno segno (alcuni compilatori
pero' ti avviserebbero in questo caso che stai confrontando
un unsigned con una costante negativa).
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 ma già a pag.19 la prima difficoltà..........
[root@fokhouse /tmp]# cat linee.c
#include <stdio.h>
int main (void)
{
        int c, nl = 0;
        while ((c = getchar()) != EOF)
                if (c == '\n')
                        ++nl;
        printf("Hai inserito %d line%c.\n", nl, (nl == 1) ? 'a' : 'e');
        return 0;
}
[root@fokhouse /tmp]# gcc -o linee linee.c -Wall -ansi -pedantic
[root@fokhouse /tmp]# ./linee
Questa è la prima linea
Questa è la seconda linea
Questa è la terza linea
Hai inserito 3 linee.
[root@fokhouse /tmp]#
Ricordati di dare l'EOF (CTRL+D in Linux, CTRL+Z sotto DOS) su una riga
vuota.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)
Newsgroup: it.comp.lang.c
Titolo: Editor Binario Decimale (non esadecimale)

Conoscete un buon editor decimale nel vero senso della parola?
Quello che ho (PSPad) esadecimale...
 
ciao


ops... intendevo BINARIO

 ciao
 
Editor, binario decimale o esadecimale non c'è alcuna differenza.
okteta o hexedit
 
 
http://lmgtfy.com/?q=binary+editor&l=1
 
 
 


 
Come ti hanno detto, editor binario-esadecimale.. non c'è l'uno senza 
l'altro.
In ogni caso il mio preferito è "bless" ( 
http://home.gna.org/bless/
 )
senza dubbio[*]. L'unica scocciatura è che dipende dalle librerie "mono"
e per esempio sulla mia installazione di ArchLinux, solo installando bless
si scarica 34MB di pacchetti che diventano 145MB una volta installati.
Se cerchi soluzioni più leggere, ce ne sono alcuni basati su ncurses
come "hexedit" (ce n'è uno omonimo per windows: 
http://www.hexedit.com/
)
oppure "beaver" che ha un'interfaccia leggera basata su
gtk+2: 
http://beaver-editor.sourceforge.net/index.html
 
 
 
[*] Code bless you! -.-
 
-- 
Vincenzo Mercuri

Newsgroup: it.comp.lang.c
Titolo: Dove posso trovare un compilatore

Dove posso trovare un compilatore freeware per scrivere programmi in C

 Dove posso trovare un compilatore freeware per scrivere programmi in C
Nel sito di Delorie trovi il DJGPP (non ho l'indirizzo sotto mano).
EMG

Dove posso trovare un compilatore freeware per scrivere programmi in C
http://www.delorie.com/djgpp/zip-picker.html
Skyscraper (apprezzatelo adesso : eviterete la coda)
----------------------------------------------------
 
andrea_...@bigfoot.com
----------------------------------------------------
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

Scusa ma non ci capisco niente, mi puoi dare un indirizzo preciso
oppure un nome del programma che cercherň poi su volftp?
Grazie comunque


oppure un nome del programma che cercherr poi su volftp?
Non credo che ci sia un sito piu' facile da utilizzare di quello che ti ho dato,
comunque il GNU C Compiler e' stato convertito per MS-DOS e viene distribuito
come DJGPP.
Trovi tutte le informazioni a proposito al sito : 
http://www.delorie.com

Newsgroup: it.comp.lang.c
Titolo: Libreria Conio.h help...

Chi ha info su questa libreria per Borland  mi puo' spedire una mail per spiegarmi quale libreria utilizzare sotto Unix che implementi le stesse funzioni: gotoxy(x,y) e clrscr; ???
Rispondete via mail che' ho problemi con i newsgroup.
grazie
Antonio
-- 
as57...@silab.dsi.unimi.it
jac...@dada.it

 
ciaoz
Ho sentito urla di sudore... che schifo...
--
Michel <ZioBudda> Morelli		  
mic...@michel.enter.it
 
http://ziobudda.enter.it
Problemi con Linux ?    mailto:
li...@saturn.media.dsi.unimi.it

Newsgroup: it.comp.lang.c
Titolo: problemino

vi pongo il mio problema sperando che possiate aiutarmi
supponiamo che io debba ricevere una stringa di caratteri di lunghezza max
64 con carattere terminatore '\n', come posso poi utilizzare la stringa (la
cui lunghezza non è necessariamente 64), escludendo il carattere
terminatore?
grazie
--
<< m @ c y >>
aErOsMiTh   FoReVeR

 terminatore?
void Funzione(char *str)
{
    int i=0;
    while((str[i]!='\0')&&(str[i]!='\n'))
        ++i;
    str[i]='\0';
    printf("<%s>\n",str);
}
Ecco un esempio.
Ricevo la stringa. Fino a che non incontro il terminatore di stringa (\0)
oppure \n (il TUO terminatore di stringa) allora ciclo. Quando mi fermo e'
perche' str[i] e' o \0 o \n.
Se e' \0 ci metto \0, rimane uguale e chi se ne importa ;-)
Se e' \n ci metto \0 e quindi sostituisco il TUO terminatore con il
terminatore standard.
Ecco che in entrambi i casi la printf si comporta come tu ti aspetti.
Se invece vuoi che \0 non sia un terminatore ma SOLO \n, allora mangiati i
\0 e sostituisci il primo \n con un \0 (se vuoi utilizzare la printf o altre
funz. standard). Se non ti interessa usare funzioni standard scrivitene una
(o piu') tu che usino come terminatore \n e non \0, in questo modo non devi
fare alcuna sostituzione.
Beh, per finire se ti serve modificare la stringa e non stamparla:
<CODE>
void Funzione(char *str)
{
    int i=0;
    while((str[i]!='\0')&&(str[i]!='\n'))
        ++i;
    str[i]='\0';
    // printf("<%s>\n",str);
}
int main()
{
    char a[]="Tommy\nTommy";
    printf("<%s>\n",a);
    Funzione(a);
    printf("<%s>\n",a);
     return 0;
}
</CODE>
Come vedi in Funzione() abbiamo commentato la parte che stampa, non ci
interessa.
In main() creiamo la stringa a che contiene "Tommy\nTommy".
Se la stampiamo otteniamo:
<Tommy
Tommy>
Come possiamo vedere eseguendo main().
Dopo la chiamata a Funzione(a), la stessa printf stampa invece:
<Tommy>
Ecco l'output del programma:
<OUTPUT>
<Tommy
Tommy>
<Tommy>
</OUTPUT>
Spero possa esserti stato di aiuto.
Tommy

terminatore?
char s[64];
int i;
for (i = 0; s[i]; i++)
{  
    if (s[i] == '\n')  
    {
       s[i] = '\0'; break;
    }
}
-- 
Andrea Laforgia
www.geocities.com/andrealaforgia
"640kb of memory should be enough for anyone." -- Bill Gates.
Newsgroup: it.comp.lang.c
Titolo: Librerie Hash

	Qualcuno conosce o usa delle librerie che implementino 
	(possibilmente dotate di codice sorgente) le tabelle
	HASH in C ANSI/ISO ?
	Grazie,
	P.
 
--
www.lulli.net

 	HASH in C ANSI/ISO ?
Dai un'occhiata al file hashlib.zip che puoi trovare qui:
 
http://cbfalconer.home.att.net/download/
PS: Hai il delimitatore della firma sbagliato: vedi
 
http://en.wikipedia.org/wiki/Signature_block
-- 
Enrico `Trippo' Porreca

Newsgroup: it.comp.lang.c
Titolo: un senso alle liste lineari

Dopo aver imparato come funzionano le liste  e la gestione delle sequenze
ordinate di dati, ho iniziato ad usarle al lavoro abbondantemente al posto
degli array
problema: col tempo le specifiche possono cambiare ed ora devo accedere
ai dati non piu' in modalita' sequenziale e crescente...
domanda:mi piace il c e vorrei imparmi ad usarlo in tutta la sua interezza,
ma ha ancora senso utilizzare le liste al posto degli array, visto che con
le macchine moderne lo spreco di memoria puo' non essere il problema principale;
purtroppo le specifiche possono anche cambiare e rimettere mano sul codice
(anche se il proprio) non e' semplice...
ciao e grazie in anticipo del consiglio
-- 
Posted from 
mail-4.tiscalinet.it
 [195.130.225.150] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 le macchine moderne lo spreco di memoria puo' non essere il problema principale;
Le liste hanno caratteristiche e prestazioni diverse rispetto agli
array. Un array č veloce nell'accesso al singolo elemento (accesso
casuale) ma non nell'inserimento o cancellazione. La lista, al
contrario, č molto efficiente per quanto riguarda inserimento e
cancellazione (basta spostare due puntatori) ma supporta solo l'accesso
sequenziale. Quindi, utilizzare l'uno o l'altra dipende da quali
operazioni sono piů frequenti nel tuo programma.
EMG
Newsgroup: it.comp.lang.c
Titolo: Mi sanguina la schiena...

Dopo essermi frustato a lungo in segno di penitenza, le ferite dolgono
e vengono cosparse di sale...
Contemporaneamente il pubblico mi sputa addosso...
Vi autorizzo a lapidarmi pubblicamente...
Argh!...
#include <stdio.h>
int main(void)
{
  FILE *miofile;
  if((fopen(...)) == NULL); /* PUNTO E VIRGOLA?!?!? */
  {
    printf("Errore nell'apertura del file");
    return 1;
  }
  return 0; /* <- warning, unreachable code dal BCC*/
}
Anyway... non ho potuto accedere alla macchina incriminata (si è
rotta), ma quanto vedete sopra basta ed avanza a polverizzare le
precedenti convinzioni...
Non abbiate pietà... me lo merito...
(frust!...)
AHIA!...
(frust!...)
...

 ha scritto nel messaggio
news:ljah8us6s4cla76l1...@4ax.com...

Avendo la definizione FILE *miofile;
Per aprire il file di avente nome "
dati.in
" ed associarlo a miofile si
esegue la seguente operazione di apertura:
miofile = fopen("
dati.in
", "r"); /*apertura in lettura*/
file aperto per scriverci dentro qualcosa esempio:
int main ()
{
 FILE  *fpunt; /* puntatore al file nomefile.dat*/
 if ((fpunt = fopen("nomefile.dat", "w")) = = NULL) /*nella if non ci vuole
la virgola*/
 printf("Il file non puo' essere aperto\n");
 else {
   /*sequenza istruzioni da compiere*/
        }
  fclose(fpunt);
  }
return 0;
 }

  fclose(fpunt);
L'else in questo caso non è necessario, ma non è un errore, mentre mi
sembra un errore mettere l'istruzione fclose fuori dal blocco di
istruzioni dell'else, o in alternativa mettere un return nel blocco
dell'if (vedi sotto).
Quando fpunt è NULL, l'else non viene eseguito, ma la fclose si.
In questo caso comunque fclose non dovrebbe fare danni, oltre a
restituire EOF, ma mi sembra brutto, non trovi anche tu? :-)
Meglio scrivere
if((fpunt fopen(...)) == NULL)
{
  fprintf("Errore!");
  return errore;	/* errore è un int di tua scelta, o che
rispetta le specifiche del programma */
}
<istruzioni varie>
fclose(fpunt);
In questo modo sarai sicuro che in caso di errore di apertura del file
fclose non verrà eseguito.

 ha scritto nel messaggio
news:9kmh8u41fgadro15r...@4ax.com...

questo e' cio che io avevo scritto:
int main ()
{
 FILE  *fpunt; /* puntatore al file nomefile.dat*/
 if ((fpunt = fopen("nomefile.dat", "w")) = = NULL)
 printf("Il file non puo' essere aperto\n");
 else {
      /*sequenza istruzioni da compiere*/
       fclose(fpunt);
     }
return 0;
 }
Mi sembra corretto!! se non metto l'else cosa scrivero' dentro il file?

Mi sembra corretto!! se non metto l'else cosa scrivero' dentro il file?
Adesso è corretto, prima fclose era fuori dall'else.
E poi non ho mai detto che l'else fosse sbagliato. ;-)
Non mi piaceva e io avrei messo un return all'interno del blocco if,
ma è solamente questione di gusti.
Newsgroup: it.comp.lang.c
Titolo: ciclo for ed incremento

Saluti.
 
Ho un nuovo dubbio, anche se riguarda una questione di stile e non il 
linguaggio in se.
 
Ho visto diverso codice in cui il ciclo for viene usato come:
 
  for (i = 0; i < N; i++) ...
 
 
Dato che questo è equivalente a fare:
 
  for (i = 0; i < N; ++i)
 
come mai spesso si sceglie la prima forma?
 
 
 
Grazie  Manlio


Abitudine
Il compilatore,quando ottimizzerà,emetterà lo stesso  codice
 


Di solito si sceglie la seconda, a dire il vero.
 
Le ragioni sono due, entrambe di abitudine:
- nei tempi andati alcuni compilatori riuscivano ad ottimizzare solo la
seconda.
- in tempi più recenti, visto che spesso un programmatore C scrive anche in
C++, è possibile che quella i non sia una variabile ma un oggetto, dove il
pre-incremento non comporta una copia come il post-incremento.
 
Anch'io personalmente scrivo solo con pre-incremento ovunque, visto che stare
a pensare cosa usare nei vari for è un po' una perdita di tempo quando così
facendo va bene sempre ;)
 
Ciao!

 pre-incremento non comporta una copia come il post-incremento.
Vero, ma un incremento di prestazioni(se c'e') e' del tutto marginale:
se occorre ottimizzare, si deve lavorare sull' algoritmo realizzato e
sul profiling complessivo del codice.
Se si considera manutenzione, durata nel tempo etc. un programma deve
funzionare nello stesso modo con pre o post incrementi, che possono 
essere usati a piacere e diversamente da persone diverse in tempi
diversi ;-)
 
AA.
 

 [...]
 
 
Ciao  Manlio

 equivalenti mi voglio abituare ad uno stile consistente.
 
Per ragioni di chiarezza io uso sempre la forma
	for (i = 0; i < N; i += 1)
riservando l'uso degli operatori di pre/post-incremento ai casi in cui 
sia veramente necessario come ad esempio quando si tratta di indici:
	a = b[++i]; oppure c = d[i++];
o di assegnazioni siano essi interi che puntatpti:
	a = ++b;
	A_ptr = B_ptr++;
evitando di dover scrivere 2 istruzioni.
 
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

      for (i = 0; i < N; i += 1)
per quale motivo i+=1 dovrebbe essere piu' chiaro di i++ o ++i?
Quella sintassi anzi e' piu' oscura essendo tipica del C tanto
quanto post/pre incremento :-)
se proprio vuoi essere chiaro (!) avresti dovuto usare la forma:
   i= (i+1)
 
IMHO meglio i++/++i :-)
 
AA.
 
 
 

 [..]
 
Ciao!

 IMHO meglio i++/++i :-)
 
Questione di gusti!!  Io ho sempre trovato oscuro vedere espressioni 
appese come i++; se non sono parte mdi uno statement più complesso.


 [...]
 
 
Ciao  Manlio

 appese come i++; se non sono parte mdi uno statement più complesso.
:-)
 

 facendo va bene sempre ;)
 
Anche perche' vim mi espande nella seconda... ;)
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
Newsgroup: it.comp.lang.c
Titolo: Problema del "ritorno a capo"

Salve a tutti,
ho un'applicazione che scrive un file di testo su piattaforme UNIX e NT.
Su alcune piattaforme UNIX il file non viene scritto correttamente perchè
invece di avere dei ritorni a capo mi ritrovo tutte le linee concatenate con
il simbolo di un quadratino.
La chiamata che scrive in questo file è naturalmente una fprintf("....\n");
So che il problema verrebbe probabilmente risolto aggiungendo un "\r" o
qualcosa di simile ma la mia domanda è: da cosa dipende questo problema?
compilatore? sistema operativo?
come risolverlo in maniera univoca una volta per tutte senza dover creare
versioni alternative?
Grazie
bye
Johnny

 versioni alternative?
Chiedendo alla Microsoft di abolire il "traslate mode"?
Ok, Ok quest'ultima affermazione e' solo polemica :-)
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


già trovati grazie... infatti sto cercando di integrarli nella mia
applicazione
Almeno ora ho capito meglio il problema.
Ciao Johnny
Newsgroup: it.comp.lang.c
Titolo: Problema di IPC

Salve
vi espongo brevemente il mio problema.Sono in ambiente unix.
Ho due processi A e B.
A ha una funzione che "forka" e
1) Lancia il processo B nel figlio con exec.
2) Si collega tramite FIFO pipes a B nel padre e ritorna al programma 
principale.
Domanda 1: come posso fare per dire al padre di aspettare che B abbia 
creato e approntato correttamente le pipes prima di tentare il 
collegamento? Perchè essendo un problema di concorrenza, il corretto 
collegamento con le pipes è indeterministico e varia a seconda del 
processo "che arriva prima" a quel punto d'esecuzione. Ho pensato di 
usare un "lockfile" (ovvero che B, quando è pronto e ha creato tutto, 
,scrive un file temporaneo la cui comparsa dice ad A di proseguire con 
il collegamento), oppure tentare con un mutex e una condition variable 
... voi come fareste?
Domanda 2: fatto questo, i processi A e B interagiscono ... il problema 
però è che B è instabile e può crashare facilmente, e vorrei monitorarne 
lo stato in qualche modo in modo da notificare A dell'errore (non è 
bello, ad esempio, che al crash di B, A si metta in attesa perenne sulla 
  FIFO...). Anche qui ho pensato a varie cose, ad esempio creare una 
specie di serverino "monitor" cui i due processi devono spedire 
periodicamente un messaggio su un socket ... se manca quello significa 
che uno dei due è morto... ma mi sembra una soluzione un po'complicata.
Che dite?
Grazie a chi avrà avuto la pazienza di leggere :)
Paolo

   FIFO...). Anche qui ho pensato a varie cose, ad esempio creare una
[cut]
la soluzione più semplice è installare un sighandler su SIGCHLD.
Ciao.
-- 
none

 Ciao.
All'atto pratico è quello che ho provato a fare ... ma siccome in realtà 
come ho spiegato sopra ho una funzione e non un programma, non è che 
dopo il ritorno della funzione 'init' di A il sighandler customizzato va 
a farsi benedire?
Ciao
Paolo
http://www.vortexmind.net

 a farsi benedire?
no non dovrebbe, anche se non ho mai provato una cosa del genere.
Se sei sicuro (dopo aver provato) che la cosa non funziona, puoi forkare
nuovamente nel padre e monitorare la situazione tramite:
(idee random)
- waitpid con WNOHANG
- stat o access di /proc/PID
Ciao
-- 
none

 > no non dovrebbe, anche se non ho mai provato una cosa del genere.
 > Se sei sicuro (dopo aver provato) che la cosa non funziona, puoi forkare
 > nuovamente nel padre e monitorare la situazione tramite:
Ho riprovato come hai detto tu installando un signal handler su SIGCHLD 
nella funzione 'init'. A quanto pare la cosa funziona, perchè ora se 
provo ad esempio a killare il processo B in un punto qualunque 
dell'esecuzione, mi viene eseguita l'azione specificata nell'handler (al 
momento una banale printf).
Grazie!
-- 
Taglia
==========================
Fr33 your MinD:
http://www.vortxmind.net

Newsgroup: it.comp.lang.c
Titolo: Su virgilio leggo:

  CATANIA-NAPOLI 3-0 - Occasionissima per il Napoli: Lavezzi si libera e 
mette in mezzo per Calaiņ, che calcia sul fondo a porta vuota.
Qualcuno me la racconta?
Si ritira pure Calaiņ a fine stagione?
Quand č che Lavezzi si leva la maglia e se ne va? 

scusate, sbagliato NG
Newsgroup: it.comp.lang.c
Titolo: utilizzo delle Imapi per masterizzare

qualcuno puo suggerirmi come si utilizza l'API Imapi per controllare un
dispositivo CDWriter dall 'interno di un programma c
grazie

 dispositivo CDWriter dall 'interno di un programma c
Ciao,
Questo newsgroup si occupa del linguaggio C in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux: it.comp.os.linux.development
Grazie,
Andrea Laforgia

Newsgroup: it.comp.lang.c
Titolo: Funzione Ricorsiva

Qualcuno di buona volont� mi da una sistemata a questo programmino?!
Grazie.
 
#include <stdio.h>
#include <stdlib.h>
 
int mi1(int x, int y);
int mis2(int x, int y);
 
int main()
{
int x1, y1;
printf("Inserire 2 Numeri \n");
printf("Primo numero: ");
scanf("%d", &x1);
  printf("Secondo numero: ");
scanf("%d", &y1);
  mis2(x1, y1);
  mi1(x1, y1);
return 0;
}
 
int mis2(int x, int y)
{
   if(y==0)
     return 0;
   else
      return(mi1(x, mis2(x, --y)));
}
 
 

 
 
Che dovrebbe fare?
La funzione mi1 non è neppure definita.
 
Ciao!
Newsgroup: it.comp.lang.c
Titolo: LEGGIMI FARAI UN'OPERA BUONA

Rispondi 
a:ME5...@mclink.it
S.O.S.
Cerco disperatamente materiale on line,tipo dispense o appunti universitari
su 2 argomenti: algoritmi e linguaggio Pascal.
Non essendo uno studente di ingegneria o informatica il mio problema č che
siano scritti in maniera accessibile e che non presuppongano una grande
conoscenza matematica.
Il mio eame di inf.generale incombe. AIUTATEMI!!!!



Newsgroup: it.comp.lang.c
Titolo: API vs COM

Devo utilizzare una DLL commerciale non conforme a COM/COM+ in C# (che sto
imparando...)
La DLL è accompagnata da un file .h dove viene definita l'interfaccia alle
funzioni, le strutture dati ecc.
Volevo sapere se esiste un modo per ottenere una nuova DLL o un file .tlb
che possa poi essere processato da tlbimp.exe
Vorrei evitare di scrivere un wrapper ex-novo...
Grazie
Ciao

 Vorrei evitare di scrivere un wrapper ex-novo...
allora direi che dovresti rivolgerti su it.comp.programmare.win32
qui sei OT.
-- 
RiK0
Non credo negli schemi non vincenti.

Newsgroup: it.comp.lang.c
Titolo: realizzare un servizio NT

Salve a tutti,
Vorrei sapere se è possibile creare in c un servizio windows NT/XP e dove
posso reperire qualche esempio.
Grazie a chiunque possa aiutarmi!
Luca


Chiedi su it.comp.programmare.win32 - sapranno aiutarti meglio che qua.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 ha scritto nel messaggio
news:cm5o5l$ot7$2...@le1.cs.unibo.it...

Newsgroup: it.comp.lang.c
Titolo: conversione funzione c++ -> c

Avrei bisogno di una dritta su come convertire una funzione c++ in una
funzione c.
La funzione in questione è questa:
// ******************************************************************
void * byteArray_to_CType(JNIEnv *env, jbyteArray arr)
{
int i;
void * v = NULL;
jbyte tmp;
if (arr){
        jsize size = env->GetArrayLength((jarray)arr);
        jbyteArray b = env->NewByteArray(size);
        for(i=0;i<size;i++){
                env->GetByteArrayRegion(arr,
                                        i,
                                        1,              
                                        (jbyte*) &b[size-1-i]);
                }
                v = (void *)b;
        }
        return v;
}
// *********************************************************************
e io l'ho convertita così
// *********************************************************************
void * byteArray_to_CType(JNIEnv *env, jbyteArray arr)
{
int i;
void * v = NULL;
jbyte tmp;      
        if (arr){
        jsize size = (*env)->GetArrayLength(env,(jarray)arr);
        jbyteArray b = (*env)->NewByteArray(env,size);
        for(i=0;i<size;i++){
                (*env)->GetByteArrayRegion(env,arr,
                                                i,
                                                1,              
                                                (jbyte*)&(b[size-1-i]));
                        }
                v = (void *)b;
        }
        return v;
}
// *********************************************************************
e ottengo quest'errore sulla riga dove passo il parametro castato a (jbyte*)
alla funzione GetByteArrayRegion.
dataProvider.c: In function `byteArray_to_CType':
dataProvider.c:390: error: invalid use of undefined type `struct _jobject'
dataProvider.c:390: error: invalid use of undefined type `struct _jobject'
dataProvider.c:390: error: dereferencing pointer to incomplete type
Qualche dritta?
-- 
Taglia
=========
http://www.vortexmind.net
http://www.tgplanes.com
http://www.netwargamingitalia.net

 dataProvider.c:390: error: dereferencing pointer to incomplete type
Includere il file .h che definisce questa struttura. Non so pero' 
perche' non ti desse lo stesso errore nella versione C++ (bada - non ho 
letto il codice, solo l'errore).
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Linux registered user 299762 @ Linux registered machine 213003

 Qualche dritta?
Il codice che hai postato è del tutto privo di significato, perché non c'è
nessun indizio su come sono definiti i vari tipi di dati in gioco: JNIEnv,
jbyteArray, jbyte, jsize.
Bisognerebbe sapere sia come questi tipi (classi?) erano definiti nella
versione C++ sia sono stati riscritti nella versione C.
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
Newsgroup: it.comp.lang.c
Titolo: Librerie Statistiche in C

Ciao a tutti
  Qualcuno di Voi sa di librerie statistiche scritte in C?
GRazie in anticipo.
                                ALEX

 ha scritto nel messaggio
news:1gux99g.rt45hy14y1jrcN%magi...@inwind.it...



Architecture: i386
Source: r-base
Version: 2.0.1-4
Recommends: r-base-core (= 2.0.1-4), r-base-dev (= 2.0.1-4)
Filename: pool/main/r/r-base/r-mathlib_2.0.1-4_i386.deb
Size: 286146
MD5sum: 5b697eb0507670ff8fcf85ca883f68ef
Description: GNU R standalone mathematics library
  R is `GNU S' - A language and environment for statistical computing
  and graphics. R is similar to the award-winning S system, which was
  developed at Bell Laboratories by John Chambers et al. It provides a
  wide variety of statistical and graphical techniques (linear and
  nonlinear modelling, statistical tests, time series analysis,
  classification, clustering, ...).
  .
  R is designed as a true computer language with control-flow
  constructions for iteration and alternation, and it allows users to
  add additional functionality by defining new functions. For
  computationally intensive tasks, C, C++ and Fortran code can be
  linked and called at run time.
  .
  This packages provides the libRmath shared and static libraries which can
  be called from standalone C or C++ code.
Newsgroup: it.comp.lang.c
Titolo: Problema con double

Salve,
ho il seguente pezzo di codice:
#include <stdio.h>
void f (double x, double y) {
     printf ("%f  %f", x, y);
}
int main() {
    double a, b;
    scanf("%f", &a);
    scanf("%f", &b);
    f(a, b);
    return 0;
}
Non capisco perché qualsiasi valore io inserica mi stampi:
0.000000  0.000000
Forse sbaglio a specificare il tipo dei dati in ingresso?
Grazie 


Per la verità sia in ingresso sia in uscita, per i dati double nelle
stringhe di formato per scanf e printf devi usare %lf, invece %f è per i
float.
Ciao
Giuseppe

 float.
Ah, pensavo si usasse %f come per i float.
Grazie 

 float.
non e' proprio esatto,
la scanf discrimina tra double (%lf) e float (%f).
la printf non discrimina, e vuole %f sia per i double che
per i float perche' fa un cast a double implicitamente.
Su certi compilatori %Lf indica i long double.
Permettetemi di ripetere, come faccio spesso, che
e' meglio non prendere l'abitudine ad usare i float.
L'uso dei float, con la loro scarsa precisione, puo'
essere causa di indicibili sofferenze se si fanno
programmi di tipo numerico.
Naturalmente se uno deve memorizzare in RAM svariati milioni
di numeri in floating point puo' darsi che gli facciano
comodo i float, ma andrebbero appunto usati solo in
occasioni particolari e avendo ben presente cosa
ci si fa sopra e le loro limitazioni.
ciao,
g.


So che hai ragione però permettimi una battuta, Noixe è stato indotto in
errore proprio dall'aver usato dei double!
Ciao e complimenti a vanvera per la formidabile conoscenza del linguaggio!!!
Giuseppe

 errore proprio dall'aver usato dei double!
Si ma perché non conoscevo il carattere da utilizzare per la stringa di 
formato. Una volta scoperto il problema è risolto.
I problemi legati all'uso di float sono molto più gravi, infatti c'e' 
rischio di perdere precisione con conseguenti errori nei calcoli.
Ciao