mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: switch

Come funziona al suo interno uno switch?? fa tanti if quanti sono i case???
cioč, se io ho uno switch con "tot" case, e in nessuno di questi c'č un
istruzione di ritorno, la macchina compie "tot" if??? in caso affermativo,
come si puň evitare ciň??
Mi spiego meglio: ho un applicazione che calcola il tempo e per ogni x tempo
passato deve svolgere una determinata azione,
quindi calcolo il tempo attuale, lo sottraggo al tempo di inizio del
programma e poi faccio lo switch di questo risultato.
mettiamo che il mio programma svolga un'azione ogni 10 secondi e duri 5
minuti, in questo caso avrei 30 case.
quando il tempo trascorso č 200 secondi, lui controlla che sia 10, 20, 30,
40, ecc.ecc.????
Cavoli, quindi se la mia applicazione durasse un ora, avrei un sacco di
cicli macchina ogni 10 secondi, almeno che io non spezzi il mio switch in +
switch, non c'č una soluzione migliore???
Grazie!!
K

 Come funziona al suo interno uno switch?? fa tanti if quanti sono i case???
Un compilatore sufficientemente ottimizzato crea una tabella di salti
nel codice oggetto, usando come indice il valore analizzato dal case.
Quindi il costo dell'operazione, teoricamente, dovrebbe essere O(1) e
non O(n), come invece avviene per la catena di "if".
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 switch, non c'è una soluzione migliore???
Beh se ci fai caso i numeri che vuoi controllare sono tutti multipli di 10
(10,20,30,40,50...), quindi dovrebbe essere sufficiente fare:
 if (!(secondi % 10))
 {
    //tuo codice
 }
Ciauz, Spider


grazie, ma era solo un esempio ;o)
e cmq le azioni sono diverse, non sono le stesse ogni x secondi.

 e cmq le azioni sono diverse, non sono le stesse ogni x secondi.
Ad ogni modo se le azioni si ripetono si può usare questo sistema,
eventualmente con + di un if, altrimenti mi sa che ti tocca arrangiarti con
uno switch... ma dimmi una cosa: l'azione cambia ogni 10 secondi? cioè in
un'ora avresti 360 azioni diverse? =)
Ciauz, Spider

 wrote in message
news:v3WB8.23853$
US3.5...@twister1.libero.it

Perche' no ?


 Perche' no ?
Beh, diciamo che codare 360 azioni diverse non č una cosa molto divertente
=)
Ciauz, Spider


e invece si.... e' un gioco di astronavi, e io in quel modo controllo il
tempo, e a ogni "x" tempo succede qualcosa no??
dopo 10 sec arriva un astronave nella pos x1,y2, dopo 17 può arrivare un
arma, ecc.ecc.
conosci un metodo migliore??

 conosci un metodo migliore??
Beh io in una situazione simile preferirei creare delle tabelle che
contengano informazioni sul livello in corso, e poi scrivere il codice
necessario ad interpretare le tabelle. In questo modo il codice è unico e
puoi facilmente gestire + livelli, se ti serve :)
Ciauz, Spider

 wrote in message
news:FNcC8.27885$
5k4.6...@twister2.libero.it

Ho inteso la tua obiezione come "avere" 360 azioni diverse e non
"codare" 360 azioni diverse.  Avere un numero molto grande di
possibili azioni da compiere non e' impensabile.


 possibili azioni da compiere non e' impensabile.
Appunto, non è impensabile, ma a mio parere è abbastanza... "palloso" =)
Ciauz, Spider
Newsgroup: it.comp.lang.c
Titolo: Utilizzare tutta la memoria

Ciao a tutti e grazie in anticipo per l'attenzione.
Il mio problema è questo: come faccio ad utilizzare tutta la memoria fisica
disponibile sotto dos? Uso il Turbo C++ 3.0
Non riesco ad andare oltre i 64 kb di (credo) heap...bo?!
Ho gia provato con far e huge...ma nisba...ho anche cambiato il modello di
memoria ma....nisba...
non è che qualcuno mi manda un sorgente (non troppo complicato dato che sono
praticamente un principiante...^_^) esplicativo?
Non vorrei dover passare a WIN solo per la memoria.......
Ciao e grazie,
Tdx

 memoria fisica disponibile sotto dos? 
  Tutta-tutta-ma-proprio-tutta? 
  L'MS DOS a 16 bit vede due tipi di memoria: la memoria "normale" e
quella "estesa/espansa". La prima e` limitata a 640 KB ed e` suddivisa
in segmenti di 64 KB. Questo implica che non puoi allocare blocchi di
memoria superiori a questa grandezza, a meno che tu non ricorra a
blocchi multi-segmento, gestiti da alcuni compilatori mediante i
puntatori /huge/.
  La memoria superiore ai 640 KB e` gestita dai driver (HYMEM.SYS,
EMM386.EXE o altri) e ci si puo` accedere solo mediante i loro servizi.
Ti consiglio di chiedere in qualche newsgroup relativo alla
programmazione DOS per maggiori informazioni.
  Certo, poi c'e` la modalita` a 32 bit...
	Alla prossima,
		Marco

 disponibile sotto dos? Uso il Turbo C++ 3.0 <snip>
In DOS, esistono i modelli di memoria, a riguardo dei quali ti rimando
all'help del Borland, che e' abbastanza chiaro in merito.
Quello che userai e' il modello 'large', che ti permette di allocare
direttamente sino ad un Mega di memoria, tramite farmalloc (e relativa
farfree).
Se vuoi, in DOS, allocare piu' memoria, hai varie possibilita':
1) usi un extender, tipo il Pharlap
2) usi le chiamate XMS o EMS, sul sito Borland trovi esempi e
spiegazioni sul cosa sono e come si usano.
Ti ricordo che sotto dos 'puro' la memoria massima direttamente
indirizzabile e' di 1 Mb, per come sono mappati gli indirizzi: 16 bit
+ uno shift di 4 bit = 20 bit -> 1 Mb (da qui la storica opzione "FAST
A20 GATE ENABLE" che trovi in alcuni bios setup delle MB).
Andrea
 ('< ----------------+-------------------------------------
 /V\ Andrea  Rimicci | arimicci @@         Inet Abuse Dept.
<(_) ----------------+    aritaly. com     /__ /\  AR Italy
__~~____ Male, 33, Italian, C programmer__](__=_`)_________

 Non vorrei dover passare a WIN solo per la memoria.......
Basta che passi a linux o a dos P/M!
ciao

>Certo, poi c'e` la modalita` a 32 bit...
Ecco ecco : ) quella mi interessa.......... pero il mio compilatore č a 32
bit.....quasi quasi scarico il C++ builder 5.5 dalla borland...solo che non
riesco ad iscrivermi....

Disattiva i Cookies...
Ciiips
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/

La memoria superiore ai 640 KB e` gestita dai driver (HYMEM.SYS,
EMM386.EXE o altri) e ci si puo` accedere solo mediante i loro servizi.
superiore a 1.114.095 bytes (1088 Kb) per la precisione
Newsgroup: it.comp.lang.c
Titolo: Firmware

Ciao, devo realizzare un piccolo firmware per un PIC, so che è possibile 
realizzarlo usando come linguaggio il C anzichè l'assembler. Sareste in 
grado di suggerirmi qualche compilatore adatto? C'è molta differenza tra 
il C per programmare il PIC ed il C normale?
grazie


Qui si parla di standard C, quindi sei OT. Non saprei consigliarti 
onestamente un gruppo piu' adatto.
-- 
Mat/tia Belletti             - Graduate student @ 
cs.unibo.it
ICQ: 33292311                - email: 
mbel...@cs.unibo.it
IRC: RedGlow                 - site(s): 
http://mbellett.web.cs.unibo.it/
Red...@jabber.linux.it/Gaim
 - Linux user 299762 @ machine 213003


Chiedi su it.hobby.elettronica.digitale
Ciao

http://www.picant.com/c2c/c.html
http://www.ccsinfo.com/picc.shtml
http://www.htsoft.com/
Ciao.
Albeto

 onestamente un gruppo piu' adatto.
Scusa ma non è che stiamo un po' esagerando con queste proclamazioni di OT?
In fondo sta solo chiedendo se per una certa piattaforma è disponibile il
linguaggio C (appunto) e, se sì, se l'implementazione disponibile è o non è
standard (appunto).
Quando comincerà a chiedere "Ma a cosa serve il registro vattelapesca del
processore PIC?", allora gli si darà addosso tutti insieme. Ma per il
momento...
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Newsgroup: it.comp.lang.c
Titolo: Come evitare di far leggere  il path?

Salve a tutti, mi sapete dire se e possibile
aprire un file con write senza dare al comando
system("write %% miofile.doc") tutto il percorso del file stesso
che di volta in volta cambia cartella, bisogna
usare una qualche variabile di sistema o c'è qualche
funzione -non standard- per fare leggere tutto il percorso
del file che si vuole aprire.
Grazie a tutti
Ciao

[...]
.. ma quanti system devo dare?
se di volta in volta il file cambia cartella.
c'è un altro modo? funzioni , strane furoi standard? :-)
come sentivo ieri nel film I Robot, sequenze casuali di codice
che chiedono di unirsi e magari di sposarsi? ;-)
Cioa


puo' anche darsi che ci siano, ma qui usciamo dall'ambito del C
ed entriamo in quello del sistema operativo che stai usando.
Tanto per farti un esempio, per me "write" se invocato col system,
e' un comando interattivo che serve per comunicare con un altro utente e
non ho idea di cosa sia nel sistema che usi tu.
(In particolare non serve per aprire files).
In ogni caso mi sembra difficile che tu possa/debba usare due system
in cascata per cambiare directory.
Ogni system penso che invochi una shell diversa, quindi se cambi 
directory con una system con quella successiva l'hai persa.
Al limite dovresti fare tutto insieme
system("cd pippo/pluto; comando argomenti");
comunque tieni anche conto che l'argomento della system lo puoi anche
costruire:
char comando[1000];
char ilpath[100];
strcpy(ilpath,"miopath");
sprintf(comando,"comando %s/nomedelfile.doc",ilpath);
system(comando);
etc.etc.
ciao,
g.


Passarlo sulla linea di comando del programma?
Fare una ricerca del file nel file system?
Chiedere al regista del film?
Chiedere su it.ban.asimov?



... proverň!
Grazie
Ciao

[...]
... ok , grazie.
Ciao
Newsgroup: it.comp.lang.c
Titolo: Puntatorsi A "Strutture"

Salve a tutti avrei bisogno di un aiuto con un programma C.
Il problema è il seguente:
Scrivendo:
typedef struct{
            char nome[];
            int età;
           }tipoe;
definisco un tipo detto tipoe.
A questo punto se volessi accedere ad un singolo membro della struct dovrei
utlizzare il punto.
Nel momento in cui dichiaro invece un puntatore a tipoe per esempio:
tipoe  *pt;
se tento di accedere ad un singolo membro scrivendo pt.eta
ricevo dal compilatore(uso devcpp)un messaggio d'errore.
Potete dirmi qual è la sintassi corretta in quest'ultimo caso?
Vi prego di aiutarmi,per voi sarà una stupidata ma per me è importante dato
che ho l'esame fra breve...

 ricevo dal compilatore(uso devcpp)un messaggio d'errore.
Dovresti comprarti o avresti dovuto comprare un buon manuale di C, anzi un 
qualunque manuale di C.
Per accedere al campo dato il puntatore alla struttura devi fare
    (*pt).field
o utilizzare la notazione compatta (ma equivalente)
    pt->field
Questo perche' il punto ha una precedenza maggiore che non l'operatore di 
deferenziamento.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 ricevo dal compilatore(uso devcpp)un messaggio d'errore.
Per forza, un puntatore a una struttra non è una struttura, ma l'oggetto 
puntato lo è.
Per cui, per usare il punto, devi dereferenziare
    (*pt).eta
Visto che in pratica ci si ritrova spessissimo in questo caso per 
brevità esiste in C l'operatore ->, ovvero
    pt -> eta
che equivale alla forma di cui sopra, ma è più comodo da digitare.
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 qualunque manuale di C.
Ho il Kernighan,Ritchie come manuale secondo voi è valido?

 Ho il Kernighan,Ritchie come manuale secondo voi č valido?
Sě, uno dei migliori.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
Newsgroup: it.comp.lang.c
Titolo: usare due volte un argomento nelle macro

 used twice).
La domanda è: perché lo standard C dice che non si può usare due
volte nella macro lo stesso argomento?

volte nella macro lo stesso argomento?
   Probabilmente per proteggere la funzionalita` del codice gia`
scritto assumendo una singola valutazione. E forse perche` la doppia
valutazione potrebbe portare a errori noiosi, 
p.es
.
if (isdigit(c = getc(stdin)))
   printf("%c e` una cifra\n", c);
   oppure
if (isdigit(*(++p)))
-- 
S.L.

 volte nella macro lo stesso argomento?
lo standard permette di usare due volte lo stesso argomento in una macro;
non permette di implementare isdigit() e le altre funzioni della libreria
standard in quel modo ( se non altrimenti espressamente specificato nello
standard ). 
Riporto lo stralcio dello standard in questione:
<cite from="§7.1.4.1 ISO/IEC 9899:1999" >
 [...] Any invocation of a library function that is implemented as a
 macro shall expand to code that evaluates each of its arguments exactly
 once [...]
</cite>
naturalmente per isdigit non viene specificata la possibilità di un
comportamento diverso.
­-
sbirish

Newsgroup: it.comp.lang.c
Titolo: Hashing perfetto

Qualcuno sa consigliarmi dei siti ( anche non italiani) sull'hashing
perfetto?! Grazie.

perfetto?! Grazie.
Non e' esattamente il mio campo, comunque se ho capito il tuo problema
qui potresti (indirettamente) trovare un aiuto:
http://www.gnu.org/manual/gperf-2.7/gperf.html
Se no la tua ultima e definitiva possibilita' la trovi a partire da
qui: 
http://www.searchlores.org/flange.htm
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Grazie!

Newsgroup: it.comp.lang.c
Titolo: Nascondere un processo al task manager.

Qual'è l'instruzione in C++, per rendere un processo nascosto?
Nascosto sia nella barra dei task di windows sia al task manager di Windows
NT?
Grazie a chiunque mi risponda.
--
Posted from [146.133.224.4]
via Mailgate.ORG Server - 
http://www.mailgate.org

NT?
L'unica istruzione singola che conosco per fare una cosa del genere č:
exit(0);
o analoghe
--
Alessandro Monti
Newsgroup: it.comp.lang.c
Titolo: Funzione da decimale a frazionario

Salve a tutti, sono nuovo du questo NG
avrei bisogno di una funzione che trasformi un numero decimale in un
numero frazionario ( penso basata sulla frazione generatrice)
Qualcuno ha gia implementato una cosa di questo tipo e potrebbe
postare il codice?
Ciao e Grazie

 ha scritto:

Di per se questo non dovrebbe essere un problemone...con una sprintf 
(cioe` mettendo il double espresso in virgola fissa all'interno di una 
stringa) e un po' di elaborazione della stringa che ne risulta, dovresti 
riuscire nel tuo intento, il problema e` che l'aritmetica di un 
elaboratore e` un'aritmetica finita e di conseguenza l'insieme dei numeri 
di macchina cosiddetti 'real' non sono affatto dei numeri reali nel senso 
matematico del termine bensi` un sottoinsieme dei numeri razionali (da 
cui sono esclusi sicuramente tutti i numeri periodici...) di conseguenza 
la frazione generatrice ti servira` a poco ammeno che tu non inferisca 
che un certo numero e` effettivamente un numero periodico rappresentato 
su un numero finito di cifre....cosa non banale e soprattutto non sicura!
Quello che invece puoi sempre fare e` prendere il numero che hai infilato 
nella stringa per intero (togliendo la virgola e convertendolo in un int) 
e metterlo al numeratore e come denominatore prendere un multiplo di 10 
con tanti zeri quante sono le cifre decimali (e poi dividere numeratore e 
denominatore per il MCD con l'algoritmo di Euclide ad esempio...), 
basandoti cosi` esclusivamente sulle cifre della rappresentazione che la 
macchina ti mostra...ovviamente in questo caso la rappresentazione 
frazionaria sara` equivalente alla rappresentazione macchina che pero` a 
sua volta aihme` potrebbe non essere esattamente il numero che avevi in 
mente a causa della rappresentazione in aritmetica finita di cui la 
macchina dispone (ma questa e` un'altra storia...).
Spero di averti dato un buono spunto.
Ale
Inviato da 
www.mynewsgate.net

...

Ora proverò come dici
cmq i numeri decimali che andrei a elaborare non sono numeri decimali
"a caso" sono sempre divisione di 2 numeri interi e il risultato messo
in un long
che dovrei processare e ritrasformare nei due numeri interi iniziali
Newsgroup: it.comp.lang.c
Titolo: Problema con argc e argv

Ciao,
Come mai non mi funziona questo programma:
#include <stdio.h>
main(int argc, char **argv)
{
 /* programma per stampare gli argomenti della linea di comando  di un
file*/
   int i, t;
   FILE *fp;
   fp = fopen("mio.c", "r+");
   printf("argc = %d\n", argc);
   for(i = 0; i < argc; ++i)
          fprintf(fp,"argv[%d]:=%s\n", i, argv[i]);
}
Vorrei capire che cosa ho sbagliato
Grazie mille,
fAbiX

Come mai non mi funziona questo programma:
Non e' che hai le idee un po confuse ?
Voi visualizzarli a schermo o scriverli in un file ?
Naturalmente ,domanda ovvia,i parametri li hai passati .....vero ?


Il file mio.c esiste? non mi risulta che r+ crei il file se non
esiste. In questo esempio penso sia più opportuno usare il mode "w"
oppure "a" visto che non devi leggere dal file. Inoltre è anche
opportuno controllare il valore di ritorno della fopen() : se viene
restituito NULL non ha senso continuare l'esecuzione (in questo caso).
Prova a modificare la tua chiamata a fopen() con:
if( ! (fp = fopen("mio.c","w")))
	exit(1);
....
Newsgroup: it.comp.lang.c
Titolo: manuale per imparare da Zero

Qualcuno potrebbe segnalarmi un manuale di programmazione C ben fatto ?
grazie

 grazie
Il K&R. Kernighan Ritchie, C, ed italiana Jackson
o   oooooo	Gian Uberto Lauri        "So, are you working on finding
      o    o	
sa...@maya.dei.unipd.it
   that bug *now* or leaving it until
     o o				  later?" - "Yes!"

Newsgroup: it.comp.lang.c
Titolo: comunicare al server che ho finito di scrivere

Ciao a tutti.
Ho un applicazione client - server
Il client leggere una riga alla volta dallo stdin e la invia al
server, fin tanto che l'utente non inserisce il carattere ctrl+d.
Il server rimane quindi a leggere le righe che gli comunica il client.
Quando l'utente client digita ctrl+d l'inserimento termina, quindi il
client dovrebbe comunicare al server: "vedi che non ho più dati da
spedire", per cui il server dovrebbe passare alla fase successiva...
ho risolto in questo modo, ma forse è un po' contorta come cosa:
// CLIENT
while (fgets(msg, sizeof(msg), stdin) != NULL) {
	// invio la riga al server
	if (write(sockd, msg, sizeof(msg)) < 0) {
		printf("ERRORE: Impossibile inviare la riga al server!\n");
		return -1;
	}
}
// esco dal while quando leggo l'EOF. Per far capire al server che ho
terminato di inviare
// devo inviare il carattere EOF al server.
msg[0] = EOF;
if (write(sockd, msg, sizeof(msg)) < 0) {
	printf("ERRORE: Impossibile inviare la riga al server!\n");
	return -1;
}
// SERVER
while(read(sockdc, msg, sizeof(msg)) > 0) {
	if (msg[0] == EOF)
		break;
	printf("%s", msg);
}
printf("Ho terminato di leggere.\n");
E' un pasticcio vero?
E forse non funziona neanche sempre.
Suggerimenti?
Grazie

 Suggerimenti?
Con le modifiche suggerite ha più garanzie di interpretare 
correttamente l'EOF e non confonderlo con un valore 0xff all'inizio 
del messaggio.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

 *((unsigned int *)&msg[0]) = EOF;
No, non puoi usare il valore EOF in questo modo.
close(sockd); /* POSIX */
Se usi un BSD-conforming systema puoi anche usare la funzione
shutdown.
cc

 cc
Grazie ad entrambi.
Con la shutdown chiudendo il socket in scrittura dovrei risolvere!
La close non posso utilizzarla, in quanto il server dopo aver
manipolato i dati deve fornire una risposta al client...
corro a provare!

 cc
Risolto con shutdown!
Grazie
Newsgroup: it.comp.lang.c
Titolo: data storing [un po' OT]

Questo e' il ng meno inadatto per questa domanda.
Qualcuno conosce il tipo di campi utilizzato nello storing dei dati per i file wav o mp3?
Mi interessa particolarmente il sample-rate, la durata, il bittaggio.
Sono calcolandi o sono memorizzati in un header?
Mi interessano parimenti per i formati wav o mp3 perche' mi basta convertire l'uno nell'altro.
bye



www.wotsi.org
trovi info circa il wav e circa l'mp3
cmq ... ho usato una volta il formato wav per memorizzare
informazioni...
il sample-rate lo si registrava in un campo nell'header
la durata non veniva registrata, ma si determinava
togliendo la lunghezza dell'header da quella del file
dividendo x la lunghezza del sample
cod

 dividendo x la lunghezza del sample
mij@amnesiac:~$ host 
www.wotsi.org
www.wotsi.org
 does not exist, try again
:|
ho assolutamente bisogno di quelle info...
thx 1t

Mi interessa particolarmente il sample-rate, la durata, il bittaggio.
www.wotsit.org
Ciao, Obelix
Newsgroup: it.comp.lang.c
Titolo: per due enum: conflicting types. ARGH!

Ciao a tutti.
Oggi, inserendo una nuova enum nel mio progetto (flags.h):
enum DISPLAYTIME {
	NOTHING = 0, /* default */
	ONLYTIME,
	TIMEDATE,
	ONLYDATE /* not implemented */
}
mi sono accorto che il compilatore dava conflitto con un altra enum in
conn.h che conteneva una voce con nome "NOTHING", ovvero:
enum PART 
/* enum PART describes the side of a connection */
{
	NOTHING = 0,
	[eccetera]
Questo il messaggio d'errore:
In file included from tcpick.h:110,
                 from args.c:45:
flags.h:45: error: conflicting types for `NOTHING'
conn.h:17: error: previous declaration of `NOTHING'
Io casco letteralmente dalle nuvole, poiche' ero convinto che le enum
fossero trattate come dei namespace, quindi, interamente indipendenti,
mentre ora mi sembra che siano solo come dei banali #define.
Come fare a risolvere il problema? Devo pasticciare il codice e fare degli
obrobri PART_NOTHING e DISPLAYTIME_NOTHING ? Oppure sto sbagliando
qualcosa?
grazie,
-Francesco
p.s. voi le enum e le struct preferite metterle come typedef? Se non lo
fate come le contraddistinguete dalle variabili? Prima lettera uppercase?

 fate come le contraddistinguete dalle variabili? Prima lettera uppercase?
Solitamente a me piace usare delle typedef. Ma, ovviamente, e' questione 
di gusti.
E cmq... le variabili cosa c'entrano? Il nome di una enum e' un tipo, i 
vuoi valori sono costanti. Le variabili sono proprio l'unica cosa che 
non puo' venir nominata in questo contesto :-)
In ogni caso, puoi semplicemente scaricare i sorgenti di qualche 
software piuttosto "importante" se vuoi vedere delle convenzioni. Ma, 
come tali, sono e rimangono convenzioni, quindi una questione puramente 
personale. La cosa importante non e' la scelta, ma avere coerenza in 
quella scelta.
-- 
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

 importante non e' la scelta, ma avere coerenza in quella scelta.
Concordo sulla coerenza, infatti come hai potuto notare per la definizione
dei tipi struct e enum io ho adottato l'UPPERCASE.
In effetti: 
struct FOO * foo;
e' molto piu' elegante di:
struct foo * foo;
oppure
struct _foo * foo;
Ciao,
-Francesco
Newsgroup: it.comp.lang.c
Titolo: Stringa (evento da un srv COM Visual Basic)

Ciao a tutti,
vi prego non ditemi che sono OT perchè questo è un msg. OT per qualsiasi
newsgroup!
Sto impazzendo con dannato server COM scritto in VB. L'ho importato da
CBuilder 5 (Import Type Lybrary) e funziona bene.
Ho un solo problemaccio: ho un evento che mi è fondamentale tra i cui
parametri c'è una dannata stringa che DEVO leggere e che può contenere
dati binari (tra cui null anche al primo carattere).
La definizione è BSTR *Packet e se faccio una cosa del tipo
AnsiString(*Packet) mi trovo una stringa lunga 0 (forse per il null
iniziale...).
Ho provato tutte le funzioni che ho trovato come wcslen e simili ma
niente!
In visual basic funziona benissimo, Len(Packet) mi ritorna la lunghezza
giusta anche se c'è il null all'inizio... Ma come fa? E soprattutto come
faccio io a leggere 'sta stringa?
HELP HELP HELP PLEASE!!!
Henrik Sozzi
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 newsgroup!
Sei clamorosamente OT, comunque il tuo problema non è cosi difficile. Su 
VC++, ad esempio, c'è una bella classe wrapper _bstr_t per le stringhe 
BSTR. Sicuramente ci sarà qualcosa di simile nel borland... Leggi i doc! 
-- 
Luc.

 a écrit dans le message news:
4fd11e18dcd4236bf01...@mygate.mailgate.org...

Se devi leggere un dato che puo' presentare il valore 0 come primo byte, non
e' detto che esso sia una stringa, ma puo' essere un dato da binario che
quindi non leggerai come stringa.
Se poi sei sicuro che il tuo dato sia una stringa, be' la definizione di
stringa ti dice proprio che essa termina non appena incontri il carattere di
fine stringa che e' /0 cioe' 0, per cui si tratta proprio di una stringa
nulla.
Nel caso si tratta di dati misti che possono essere dati binari o stringhe,
allora dovresti fare un filtro apposito per capirlo.
Ovviamente la prima funzione che dovrai chiamare in tal caso non puo' essere
una funzione legata a stringhe altrimenti ti si ferma al primo zero che
incontra.
Maurus
Newsgroup: it.comp.lang.c
Titolo: cancellazione dei thread

chiedo scusa, ma ho bisogno ancora della vostra saggezza
ho scritto un programmi no semplice semplice (che poi vi scrivo) che
fa le seguenti cose:
1- crea un thread e aspetta che termini (questo thread esegue la
funzione threadControllo)
2-il thread, a sua volta, ne crea un altro e subito dopo ne chiede la
cancellazione. Il secondo thread (che esegue la funzione compito)
stampa a video 15 frasi, controllando ogni 5 stampe se c'è una
richiesta di cancellazione.
Quello che succede è la seguente cosa:
se dichiaro il secondo thread "sincronicamente
cancellabile" (impostazione di default) viene eseguita una stampa e
poi il thread viene cancellato.
se dichiaro il thread PTHREAD_CANCELASYNCHRONOUS o
PTHREAD_CANCEL_DISABLE, esso va dritto come un fuso ignorando la
richiesta di cancellazione.
Io, da quello che ho capito da testo (Advanced Linux Programming),
invece mi sarei aspettato che:
1- di default il thread avrebbe dovuto stampare 5 frasi e poi
terminare
2- impostando il thread come PTHREAD_CANCEL_ASYNCHRONOUS avrebbe
dovuto terminare al volo
3-impostando il thread come PTHREAD_CANCEL_DISABLE avrebbe dovuto
completare la serie di stampe
Sapreste dirmi dove sbaglio?
Spero di non essere stato troppo noioso...
Grazie in anticipo a tutti!
Ecco il codice:
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <string.h>
void* compito (void* param){
    int i = 1;
    //variabili locali
    for (; i < 16; i++){
        //pthread_setcancelstate(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
        printf("Thread scrive per la %d volta\n", i);
        sleep(1);
        if (i % 5 == 0){
            printf("Controllo richiesta terminazione\n");
            sleep(1);
            pthread_testcancel();
        }//end if*/
    }//end for
}//end compito
void* threadControllo (void* parametri){
    pthread_t T = 0;
    //variabili locali
    pthread_create(&T, NULL, &compito, NULL);
    printf("Thread di controllo lancia thread compito\n");
    sleep(1);
    pthread_cancel(T);
    printf("Richiesta di terminazione di T\n");
    pthread_join(T, NULL);
    printf("Thread di controllo ha recuperato thread compito\n");
}//end threadControllo
int main(int agrc, char* argv[]){
    pthread_t thread = 0;
    //variabili locali
    pthread_create(&thread, NULL, &threadControllo, NULL);
    sleep(1);
    pthread_join(thread, NULL);
    printf("Programma principale termina\n");
    return 0;
}//end main

 
Nell'altro thread ti ho risposto perché la questione verteva in sostanza sul
significato e sull'uso di costrutti del C.
Ora, invece, la questione riguarda fondamentalmente l'API dei thread POSIX,
che non è un argomento che dovrebbe essere discusso in questo NG. Ti
consiglio di spostare la discussione su it.comp.os.linux.development.
Max


okay grazie
Newsgroup: it.comp.lang.c
Titolo: LOF

esiste una funzione per recuperare il numero di righe in un file?
saluti

esiste una funzione per recuperare il numero di righe in un file?
No, aprilo scorrilo tutto e leggi il numero dei '\n'.
-- 
Marco Barisione (ICQ 84277092)

caspiterina, tutto a manina! ;)
grazie


caspiterina, tutto a manina! ;)
se il file non č grosso non ci metti tanto...
--
Rhymes (rhy...@NOSPAMmyself.com)
http://www26.brinkster.com/rhymes
" ride or die "

Newsgroup: it.comp.lang.c
Titolo: HELP : software gestione internet point

Salve,
avrei necessita' di entrare in contatto con qualcuno in grado di
programmare un'applicazione di database con supporto di rete da
utilizzare per la gestione tempo/cliente di un internet point.
l'attivita' viene svolta con 12 postazioni + un server. tutte le
macchine, server compreso, sono pentium 200 con windows 95 installato
e collegate in rete ethernet.
cio' di cui avrei bisogno e' un software-database, che permetta di
gestire il tempo per ogni singolo utente registrato in modo automatico
(il cliente entra, si siede, digita la sua userid e pw e
automaticamente ha a disposizione il suo tempo prepagato a scalare).
invito coloro che pensano di potermi aiutare a contattarmi in email
per discutere delle caratteristiche specifiche del programma, varie ed
eventuali.
ringrazio fin d'ora tutti coloro che hanno letto e mi scuso per il
crosspost sui vari gruppi.
E. Gori
e.g...@dada.it



Newsgroup: it.comp.lang.c
Titolo: Algoritmo greedy

Devo implementare l'algoritmo greedy del problema del minimum set cover.
Qualcuno saprebbe indicarmi dove trovare una buona implementazione di
esso (per buona intendo veloce).
Grazie

Devo implementare l'algoritmo greedy del problema del minimum set cover.
qual'č il problema del minimum set cover?
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 
http://www.brainbench.com/transcript.jsp?pid=1301688
Considera un'insieme D={0,1,2,....,n-1} di cardinalità n. Considera una
famiglia di sottoinsiemi di D, F={ {0,1,2}, {2,3,5,7,...},....} di
cardinalità k. Bisogna trovare la minima copertura per D, cioè, un certo
numero di sottoinsiemi di F la cui unione dia D. A prima vista sembra un
problema semplice. In realtà è NP-arduo, e ciò significa che gli unici
algoritmo conosciuti che danno la soluzione ottimale sono di tipo esaustivo
(modificati per eseguire tagli sullo spazio di ricerca, in modo da renderli
più efficienti).
L'algoritmo Greedy che devo implementare io approssima la soluzione ottimale,
con uno scostamento logaritmico. Io voglio implementarla nella maniera più
efficiente possibile, quindi lineare (come specificato nel libro di Rivest).
Di qui la domanda...
Newsgroup: it.comp.lang.c
Titolo: modifica binaria

ciao! :D
sono bloccato in un problema: devo generare 4 unsigned char casuali e
prendere le loro sequenze di bit. Fin qui tutto ok. Il problema mi nasce
quando devo assegnare queste quattro sequenze, in ordine, ad un long.
L'unico modo che conosco per modificare un file a livello di bit sono gli
operatori & | ^ e la negazione binaria (tilde). Come posso assegnare
arbitrariamente 4 sequenze di 8 bit ad una di 32?
Teoricamente avevo aggirato la cosa calcolando il valore della sequenza dei
32 bit ed assegnando il valore al long ma... č un po una furbata :)
Qualcuno puo illuinarmi? grassie :)

 quando devo assegnare queste quattro sequenze, in ordine, ad un long.
Non sono sicuro di aver capito il problema.
Quanto segue c'entra qualcosa, o non ti sei spiegato bene? 8)
---live action---
[fok@localhost varie]$ cat c2l.c
#include <stdio.h>
 
typedef union {
        unsigned char c[4];
        unsigned long l;
} pippo;
 
int main(void)
{
        pippo p;
 
        p.c[0] = 0x01;
        p.c[1] = 0x02;
        p.c[2] = 0x03;
        p.c[3] = 0x04;
 
        printf("%lx\n", p.l);
        printf("%lx\n", (0x01 << 24) + (0x02 << 16) + (0x03 << 8) + 0x04);
 
        return 0;
}
[fok@localhost varie]$ ./c2l
4030201
1020304
[fok@localhost varie]$
---live action---
Occhio all'endianess (eseguito su un x86, architettura notoriamente
little-endian).
-- 
error: can't find .signature file 'a_punto_foco_presso_virgilio_punto_it'

Con l'union ha funzionato perfettamente ;)
thx
Newsgroup: it.comp.lang.c
Titolo: Sovrappeso? Cellulite? Semplicemente una corretta alimentazione?

         
info_...@yahoo.it
Qualcuno sa la mail per gli abusi per yahoo? Ammesso che esista :-(
visto che non e' un provider...
Ciao, Roberto

Ciao Roberto,

	domain:      
yahoo.it
	descr:       Yahoo! Italia
	admin-c:     FA393-RIPE
	tech-c:      DF675
	tech-c:      JPH17
	zone-c:      JPH17
	nserver:     195.67.49.25  
ns.europe.yahoo.com
	nserver:     204.71.177.33  
ns.yahoo.com
	nserver:     204.123.2.85  
av1.yahoo.com
	remarks:     created:     980511
	remarks:     The company provides a directory to the Internet
	changed:     
hostm...@nic.it
 19980511
	source:      RIPE
	person:      Fabiola Arredondo
	address:     Via Brera 3
	address:     20121 Milano
	address:     Italy
	phone:       +39 2 72546207
	fax-no:      +39 2 72546417
	e-mail:      
fab...@yahoo-inc.com
	nic-hdl:     FA393-RIPE
	changed:     
hostm...@nic.it
 19980511
	changed:     
hostm...@nic.it
 19980511
	source:      RIPE
	person:      David Filo
	address:     Yahoo! Inc.
	address:     3400 Central Expressway, Suite 201
	address:     Santa Clara, California 95051
	address:     United States of America
	phone:       
+1 408 7313300
	fax-no:      
+1 408 7313301
	e-mail:      
fi...@yahoo-inc.com
	nic-hdl:     DF675
	notify:      
ripe-...@uninett.no
	mnt-by:      DK-DOMREG
	changed:     
hostm...@dk-hostmaster.dk
 19970318
	changed:     
hostm...@dk-hostmaster.dk
 19990304
	source:      RIPE
	person:      John Hanley
	address:     Yahoo! Inc.
	address:     3400 Central Expressway
	address:     Suite 201
	address:     Santa Clara
	address:     California 95051
	address:     United States of America
	phone:       
+1 408 7313300
	fax-no:      
+1 408 7313301
	e-mail:      
j...@yahoo-inc.com
	nic-hdl:     JPH17
	notify:      
ripe-...@uninett.no
	changed:     
hostm...@nis.garr.it
 19970415
	changed:     
hostm...@nis.garr.it
 19970415
	changed:     
Bjorn....@fm.sintef.no
 19970926
	source:      RIPE
	Alla prossima,
		Marco


ciao,
mi sembra che se tu vai a guardare nelle proprieta del messaggio yahoo
ci sia l'indirizzo per l'abuse...
ciao

...

mi sa che ho detto una cavolata...
ciao

 visto che non e' un provider...
ab...@yahoo.com
E' importante allegare il messaggio di spam originale
integro assieme alla mail di protesta.
-----------------------------------
 Giulio Maselli - IZ1ASP
 
http://utenti.tripod.it/giulio_maselli
 please remove "norumenta" from
 e-mail address to answer
 togliere "norumenta"  dall'indirizzo
 per rispondere via e-mail
-----------------------------------

 mi sa che ho detto una cavolata...
però c'è X-Complaints-To: 
ne...@nslave2.tin.it
-- 
Non c'è più forza nella normalità: c'è solo monotonia.
Newsgroup: it.comp.lang.c
Titolo: albero dei cammini minimi

 Il mio problema è questo:
 in input ho un file (mtrice) degli archi (con i relativi pesi che indicano
la
 lunghezza dell'arco) costituito da tre colonne : nodo di partenza,  nodo di
arrivo, lunghezza arco.
 Il totale dei nodi è 1123 dei quali i primi 355 identificati come
"centroidi".
 Per ogni centroide mi interessa il cammino minimo verso tutti gli altri
centroidi. Tale cammino,
 però, può, anzi sicuramente passerà per tutti gli altri nodi ( quindi anche
 per quelli che non sono centroidi).
 Il mio algoritmo dovrà calcolare quindi l'albero dei cammini minimi (la
radice
 dell'albero dovrà essere sempre un "centroide") da un "centroide" ad un
altro centroide e
 non importa che il cammino passi per altri nodi non centroidi.
Ci sarà, quindi, una condizione nel mio programma, ossia il nodo terminale
di
ogni cammino minimo dovrà essere un centroide.
Quindi sicuramente metterò la condizione:
if (nodo terminale < 355) then salverò il mio cammino minimo in una matrice
(dei cammini minimi) altrimenti (cioè se nodo terminale>355)  non salverò
nessun cammino
minimo.
P.S. Per albero si intende una esplorazione dei nodi. Cioè partendo da una
radice (ad
esempio il nodo 1) si andranno ad esplorre tutti i suoi figli (cioè tutti i
nodi collegati a tale nodo 1 (radice dell'albero) che formano dunque un
arco.
Mi interessa sapere solo la lunghezza (nel mio caso espressa in metri) del
cammino e non i nodi per cui passa tale cammino.
Devo utilizzare l'algoritmo di Dijksta che mi calcola il cammino minimo tra
un nodo e tutti gli altri.
Devo implementare un algoritmo in C.
Vi prego aiutatemi.
Alessandra.

 wrote in message
9n668t$p06$1...@nreada.inwind.it...

Newsgroup: it.comp.lang.c
Titolo: aritmetica modulare

Salve, volevo sapere come poter scrivere
un algoritmo  che faccia l'elevamento a potenza
in aritmetica modulare.
Mi spiego ,un 'operazione del tipo
102^(200)mod1000.
Potrei usare pow(x,y) ma si puo' scrivere un 'algoritmo
che calcoli quella potenza in modulo ?
Grazie duemila a tutti e ciao
Emiliano
--
Posted from 
ro...@obelix.val.it
 [194.244.89.2]
via Mailgate.ORG Server - 
http://www.mailgate.org

Implementazione di RSA per caso? Ci ho riflettuto un po' anche
io, ma ancora non ho scritto neanche una riga di codice.
Pero' "scavando" dai links
http://world.std.com/~franl/crypto/writings.html
http://theory.lcs.mit.edu/~rivest/
dovreste raggiungere una libreria completa di funzioni per
aritmetica di grandi interi.
Credo comunque che ci sia il modo per calcolare il modulo
senza dover mai memorizzare il valore finale della potenza.
Ciao.


Potresti eseguire un calcolo dinamico:
l'elevamento a potenza lo fai con una serie di prodotti, e la "modulazione"
la fai dinamicamente.
Es.:
5^4(mod. 7) => 625(mod. 7) => 625 congruo a 2 (mod. 7)
ora:
1)  (5^2) => 5*5=25 congruo a 4(mod. 7)
2)  (5^3) => 4*5=20 congruo a 6(mod. 7)
3)  (5^4) => 6*5=30 congruo a 2(mod. 7) FINITO!
--
Zio Patata®
ICQ# 25304214
"Solo i colti amano imparare,
gli ignoranti preferiscono insegnare"

Gia' sto sto scrivendo un semplice algoritmo dell'rsa
per un'elaborato per l'esame e sto fumando
con dei conti ciclopici.
Ci deve essere per forza un modo....


 3)  (5^4) => 6*5=30 congruo a 2(mod. 7) FINITO!
Si'. Anche io pensavo ad un metodo cosi', ma anche a varianti
piu' ottimizzate. Per RSA non e' abbastanza. devi comunque fare
un numero di passi pari all' esponente (-1). In RSA gli esponenti
sono di migliaia di cifre binarie...
Lo so. Siamo OT.
STOP.
ciao.

Pensavo ad un metodo generale.
Ma poi....che vuol dire RSA?



Forse scateneremo le ire del NG parlando di argomenti
non pertinenti.
Se ti interessa continuiamo per e-mail.
RSA e' una tecnica di cifratura a chiave asimmetrica
usata anche in PGP (
www.pgpi.org
).
Due chiavi, una pubblica e una privata di migliaia di
cifre sono in una relazione tale per cui messaggio
Messaggio^Kpubblica mod N = Cifrato
Cifrato^Kprivata = Messaggio
Mette a disposiz. servizi di privacy, autenticaz.
e firma elettronica.
Prova a chiedere in it.comp.sicurezza.pgp
Ciao.

provo a migliorare:
[C untested]
unsigned short int powmod(
	unsigned short int base,
	unsigned long exp,
	unsigned short mod)
{
	res=1;
	while(exp)
	{
		if(exp%2) res=(unsigned long)res*base %mod;
		base=(unsigned long)base*base %mod;
	exp=exp/2; /* int! */
	}
	return(res);
}
in altre parole:
per calcolare base^26 dovrei fare 26 moltiplicazioni e
26 modulo. ma se io:
base^26 =
base^(2+8+16) =
base^2 * base^8 * base^16 =
base^2 * (base^2)^4 * (base^8)^2;
posso scendere a O log2(exp) moltpilicazioni
(nel caso del 26, sono 4+3)
Oha
PS: apropos: non e' che qualcuno possiede un puntatore
a sorgenti C per calcolo di modulo 
(u128) mod ( (256)base, (u128)mod ); ?
-- 
"Qualcuno mi spieghi perche' 144 e' l'unico
quadrato perfetto della serie di Fibonacci"
Newsgroup: it.comp.lang.c
Titolo: DJGpP: quale VeRsIOnE???

Ciao a tutti,
sono sempre io..
volevo chiedere a tutti gli utenti di djgpp..
che versione avete che ha anche l'interfaccia di edit per i prg...
e da dove l'avete tirata giu'???
comprenda anche l'help in linea???
TnX per tutte le risp..
                    ~^'CaRLo'^~

 wrote:
Se vuoi qualcosa di un po' + simile al Turbo Pascal come
interfacciamscarica dal sito Borland il Turbo C del 1989
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

 ha scritto nel messaggio
news:896p0p$h20$1...@nslave1.tin.it...

L'abbiamo tirata giu dal sito:
www.delorie.com/djgpp
puoi scaricarti come editor sia emacs che il rhide....quest'ultimo ha anche
un reference per le librerie e altre cosette e, forse, é preferibile al
primo anche se l'emacs é mitico!

Newsgroup: it.comp.lang.c
Titolo: Programma in C e GUI in Python

Ciao a tutti,
sto imparando a programmare in C e vorrei imparare a creare GUI da subito
(sempre che nn sia troppo difficile) anche per gli stupidi programmini che
scrivo per esercitarmi.
Essendo da tempo un fan di Python 
www.python.org
 ho rivolto il mio sguardo
alla libreria wxPython
www.wxpython.org
  che è una specie di layer per wxWindow ma con i vantaggi
derivanti dal codare in Python: pulizia del codice, semplicità generale del
linguaggio.
E' una cosa fattibile secondo voi anche se potrebbe nn essere il modo più
efficiente? Avete degli esempi da mostrarmi di semplici Hello World scritti
in C ma con interfaccia in wxPython?
Grazie,
Lorenzo

 Hello World scritti in C ma con interfaccia in wxPython?
E` un'ottima idea, in realta`.  Anzi, quello che ti suggerisco e` di
scrivere tutto il GUI in Python (oppure Tcl + Tk come GUI), e poi vai
a rivedere i pezzi lenti e li rescrivi in C, usando l'API di
programmazione del linguaggio in questione.
Questo ha un enorme vantaggio:
Scrivi molto velocemente il programma.  In poco tempo funziona e fa
cose utili, ma se serve, velocizzarlo e` molto facile, rescrivendo dei
pezzi in C.  Tcl/Tk e` stato creato proprio per un approcio cosi`.
-- 
David N. Welton
   Consulting: 
http://www.dedasys.com/
Free Software: 
http://people.debian.org/~davidw/
   Apache Tcl: 
http://tcl.apache.org/
     Personal: 
http://www.efn.org/~davidw/

Ciao David,
son passato sul tuo sito e ho letto che hai tenuto una presentazione al
PLUTO Meeting 2000 sulla programmazione delle GUI in Python ma nn ne ho
trovato copia sul tuo sito.
Potresti, perfavore, spedirmela o indicarmi dove scaricarla? Il mio email è
rand0m at inwind punto it
Grazie,
Lorenzo
P.S Grande anche io uso Debian!! ;-)

 P.S Grande anche io uso Debian!! ;-)
Bene:-)


Newsgroup: it.comp.lang.c
Titolo: Rilevare Audio da Microfono

Salve,
   vorrei sapere se ci sono tecnicne per rilevare i "rumori" attraverso 
il microfono... Mi spiego meglio:
Avrei intenzione di mettere il microfono in ascolto ed assegnarli un 
particolare evento non appena "ascolta" qualcosa...
Grazie ^_^

il microfono...
Questo tema esula dal linguaggio C in sé.  Rivolgiti ad un gruppo
specifico per la piattaforma che stai utilizzando.
Newsgroup: it.comp.lang.c
Titolo: Consiglio, please

Ho trascorso tutta la serata alla ricerca di errore nel mio codice che causa
strani problemi sono *nix ma che gira sotto windows.
Ma nulla.
Ora, supponendo che il problema possa essere nello sforamento di un array
(ce ne sono circa 20) e che a occhio proprio non trovo l'errore, una
strategia, potrebbe essere di verificare che gli indici siano tutti compresi
nell'intervallo di dimensione dell'array? In pratica dovrei fare ogni volta
un controllo con un if.
Pensate che questa strategia possa essere la soluzione per trovare l'errore
al 100%?
Altra cosa che ho notato è che se metto all'inizio ed alla fine del main una
chiamata a time(NULL) il programma va in crash.
ecco cosa scrivo:
  long pippo1, pippo2, tempo;
 pippo1=time(NULL);
 .....
 pippo2=time(NULL);
 tempo=pippo2-pippo1;
P.S.: Un'altra cosa strana e che sulla macchina unix su cui testo il codice
, alla prima calloc mi viene restituito un errore di allocazione, questo
dipende dalla macchina, vero? Cavolo, è alla riga 3 e si tratta
dell'allocazione di una strica di circa 10 caratteri. Non può dipendere dal
mio codice, giusto?
Grazie

 , alla prima calloc mi viene restituito un errore di allocazione, 
Ovvero ? calloc() ti restituisce NULL ?
Che macchina è ? che versione di UNIX è ?

 Ciobin wrote:
Ragazzi, scusate se ieri ho fatto tutto quel casino. Ho trovato l'errore
(almeno questo) e sembra andare.
Il problema era qui:
  InFile  = opencheck(InFileName, "r");
  OutFile = opencheck(OutFileName,"w");
    checkMem(xopt = calloc(n+1, sizeof(int)));  <----------------------
  look4=LONG_MAX;
  seed=1778090629;
  init_genrand(seed);
  readDataIN(InFile, &m, &n, &numlit, &lit, &headc, &w);
  printDataIn(m, n, numlit, niter, seed, prttyp, look4, OutFile);
Il fatto è che quella 'n' nella calloc() viene inizializzata nella
readDataIN(). Sotto Unix capitava che la locazione di memoria conteneva un
valore negativo.
Invece sotto Win evidentemente per puro culo aveva un valore positivo molto
grande. Però bastava dichiarare un'altra variabile e tutto andava a puttane.
Scusatemi, il fatto è che sono veramente stanco ed ogni problema mi fa
andare in ansia.
Cmq, a prescindere dal fatto che vengano fuori altre cazzate, approfitto di
questo momento di "serenità" e tranquillità per ringraziare tutti quelli che
mi hanno dato una mano in questo ultimo mese.
Senza di voi non so davvero come avrei fatto, mi avete aiutato LONG_MAX di
più della prof.
Grazie sinceramente per pazienza e la cordialità. DAVVERO !!!!
Newsgroup: it.comp.lang.c
Titolo: Numeri e velocità

Ho bisogno di ottimizzare un codice nel quale ho tutti numeri con la 
virgola con una scala di 10^ -7 .Per ottimizzare i conti mi conviene 
utilizzare la virgola mobile o usare tutti interi e moltiplicati per quel 
fattore ???E di qunto miglioro???
GRAZIE
<<SAX>>


Non ti so rispondere con certezza, ma se usi interi secondo me migliori di
tantissimo, anche se magari devi usare interi a 64 bit(non lo so, dipende da
quante cifre esatte vuoi).
Ciao



Se usi gli interi non solo ottieni probabilmente un codice più veloce, 
ma sicuramente anche più corretto senza problemi di errori che si
propagano.
-- 
Per rispondere via email rimuovere 123

Newsgroup: it.comp.lang.c
Titolo: Fork e Vfork

OK, OK, conosco la differenza tra la fork e la vfork....
Ma vi voglio citare il manuale di Linux alla voce
man vfork:
BUGS
       Under Linux, vfork is merely an alias for fork.
Peccato che in pratica non sia assolutamente vero, se provo
dopo una vfork a modificare il contenuto di una variabile esso
viene modificato in entrambi i processi (padre e figlio), se lo
faccio con una fork viene modificato solo nel processo che esegue
la modifica.
So che cio' e' giusto e richiesto, ma perche' il manuale di Linux
afferma che non vi sono differenze tra le due funzioni ?????
Please, rispondetemi anche via posta, Grazie
Ciao
-- 
Zack
Stefano Zacchiroli
zacc...@cs.unibo.it
za...@comune.budrio.bo.it
ICQ# 33538863
"Never understimate the dark side"

 la modifica.
a me non accade.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <math.h>
int main(void) {
   double a = 16;
   int p;
   p = vfork();
   if(p < 0) {
       perror("errore nella fork\n");
   }
   if(p == 0) {
       /* processo figlio */
       a=sqrt(a);
       printf("la a del figlio vale%f\n",a);
       fflush(stdout);
   }
   else {
       int stato;
       /* processo padre */
       wait(&stato);
       printf("la a del padre vale %f\n",a);
       fflush(stdout);
   }
    return 0;
}
compilaro con cc p.c -o p -lm
mi da`
la a del figlio vale4.000000
la a del padre vale 16.000000
 
Marco Guidi

 wrote:
[ snip ]
SZ>Peccato che in pratica non sia assolutamente vero
In effetti...
$ cat >vfork.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
int main(void)
{
        pid_t p;
        int flag = 1, status;
        if ((p = vfork()) == (pid_t)-1) {
                perror("vfork"); exit(1);
        }
        if (p == 0) {
                printf("FIGLIO: a = %d\n", (flag = 0));
                _exit(0);
        }
        wait(&status);
        printf("PADRE:  a = %d\n", flag);
        return 0;
}
$ gcc -o vfork vfork.c -Wall -ansi -pedantic -D_GNU_SOURCE
$ ./vfork
FIGLIO: a = 0
PADRE:  a = 0
$
...sembra che abbiano implementato una 'vera' vfork().
Qualcuno ne sa di piu' ?
SZ>So che cio' e' giusto e richiesto, ma perche' il manuale di Linux
SZ>afferma che non vi sono differenze tra le due funzioni ?????
Forse non e' aggiornato...
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)