mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Programmazione OO in C?

Qualcuno ha mai tentato di realizzare applicazioni Object Oriented in C 
anzichè C++??
Samuele Gazzani

anzichč C++??
Il C, a differenza del C++, non dispone delle strutture adeguate per
poter programmare in modo object oriented.
Tuttavia, facendo della buona "information hiding" ci si puo'
avvicinare molto (anche se il C++ non e' solo il C con oggetti ma un
linguaggio abbastanza piu' evoluto).
Vedi ad esempio il codice seguente :
typedef struct { int valore ; } intero ;
void intero_assegna ( int x, intero * p ) 
{
     p->valore = x ;
}
void intero_scrivi ( intero p )
{
    printf("%d", p.intero) ;
}

 
Ho provato a fare una sorta di Object Based. Si basa su una struttura
class_t da usare per derivare le classi e da una struttura object_t da
usare per derivare gli oggetti. La struttura class_t in realta' corrisponde
piu' o meno a una class C++ virtuale pura utilizzata per fornire
un'interfaccia comune di inizializzazione e costruzione degli oggetti.
typedef int (*class_install_t)    (void *class_);
typedef int (*class_constructor_t)(void *object);
typedef const struct {
  unsigned int id;		// Some RTTI info
  class_install_t Install;
  class_install_t Uninstall;
  class_constr_t Constructor;
  class_constr_t Destructor;
  void *d_seg;                  /* Class common dynamic data */
  size_t size;
    /*Is sizeof(static user extension), ~0 means unknown*/
  size_t objsize;
  void extension[1];
} class_t;
typedef struct {
  class_t *class;
} object_t;
Le classi devono:
1. Dichiarate:
typedef struct {
  class_t class;
  int static_datum;
  void (*MyMethod1)(void *obj, int a, int b);
} my_class_t;
void MyMethod1(...)
{
....
}
typedef struct {
  my_class_t c_;
  int local_datum;
} my_object_t;
2. Create:
my_class_t my_class={ { 0, "my_class", "prova", Init, DeInit, ....
MyMethod1};
3. Inizializzare:
my_class.class.Initialize(&my_class);
Gli oggetti sono allocati ed "costruiti/distrutti":
Prova()
{
  my_object_t obj1={&my_class, 0};
  obj1.c_->class.Contructor(&obj);
  ....
  // Usalo:
  obj1.c_->class.class_static_datum=1;
  obj1.c_->Method1(&obj1, ....);
  obj1.local_datum=1;
  obj1.c_->class.Desctructor(&obj);
}
Nota che i medoti e l'inizializzazione delle classi (my_class={...})
possono essere static. E' solo richiesto di mettere a disposizione un
puntatore alla classe, da usare per inizializzare gli oggetti. Il check sui
tipi e' inesistente e nei metodi bisogna fare il cast da (void *) a
(object_t *).
Newsgroup: it.comp.lang.c
Titolo: ricerca lineare in un vettore

Ciao a tutti, sto tentando di imparare il C ed avrei un quesito da porvi per
quanto riguarda il codice seguente che effettua la ricerca lineare di un
elemento in un vettore :
#include <stdio.h>
#define SIZE 100
int search (int [],int,int);
main()
{
 int n[SIZE],i,key,element;
 for (i=0;i<=SIZE-1;i++)
  n[i] = 2 * i;
printf ("Scrivi un intero e schiaccia INVIO\n");
 scanf ("%d" , &key);
 element = search (n,SIZE,key);
 if (element != -1)
  printf ("Valore trovato nell'elemento %d\n" , element);
  else
  printf ("Valore non trovato\n");
 return 0;
}
int search (int a[],int size , int key)
{
 int j;
 for (j=0;j<=size-1;j++)
  if (a[j] == key)
   return j;
  return -1;
}
in particolare come mai se nella definizione della funzione "search"
utilizzo una struttura di selezione doppia if/else,
del tipo:
int search (int a[],int size , int key)
{
 int j;
 for (j=0;j<=size-1;j++)
  if (a[j] == key)
   return j;
else
  return -1;
}
il programma non va e il compilatore mi dice che c'è un "missing return
value" mentre invece io
con if/else un "return value"  glielo do in ogni caso,sia che il valore sia
trovato sia che non sia trovato?
Spero di essere stato chiaro e ringrazio anticipatamente chi vorrà
rispondermi.
Ciao a tutti,
Marco

Marco
Il fatto e´ che non e´ detto che l´istruzione if nel for venga eseguita per
cui ci sono dei casi in cui non vi e´ alcun return, e quindi il compilatore
si lamenta.
Ad esempio se passi alla funzione il parametro size con valore -1, non
esegui l´if, ed il compilatore facendo un controllo statico, non puo´ sapere
cosa passi, quindi ti da´ errore anche se gli giuri che gli passerai un
valore >= 0.
Maurus

 wrote in message
9aikc7$u61$1...@lacerta.tiscalinet.it...


 ha scritto nel messaggio
news:aqEz6.4375$k53....@news1.tin.it...


> }
In questa forma se size vale 0 la funzione termina senza
incontrare nessun return; il compilatore segnala che
e' *possibile* che la funzione termini senza tornare
un valore.
La funzione scritta in questa forma e' comunque errata
visto che se il *primo* elemento e' diverso da key viene
restituito -1 senza verificare gli altri elementi.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 wrote in message
3ad02216...@news.interbusiness.it...


Newsgroup: it.comp.lang.c
Titolo: Struttura hostent

Qualche gentilone saprebbe per favore dirmi come è struct hostent
Grazie in anticipo e CiozZ!!!

 Grazie in anticipo e CiozZ!!!
"man gethostbyname" dice, tra l'altro:
...
       The hostent structure is defined in <netdb.h> as follows:
              struct hostent {
                      char    *h_name;
                      char    **h_aliases;
                      int     h_addrtype;
                      int     h_length;
                      char    **h_addr_list;
              }
...
e contiene una dettagliata descrizione di ogni campo.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Newsgroup: it.comp.lang.c
Titolo: animazione ascii

Ciao a tutti,
volevo fare un animazione del tipo elica che gira con una barra che si
incremanta di fianco. Io ho pensato ud una cosa del genere:
    printf("-");
    printf("\b/*");
    printf("\b\b|**");
    printf("\b\b\b\\***");
    printf("\b\b\b\b-****");
    printf("\b\b\b\b\b/*****");
    printf("\b\b\b\b\b\b|******");
    printf("\b\b\b\b\b\b\b\\*******");
    printf("\b\b\b\b\b\b\b\b-********");
ovviamente tra i vari printf ci deve essere una funzioni di ritardo, pensavo
di mezzo secondo. Il problema è che non ho idea di come fare una funzione
del genere o se esite una funzione standard per questo.Io programmo in linux
in dos avrei usato delay(250). Ciao grazie

> in dos avrei usato delay(250). Ciao grazie
Su linux prova sleep(numero_secondi)
Ciao
Bizio

 ha scritto nel messaggio
news:GN7Xb.309284$_P.10...@news4.tin.it...
Spero ti possa essere utile.
#include <stdio.h>
#include <time.h>
int main ()
 {
   int t = 0;
   t = time(NULL);
   printf ("\n INIZIO PAUSA...\n");
   while (time (NULL) <= t+x)  /* Dove "x" = numero secondi (credo). */
     {
       /* NULLA. */
     }
   printf ("\n ...FINE PAUSA\n");
   return 0;
 }
Marcello
---
--
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.587 / Virus Database: 371 - Release Date: 12/02/2004

      }
si usa sleep( x ) se vuoi attendere x secondi, ma lui ha chiesto una
precisione migliore, quindi consiglio usleep( x ), dove x sono i
milionesimi di secondo da sleeppare, nel suo caso 500000
Ciao
Matic

 ha scritto nel messaggio
news:pan.2004.02.14...@hotmail.com...

Senz'altro migliore.


Allla fine ho scoperto che il mio problema non era tanto la funzione sleep o
usleep ma nel modo con cui linux gestisce lo stdout infatti ho capito che
dopo ogni printf dovevo svuotare il buffer con fflush. Mi rendo conto che
sono molto poco chiaro.
 ciao Mauro
Newsgroup: it.comp.lang.c
Titolo: Sleep()

Ciao a tutti,
ma possible che la funzione Sleep() supporti solo secondi e non
millisencondi?
Esiste qualcosa di simile per i millisecondi?
saluti



usleep( milionesimidisecondo );

> usleep( milionesimidisecondo );
Grazie! ;)


struct timeval timeout;
timeout.tv_sec=0;
timeout.tv_usec=x;
select(1,NULL,NULL,NULL,timeout);
Adieu,
-- 
Lestat de Lioncourt                               |          Ciro Mattia Gonano
  JabberID: 
les...@jabber.students.cs.unibo.it
    |    Undergraduate Student in
  ICQ#: 52631406                                  |         Computer Science at
  URL: 
http://www.CS.UniBO.It/~gonano
             |       University of Bologna
            <powered by Linux Slackware 8.1 on Kernel 2.4.18-xfs>

.... con gcc uso delay() , mi sembra supporti anche i mills.
Ciao
Newsgroup: it.comp.lang.c
Titolo: Librerie standard

Ciao a tutti,
sempre riferito alle librerie standard, quali di queste non lo sono:
errno.h
stddef.h
assert.h
ctype.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stdio.h
stdlib.h
string.h
time.h
limits.h
float.h
Grazie. Ciao.

sempre riferito alle librerie standard, quali di queste non lo sono:
A occhio e croce mi pare che lo siano tutte.
Fai attenzione, cmq: quelle non sono librerie, sono headers, che contengono
la dichiarazione di funzioni. Il fatto che una funzione sia dichiarata lì
dentro non implica che sia standard.
Lanugo

 dentro non implica che sia standard.
Grazie Lanugo, approfitto però dell'occasione per chiederti se ti è mai
capitato un caso simile a:
char* puntatore1, *puntatore2;
puntatore1 = gets(puntatore2); // inserisco la stringa ciao
puts(puntatore1); // stampa ciao
puts(puntatore2); // stampa ciao
Ma la gets non memorizza la stringa letta da tastiera nella variabile che le
passo alla sua chiamata?
Inoltre, il mio compilatore accetta la seguente chiamata:
puntatore = gets();
puts(puntatore);
e non mi restituisce errore alcuno.
Eppure negli elenchi di funzioni di cui dispongo non viene mai presentata la
dichiarazione di gets senza parametri, ma allo stesso modo si precisa che il
valore ritornato da gets è un int che, restituendo 0 e -1, indica se
l'operazione di I/O è andata a buon fine.
Andando a leggere gli appositi headers di libreria ho trovato tre
definizioni diverse - ovviamente appartengono a 3 compilatori diversi- :
char* gets(char*);
int* gets(void);
int* gets(char*);
Che spiegazione valida mi puoi dare su tali implementazioni che risultano
così disparate tra loro.
PS: preciso che non mi sto confondendo con la getchar.
Grazie.

setjmp.h non so mica?
anche locale.h mi da qualche dubbio.... ma li mi sbaglio io...

 int* gets(char*);
Nella documentazione Borland è riportata la prima.
EMG

così disparate tra loro.
L'unica implementazione standard è la prima, le altre 2 no. Dove le hai
trovate?
Lanugo

l'operazione di I/O è andata a buon fine.
Non e' vero.
La gets() accetta e restituisce un puntatore a char.
--
Walkie...@Libero.It (ICQ# 8143647)

 trovate?
La prima appartiene al gcc fornita con il Djgpp, mentre le altre
appartengono a due small compiler, che utilizzano entrambi il Gcc 2.004
Ringrazio tutti per le risposte date.

Devo allora classificare tale codice come undefined behavior?
Non so cosa dica lo standard *di preciso* in proposito ma a naso direi
proprio di sě. Per lo meno, le conseguenze vanno dal "non succede nulla -
apparentemente" al "crasha tutto". La seconda capita se sei fortunato.
Lanugo
Newsgroup: it.comp.lang.c
Titolo: Migliore funzione per prendere il tempo

Salve, 
ho la necessita' di misurare il tempo di esecuzione 
di una applicazione.
Quale funzione e' piu' attendibile per prendere 
questo tempo? Il tempo misurato 
e' quello "realmente" utilizzato dalle istruzioni 
dell'applicazione o comprende il tempo speso 
dal SO per l'esecuzioni delle chiamate a funzioni 
di sistema?
grazie 


in C standard (quello di cui si parla qui),
esistono 2 funzioni, entrambe definite in time.h, che ti
invito a studiare onde verificare se sono consone
all'utilizzo previsto.
Esse sono
time() e clock()
time(time_t *) fornisce il numero di secondi trascorsi
dal 1 gennaio 1970 (un numero intero).
misura il tempo globale trascorso. Chiaramente
va bene per programmi che hanno tempi di esecuzione
lunghi. Io ad esempio la uso per salvare i risultati
parziali ogni 10 minuti in un programma che gira per
giorni e giorni.
clock_t clock(void)
restuisce un numero che dovrebbe approssimare il
tempo di CPU utilizzato fino a quel momento dal programma
in esecuzione. Per ottenere i secondi questo valore
va diviso per una costante definita in time.h ovvero
CLOCKS_PER_SEC
La granularita' di clock() dipende dal sistema e non
dipende strettamente da CLOCKS_PER_SEC: per esempio
un valore tipico di CLOCKS_PER_SEC e' 1000000, ma
la precisione e' 0.01 secondi (in pratica quindi il
valore di clock() viene incrementato a botte di 10000).
Puoi verificare facilmente leggendo la documentazione
o con un programmino tipo questo:
#include<time.h>
#include<stdio.h>
int main()
{
   clock_t curc, oldc =  clock();
   while (oldc==(curc=clock()));
   printf("Step = %d\nprec. = %.4f\n",(int)(curc-oldc),
	 (double)(curc-oldc)/CLOCKS_PER_SEC);
   return 0;
}
Sempre sulla falsariga di clock(), ma in #include <sys/times.h>,
c'e' la funzione times() che distingue tra tempo di
sistema, tempo di dei processi figli etc. ma non so se
e' standard.
Piu' in generale, se ti server un timing veramente accurato,
ti devi rivolgere a cose specifiche del tuo sistema operativo,
e quindi, per esempio, e' meglio se chiedi su
it.comp.programmare.win32 oppure su
it.comp.linux.development
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: Impostazione "errorlevel"

Devo scrivere una piccola utility da lanciare al prompt del dos. Prima di
uscire vorrei però settare la variabile ERRORLEVEL così da poterne testare
il valore di ritorno dall'interno di un file batch.
Domanda: Come si fa a settare l'errolevel da un programma in C ??
Ciao a tutti
Andrea
_____________________________________
Email: sostituire "NOSPAM" con "flashnet"
Email: replace "NOSPAM" with "flashnet"

Domanda: Come si fa a settare l'errolevel da un programma in C ??
"return 22;" dal main(), o "exit(22);" da qualsiasi punto del
programma, terminano l'esecuzione e settano error level
22 (normalmente si torna 0 per indicare nessun errore, o
numeri crescenti per errori vieppiú seri, mi pare che il
massimo sia 255 [1 byte senza segno di codice d'errore]).
Alex

 massimo sia 255 [1 byte senza segno di codice d'errore]).
Quasi.  Lo standard definisce esattamente il significato del valore
ritornato da main() solo per 0, EXIT_SUCCESS e EXIT_FAILURE (questi
due definiti in stdlib.h); tutto il resto e' implementation dependent,
e non e' detto che valori crescenti significhino errori via via piu'
gravi.  Ad esempio, sotto VMS i due bits piu' bassi indicano la
severita' (successo, warning, errore, errore fatale) e quindi la
convenzione e' differente.
Il return type di main e' int, quindi l'implementazione e' libera di
definire fino a 32767 error codes, o, volendo, di piu' (a seconda di
cosa e' un 'int' --- su questa macchina sono 64 bits).
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

Newsgroup: it.comp.lang.c
Titolo: salvare contenuto della finestra

una volta "individuata" una finestra attraverso EnumWindows, nella procedura
callback (si chiama cosě?) dovrei controllare il titolo di questa finestra,
e, se risulta uguale ad un certo valore di testo, salvare il contenuto della
finestra in un file, ossia l'equivalente di File... Salva con nome...
la domanda č: che messaggio devo inviare per fare ciň?
grazie
mario

dimenticavo: si tratta di una finestra di INternet Explorer o Netscape
Navigator.
Newsgroup: it.comp.lang.c
Titolo: argomenti per indirizzo

Ciao ho un piccolo problema :
void stract(chra *s, chra *t)
{
    while(*s++ != '\0');
    while(*s++ = *t++) != '\0');
}
main()
{
    char a[10]="luca",b[10]="gigi";
    starct(a,b);
    printf("%s",a);
}
la funzione stract non mi restituisce a concatenato con b perche?? dove
sbaglio ,
se stract(&a,&b); mi da comunque un worning!! perche??
Vi ringrazio Luca


Io l'ho scritta cosi' e funziona, pero' bisogna stare attenti
che la lunghezza della prima stringa sia sufficiente a contenerle
entrambe. Il problema era che nel primo ciclo while prima si
effettua il confronto e poi l'incremento, quindi una volta trovato
il '\0' il valore di s viene incrementato e punta alla locazione
successiva al fine stringa, mi sono limitato a riportarlo indietro
di uno prima della copia.
void starct (char *s, char *t)
{
   while (*s++ != '\0');
   s--;
   while ((*s++ = *t++) != '\0');
}
ciao...

 ha scritto nel messaggio
news:dsYe7.24885$SV4.1...@news1.tin.it...

Ti ringrazio funziona

Newsgroup: it.comp.lang.c
Titolo: che compilatore è?

Tempo fa ho usato un compilatore per windows per scrivere un programma in c
(estensione .c). Per lanciare il programma c'era un punto esclamativo (rosso
mi sembra) nella
barra in alto ed il programma veniva eseguito in una finestrella dos che
veniva chiusa alla pressione di un tasto. In basso c'era un area con i
messaggi e gli errori/warning. Di che compilatore si tratta?
Grazie a tutti.

Io VC++ 6.0 ed ho scoperto che si comporta come dici tu, anche se preferisco
usare i tasti di scelta rapida :-)
Newsgroup: it.comp.lang.c
Titolo: Newbie

Ciao a tutti.
Ho usato l'editor di VisualStudio (Visual C++)con questo sorgente in C.
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
	int magic ;
	int guess ;
magic= rand();
printf ("Indovina il numero magico: ")
scanf("%d,&guess);
If (guess==magic) {
printf("**Corretto**");
printf("Il numero magico é:%d",magic);
}
else if (guess> magic)
printf ("Errato troppo alto");
else printf("Errato troppo basso");
return 0 ;
}
E'corretto usare l'editor sopracitato per i sorgenti in C?
Perchè quando mando in esecuzione il file non succede nulla?
P.s.Non sono riuscito neppure a far apparire sullo schermo il classico
esempiuccio "Ciao Mondo"
Tanta teoria, ma per ora niente pratica :-(
Un grazie a tutti coloro che avranno la pazienza di rispondermi.
Ciao
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 printf ("Indovina il numero magico: ")
Ciao
--
                 ZaX
www.falcemartello.cjb.net

 cut >
Non č un editor: č un RAD.
I programmi funzionano ma devi compilarli ed eseguirli da una shell testuale
(DOS immagino) per vedere i risultati.
Generalmente direi che partire da una RAD soprattutto per un linguaggio come
il C non č la scelta migliore: č meglio un compilatore da linea di comando
e un buon editor che ti faciliti la vita (che ti indenta il codice, con
syntax highlighting ecc.) per poi passare a un ambiente complesso come VC.
Non so molto di Windows ma ho sentito di Mingw e DJGPP... fa una ricerca su
internet (o aspetta chi ne sa di piů dell'ambiente :=)
Nicholas
-- 
Slackware 8.1 - 2.4.19 - GCC version 2.95.3

 internet (o aspetta chi ne sa di piů dell'ambiente :=)
Senti con l'MSVC++ per compilare i file "Tipo DOS", per capirsi quelli come
il tuo,
basta che tu apra o tu scriva il file SENZA creare un progetto. Poi fai il
compila,
quando ti chiede di creare il progetto dici di Si. Fine. E lui te li
compila. :-).
Salutoni
Giacomo Succi

Grazie.
Allora devo anche dirvi che il mio S.O. è win xp,sicchè se qualche buon
anima
conosce un compilatore per il mio sistema....
Ciao e grazie


Anche io ho Win xp e utilizzo il compilatore dela borland bc 3.1.
--------------------------------
Inviato via 
http://usenet.libero.it

"> Anche io ho Win xp e utilizzo il compilatore dela >borland bc 3.1.
anch'io. e funziona molto bene
ciao

Dopo un pomeriggio passato a cercare di scaricare e configurare DjGpp
adesso
non me la sento di cambiare compilatore.Sicuramente tra breve farò un
post
sul primo problema che incontrerò con questo compiler.
Ciao a tutti.


> Anche io ho Win xp e utilizzo il compilatore dela borland bc 3.1.
Se ti interessa dal sito borland puoi scaricare gratuitamente il 5.5!
(Ok non penso cambi molto ma io sono uno di quelli che gode un mondo ad
avere sempre l'ultima versione! 5.6 aspettami!)
Ciao
Wezzy
Newsgroup: it.comp.lang.c
Titolo: Consiglio

Ciao a tutti!
Vorrei specializzarmi nella creazione di agenti, spider e robot per
internet: mi consigliate il c o il c++?
Grazie e buon lavoro!
Massimo Montanari
max67...@telcanet.it
togliete nospam dall'indirizzo



 internet: mi consigliate il c o il c++?
visto che puoi scegliere, ti consiglierei il C, per questioni di
portabilità: quasi tutti i sistemi Unix sono corredati di un compilatore
C nativo.
-julio di egidio
ju...@webzone.it

Newsgroup: it.comp.lang.c
Titolo: info su casting

Vorrei sapere come il C tratta il casting, ad esempio:
float c=2.4;
int a=(int)c;
In questo caso a immagino sia 2, ma se c=2.7? E' sempre 2? Lo so che è una
domanda stupida e che si potrebbe verificare in 2 secondi ma in questo
momento ho dei problemi con il compilatore.
grazie
michele

 int a=(int)c;
In generale il cast verso un tipo intero di un numero decimale (float o 
double) porta sempre al troncamento degli eventuali decimali.

In questo caso a immagino sia 2, ma se c=2.7? E' sempre 2?
   Secondo lo standard dovrebbe essere sempre 2:
6.3.1.4 Real floating and integer
   1 When a finite value of real floating type is converted to an
     integer type other than _Bool, the fractional part is discarded
     (i.e., the value is truncated toward zero).
-- 
S.L.
Newsgroup: it.comp.lang.c
Titolo: controllo ritorno a capo in un file

Ciao a tutti. Dovrei scrivere un programma che somma dei numeri interi 
contenuti su più righe in un file. Voglio la somma dei numeri di ogni riga. 
Problema: come posso far interrompere la somma quando sono alla fine della 
riga? In pratica: come riconosco il carattere di a capo? Ho provato sia con 
il carattere ascii 10 (quindi LF) che con il carattere 13 (CR) impostando il 
ciclo in questo modo:
while(fscanf(fp1,"%x",&appoggio)!=13)
ma il programma va in loop.
buon Natale a tutti.

 ma il programma va in loop.
Il tuo programma ha diversi problemi... Prima di usare una funzione, 
"scanf" in questo caso, devi guardarti la documentazione. Scrivere 
codice a caso di solito non è il modo migliore di procedere.
E.

Newsgroup: it.comp.lang.c
Titolo: [OT] Performance programming / moltiplicazione di matrici

Salve a tutti,
non riguarda direttamente il C, ma magari qui c'e' qualcuno che si e' 
occupato di questo problema (e io devo cmq risolvere il problema con un 
programma in C :)
Come esercizio devo ottimizzare una moltiplicazione di matrici NxN (double, 
dimensione massima 20-30 MB, la RAM non e' un problema). Diciamo che devo 
replicare il piu' possibile le performance che avrei usando le Intel Kernel 
BLAS... qualcuno conosce della documentazione in giro? Trucchi che posso 
usare: moltiplicazione a blocchi, riorganizzazione dei cicli, loop unrolling 
manuale, software pipelining, e qualsiasi parametro del compilatore (gcc). 
Ho nozioni teoriche di tutto questo, ma qualche esempio/codice da 
studiare/fonte da consultare sarebbero di grosso aiuto. Il codice dovra' 
essere generato esplicitamente per una precisa architettura (Intel Xeon 
5345).
Pleg 

Pleg ha scritto:

carino come problema... ma hai già risolto?
Newsgroup: it.comp.lang.c
Titolo: delucidazioni!!!(esercizio in c)

Gentilissimi,
? non ho capito
4) Scrivere con un editor un file con questa struttura:
5 20.40
9 115.00
4 64.00
dove il primo valore di ogni riga rappresenta
la quantita' di merce acquistata ed il secondo
il prezzo unitario di una serie di beni.
Si scriva un programma C che calcoli la spesa per
ogni acquisto e la spesa totale.
è possibile in c creare un file in txt e poi farlo caricare da un programma
c che mi legga i valori contenuti nel file?
se si quale parte in che sezioni di un eventuale libro si possono trovare
tali lezioni per capire come funziona!!!!!

 tali lezioni per capire come funziona!!!!!
Beh, dovresti imparare a gestire l'input-output su schermo prima (primi
capitoli di solito) e su file (ben più in fondo ma facile lo stesso)...
-- 
Poochie ©
Teoricamente la teoria è uguale alla pratica, ma in pratica non lo è...

 tali lezioni per capire come funziona!!!!!
Un qualsiasi libro che tratti il C dovrebbe andare bene. Comunque, senza
stare a spendere soldi, leggiti la reference della libreria stdio.h, che
puoi trovare descritta qui
http://www.delorie.com/djgpp/doc/libc-2.02/libc_25.html
Indicativamente le funzioni che ti servono sono fopen, fread, fwrite. Poi
vedi tu :)
Deep

 ha scritto nel messaggio
news:Bv1Yb.240858$VW.97...@news3.tin.it...

Prova a studiarti le struct e array di struct poi se vuoi andare oltre prva
a studiarti le liste.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.590 / Virus Database: 373 - Release Date: 16/02/2004

Newsgroup: it.comp.lang.c
Titolo: Librerie crittografiche

Esistono librerie che implementano i principali meccanismi crittografici? 
Intendo ovviamente algoritmi di crittografia a chiave pubblica, privata, 
funzioni hash, generazione pseudocasuale di numeri... ecc ecc.
Ho visto che il C++ fornisce le CRYPTO++, ma il C????
Grazie 

 wrote in message
news:no6dd.162545$
35.79...@news4.tin.it

beecrypt dovrebbe avere una interfaccia "C"
http://sourceforge.net/projects/beecrypt/
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: aiuto sono disperata

Ciao raga,
sono disperata tra poco ho un esame e non riesco a capire una cosa:
Cosa significa *= nel seguente frammento di codice ???
{
j *= i;
i = j;
}
E cosi' anche +=
{
i += j;
j++;
pi++;
}
Vi prego aiutatemi ho i secondi contati
Bacini
Gessy

 i += j;
i = i + j;
-- 
Un marito che ha scoperto che la moglie lo tradisce si affaccia
all'ultimo piano con l'intenzione di buttarsi giu'.  La moglie:
"Caro, guarda che ti ho fatto le corna, non le ali!".
		-- Da it.hobby.umorismo

j *= i;
moltiplicazione
j= j*i;
i += j;
addizione
i= i+j;
schiaffoni
duido

 ha scritto nel messaggio
news:o2dJb.36845$_P.16...@news4.tin.it...


>Ma una lettura del K&R non ti farebbe bene prima di un esame?
Leggere il kernighan prima dell'esame ti fa venir dubbi sulle poche certezze
che hai

 ha scritto nel messaggio
news:o2dJb.36845$_P.16...@news4.tin.it...

Mi auguro che ti boccino!

"kikko" <send...@here.lol> ha scritto nel messaggio
news:F%kJb.32381$VW.15...@news3.tin.it...

Puo' darsi ma leggendo solo a pagina 60 trovi la soluzione immediata alla
domanda posta ed eviti di disperarti per un esame di C (e magari avrebbe
utilizzato il tempo restante per soddisfare il suo ragazzo :-) )
Giuseppe

 
Per me in realtà è un maschio che si firma al femminile per ottenere una 
risposta più celere :)))))) senza offesa, eh!
	ciao, rz
-- 
                                   /TIDIRYUM - Ferrara - ITALY\
                                   \ICQ#    13901251   !!bye!!/
"What we're seeing with Web sites that are viewable only with IE is the
privatization of the Web."        (Mitchell Baker)

 risposta più celere :)))))) senza offesa, eh!
molti hanno fatto cosi' in passato... e... Gessica e' spesso un nome di
invenzione maschile.
Tommy

risposta più celere :)))))) senza offesa, eh!
E cosa esclude che sia un maschio che si firma cosi' perche'
gli piace firmarsi cosi' ? :-)
Andrea

Newsgroup: it.comp.lang.c
Titolo: sigle strane al posto dei numeri

Salve,
ho win98 ed il dev c++.
ho scritto un programma che non riporto perchè lunghissimo, che esegue dei
calcoli matematici
con i tipi double .Esso  compila correttamente.
Alla fine mi deve visualizzare due variabili vcb1 e veb1 del tipo "double",
inserite in una
struttura "r":
printf("%f\n",r.vcb1);
printf("%f\n",r.veb1);
getchar();
Io mi aspettavo di ottenere per entrambi dei valori circa 0.01.
Invece, ecco che cosa mi stampa:
1.#QNAN0
1.#QNAN0
Altre volte, cambiando dei settaggi, invece mi visualizza:
-1.#IND00
-1.#IND00
Altre volte, cambiando dei settaggi, invece mi visualizza:
1.#INF00
1.#INF00
Cosa sono queste sigle? Come vanno interpretati?
Grazie,
adriano


In generale, indica che printf non riconosce il numero da te passato
come 'double', e riporta che il valore o non e' un numero (NaN = Not A
Number), oppure equivale a +infinito o -infinito.
Sicuro che le tue variabili siano inizializzate?
Newsgroup: it.comp.lang.c
Titolo: Esiste una funzione che genera spline in C?





Salve a tutti!


        
                
        Sto cercando di sviluppare una routine che 
deve interpolare una spline da parecchi punti di passaggio noti scritti in 
un file di dati.


Successivamente avrei bisogno di recuperare le 
coordinate di punti appartenenti alla spline, preferibilmente 
campionati ad intervallo costante.


Preferirei fare tutto in C ma ciò è realmente 
possibile?


Esiste una funzione che genera spline?


Che prototipo ha?


Grazie a tutti!


Ciao 


M D



 Tutor at D.S.I. University of Milan
V_/_ 'The future will not remember, the past doesn't forget.'
I'm Linux zion 2.4.0 #4 Thu Jan 11 15:33:34 CET 2001 i586


E' una routine classica delle Numerical Recipes. Cercale in rete.
Ovviamente c'e' anche la NetLIB (sempre in rete) e le soluzioni
commerciali tipo IMSL o NAG.
Sent via Deja.com
http://www.deja.com/

Newsgroup: it.comp.lang.c
Titolo: errore di tipo

Salve
ho appena iniziato a studiare il C e dopo i classici programini iniziali
ho riscontrato un problema
con scanf("&f",&mionumero) acquisisco dei caratteri numerici ma
se inserisco un carattere alfabetico il programma va in crach dato
che sto associando a una variabile float un valore carattere.
come posso risolvere il problema?
Ciao e grazie a tutti

 come posso risolvere il problema?
La funzione scanf ritorna il numero di elementi di input validamente
convertiti: se c'è un errore, questo numero sarà meno di quello che
t'aspetti.
Nel tuo caso, dovrebbe ritornarti 1, perché tu richiedi un solo elemento
("%f"). Se ritorna un valore inferiore, significa che non ha letto un
numero valido, quindi comportati di conseguenza. Es.:
    int i;
    float n;
    do
    {
       i = scanf("%f", &n);
       if (i < 1)
          fprintf(stderr, "\nErrore, numero non valido!\n");
    }
    while (i < 1);
--
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: come si utilizza questa funzione?

scusatemi volevo sapere bene cosa devo passare come parametri per farla 
funzionare se qualcuno mi facesse un esempio, non capisco **root (sono uno 
studente del 1° anno ingegneria), è un algoritmo valido?.
Grazie a tutti
typedef struct albero1 {
 TYPE info;
 struct albero1 *sx;
 struct albero1 *dx;
} albero;
int albero_insert(TYPE info, albero **root) {
 albero *tmp,*a;
 if((tmp=(albero *)malloc(sizeof(albero)))==NULL) return 1;
 tmp->sx=NULL;
 tmp->dx=NULL;
 tmp->info=info;
 if(!*root) {
  *root=tmp;
  return 0;
 }
 a=*root;
 while(a) {
  if(info<a->info) {
   if(a->sx==NULL) {
    a->sx=tmp;
    return 0;
   }
   a=a->sx;
  } else {
   if(a->dx==NULL) {
    a->dx=tmp;
    return 0;
   }
   a=a->dx;
  }
 }
}
void albero_inorder(albero *root) {
 if(!root) return;
 albero_inorder(root->sx);
 if(root->info) printf("%d",root->info);
 albero_inorder(root->dx);
}

 ha scritto nel messaggio
news:Cc6Fd.676293$35.27...@news4.tin.it...

Newsgroup: it.comp.lang.c
Titolo: Evitare il __setargv__ con BC 4.5

Spiacente se questo messaggio e' piuttosto specifico, ma non ho trovato
nessun gruppo piu' indicato.
Sto' cercando di portare del codice C su BC 4.5, purtroppo sembra che tale
codice (non scritto da me) abbia delle parti Microsoft-specific, in
particolare quando lo compilo il linker si lamenta che non trova un modulo
denominato __setargv__.
Suppongo che si riferisca al modulo setargv.obj, usato per "espandere" i
caratteri jolly nella linea di comando.
Ora, usare il modulo di VC++ e' impossibile per via di differenze nel
formato
binario dei file dei due compilatori, quindi sto' cercando un modo per
evitare
questo problema.
In particolare, non sono riuscito a trovare nessun punto nel codice dove il
dannato modulo e' riferito/chiamato.
Nessuna idea?
Davide

 nessun gruppo piu' indicato. <snip>
http://www.inprise.com/newsgroups/
Bye, Andrea
-- 
 _     /°#     ----------------+-------------------------
°  \  /        Andrea          | arimicci @@
   |++~|            Rimicci    |         aritaly. com
    \ /  --------- OS/2 V5 "Phoenix" --------------------
     |   The MIDI JukeBox:
    _|_                  
http://www.aritaly.com/eng/midi/
---------------------------------------------------------

Gia' provato. Non riesco a contattare il server.
Davide
"nobody" <"nobody"@%20.%20$1\\n\\r\\> wrote in message
news:3833d...@news.megasys.it...

Newsgroup: it.comp.lang.c
Titolo: Leggere lettera periferica usb

E possibile con un programma scritto in C, leggere
la lettera di una periferica usb che ogni volta che viene
connessa alla porta usb viene cambiata, ed assegnarla
ad una variabile stringa?
Grazie
Saluti

"Jason" <nospam@net> ha scritto:

Sotto Windiws:
http://www.cppfrance.com/codes/ENUMERER-PARTITIONS-SUR-PERIFERIQUE-USB_45264.aspx

ti ringrazio.
ma bisogna registrarsi e il codice e per visual C++
Ciao
Newsgroup: it.comp.lang.c
Titolo: file .dep .dsp .dsw .mak

Sapete dirmi cosa sono ciascuno di questi files e che funzione hanno ?
Pensavo che per compilare dei file sorgente servissero solo i file .c  e .h

Sono file prodotti dal Visual C++ (.dep, .dsp, .dsw), o in generale dai
compilatori (.mak) quando vengono gestiti deo progetti su piu sorgenti.
Per quanto riguarda i files del VC++ puoi farne a meno (vengono prodotti
automaticamente dal VC++, basta avere i sorgenti), e in qualche modo te la
cavi.
Cmq:
dep: non so
.dsp è un singolo progetto
.dsw è un workspace
Dome
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
PC Brain Official Web Site
http://digilander.iol.it/pcbrain
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Newsgroup: it.comp.lang.c
Titolo: velocizzare processi

Salve a tutti.. sto creando un programma che deve codificare una serie molto
lunga di stringhe in hash MD5 etc.. Queste stringhe sono molte, 
c.ca
 60.000.
Si capisce che gestire il tutto con un singolo processo e' lunga.. Volendo
forkare il processo e creare, ad esempio, 4 figli che lavorano alla codifica
con il padre in "clustering" dello stesso file.. come posso fare?
Ovvero come posso far suddividere il lavoro equamente tra i processi?
Grazie

 Ovvero come posso far suddividere il lavoro equamente tra i processi?
Sei OT, ma la domanda che dovresti porti e` "voglio davvero farlo?". Ma
soprattutto: "quante CPU ho a disposizione?".
ciao
KrOnOs
-- 
Home: 
http://kronoz.cjb.net
This message will self distruct in 5 seconds.


sei fuori?
se il processore è unico che vantaggi avresti con simili contorsionismi?
secondo me rallenteresti invece di accelerare.
se hai molti accessi al disco usa una cache ma spezzare i processi con un
solo processore è inutile

 ha scritto nel messaggio
news:am7e0q$6r4$1...@lacerta.tiscalinet.it...


 tra i processi?
Nella mia inesperienza, penso che il massimo delle prestazioni lo dovresti
ottenere avendo tanti processi quanti sono i processori.
Se hai #processi>#processori, ci sono sempre _almeno_ #processi -
#processori in attesa e inoltre il contest-switch per passare da un
processo ad un altro ruba tempo di calcolo.
Con #processi<#processori, hai dei processori che non fanno un tubo ;-)
Questo in via del tutto semplicistica e secondo la mia limitata visione del
problema.
-- 
 Ciao, Bianco.                         Reply to luca.bianco (at) 
tiscali.it
|---------[Powered by Debian GNU/Linux 3.0 - 2.2.20 - AMD K6-200]---------|

 problema.
non è affatto  limitata come visione.
un tempo si usava la suddivisione con singolo processore unicamente per
sfruttare le potenzialità del matematico (quindi di fatto i processore usati
erano due)
 e sembrava che i programmi andassero più veloci , ma era solo un illusione.

 processo ad un altro ruba tempo di calcolo.
Si e no. Dipende molto da quanto pesa l'IO (disco, rete, ...) rispetto al
calcolo: se hai un processo che accede molto al disco, praticamente questo
e' sempre "fermo" in attesa dei dati da una periferica "lenta". In questo
caso il context switch non ruba niente, anzi bisogna dire grazie che venga
fatto. :-)
Il guaio e' che in questo caso il problema e' CPU bound, pertanto un
processo non e' mai in attesa di dati da una perferica "lenta" e il
context switch pesa.
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 context switch pesa.
Io mi riferivo appunto al caso specifico indicato da <romolo>

Newsgroup: it.comp.lang.c
Titolo: Chi mi spiega malloc, calloc, realloc?

Salve a tutti , c'è qualcuno che
può spiegarmi come lavorano e come
si utilizzano malloc, calloc, realloc?
in particolare quest'ultima, può essere
utilizzata per riallocare una zona di 
memoria allocata tramite calloc, nel
caso questa contenga , dopo essere
stata caricata delle zone di memoria
libere?
Grazie a tutti
Ciao

 libere?
malloc e calloc allocano una certa porzione di memoria (la forma con cui 
passi i parametri e' leggermente diversa, ma il funzionamento analogo) 
presa dallo heap. La calloc inoltre ti garantisce che la memoria sara' 
azzerata, l'equivalente di un memset(puntatore,0, 
dimensione_memoria_allocata), la malloc non ti garantisce nulla circa 
l'inizializzazione.
A parte questa differenza sull'inizializzazione i puntatori vengono trattati 
allo stesso modo, infatti utilizzi la free allo stesso modo e puoi 
riallocarli a piacere (memoria permettendo).
L'utilizzo e' spiegato ampiamente su tutti i testi seri di programmazione e 
mi pare abbastanza lineare per malloc e calloc: gli dici quanta memoria 
vuoi e loro te la forniscono (attraverso un puntatore) se disponibile, 
altrimenti ti ritornano NULL.
La realloc opera in genere su una zona di memoria gia' allocata e ne 
modifica la dimensione se possibile, altrimenti alloca una nuova porzione 
di memoria, sposta i dati presenti nell'altra porzione, la libera e ti 
ritorna il nuovo puntatore (oppure NULL se non trova nuova memoria, 
esattamente come la malloc).
-- 
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."

passi i parametri e' leggermente diversa, ma il funzionamento analogo) 
Preciso che in molte implementazioni, calloc() non è altro che una
chiamata a malloc() seguita da una memset().
-- 
Andrea Laforgia
#exclude <windows.h>
Newsgroup: it.comp.lang.c
Titolo: come si gestiscono eventuali valori di ritorno di un thread?

 [c] come gestire i valori restituiti da un thread
come da oggetto, come si gestiscono eventuali valori di ritorno di un
thread?
la funzione da associare la thread ha la firma:
Codice:
void* nomefunzione (void* parametri)
se nella funzione metto:
Codice:
void* nomefunzione (void* parametri){
int i = 0;
/* codice funzione*/
return (void)* i;
}
e nel main metto:
Codice:
int main(){
int numero;
/* corpo main*/
pthread_join(thread, (void*) &numero);
}
mi da errore
_______________

 }
pthread_join lavora su un thread attivo.
prima va creato il thread con pthread_create(.......):
result=pthread_create((pthread_t*)&thread_hdlr,(const pthread_attr_t*)&attr, 
&my_thread, &my_thread_arg);
Il parametro da passare a di pthread_joid poi e'  un *puntatore* void* in 
cui verra'
ritornato l' esito di pthread_exit(n);
void* pReturn;
..........
pReturn=0;
pthread_join(thread_hdlr, &pReturn);
printf("Exit value dal thread:(%d) " (int)pReturn); Bye
brix

On 9 Feb, 14:18, "brix99luftballons"

così funziona, ma perdona l'ignoranza perché alla pthread_join si
passa pReturn per riferimento se è già di suo un puntatore?
Quando compilo mi da due warning "cast from pointer to integer of
different size" quando faccio la
return ((void*) i);
e la
printf("Exit value dal thread:(%d) " (int)pReturn);
è giusto così?
grazie mille per l'aiuto!!

 different size" quando faccio la ...
Questo warning ti dice che stai cercando di infilare il valore di un
puntatore dentro un int, che sulla tua piattaforma ha evidentemente una
dimensione differente. Probabilmente stai usando una piattaforma a 64 bit.
Probabilmente i tuoi puntatori hanno sizeof 8, mentre gli int 4.
Max


che dire max, sei stato utilissimo.
Effettivamente sto lavorando con il fisso di casa che è una
piattaforma a 64bit.
Grazie mille!

L' ottimo max ha chiarito praticamente tutto.
In effetti l' intenzione di pthread_exit (void* pippo)
sarebbe quella di tornare un puntatore ad una locazione/struttura *statica*
ovviamente implementation-dependent, che contiene qualsiasi
cosa il programma abbia deciso....
un thread acquisizione dati potrebbe lasciare qui  i valori acquisiti
che saranno elaborati dal processo principale...e la join serve da
sincronizzazione.
In molti casi pero' questo ritorno viene utilizzato semplicemente
come valore numerico, ad es un codice di stato....
quindi, il valore tornato nella nostra locazione non è un indirizzo
ma appunto un semplice valore numerico.... siccome il tutto
e' implementation-dependent, la cosa e' accettabile.
brix
(BTW, ogni thread  posix deve terminare ritornando un void* ....)
Newsgroup: it.comp.lang.c
Titolo: Libro per imparare il C++

Che buon libro mi consigliate per imparare il C++, io che sono un
ignorante assoluto in questo...
grazie
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ignorante assoluto in questo...
C++ -> it.comp.lanc.c++ :)
Mi sa che hai sbagliato a scrivere.
Un consiglio te lo do, ma non prenderlo per oro colato (chiedi sul gruppo 
specifico e vedi cosa ti rispondono): Stroustrup - Linguaggio C++ - Addison 
Wesley se ricordo bene.
Ce ne sono anche altri di buoni, su 
www.accu.org
 trovi un elenco e un 
giudizio :)
-- 
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."

 Ce ne sono anche altri di buoni,
"Thinking in C++" e' uno di quelli. Forse per un neofita assoluto e' anche
meglio dello Stroustrup (che a dire la verita' _IMHO_ fa veramente schifo,
preferisco il Lipmann) ed ha il vantaggio di essere anche gratis
(liberamente 
www.mindview.net
).
C:\>iao Angelo


Newsgroup: it.comp.lang.c
Titolo: risp K & R

Lo stò cercando anche io un buon libro..
stò facendo il primo anno d ing. informatica al poli..
e ricmincio con il C...
Qualche libro da consigliare??

 Qualche libro da consigliare??
se segui il corso e conosci un minimo di programmazione un libro non ti
serve...
eppoi c'č tanta di quella roba in rete se hai dei dubbi!

"badcruel" ha scritto:
|| Lo stň cercando anche io un buon libro..
{tagl, accorc}
ciao bad, ti vorrei chiedere qualcosa per quanto riguarda in info al poli, č
un disturbo?
se non lo č, scrivimi con la tua mail a
tihoscrittouna /at\ email "dot" it
grazie!
Gioba

eppoi c'è tanta di quella roba in rete se hai dei dubbi!
Certo, c'è anche tanta gente che dice cagate sul C, però ;-)
Attenzione: i libri (se non di Schildt) servono sempre...

 Attenzione: i libri (se non di Schildt) servono sempre...
i docenti del poli qui parlano quasi in binario :P



Pessimi docenti allora ;-)

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

Salve!
Mi sapete dire come faccio ad associare un'immagine a un mio programma
*.exe?
grazie per la vostra cortesia!
p.s.Potete spiegarmelo in un modo non troppo complicato?


In genere si utilizza un editor di risorse ...
ne esistono tanti (shareware o freeware), come ResHacker ...
Con i compilatori Borland di solito esce fornito nel pacchetto ...
Newsgroup: it.comp.lang.c
Titolo: CONIO.H

Salve a tutti... č la prima volta che posto sul NG... volevo un
informazione: finchč programmavo col Borland Turbo C++ 3.0 potevo utilizzare
una libreria di nome CONIO.H che conteneva tutti i comandi come gotoxy,
clrscr, etc... (come la CRT del Turbo Pascal); ora invece sto passando a
programmare sotto Linux e ho scoperto che CONIO.H lě non c'č...
domanda: Esiste una libreria simile in Linux o devo programmarmi da solo
tutte quelle funzioni?
Grazie anticipate di una vostra risposta,
Amleto

Amleto <amleto...@NOmail.SPAMcom> wrote in message
80hjoa$j5s$1...@draco.tiscalinet.it...

C'č la libreria ncurses, ma non la so utilizzare.


Come ti hanno già detto esistono le curses e le ncurses: fai man per
avere maggiori informazioni.
Ti posso dire che fanno quasi tutto quello che fanno le conio, ma in
più ti permettono di gestire le finestre.
Le ho viste utilizzare per un progetto di laboratorio e il risultato
e' stato magnifico. Un esempio di programma che utilizza le curses e'
il pine (notare che e' sempre centrato sulla finestra e che alcune
righe sono sempre al fondo della finestra.
Nota: in linux, al contrario del dos, se le funzioni per cancellare lo
schermo falliscono, prova a fare (dopo aver cancelato) un bel refresh
dello schermo ......
Paolo

 wrote in message
pmIsOBoTJWNIxW...@4ax.com...


 programmare sotto Linux e ho scoperto che CONIO.H lě non c'č...
Semplificando un po', sotto ogni Unix, non sai a priori che tipo di
terminale sta visualizzando l'output del tuo programma: puo' essere tutto,
da una stampante a linee ad un xterm. Ovviamente puoi porre restrizioni
sulla 'configurazione minima' necessaria, e scoprire dinamicamente su che
terminale stai lavorando, che possibilita' esso ha e come usarle. Le api
'termcap' (terminal capabilities) servono esattamente a questo.
Generalmente, gli effetti desiderati si ottengono mediante sequenze di
escape (di solito, ascii 27+i caratteri e i parametri che specificano il
comando) inviate su stdin, dipendenti ovviamente dal terminale.
Librerie come curses o ncurses ti proteggono un minimo da cio', dato che
contengono funzioni che provvedono a tradurre la funzionalita' di alto
livello ("muovi il cursore alla posizione x,y") nell'idioma del terminale
sottostante oppure falliscono in modo 'graceful' (a volte ;-) quando una
certa funzionalita' non e' supportata.

Newsgroup: it.comp.lang.c
Titolo: liberare la memoria con free()

Salve, purtroppo per me vengo da java e qunidi ho molti dubbi generati
dalla mancaza del garbage collector
 
la domanda è:
io creo una lista dinamica quindi ogni volta che tolgo un elemento
libero la memoria relativa, ovviamente se la lista è ordinata prima la
riordino e poi libero l'ultima posizione.
ma se voglio cancellare tutta la lista devo liberare un elemento per
volta o basta fare la free sul puntatore alla testa?
 
grazie per le varie risposte
abacus


devi liberare ogni singole elemento allocato
con malloc, calloc etc.
A.
Newsgroup: it.comp.lang.c
Titolo: redirigere input da file

Salve,
ho un programma che letti dei comandi in input li esegue.
tramite un ciclo
while(c != EOF) {
c = getchar();
...
[circa 300 righe]
....
}
non leggo riga per riga, in quanto ho bisogno di effettuare dei 
controlli "runtime" sui singoli caratteri inseriti.
Ho la necessità di poter eseguire tale programma facendogli prendere in 
input i comandi da un file, anzichè da stdin.
Il nome del file contenente i comandi gli viene passato all'avvio del 
programma.
E' possibile? Altri metodi?
Si tratterebbe di leggere un carattere alla volta anzichè da stdin dal file.
Vi ringrazio per ogni eventuale aiuto!
Un saluto.
Gabriele

 ...
mio_programma parametri <file_di_input >file_di_output
Funziona anche con DOS e Windows{,NT}.

neonano ha scritto:

Scusami!
quello che intendevo io era una cosa del tipo:
nomeprogramma nome_file_da_eseguire
ovvero questa sarà la sintassi con cui dovrà funzionare il programma :)
Ho risolto, scusatemi ma sono stato un po troppo frettoloso nel chiedere 
aiuto!
Un saluto.
Gabriele

 troppo frettoloso nel chiedere aiuto!
Scusato.
Credo sia bastato leggere il manuale per 
scoprire fgetc e getc.