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

Scusate probabilmente è una FAQ ma avevo bisogno di un'opinione, non di una
lista di titoli..
Vorrei comprare un libro per imparare il C, ma non so cosa comprare, ce ne
sono tanti e non so scegliere! mi servirebbe un libro per partire da 0 ma
arrivare anche ad argomenti avanzati, con qualche preferenza sulla
programmazione in ambienti unix.. non sono completamente a digiuno con la
programmazione, in passato ho usato pascal, e ora uso il perl per passatempo..
ho sentito parlare qua e la del K&R come la bibbia del C ma afaik (poco in
effetti..) è datato, va bene lo stesso?! anche qualcosa di economico ma valido
mi andrebbe bene, l'importante è che non sia banale e vada oltre gli argomenti
di base!
tnx
-- 
[Filippo...........................]
[Linux User #342745................]
[remove ANTISPAM for reply.........]
        ==[...penguin powered...]==

 tnx
Ti consiglio di guardare i vecchi post di questo newsgroup (ad esempio 
con google) - discussioni del genere sono nate molte volte, e potrai 
leggere varie opinioni a riguardo.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 mi andrebbe bene, l'importante č che non sia banale e vada oltre gli

Newsgroup: it.comp.lang.c
Titolo: ah questi tipi...

ciao ragazzi,
volevo chiedervi, perché questo codice compila??
#include<stdio.h>
int main()
{
 char *c;
 int i = 5;
 c = malloc(sizeof(int));
 *c = i;
 printf("%d\n", *c);
}
in teoria un puntatore non puņ puntare ad UN SOLO tipo di dato?
nell'esempio lo faccio puntare ad un INT nonostante sia un CHAR , com'č
possibile che il compilatore mi segnali solo un warning?
i puntatori in C possono puntare a qualunque tipo di dato.. ? boh, nn mi
raccapezzo:-(
vabuņ, spero che qualcuno mi illumini :-)
ciao ciao

possibile che il compilatore mi segnali solo un warning?
Non lo fai puntare ad un int ma assegni un intero a cioò che è puntato
da "c".
-- 
Marco Barisione (ICQ 84277092)

 da "c".
si hai ragione, mi sono spiegato male, ciň che volevo dire č : "C" č un
puntatore a char, in questo caso invece punta ad un'area di memoria atta a
contenere INT.. č legale tutto ciň? non so se mi sono spiegato bene :-S

contenere INT.. č legale tutto ciň?
Sě perché la malloc ritorna un void*, quindi il compilatore non puň
farci nulla. Se usassi il C++ non potresti:
char * c = new int;


 char * c = new int;
perfetto, t ringrazio;-)
bye bye

Newsgroup: it.comp.lang.c
Titolo: Contare Parametri

Salve a tutti
come posso fare per conoscere il numero di parametri passati
da riga di comando al programma?
ex : ./nome_prog 10 20 35 
Parametri passati 3.      
oppure 
./nome_prog programmare in ansi c
Parametri passati 4.
Ciao Max
-- 
-----------------------------------------------------------
 Secondo alcuni autorevoli testi di tecnica Aeronautica,
 il calabrone non può volare, a causa della forma e del
 peso del proprio corpo in rapporto alla superficie alare. 
 Ma il calabrone non lo sa e perciò continua a volare.
					     Igor Sikorsky
-----------------------------------------------------------

 Parametri passati 4.
int main(int argc, char* argv[])
{
}
Secondo te a cosa serve argc?
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> Secondo te a cosa serve argc?
Hai ragione che caxxata che ho postato !!! 
Per redimermi da questa eresia mi metto
in ginocchio sui tasti della tastiera e 
mi fustigo con il mouse :)


 mi fustigo con il mouse :)
Vabbe' mo' non esagerare :-)
Attenzione che argc conta anche il nome del programma:
nomeProgramma.exe
ha argc pari a 1 e non a 0...

Newsgroup: it.comp.lang.c
Titolo: gui

per realizzare programmi con interfaccia grafica in ambiente 
windows,devo per forza passare al c++ o posso rimanere con il mio bel C?
p.s.
la domanda deriva dal fatto che ho sempre realizzato solo programmi in C 
da linea di comando e mi chiedo se devo per forza passare alla 
programmazione ad oggetti per realizzare interfaccie grafiche.
grazie

 programmazione ad oggetti per realizzare interfaccie grafiche.
Non è questione di linguaggio quanto di approccio (attesa evento - 
callback), le GTK+ sono in C AFAIR.

 callback), le GTK+ sono in C AFAIR.
Si, sono in C e le Qt sono in C++. Ma non c'entra una mazza in quanto 
esistono delle interfacce per fare il binding in C, C++, Java, Perl e molti 
altri linguaggi.


bene,quindi posso andare tranquillo con codeblocks + gcc C e gtk+ sotto 
windows ?
grazie

 il binding in C, C++, Java, Perl e molti altri linguaggi.
Perché il "ma" che è una avversativa?

Addì  domenica 9 gennaio 2011 16:49 Andrea D'Amore scrisse:

Ho  il dito a banana...
Ho avuto il morbillo da piccolo...
Il gomito fa contato col piede...
Mi è entrata una bruschetta nell'occhio...


Ci sono anche le WxWidgets[1] (C++) ma non so se esitono interfacce
per l'uso col C
[1] 
http://www.wxwidgets.org/

 Mi è entrata una bruschetta nell'occhio...
Non dirmi che ieri… l'autolavaggio…

 Non dirmi che ieri… l'autolavaggio…
La macchina... era la mia!!
:DD
Pleg


Oltre a quello che ti hanno già detto, ricordo anche che le API di
Windows più low-level hanno bindings in C. I framework GUI o RAD
comunemente usati (MFC, GTK, QT e quant'altro) si basano appunto su
queste. Se non devi fare molto, vuoi rinunciare alla compatibilità e
ti senti abbastanza folle, puoi anche usarle direttamente..
Ciao!

 [1] 
http://www.wxwidgets.org/
grazie jack
Newsgroup: it.comp.lang.c
Titolo: routine C che...

Salve.
Devo scrivere una routine in C (o Borland C++) che faccia la seguente
cosa: 
legge un file di testo da HD e copia il contenuto in un file di output e
ogni volta che incontra un numero in cifre lo copia così com'e'
aggiungendo dopo il numero stesso l'equivalente in lettere tra
parentesi. Per esempio se nel file di input trovasse "ci sono 18 mucche
e 2735 formiche" nel file di output scriverebbe "ci sono 18 (diciotto)
mucche e 2735 (duemilasettecentotrentacinque) formiche. Prima di
gettarmi a capofitto nella stesura del codice mi chiedevo se qualcuno
non avesse già affrontato un problema simile e magari avesse già scritto
una function che, ricevendo un intero, calcolasse la stringa opportuna.
Chiedo troppo?? ;-))
Grazie
ciao
-- 
     _
    / 7		
   /_(   
   |_|
   |_|		
   |_|		Cujo®, sometimes referred to as:
   |_| /\
 /\|=|/ /
 \ |_| /         Francesco C.
  ) _  \           e-mail: 
cu...@energy.it
 / |_|  \            ICQ#: 2199793
/  -=-o /
\  /~\_/
 \/      
http://yourweb.energy.it/cujo

    |_|


 
Ho la funzione che cerchi, gia' fatta, in C++, pero'.
E' un po' lunghetta, per cui, visto che e' anche OT, evito di postarla.
E' pure scritta male (come estetica)... comunque se la vuoi te la mando in
email... :)
Senno', sul sito dei NG it.comp.database.access e it.comp.lang.vb
(del primo ti do pure l'URL: 
http://members.xoom.it/it_db_access
)
trovi la funzione (in VB) che converte numeri in parole in ben 4 
lingue! :-)
bye! ;-)
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"Un generatore di numeri casuali non puo' essere scelto a caso", Knuth
Newsgroup: it.comp.lang.c
Titolo: Macro C

Salve,
sto studiando qualche sorgente di Darwin. In particolare, in 
AppleSMBIOS.cpp, trovo questa definizione di macro:
#define RELEASE(x) do { if (x) { (x)->release(); (x) = 0; } } while(0)
che poi viene usata per liberare ed azzeare, qualora allocato, l'oggetto x.
Quello che non capisco è perchè il tutto è racchiuso in un ciclo 
do..while, che tra l'altro viene eseguito sempre solo una volta.
Non poteva essere semplicemente così?
#define RELEASE(x) if (x) { (x)->release(); (x) = 0; }
Grazie

 #define RELEASE(x) if (x) { (x)->release(); (x) = 0; }
In questo caso avresti dei problemi:
if (i==3)
     RELEASE(x);
else
     x->compute();
perchè l'else verrebbe associato all'if dentro la macro.
E.

 E.
Vero grazie, non ci avevo pensato!
In più con il do..while è possibile mettere il punto e virgola, mentre 
lasciando solo le graffe all'esterno no.
Pericolosissime ste macro...

p51d ha scritto:

Inoltre sfruttando do .. while(0) è compilabile anche secondo lo 
standard c89, cosa che non sarebbe stata possibile utilizzando solo
un paio di graffe per delimitare un nuovo blocco
phempto
Newsgroup: it.comp.lang.c
Titolo: Ostrega la malloc!!!!

Sto usando un po di malloc e un po di free
e succede che la malloc mi restituisce un puntatore a null (e di memoria
ce n'e') e la free mi genera un eccezione non trappata
In breve:
alloc spazio per un punt, quando arrivo al max della dimensione, alloco
uno spazio maggiore, copio il contenuto dal vecchio al nuovo, free del
vecchio, e faccio puntare in vecchio al nuovo:
...
  p = mia_realloc(p);
...
void *mia_realloc(char *p)
{
  char *q = (char *) malloc( dimensione );
  memcpy(q, p, size);
  free(p);
  return p;
}
Si incasina sempre sulla free(p).
In precedenza, p viene riempito con cose del tipo:
  strcpy(p, (*iteratore_su_lista_di_string).c_str());
ma ho notato che se uso la memcpy invece della strcpy funziona, e mi pare
alquanto stranino.
Vorrei essere delucidato
grazie mille
ciao
Gin
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Scusate, la funzione ritorna q ovviamente, non p:
void *mia_realloc(char *p)
{
  char *q = (char *) malloc( dimensione );
  memcpy(q, p, size);
  free(p);
  return q;


 }
Scusa, ma "dimensione" e "size" sono stati settati correttamente ?
e poi non puoi fare free(p) e restituire p, forse volevi restituire q ?
e perche' non usi la realloc() ? La realloc fa gia' lei la copia.
ciao,
g.

'dimensione' e 'size' sono giusti
la rialloc non l'ho usata perchè mi dava lo stesso problema, e allora ho
voluto scrivermela io
e comunque mi pare giusto com'e' scritto, non ci vedo nulla di strano
e mi chiedo se il fatto che con la memcpy funzioni è un caso o c'e' un
motivo
Anche se faccio un ciclo for
for (int i=0; i<lunghezza_di_p; ++i)
  q[i] = p[i];
quando arriva alla free mi va in errore


Ho risolto, c'era un errore, ma non ve lo dico perchè è imbarazzante
grazie


 Ho risolto, c'era un errore, ma non ve lo dico perchè è imbarazzante
No, devi dirlo, e' sempre istruttivo imparare dagli errori degli altri, e
soprattutto fa meno male... ;-)
Fizz


 Fizz
Te lo dico a voce


il size della stringa era piu' piccolo di quello che ci mettevi dentro??
:D

 :D
Per un caso veramente fortuito succedeva che il '\0' (altrimenti detto il
fucking \0) veniva scritto oltre la dimensione della stringa... cioč, una
cosa che impari quando hai 11 anni!
Cioč! un solo carattere, che cadeva proprio alla 1025esima posizione, mi
pareva assurdo pure perderci del tempo per controllarlo
Mi sento molto come Ted Striker nell'Aereo piů pazzo del mondo

Newsgroup: it.comp.lang.c
Titolo: Convertire uno struct a una variabile

Ciao,
Ho il seguente struct
static struct flags
{
u8 flag0:1;
u8 flag1:1;
u8 flag2:1;
u8 flag3:1;
u8 flag4:1;
u8 flag5:1;
u8 flag6:1;
u8 flag7:1;
} flags;
è possibile convertirlo in un byte ? perchè devo spararlo su uno scarico 
dati.
grazie
PippoPippo


Due modi:
Sporco:
unsigned char c;
c = *(unsigned char*)(&flags);
Elegante:
Ridefinire la struttura come union:
static union flags {
    struct bits {
       u8 flag0:1;
       u8 flag1:1;
       u8 flag2:1;
       u8 flag3:1;
       u8 flag4:1;
       u8 flag5:1;
       u8 flag6:1;
       u8 flag7:1;
    } bits;
    unsigned char byte;
} flags;
Così puoi sempre accedere individualmente ad ogni bit o direttamente a
tutto il byte.

Passando bit sono capace anche io,ma vorrei sapere se c'e' un metodo 
piu' veloce.
Pippo ha scritto:



Certo che è importante - e per fafore niente più top-posting :)

Newsgroup: it.comp.lang.c
Titolo: BGI ???

Vorrei sapere a che cosa servono e come sono strutturati i file .BGI in C
per DOS.

 per DOS.
i file BGI sono driver per le schede grafiche, ed erano distribuiti col
Turbo C e Turbo Pascal. Praticamente la Borland ha scritto un libreria
"generica" per le funzioni grafiche, poi a run-time puoi scegliere il driver
in funzione della scheda grafica su cui gira il programma.
I driver BGI vanno bene per creare schermate grafiche relativamente
statiche, visto che sono abbastanza lente. i driver ufficiali sono a 16
colori, ma ne esistono anche versioni a 256 (non so dove..).
---
Ranger, togli .fr dal mio indirizzo per rispondere
http://members.tripod.com/%7Eranger_rg/

 per DOS.
Se ti interessa programmare in modo grafico, lascia perdere le BGI
(lente e quindi inutilizzabili) ed usa la XLIB (l'ultima versione e' la
6.12); la trovi facilmente via internet.
Newsgroup: it.comp.lang.c
Titolo: Array bidimenzionali

Salve a tutti,
non ricordo dove (forse in un NG o in una ML) ho letto che oltre al classico
metodo
void funzione (int array[][N_Colonne]);
void main ()
{
int a [N_righe][N_colonne];
 ...
funzione (a);
...
}
per passare un array bidimensionale ne esiste uno che sfrutta il fatto che,
in memoria, gli elementi di un array sono tutti sontigui.
Il prototipo della funzione era pressapoco cosi'
void funzione (int *array, int m, int n);
Non mi sono soffermato all'epoca su come veniva fatto ed ora me ne pento
(soprattutto perche' rodo per saperlo)
Se qualcuno di voi sa di cosa parlo (io non mi includo :p) perfavore
illuminatemi (se postate un piccolo codice di esempio almeno nei passi
fondamentali prototipo di funzione, chiamata di funzione, utilizzo
dell'array nella funzione ne sarei grato)
Non mi serve per un motivo preciso ma solo per conoscenza personale :)
Ciao a tutti
                    Maurizio

void funzione (int *array, int m, int n);
#include <stdio.h>
void func1(int (*a)[2])
{
    int i, j;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
        {
            printf("%3d;", a[i][j]);
        }
    }
    printf("\n");
}
void func2(int *a, int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%3d;", a[i*n + j]);
        }
    }
}
int main()
{
    int a[3][2] = { {1, 2}, {3, 4}, {5, 6} };
    func1(a);
    func2(&a[0][0], 3, 2);
    return 0;
}
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

(soprattutto perche' rodo per saperlo)
Puoi passare a una funzione un puntatore anziche' l'array, pero' le
motivazioni sono leggermente diverse.
Prima di tutto un array di T a N dimensioni puo' essere visto come un
puntatore a un puntatore a... (ciclo ripetuto N volte) T
Es:
T array[3] = T *** array;
Questa semplice "conversione" e' quella che ti permette di allocare
dinamicamente vettori multidimensionali.
Ora a una funzione anziche' passare l'array, puoi passare il puntatore
(come descritto prima) e ovviamente le dimensioni (che sono N
parametri)... questo per lo stesso motivo per cui e' possibile
allocare array dinamicamente.
Per accedere poi ai singoli elementi dell'array puoi usare 2 metodi:
array[x][y][z];
*(*(array+x)+y)+z;
Questi medoti sono equivalenti perche' il compilatore tradurra' il
primo come il secondo.
In alcuni casi tu puoi assumere che l'array sia allocato continuo in
memoria, ma questo solo in caso di array statici, mentre se hai un
array dinamico nulla ti dice che gli elementi vengano allocati in modo
contiguo.
Spero di essermi spiegato chiaramente.
-- 
Mox

Grazie ^_^
Newsgroup: it.comp.lang.c
Titolo: codice fiscale

Sapete dove posso trovare i sorgenti per un programma che mi calcoli il
codice fiscale?
grazie
Mirko

 codice fiscale?
Se ne era parlato qui un paio di mesi fa... io non ricordo, prova a cercare
su deja
--
________________________________
per rispondermi iliasba(at)
tin.it
bye Brain

codice fiscale?
http://www.angelfire.com/pa/palumbo/codfisc.html


http://www.murialdo.it:8000/it_lang_vb/articoli/codfisc/codfisc.htm
Ciao,
qui trovi delle info sugli algoritmi del codice fiscale e i database dei
comuni aggiornati ... lo puoi usare come base per scrivere delle funzioni.
Bye,
Ezio BOnsi

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

Non so come visualizzare un banalissimo file in formato .ps che posso usare?
grazie ciao a tutti
CE

grazie ciao a tutti
Scarica GSView da 
http://www.cs.wisc.edu/~ghost/index.html
HTH
Andrea
PS: Cosa centra il linguaggio C ?
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 ha scritto nel messaggio
news:3a5a5d58...@news.interbusiness.it...


Newsgroup: it.comp.lang.c
Titolo: Gestione Memoria in Lnux

Ciao,
come faccio a controllare l'occupazione di memoria sia totale e sia delle
sole pagine caricate, mantenendo separate le informazioni, di un processo di
cui do l'id come parametro? (C in Linux)
Mari

 cui do l'id come parametro? (C in Linux)
Crosspostare (male ed OT per giunta) non ti fara` certo guadagnare
l'aiuto degli altri.
f/up
-- 
Home: 
http://kronoz.cjb.net
Tentare e` il primo passo verso il fallimento.
Homer J. Simpson
Newsgroup: it.comp.lang.c
Titolo: printf di un double

Salve a tutti,
data questa funzione:
inline static double to_res53(uint64_t v)
{
    return v * (1.0/18446744073709551616.0L);
}
che mi dovrebbe prendere un numero intero a 64 bit e restituirmi un "reale"
in [0,1) , ho provato a dargli in pasto un semplice 1, ma con
printf("%.30e\n", to_res53(1));
ottengo giustamente 5.421...e-20, mentre con
printf("%.30f\n", to_res53(1)); o printf("%.30lf\n", to_res53(1));
ottengo solo una sfilza di 30 zeri... come mai? Come faccio a ottenere tutte
le cifre decimali di quel numero in notazione fissa?
Tra l'altro, noto che dandogli numeri piu' grandi (es: 1e6) cmq mi
visualizza sempre circa 14 cifre decimali e poi zeri, anche se dovrebbe
avere piu' cifre decimali... cosa lo limita?
Grazie,
Pleg

"Pleg" <25mV@300.K> ha scritto nel messaggio
news:btMAh.3381$aF5....@tornado.fastwebnet.it...

%f va usato per le variabili float, per i double va usato %lf
Non hai indicato con quanti byte è rappresentato un double sulla tua
architettura.
Se il double è da 4 byte, hai una mantissa da 23 bit (sono 7 cifre decimali)
Se il double è da 8 byte, hai una mantissa da 52 bit (sono 15 cifre
decimali)
http://it.wikipedia.org/wiki/Virgola_mobile
http://it.wikipedia.org/wiki/IEEE_754

 %f va usato per le variabili float, per i double va usato %lf
Non e' proprio esatto.
La printf (e simili) si aspetta dei valori.
I numeri float vengono promossi automaticamente a double.
Per questo motivo
"%f" va usato *sia* per i float che per i double mentre
"%Lf" va usato per i long double.
La scanf (e simili) si aspetta dei puntatori, quindi e'
piu' piccosa.
"%f"  = float
"%lf" = double
"%Lf" = long double
(Poi di ciascuna di queste esistono anche delle varianti ammissibili,
per esempio usando g al posto di f, etc.. Per ogni dubbio consultare
la documentazione in linea....)
ciao,
g.

 I numeri float vengono promossi automaticamente a double.
Ah, non lo sapevo, questo mi spiega un po' di cose.
Grazie a entrambi, mi sa che per ora vado con il %e allora :-)
Pleg

Newsgroup: it.comp.lang.c
Titolo: puntatore far

Salve a tutti,
in rete ho trovato che il puntatore far * è un puntatore ha 32 bit (da
notare che il mio manuale di c non ne fa proprio cenno e neppure il
compilatore Borland lo riconosce!)
Nel mio listato ho una funzione di questo tipo:
int NOME_FUNZIONE ( struct NOME_STRUTTURA far * far *pointer);
secondo voi come devo interpretare gli argomenti da passargli?

 secondo voi come devo interpretare gli argomenti da passargli?
a meno che tu non utilizzi un vecchio compilatore (su un altrettanto 
vecchio PC MS-DOS) penso che tu possa tranquillamente ignorare o 
eliminare il modificatore 'far' dalle dichiarazioni; eg. :
	int NOME_FUNZIONE (struct NOME_STRUTTURA **pointer);
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com
Newsgroup: it.comp.lang.c
Titolo: Compilazione.

Devo fare un programma in Fortran per la tesi.
Avevo trovato un compilatore per Win,
che ora non posso piu' usare avendo
cancellato il file mmd.386 che sembra
indispensabile quanto irreperibile sulla rete.
Domando
1) Qualcuno di voi possiede questo file ?
oppure
2) Esistono compilatori (free) Fortran per Win?
oppure
3) Esistono compilatori (free) Fortran per Linux?
oppure
4) Esistono compilatori (free) C per Win e, 
   se cononosco il Fortran, faro' molta fatica ad imparere il C?
Se qualcuno mi puo' aiutare mi fa un enorme favore.
Siccome e' un po' urgente se mi rispondete anche via e-mail
mi fate un favore ancor piu' grande.
Alessandro Antonucci 
af...@inwind.it

 >
Non so se esiste un compilatore fortran (free) per Windows,
comunque so certamente che esiste un compilatore (free) Fortran77 ,
della GNU, per Linux :
se ricordo bene, il file di distribuzione iniziava con
g77....
Ciao.
Fab.
Sent via Deja.com
http://www.deja.com/
Newsgroup: it.comp.lang.c
Titolo: Chiamata RAS

Dovrei realizzare un programmino in C che spedisca una mail a
comando...
Quello che spesso non va è la chiamata automatica di RAS soprattutto
quando il computer non viene spento in modo corretto (il computer ha
NT 4.0).
Come faccio a chiamare RAS automaticamente da programma??
Grazie mille
Mauro

 wrote in message
news:b7b4081e.02042...@posting.google.com...

Chiedendo su it.comp.programmare.win32 o su it.comp.os.win.*
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: Ciclo while

Salve a tutti,
è da poco che ho iniziato lo studio del C all'università, e stiamo ancora
affrontando i primi rudimenti (if/else/while...). Ho scritto questo piccolo
programma, solo che, digitando il valore sentinella -1, non termina subito
il programma, ma mi propone l'istruzione printf seguente. Qualcuno mi sà
dare una mano?
Grazie
Daniele
/* Esercizio 3.17 */
int main()
{
int litri, km, media, media_sum, media_tot, cont;
cont = 1;
media_sum = 0;
while (litri != -1) {
   printf ("Inserisci i litri di benzina usati. Digita -1 per terminare il
programma: ");
   scanf ("%d", &litri);
   printf ("Inserisci i Km percorsi: ");
   scanf ("%d", &km);
   media = km / litri;
   printf ("Il rapporto Km/litri e\': %d\n", media);
   media_sum = media_sum + media;
   cont++; }
if (litri = -1)           {
   media_tot = media_sum / cont;
   printf ("La media dei rapporti Km/litro e\': %d", media_tot); }
return 0;
}


Per prima cosa inizializza SEMPRE tutte le variabili, te lo dico perchè i
primo while fa un confronto con una variabile non inizializzata..
Poi è normale che anche inserendo -1 il prg prosegue con la printf
successiva, infatti il controllo del flusso nel momento in cui inserisci i
litri è già passato!
Per risolvere sostitusci il while iniziale con un while (1) ed aggiungi un
if (litri == -1) break; dopo la scanf.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.688 / Virus Database: 449 - Release Date: 18/05/2004

 if (litri == -1) break; dopo la scanf.
Innanzitutto grazie per l'aiuto. Ho apportato le modifiche che mi hai
consigliato ma, sicuramente per un mio errore, in fase di compilazione mi
esce "implicit declaration of function int printf" e "implicit declaration
of function int scanf". Ti riposto il codice modificato:
int main()
{
int cont, litri, km, media, media_tot, media_end;
media_tot = 0;
cont = 0;
while (1) {
printf ("Digita il numero di litri immessi, -1 per terminare: ");
scanf ("%d", &litri);
   if (litri == -1)
   break;
printf ("Digita i Km percorsi con i litri di benzina immessi: ");
scanf ("%d", &km);
media = km / litri;
printf ("Hai fatto %d km/litro", media);
media_tot = media_tot + media;
cont++;    }
media_end = media_tot / cont;
printf ("La media totale dei km/litro e\': %d", media_end);
return 0;
}
Grazie ancora
Daniele

 of function int scanf".
Hai #incluso <stdio.h>? Dal warning (e dal codice riportato) il problema 
sembra proprio questo. Aggiungi
     #include <stdio.h>
all'inizio del file.


[CUT]
come è scritto sul Deitel ( da cui è preso l'esercizio :P)
devi prima prendere almeno una volta il valore della sentinella prima
di entrare nel ciclo.
printf("inserisci bla bla bal");
scanf("%d", &litri);
while( litri != -1 )
{
      balblabal
      printf("Inserisci blabla");
      scanf("%d", &litri);
}

 all'inizio del file.
Era questo!. Ora il prog funziona alla perfezione.
Grazie a tutti per l'aiuto.
Daniele
Newsgroup: it.comp.lang.c
Titolo: programmazione C...quale ambiente?

Salve a tutti!
Vorrei iniziare ad avvicinarmi alla programmazione in C. Quale 
ambiente/software mi
consigliate in ambito windows (in ambito linux penso che kdevelop sia
ottimo). Qualunque consiglio è ben accetto!
Grazie e saluti
-- 
Massimo Montanari
ma_mon...@hotmail.com
(togliere sumer per mail)
"Non andrà sempre bene...
ma non andrà mica sempre male!"

 in ambito windows 
dev-c++

In ambito Windows, sicuramente Dev-C++. Oppure puoi usare djgpp, un
porting del gcc (e non solo) in ambiente Windows.

vim + make + Mingw


 consigliate
Personalmente uso Dev-C++, ma per iniziare il mio consiglio e' Visual C++

Io ho iniziato con Visual C++ e mi sono trovato bene

 
Ciao ciao

 classi+metodi (per il C++) più code completion...
tu vuoi kate.
(magari da un occhio anche a scite)
-- 
Torno subito

 ottimo). Qualunque consiglio è ben accetto!
se per "ambiente" intendi un ide con compilatore integrato, 
puoi usare DevC++ 
http://bloodshed.net/dev/devcpp.html
oppure, di carino c'è anche PellesC 
http://www.smorgasbordet.com/pellesc/
altrimenti... be' trovati l'accoppiata vincente 
editor+compilatore a scelta ;)
se vuoi dai un'occhiata qui: 
http://www.thefreecountry.com/
 
e qui 
http://programmerstools.org/
 troverai sicuramente un 
sacco di link utili per la tua scelta :)
ciao.


Credo che tu ci abbia preso in pieno... Kate lo conosco, ma non mi piacciono
KDE e tutti i suoi packages. Scite, però, dev'essere proprio quello che cerco.
Lo avevo notato tempo fa, ma non ricordo perchè poi l'avevo fatto finire nel
dimenticatoio...
Ora che me l'hai ricordato, lo provo. Poi, se proprio, farò lo stesso il mio
Personal IDE... sarebbe un gran bell'esercizio. Un IDE con la possibilità di
inserire nell'area di editing, un'istanza del proprio editor preferito!
Sarebbe veramente carino. Proviamo Scite, intanto...
Grazie mille
Newsgroup: it.comp.lang.c
Titolo: Help x TESI: Linkare due volte una libreria?

Ciao ragazzi mi serve una manina altrimenti questa cavolo di tesi non
va avanti. Consigli di qualsiasi tipo sono ben accetti.
Uso il VC6 e il problema è in alcune librerie (delle quali ho il
codice sorgente) che linko.
Nelle librerie ci sono delle variabili globali (dichiarate fuori da
tutte le funzioni).
Quando io chiamo la funzione che mi 'inizializza e crea' il mondo
questa setta alcune di queste variabili globali. 
A me occorrerebbe che alla seconda chiamata venisse create un NUOVO
mondo invece ovviamente le funzioni fanno sempre riferimento alle
stesse var globali.
L'idea sarebbe di duplicare le librerie e di cambiare tutti i nomi di
variabili, strutture e funzioni aggiungendo un '2' alla fine magari e
compilare le librerie due volte con due nomi diversi e linkarle
entrambe  Però sarebbe un lavoro da pazzi e che richiederebbe una
precisione che uno non riesce ad avere per una cosa così noiosa.
---- Qualcuno ha un'idea?
In c++ se non sbaglio ci sono i namespace ma sarebbe una impresa già
solo mettere i namespace a tutte le dichiarazioni.
---- Non c'è qualche opzioni del compilatore che rende DIVERSO lo
spazio dei nomi di due librerie UGUALI? (in tal caso come faccio a
chiamare una funzione o l'altra?)
Ho fatto una copia delle librerie (pari pari) ele ho linkate
entrambe...mi sembra strano ma il vc non mi da nemmeno errore.
Help ME PLEASE

 ---- Qualcuno ha un'idea?
crei un altro processo: e' o non e' un altro mondo? poi userai una delle 
forme di condivisione di memoria, se necessario, del sistema operativo
per sapere come, it.comp.programmare.win32


wrote:


 Se ho cosě vengo a casa tua e ti do un bacio in bocca :)))))
Bleah! no, grazie ;)


Risolto :))))))
Ho un pņ di problemi per trasmettere i dati da una parte all'altra
tramite pipe ma sembra che tutto funzioni
Newsgroup: it.comp.lang.c
Titolo: per chi non lo sapesse gia'

http://it.wikibooks.org/wiki/Pagina_principale
...mi sembra un'idea interessante, e su questo ng c'e' sicuramente 
qualcuno che puo' contribuire a questo libro: 
http://it.wikibooks.org/wiki/Linguaggio_C
Cosa ne pensate?
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

Cosa ne pensate?
Che mi è bastato leggere questo: "usando il nome dell'array da solo si
ottiene un puntatore al primo elemento dell'array", senza ulteriori
specificazioni, per rinunciare all'idea di collaborare.

 specificazioni, per rinunciare all'idea di collaborare.
al contrario.
proprio perche' sai come e quanto c' e' da correggere, dovresti collaborare.
-- 
         Quante sono le persone
che sanno leggere il codice esadecimale,
        se ci sono de11e persone
che sanno leggere il codice esadecimale?

[...]proprio perche' sai come e quanto c' e' da correggere, dovresti collaborare.
Ho paura che gran parte del tempo, conoscendo il livello medio della
conoscenza del C, sarebbe impiegato nella correzione degli errori.

 Cosa ne pensate?
Avevo gia` visitato il sito, ma leggendo la sezione relativa al C mi
sono cadute le braccia... lo so che non e` molto nello spirtito wiki ma
d'altra parte non ho molto tempo libero :(
Luca
-- 
Home: 
http://kronoz.cjb.net
La somma dell'intelligenza sulla terra e` una costante.
La popolazione e` in aumento.

d'altra parte non ho molto tempo libero :(
Idem.  E comunque non condivido molto una collaborazione basata sulla
possibilità di modificare reciprocamente ciò che viene scritto.  Non
voglio correre il rischio che qualcuno corregga le mie giustissime
affermazioni ;-)

Solo Andrea e il Papa sono infallibili :-)
Taci, cretino.
Newsgroup: it.comp.lang.c
Titolo: pivello

scusate ragazzi sono nuovo dell'NG e sono appena agli inizi
per quanto riguarda la programmazione in C (pivello).
Sto facendo da solo attraverso il libro Deitel & Deitel e
purtroppo mi sono arenato su un esercizio di autovalutazione
che recita:
    scrivete un programma che prenda in input un numero di x cifre,
1) lo spezzetti  nelle sue singole cifre e
2) le visualizzi ognuna separata dall'altra da tre spazi.
Ho cercato riferimenti per "1)" ma non ne ho trovati sullo stesso
libro
(forse non ho saputo cercarli).  
Parecchio grato a chi voglia suggerirmi la risposta o qualsiasi
riferimento .
ale

....il resto della divisione intera tra due numeri (es. 123 % 10 ) non ti
suggerisce nulla?
Programmare significa anche e soprattutto avere fantasia per scoprire
algoritmi (che milioni di altri hanno già scoperto) utili a risolvere il
nostro problema. Sia esso un programma o una funzione;
Ciao!!
--
----------
Lello Mele
c/o VTM VideoTecnica Mele
Via San Sebastiano, 22
84036 Sala Consilina (SA)
Cell.:0347/643.35.25
HOMEPAGE:
http://www.lellomele.supereva.it
eMAIL:
v...@libero.it
me...@programmazione.it
-------------
"Esistono due modi per elaborare il progetto di un software.
 Il primo consiste nel renderlo semplice al punto tale che non
 manifesti lacune evidenti. Il secondo consiste nel renderlo
 complicato al punto tale che non manifesti lacune evidenti.
 Il primo metodo e' di gran lunga piu' difficile." [C.A.R. Hoare]

 1) lo spezzetti  nelle sue singole cifre e
2 possibilita'
1) sprintf() e poi scandisci la stringa ottenuta
2) usi il modulo e la divisione intera per dividere progressivamente per
dieci ottenendo nel modulo ila cifra corrente
il resto e' lasciato per esercizio :-)
attento se vuoi migliorare le tue capacita' di programmatore pensa a
come fare qualcosa, prima di pensare come farlo in C

 ha scritto nel messaggio
news:3ab7b2bb...@news.tin.it...


ale
Ringrazio Lello M., Marco R. e  Marco C.
per l'immediato aiuto che sto leggendo appena tornato dal lavoro.
Grazie inoltre alla sopportazione generale da parte dell'NG per gli
iniziandi.
Vedrò di non rompere le palle inutilmente, ma sto facendo proprio
tutto da solo...
Ciao e grazie davvero parecchio.
ale.

 ale.
riringrazio
ed aggingo una piccola postilla, premettendo che nno conosco quale e' il
tuo 'livello' come programmatore ma se sei all'inizio oltre al/ai testi
sul linguaggio ti puo' far comodo qualche testo sugli algoritmi in modo
da poter trovae spunti interessanti, un ottimo testo e' il wirth
"strutture dati + algoritmi = programmi" che aveva un tempo il vantaggio
di non costare molto e lo svantaggio peraltro marginale di usare come
linguaggio di riferimento un pascal 'semplice', esistono comunque molti
libri che usano il C come lingiuaggio di riferimento "aho - ulmann  e
c." per esempio
Newsgroup: it.comp.lang.c
Titolo: Perché non funziona DJGPP in Win2000 Me

Come da oggetto: sapreste dirmi per quale motivo non funziona il compilatore
in Win me?

 wrote:
io ho installato il djgpp sotto win me e funziona


 in Win me?
Ma win2000 o winme? Sono diversi, sai?
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

 ha scritto nel messaggio
news:c%uj6.24090$7U4.6...@news.infostrada.it...


Newsgroup: it.comp.lang.c
Titolo: pointer ad array, ma come?

ciao a tutti
mi sono trovato a non saper risolvere questa situazione:
vorrei dichiarare dinamicamente una matrice bidimenzionale di char, di
cui so a priori il numero di colonne ma e' variabile il numero di righe.
come posso fare per poter poi usare il valore ritornato da malloc in
espressioni del tipo "ptr[r][c]".
in pratica non so come dichiarare il puntatore.
mi vengono in mente le dichiarazioni dei parametri di funzione del tipo
void fun ( char ptr[][10] )
{
  char x= ptr[1][2];
}
int main ( void )
{
  char mat[20][10];
  mat[1][2]=0;
  fun( mat );
}
io vorrei che quella variabile mat sia allocata dinamicamente, ma che
poi si possa usare nello stesso modo di questo esempio.
la soluzione con un array di 20 pointer a char, e altri 20 array di 10
caratteri, non e' *fisicamente* (cioe' come occupazione reale della
memoria) equivalente alla dichiarazione di mat e per questo non la posso
usare.
ciao
donCiccio


#include<stdlib.h>
.....
int i;
char buffer[11];
char *matrice[][11]; /*11 perche' deve essere contenuto lo '\0'  a fine
riga*/
/*allocazione di una riga per volta*/
matrice=malloc(11*sizeof(char));
for(i=0;i<11;i++)
{
scanf("%c",(matrice+i)); /*lettura di una riga */
buffer[i]=*(matrice+i); /*inserimento riga nel buffer*/
}
.....


espressioni del tipo "ptr[r][c]".
<CODE>
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    char (*p)[2];
    p = malloc(3 * sizeof *p);
    for (i = 0; i < 3; i++)
    {
        int j;
        for (j = 0; j < 2; j++)
        {
            p[i][j] = (i+1)*(j+1)*2;
            printf("p[%d][%d] = %d; ", i, j, p[i][j]);
        }
        printf("\n");
    }
    getchar();
    return 0;
}
</CODE>


eccole li..., due stramaledette parentesi....
grazie 1000 e anche di piu'
ciao
donCiccio
Newsgroup: it.comp.lang.c
Titolo: Perche nessuno mi risp:-(

Dai c' è qualcuno che puo dirmi se <dir.h> è standard??
Ah c' è una lista dove ci sono queste librerie standard?
Vi ringrazio per le vostre risposte .... Ciao....
Voglio programmare ""standardizzatamente"" o comunque me le creo io le
librerie.... è probabile che stia dicendo un immane di ca22ate ma, non
ancora mi sto dedicando al C Standard...
un ultima cosa...
Standard C e
Ansi C
mica sono la stessa cosa?.... Aspetto vostre risposte e grazie per la
'pazienza' :-))
----------------------------------------------------------------
Scusate per il 'ripost'

 ha scritto nel messaggio
news:DAcZa.235090$Ny5.7...@twister2.libero.it...
e' agosto ... hai postato i due messagi a meno di un giorno di distanza uno
dall'altro ... ma cosa vuoi ???
l'80% delle persone e' in vacanza se aspettassi almeno 7 giorni prima di
ripostare le stesse domande faresti un bel favore ... seno' hai google e
10000 documenti online da leggere e trovare se quella libreria e' standard o
no e se Standard C e' uguale all'ansi ...
dai alle persone il loro tempo plz ...
per il resto non lo so !!!
ciao

Ciao,
per quanto ne so io (veramente poco)  esistono poche librerie Standard
(riconosciute dall' "American National Standards Institute", quindi penso
che dire Ansi e dire Standard sia la stessa cosa).
Stdio.h, Stdlib.h, Assert.h, Math.h, Time.h, Ctype.h

ti pare il caso di ripostare dopo 8 ore !?!?!?!?
cerca su google e non dirmi che non trovi un elenco delle librerie ANSI
e magari cerca anche qualcosa sulla netiquette.

 cerca su google e non dirmi che non trovi un elenco delle librerie ANSI
OKKKKKKKKK ;-)

La dir.h non è una libreria standard del C. Infatti Borland ha una propria
implementazione, come ad esempio findfirst o findnext, mentre il VC++, la
implementa in io.h e comunque si chiamano in un altro modo, ad esempio
_findfirst e _findnext e comunque prendono parametri differenti.
--------------------------------
Inviato via 
http://usenet.libero.it
Newsgroup: it.comp.lang.c
Titolo: problema con free

Ho un algoritmo ricorsivo che produce per ogni passo di ricorsione una
matrice di liste concatenate. Il mio problema e' che alla fine del passo
ricorsivo dovrei liberare lo spazio richiesto da tale matrice e dalle liste
ad essa concatenata. Se io uso free(puntatore a matrice) libero tutto? Se
no come posso fare?
Grazie

 wrote in message
news:TVsma.10548$
LB6.2...@news1.tin.it

void fncRicorsiva()
{
   void* ptrP = NULL;
   ptrP = malloc(blockSize);
...
   fncRicorsiva();
...
  free(ptrP);
}
Uno schema del genere dovrebbe funzionare. Non sapendo di preciso
cosa vuoi fare, non saprei cosa suggerirti.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Angelo Paolitto wrote:

dunque io ho una matrice di elementi del tipo:
struct mia{
int elem;
void * pt;
}
pt e' il puntatore al primo elemento della lista concatenata.
void fncRicorsiva()
 {
    struct mia * ptrP = NULL;
    blockSize=analisiDati();
    ptrP = malloc(blockSize);
    inizializzazioneMatrice(ptrP);
    inserimentoInListeConcatenateInPuntatoriMatrice();
    ...
 
    fncRicorsiva();
    ...
 
 
    free(ptrP);
 }
Il problema e' che ogni elemento della lista creato con
"inserimentoInListeConcatenateInPuntatoriMatrice();" viene allocato
dinamicamente. Quando  io faccio free(ptrP) libero la matrice,ma gli
(penso) non gli elementi delle liste puntate dalle entry pt della matrice?

 (penso) non gli elementi delle liste puntate dalle entry pt della matrice?
La free libera solo l'area di memoria associata al puntatore generata con la 
singola chiamata alla funzione per allocare la memoria, nel tuo caso da 
"malloc(blockSize)". Ad ogni malloc/calloc(/o realloc in particolari 
condizioni) deve corrispondere una ed una sola free.
Per liberare tutta la memoria serve una chiamata su tutti i nodi della 
lista.
    lista *inizio;
    lista *next = inizio
    while (inizio!=NULL) {
        next = inizio->next;
        free(inizio->data); /* se allocato dinamicamente */
        free(inizio);
        inizio = next;
    }
Questo sta molto meglio all'interno di una funzione creata apposta per 
liberare la lista, magari:
    void list_destroy(list *inizio);
-- 
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."

Newsgroup: it.comp.lang.c
Titolo: Introduzione alla grafica per principiante cerco.

Se è una domanda da faq scusatemi, mi sto ancora attrezzando per recuperarle!
;-)
Cerco un tutorial o altro che mi "inizi" alla grafica in C.
Devo fare dei piccoli grafici sull'analisi di alcuni dati:
Suggerimenti? Consigli? 
Come al solito, grazie.
Ciao.
There is NOSPAM in my signature ;-)

Suggerimenti? Consigli? 
La grafica non e' contemplata nel C standard.
La sua possibilita' di utilizzo e' difatti dipendente dalla
particolare implementazione del compilatore C che possiedi.


debbo fare un piccolo istogramma, in ANSI C e possiedo il Visual C++ 6.0
che fare?


che fare?
problema rientrato! ...

Newsgroup: it.comp.lang.c
Titolo: Array Multidimensionali

Temo che il mio C sia un po' arruginito, come faccio a passare un array
a 3 dimensioni ad una mia funzione ?
Il seguente stupidissimo esempio crasha e non capisco il perche'.
Grazie mille a tutti
#include <stdio.h>
void func(float *** a){
        a[0][0][0] = 0.1;
        return;
}
#define SIZE 32
int main(int argc, char * argv[]){
 
        float data[SIZE][SIZE][4];
        func(test);
        printf("\nno error occurs");
        return 1;
 
}
-- 
Ciao
Fabio

 }
Luca
-- 
Home: 
http://kronoz.cjb.net
Recursion n.:
	See Recursion.

 sarebbe possibile accedere correttamente ai vari elementi dell'array.
Questo non lo sapevo. Ti ringrazio per la dritta. Ho risolto allocando
dinamicamente l'array, in questo modo la definizione della funzione con
float *** valore funziona perfettamente.
-- 
Ciao
Fabio

 sarebbe possibile accedere correttamente ai vari elementi dell'array.
 void func(float a[][SIZE][SIZE]);
Al piu` la prima dimensione puo` essere tralasciata.
-- 
Horst

Newsgroup: it.comp.lang.c
Titolo: equivalente di strcasecmp nell'ansi c99?

c'č? o come fate voi?

 c'è? o come fate voi?
Se le due stringhe hanno lunghezza uguale, si controllano
i caratteri uno per uno dopo averli fatti passare per toupper()
(o per tolower()). Se le due stringhe hanno lunghezza diversa
non si inizia proprio. :-)
HTH
C:\>iao Angelo

 non si inizia proprio. :-)
No, confronti i caratteri passati a toupper() e basta.

 c'è? o come fate voi?
Potresti fare così:
int strcasecmp(const char *s, const char *r) {
   for (;*s && *r && tolower(*s)==tolower(*r);++r,++s);
   if (*s==0 && *r==0) return 0;
   if (*s==0) return -1;
   if (*r==0) return 1;
   return tolower(*s)-tolower(*r);
};

 non si inizia proprio. :-)
il che avrebbe senso se la lunghezza delle stringhe in c fosse "scritta" in
un campo a parte (come le stringhe del pascal); poichè, invece, l'unico
modo per sapere se una stringa è finita, in c, è *scorrerla* carattere per
carattere fino a trovare '\0', la tua soluzione è controproducente.
-- 
Under construction

int strcasecmp(const char *s1, const char *s2)
{
        int c1, c2;
        do {
                c1 = tolower(*s1++);
                c2 = tolower(*s2++);
        } while (c1 == c2 && c1 != 0);
        return c1 - c2;
}
ciao davide

 c'è? o come fate voi?
ok, grazie a tutti. Implementare la strcasecmp non è difficile, solo mi
sembrava strano che non sia presente nello standard.
Newsgroup: it.comp.lang.c
Titolo: Codice C per RLS

Salve a tutti;
qualcuno sa dirmi dove posso trovare del (buon) codice C per l'algoritmo
RLS (Recurvive Least Squares)?
			Grazie,
				Luca
________________________________________________________________________________
Luca Abeni
PhD Student in Computer Engineering
Retis Lab
Scuola Superiore S. Anna
E-Mail:        	
lu...@hartik.sssup.it
Phone (Lab):   	+39-50-883451
                                Real Programmers Don't Use Windows :)

you wrote :
#Salve a tutti;
#qualcuno sa dirmi dove posso trovare del (buon) codice C per l'algoritmo
#RLS (Recurvive Least Squares)?
Stai parlando forse di qualcosa del genere ?
E' ottimizzabile eliminando le variabili locali :
--- squares.c
const unsigned N = 20 ;
void squares( float x0, float y0, float x1, float y1,
              float x2, float y2, float x3, float y3, int level )
{
     float _x0, _y0, _x1, _y1, _x2, _y2, _x3, _y3 ;
     if ( level <= N ) 
     {
        line(x0, y0, x1, y1) ; /* generica routine */
        line(x1, y1, x2, y2) ; /* per il disegno   */
        line(x2, y2, x3, y3) ; /* di linee in      */
        line(x0, y0, x3, y3) ; /* ambiente grafico */  
        _x0 += (x1-x0)/N ;
        _x1 += (x2-x1)/N ;
        _x2 += (x3-x2)/N ;
        _x3 += (x0-x3)/N ;
        _y0 += (y1-y0)/N ;
        _y1 += (y2-y1)/N ;
        _y2 += (y3-y2)/N ;
        _y3 += (y0-y3)/N ;
        squares( _x0, _y0, _x1, _y1, _x2, _y2, _x3, _y3, level + 1 ) ;
     }
}   
main()
{
  /* e' necessario inizializzare l'eventuale ambiente grafico */
  squares( 10, 10, 400, 10, 400, 400, 10, 400, 1 ) ;
}
........................................................
. Andrea Laforgia        (
andrea_...@bigfoot.com
) .
........................................................

Newsgroup: it.comp.lang.c
Titolo: variabili condivise

Esiste il modo di condividere una variabile o un'area di memoria estesa 
con un altro programma separato?

 con un altro programma separato?
Dipende dal sistema operativo:
it.comp.os.linux.development
it.comp.programmare.win32
-- 
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: Dimensione array

Per calcolare la dimensione di un qualsiasi array durante il
preprocessing utilizzo questa macro:
  #define SIZEARRAY(array)  (sizeof(array)/sizeof(array[0]))
Questa dovrebbe funzionare indipendentemente dal tipo di array (int,
char, struct,...)
In un file .c posso scrivere:
-- file.c --
  #include "macro.h"  /* Per includere la macro SIZEARRAY */
  int aint[] = { 2,3,1,7,8,9 };
  #define AINT_SIZE  SIZEARRAY(aint)
  ...
--
E tutto funziona a meraviglia.
Il problema nasce quando voglio esportare l'array aint e la sua
dimensione.
Se nel file .h scrivo:
-- file.h --
  #include "macro.h"
  extern int aint[];
  #define AINT_SIZE SIZEARRAY(aint)
--
ovviamente non funziona perchè il compilatore non conoscere
sizeof(aint) poichè aint è dichiarato nel file.c (immaginate che
file.h è incluso in altri file .c).
Naturalmente si può ovviare specificando la dimensione dell'array
nella direttiva extern nel file.h, ma si perderebbe l'automatismo
della macro SIZE_ARRAY che mi è molto comodo: aggiungo o tolgo in
qualsiasi momento un elemento dall'array senza dover ricalcolare, ogni
volta, la sua dimensione e senza rischiare di dimenticarmene.
Una soluzione al problema è utilizzare una funzione, piuttosto che una
macro, che ritorna la dimensione dell'array. Naturalmente la funzione
deve risiedere nel file .c dove è dichiarato l'array, così da poter
utilizzare sizeof(aint). Ma, a confronto con la macro, è una notevole
perdita di risorse (e ne ho veramente poche nella mia architettura).


Ho paura che queste due soluzioni siano le uniche fattibili...

 perdita di risorse (e ne ho veramente poche nella mia architettura).
Puoi anche utilizzare una variabile "extern const" che contiene la 
dimensione dell'array.
E.

Newsgroup: it.comp.lang.c
Titolo: parametri funzione

Ciao a tutti,
ho un probelmino nel passare e ricevere parametri in una funzione. Questo è
il mio main e la funzione
int main()
{
        int var1=0, var2=0, var3=0, var4=0, var5=0;
        miafunzione(&var1,&var2,&var3,&var4,&var5);
}
void miafunzione(int *var1, int *var2, int *var3, int *var4, int *var5)
{
   //operazioni
}
Vorrei che le var1,var2,var3,var4,var5 ritornassero nel main. invece se le
stampo nel main ottengo il valore zero (se le stampo dentro la funzione
ottengo il valore corretto). Dove sto sbagliando?
grazie a tutti!!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ottengo il valore corretto). Dove sto sbagliando?
Sembra tutto ok... probabilmente l'errore e' nel codice che non hai 
riportato.
puoi postare un esempio piu' completo di quello che fai?
Se compili questo esempio cosa ottieni?
--
#include <stdio.h>
void f( int *var1 )
{
	*var1 = 42;
}
int main(void)
{
int var1=0;
	printf("prima: var1=%d\n", var1);
	f( &var1 );
	printf("dopo: var1=%d\n", var1);
	return 0;
}
--
ciao
Giacomo