mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Link utili, tutorial ed esempi su grafica a basso livello in c.

Salve a tutti.
Vorrei un pò divertirmi con il c nel programmare la grafica a basso
livello, senza librerie tipo allegro ecc., in particolare sto cercando
tutorial che insegnino a settare la risoluzione video, ad accendere
pixel e a pilotare la palette.Lo scopo finale sarebbe creare delle
figure geometriche ed animarle con rotazioni, traslazioni, moti
armonici ecc..
Se qualcuno mi può indicare qualche buon tutorial, del codice esempio
dove prendere spunti ecc.. mi farebbe un grosso favore.
Buona programmazione a tutti, Ronny.

 armonici ecc..
Mi sembra un'idea piuttosto strampalata quella di non utilizzare una 
libreria già pronta. A che pro?
Comunque è impossibile risponderti se non specifichi con quale sistema 
operativo vuoi fare questo.
E.

 operativo vuoi fare questo.
WinXP principalmente.
E Linux (Debian per la precisione).
Ciao,
Giulio
-- 
OnAir:
http://www.giuliopetrucci.it


WinXP a scopo didattico e per capire come lavora a basso livello un pc
sulla grafica.
Grazie e saluti.

dove prendere spunti ecc.. mi farebbe un grosso favore.
Windows non ti permette di accedere direttamente alla scheda video,
emula quello che in passato veniva eseguito in DOS. Gia' questa
emulazione (per altro ottima) dovrebbe sconsigliare l'uso di una
programmazione a basso livello. Inoltre, proprio perche' il DOS, o la
"linea di comando" e' una caratteristica che la Microsoft vuol fare
scomparire, quello che tu vorresti fare lo considero una curiosita'
inutile.
Non so se esistono in rete tutorial adatti, ti elenco solo i testi che
usai io quando sperimentavo sulla grafica. A quei tempi internet
praticamente non c'era ancora...
Ti servono le informazioni sui registri del vecchio chip grafico che
montavano le schede EGA/VGA. Va benissimo "Scheda grafica EGA,
installazione e programmazione" di Manfred Michael, gruppo editoriale
Jackson. In inglese ci sono i Technical Reference dei PC IBM PS2 (dati
gratuitamente con la macchina), oppure il completo "Programmer's guide
to PC & PS2 Video Systems" di Richard Wilton, Microsoft Press.
Qualcosa di buono, ma non completo lo riporta "PC IBM: guida del
programmatore" di Peter Norton (quello della Symantec), Mondadori
Editore.
Tutto questo in libreria non c'e' piu', ma con un po' di fortuna lo
puoi travare in biblioteca.
Naturalmente la programmazione e' assembler puro. Il C te lo scordi...

 
Io ho ancora nella libreria "Programmer's Guide to the EGA,VGA and Super 
VGA Cards" 3' edizione, di Richard F. Ferraro. Un mattonciano da 1600 
pagine (va be che da buon americano ha numerato anche le pagine indice :) ).
Poi e' uscito Windows 95 e ho buttato tutto.
Ciao
G.


Guarda qui
http://www.gameprog.it/?actiongpi=viewtopic&pid=16896
Newsgroup: it.comp.lang.c
Titolo: [OT] utilizzo dei thread

Salve a tutti,
so che qui si parla solo di c standard, ma voglio provare a porre lo 
stesso una mia domanda sull'ambiente UNIX.
Ho incluso in un mio programma la libreria <pthread.h> , purtroppo il 
mio mio compilatore (gcc 4.0.2) non trova la function pthread_create(...).
Sapete come posso utilizzarla?

gcc -lpthread lo hai usato ?
Manuel ha scritto:


Newsgroup: it.comp.lang.c
Titolo: Help librerie ANSI c/c++

Qualcuno mi sa dire dove posso trovare un buon help file delle librerie ANSI
C/C++ ?
Il bcc32 5.5 ha solo il manuale dei tools mi pare..
Grazie per l'attenzione,
Angelo

 Il bcc32 5.5 ha solo il manuale dei tools mi pare..
Sul sito della Borland (mi pare nella directory techpub) trovi altri
help abbastanza ben fatti.
EMG

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

Ciao a tutti. Domanda: io ho creato un .exe con Visual Basic e volevo che
questo .exe venisse eseguito alla pressione di un bottone in una pagina
html, come fare? Ho provato con un form (dando al bottone il value=submit)
ma non funziona perchè il .exe non ha bisogno di alcun dato di input. Grazie
a tutti coloro che mi aiuteranno. Ciao.

 ha scritto nel messaggio
news:Nu%c6.47114$ew1.3...@news.infostrada.it...




Il posting in questo gruppo lo hai fatto perche' tuo cugino una ha un
cognome che inizia con la "C" ?
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 ha scritto nel messaggio
news:Nu%c6.47114$ew1.3...@news.infostrada.it...

Newsgroup: it.comp.lang.c
Titolo: MI5 Persecution: Fitted up 26/4/96 (878)


Organization: Toronto Free-Net
Distribution:
 
Illtud Daniel (
ida...@jesus.ox.ac.uk
) wrote:
: Probably 'cos you come across as reasoned & articulate, it's a pity
: about the other stuff :)
 
Veracity is so unreasonable.
 
: >>pps. You should still see a doc again Mike.
: >
: >Doing so. Trouble is, all this mental-illness stuff provides camouflage
: >for the harassment, which is real. It alows people who otherwise would
: >consider the harassment seriously to disregard it. It makes conversations
: >with a lawyer or police brief when otherwise it would merit discussion.
: The point is that there are two possibilities happening here-
 
: 1. There's a large conspiracy of people out to get you, for no
:    other reason than that they have the means to do so, and that
:    it involves a lot of the Media & a proportion of the public
 
: 2. You (who admit to having some headspace problems) are suffering
:    from acute paranoid schizophrenia.
 
: Possibility #1 is _possible_, but would be unprecendented (OTOH,
: how would we know?), unfeasible, and many other things beginning
: with _un_ which I can't think of at the moment. Besides, if there
: was something going on, chances are some of us here would know
: about it, and I'm convinced that nobody does.
"Unprecedented" hits the nail on the head. It _is_ unprecedented, but we
have only just reached the technical stage at which it is feasible, and
we know video-spying is done to other people (NB the Diana-Hewitt
episode) and is a routine tool of security agencies.
 
Perhaps what is unprecedented is not the technical side, but the social
manipulation of many people by a concealed element in what other
countries would be called the secret police. The most disturbing element
is the degree to which people allow themselves to be unquestioningly
manipulated by an evil element within the state.
878
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
      ------->>>>>>
http://www.NewsDemon.com
<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access



Newsgroup: it.comp.lang.c
Titolo: Esiste la FAQ?!!!

Dove posso  trovare la FAQ di questo N.G. ?
GRAZIE MILLE.

Dove posso  trovare la FAQ di questo N.G. ?
Sta per essere ultimata, ma i lavori per ora sono fermi.
Non ricevo piu' notizie ne' da Aldo Trianti, ne' da Marco Sarti che
avrebbero dovuto completare rispettivamente le sezioni 19 e 5.
Per la maggior parte la FAQ e' completa, ma aspetto che siano ultimate
tutte le sezioni per sottoporla alle correzioni nel ng.
Newsgroup: it.comp.lang.c
Titolo: Borland C++ Compiler

Ciao, sono nuovo del linguaggio, ho scaricato il programma Borland C++
Compiler, ho modificato Autoexec.bat e creato i file bcc32.cfg e
ilink32.cfg come mi aveva chiesto di fare il readme. Ho scritto il mio
programma col mio editor. Adesso potete gentilmente spiegarmi come
faccio a farlo diventare eseguibile?
Grazie,
            *N*u*C*

 wrote in message
rm8getsk0a06j9tpp...@4ax.com...

Ti dico un metodo semplice.
Supponiamo che il tuo file sorgente si chiami miofile.c. Apri un finestra
della shell DOS e da essa ti sposti nella directory che contiene il tuo file
da compilare. A questo punto dai il seguente comando:
bcc32 miofile.c
Se le fasi di compilazione e di linking vanno a buon fine, accanto al tuo
sorgente compare il file eseguibile miofile.exe, insieme ad altri due( .obj,
.tds), che poi puoi cancellare se non ti interessano. È tutto!
Dyskolos


bcc32 <nome_programma.c> oppure
bcc32 <nome_programma.cpp> secondo i casi
HTH

 wrote in message
rm8getsk0a06j9tpp...@4ax.com...

Spetnik's C++ Compileler Shell Version 3.0
è un programmino che si installa nella directory bin di borland C++.
Compiler ti permette di non scrivere niente.
Ha un interfaccia grafica molto comoda.
Un click e compili.
Newsgroup: it.comp.lang.c
Titolo: Aiuto per compilatore

ciao a tutti,
stiamo cercando di scaricare il djgpp senza riuscirci.
qualcuno potrebbe mandarcelo via e-mail?  oppure
utilizzando i normali canali postali ( chiaramente a nostre
spese )?
indirizzo e-mail: 
nean...@tin.it
indirizzo di posta : Anniballi Nevio , piazza S.Paolo n˙ffffb0 04
61032 Fano (Pesaro).
Telefono 0335/6445850
P.S.  va bene anche un compilatore ansi c diverso dal djgpp
      che ci dia la possibilit˙ffffe0 di iniziare ad elaborare
      le prime cose.
       In anticipo  GRAZIE .  Luca & Nevio
* Sent from AltaVista 
http://www.altavista.com
 Where you can also find related Web Pages, Images, Audios, Videos, News, and Shopping.  Smart is Beautiful

andate su 
http://wwwapp1.borland.com/login/login.exe/menu?redirect=http://community.borland.com/museum
vi iscrivete come new user e poi fate il login..nella sezione museo
c'e' il vecchio ma sempre florido turbo C
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

 stiamo cercando di scaricare il djgpp senza riuscirci.
Se ti può interessare, al numero di febbraio di DEV è allegato
un CD che contiene tra l'altro il djgpp.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 normali canali postali ( chiaramente a nostre spese )?
  Lo trovate sul CD-ROM accluso a Dev di Febbraio.
	Alla prossima,
		Marco
Newsgroup: it.comp.lang.c
Titolo: records logici e fisici

Immaginando di leggere e scrivere file di testo, nel fortran era
possibile procedere con operazioni di lettura e scrittura non
formattate.
Nel caso non formattato record logici e record fisici coincidono, nel
senso che viene acquisito con una istruzione tutto quello che c'č fino
alla fine del record fisico.
Nel caso formattato posso spezzare un record logico in piu record
fisici, quanti ne indico con l'istruzione format.
Domanda:
come si trasforma tutto questo nel C?
cioč, poiche nelle istruzioni di printf e scanf io devo sempre
indicare tra apici il formato,  come faccio se voglio fare
un'acquisizione di dati non formattata cosi come si faceva quando in
fortran usavo l'asterisco?
E quali sono le corrispondenti operazioni effettuate sui records?
grazie a tutti in anticipo!!
ciao michele.

 ciao michele.
Ciao, bisogna che ti vai a leggere un po' la documentazione relativa
alla fscanf (e fai un po' di semplici prove per chiarirti le idee)
Non e' vero che devi specificare sempre il formato.
per esempio una fscanf(fi,"%d%d%d",&a,&b,&c);
legge 3 numeri interi dal file fi, e non importa quanto sono
lunghi e quanti spazi li dividono. Cioe'  4 555      3433
oppure 214234     1 2 vanno bene entrambi. etc.etc.etc.
ciao,
g.

 g.
innanzitutto grazie per la risposta.
io conosco fscanf, ed è un'istruzione che serve per leggere da un file
a cui si fa riferimento col puntatore che nel tuo messaggio è fi,
definito da
FILE *fi; /* definizione del puntatore al file */
fi= fopen(nomefile, "mode");  /* creazione di una stream di I/O per
nomefile */
pero nella tua istruzione %d fa riferimento al fatto che i tre numeri
da leggere sono di tipo intero, mentre invece nel fortran l'asterisco
previene qualsiasi tipo di specificazione sugli oggetti da leggere.
forse che nel fortran sia il tipo delle variabili nell'istruzione di
I/O unformatted che fa si che l'operazione svolta sia esattamente
uguale all'istruzione che tu hai scritto nel messaggio?
grazie ciao
michele

 uguale all'istruzione che tu hai scritto nel messaggio?
questa frase sopra non sono riuscito a capire bene cosa voleva
dire.
Comunque la cosa piu' salutare e' se ti scordi la malefica
formattazione del fortran e provi a pensare in termini di
quello che vuoi ottenere e come otterlo in C (dopo aver studiato
bene le funzioni a tua disposizione).
g.
Newsgroup: it.comp.lang.c
Titolo: C/Linux contro Kernighan & Ritchie


Uhm secondo me dovrebbe funzionare, a meno che tu non abbia fatto lo
stesso errore di battitura che hai fatto qui: "!=" e non "=!". Se hai
scritto cosi' ti da' un errore perche' a sinistra dell'uguale
(operatore di assegnamento in questo caso e non di confronto) non hai
una variabile per asseganare "!EOF".
___
Fabio Forno
  "Vi aspetta l'esplorazione delle ignote 
  possibilita' dell'esistenza" 
  - Q in "All Good Things..."
=============================================
scia...@inorbit.com
http://rampage.ml.org/sector1/~sciasbat/
=============================================

 while ((c = getchar()) =! EOF)
                         ^^
Non =!, ma !=
-- 
Matteo Gottardi / 
gma...@usa.net
*Linux*, The choice of a _GNU_ generation

 ("invalid lvalue assignment" o qualcosa del genere) ?
non è che hai scritto veramente "=!"?? (dovrebbe essere "!=")
Ciao, julio di egidio
ju...@webzone.it

Delivery (
deli...@torino.alpcom.it
) wrote:
: Niente di sconvolgente ma l'istruzione
: while ((c = getchar()) =! EOF)
: {
:   istruzioni varie
: }
: proposta nel celebre testo cozza forse con Linux
: ("invalid lvalue assignment" o qualcosa del genere) ?
: Come faccio a far gli esercizi a inizio libro ?
: Saluti,
:         Delivery
: ------------------
: "Dire 'Ti Amo' e' tanto semplice. Farlo e' un po' piu' complicato"
:    *** 
http://www.eurisko.net/jena/
 ***
: (Musica, musicisti, meteo, informazioni...)

Newsgroup: it.comp.lang.c
Titolo: Asm in Gcc

Come faccio nel compilatore GCC di Linux a fare mov ax,0x00 (per esempio),
visto che la direttiva asm non funziona come il C della Borland?
Grazie



asm ("..");
http://www.geocities.com/SiliconValley/Ridge/2544/cprog/rmiyagi-inline-asm.txt
-- 
                                                                     __
 __                                                              _  ///
| _        Student in Computer Science, Swiss Federal Institute  \\///
|__|iambo      of Technology - mailto:
ggia...@iiic.ethz.ch
       \X/

Grazie 1000! Il sito che mi hai dato è molto chiaro!!!
Ciao
Vincenzo
"Giambo" <gia...@no.spam.please> ha scritto nel messaggio
news:3a98...@pfaff.ethz.ch...

Newsgroup: it.comp.lang.c
Titolo: DJGPP e settaggi autoexec.bat

Apero di  non essre OT, ma mi auguro che qualcuno sapppia dirmi quali
sono i settaggi esatti da impostare nel file autoexec.bat  per far
funzionare correttamente il DJGPP sotto win95 con RHIDE.
Grazie mille, Micki

...


Grazie mille, Micki
devi aggiungere la directory bin al path e settare le variabile di
ambiente DJGPP.
Es.
	(io ce l'ho in d:\djgpp)
set PATH=d:\djgpp\bin;%PATH%
(oppure lo aggiungi direttamente alla linea del PATH)
e poi
setdjgpp d:\djgpp d:/djgpp
(IMPORTANTE       ^^^^^^^^  lo stesso percorso prima con \ e poi con /
stile unix)
ciao

...


ciao
Forse mi sono spiegato male io, ma il mio problema è che 
quando dò il comando compile per compilare un file 
qualsiasi, ad esempio test, mi salta fuori un msg d'errore che mi dice
"don't know how to build test.o from c:/djgpp/test ".
Magari devo cambiare qualche impostazione nelle directory ?
Spero che qualcuno sappia aiutarmi....
Grazie in anticipo, Micki

Newsgroup: it.comp.lang.c
Titolo: Ancora un problemino di puntatori...

Allora la funzione seguente dovrebbe riempire una nuova coda dinamica e 
far puntare "mycoda" (che č la coda originaria) alla nuova coda creata...
Tutto sembra funzionare tranne per il fatto che accedendo poi a "mycoda" 
non trovo gli elementi nuovi (quelli inseriti in temp2) ma quelli che 
aveva precedentemente.
Mi sapreste dire dove sta l'errore? Perchč non basta fare "temp2 = 
*mycoda" per far puntare mycoda alla nuova coda creata a partire da temp2?
Grazie mille per l'aiuto!
void sostituisci(struct elemen **mycoda, int *array, int nval){
	struct elemen *temp2;
	int t = 0;
 
	// temp2 č una nuova coda che viene riempita a partire dai valori del 
vettore "array"
	// mycoda dovrebbe puntare a temp2, in modo da sostiture il suo 
contenuto originario con quello di temp2
		temp2 = *mycoda;
		temp2 = NULL;
		temp2 = malloc(sizeof(elemento));
 
		for(t = 0; t < nval; t++){
 
 
			temp2->codice = array[t];
			printf("Ho inserito il valore: %d\n\n", temp2->codice);
			temp2 = temp2->next;
			temp2 = malloc(sizeof(elemento));
			if(temp2 == NULL) printf("\n\nNon posso allocare!!!\n\n");
			else printf("Alloco...\n");
 
		} // end for
} // end sostituisci

     temp2 = malloc(sizeof(elemento));
Ancora?
Vedi sopra!!!


 Vedi sopra!!!
No scusami qui è leggittimo, queste due intruzioni servono per 
aggiungere nuovi elementi alla coda...o almeno quello è il mio intento...

 ha scritto nel messaggio
news:454c95da$0$19228$4faf...@reader4.news.tin.it...

Non è molto legittimo.
Forse avevi in mente qualcosa del genere:
    temp2->next = malloc(sizeof(elemento));
    temp2 = temp2->next;
Le tue righe non vanno bene.
Stai facendo una cosa del tipo:
    temp2 = X;
    temp2 = Y;
dove X non ha effetti collaterali.
A che serve ?
--
Giorgio Silvestri
DSP/Embedded/Real Time OS   Software Engineer

     temp2 = temp2->next;
Eh grazie perfetto! Mi stavo perdendo in un bicchiere d'acqua...ora 
tutto funziona.
Grazie ancora!
Newsgroup: it.comp.lang.c
Titolo: perchè entra prima nel figlio???

Il fatto strano è che non solo non mi esegue il comando, ma anche noto
che il programma entra prima nel figlio e poi mi stampa le varie
stampe, allego il codice:
/**Leggo riga per riga con fgets()**/
s=dim;
while((fgets(s,80,fp))){
argv=split_arg(s," ",&argc);
i = 1;
temp = ritornaTempo(argv,argc);
printf("Tempo: %d\n", temp);  
printf("Comando: %s\n", argv[0]);
/**prima di scrivere queste stampe,
TEMPO,COMANDO E PARAMETRI, mi entra nel figlio che creo sotto,
infatti se metto una stampa di prova all'inizio del figlio,mi stampa
per prima cosa quella e poi vari TEMPO..**/
argc--; 
//argv[argc]=NULL;
while(i!=argc){
printf("parametri: %s\n", argv[i]);
i++;
}
}
IFERROR(pid=fork(),"generando il figlio");    <--- entra prima qui
if(pid==0){
/*siamo nel figlio*/
IFERROR(execvp(argv[0],argv),"ERRO NELLA EXEC");    
/*non esegue niente perchè in argv[0] non c'è nessun comando*/
printf("non ho potuto eseguire %s\n", argv[0]);
}
IFERROR(letti, "main: Errore in lettura");
IFERROR( close(fd), "main: Errore in chiusura");
 
return 0;
}
int ritornaTempo(char **argv,int argc){
int i = 1;
int temp = atoi(argv[0]);
while((i-1)!=argc){
argv[i-1] = argv[i];
i++;
} return temp;
}
dove sbagliio??

hummmm

 hummmm 

 }
Prova a ricondurre il tutto ad un esempio + semplice e una volta che 
funziona quello aggiungi sempre un pezzettino fino a tornare alla versione 
odierna. In questo processo, quando qualcosa va storto e' li' che devi 
intervenire.
Di + non so dirti.
Ciao,
Ema
Newsgroup: it.comp.lang.c
Titolo: front-end windows per DJGPP

Ho letto in un thread precedente che dovrebbe esistere un
front end per win (al posto del semi-suppoertato RHIDE) sotto
windows per DJGCC che si chiama dfequalcosa ....
qualcuno sa dirmi di piu? dove lo posso trovare?
Grazie
Matteo

Lo trovi sempre sull' FTP della Delorie, nella stessa dir in cui si trova
Rhide, che però è molto meglio...
--
Marco Iannaccone
marc...@tin.it
Nick: Tolkien
ICQ UIN: 18748121
"This is a new ship, boy, but she's got the right name...
You treat her like a lady, and she'll always bring you home"
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm
FAQ di it.comp.lang.c++:
http://www.programmazione.it/linguaggi/c/lang_faq.htm

 ha scritto:

Si chiama dfe95 , che sta per djgpp front-end per win95.
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

Newsgroup: it.comp.lang.c
Titolo: Scheduling in linux

Salve...sapreste gentilmente dire come settare la priorità di un
processo su so Linux di un processo creato tramite fork() ??
Grazie.

 processo su so Linux di un processo creato tramite fork() ??
Ciao,
 puoi provare con: man 2 nice
 Federico

Newsgroup: it.comp.lang.c
Titolo: File system DOS e "memoria" del comando DIR

Ho realizzato delle primitive per la gestione dell'HD per un sistema
operativo real time (Hartik scritto dal mio professore di Informatica
industriale) e vorrei mantenere la compatibilità col file system del DOS.
Ho dunque dovuto passare tramite il Boot Sector -> la FAT e la ROOT  per
collegare i file ai giusti cluster vuoti solo che al termine della sessione
di lavoro, quando si torna dal DOS, questo non riconosce le variazioni sui
file a meno che non spenga il computer ed al successivo riavvio tutto
funziona correttamente.
Nello specifico succede questo:
    Io scrivo direttamente sui settori della ROOT le informazioni sui file
che voglio creare e aggiorno le due FAT sui cluster vuoti che ho utilizzato
ma quando esco e faccio la DIR lui non vede che le modifiche apportate ai
file esistenti e non aggiorna la dimensione dello spazio occupato.
Credo dunque che si tratti di un problema dovuto a tabelle in memoria
utilizzate dal DOS che io non ho aggiornato .... chi mi sa dire di che cosa
si tratta e come aggiornarle senza spegnere il computer????
Ciao e grazie
Carlini Alessio

you wrote :
#Nello specifico succede questo:
#Ciao e grazie
Scusami tanto, ma che c'entra con un ng sulla programmazione C ?
........................................................
. Andrea Laforgia        (
andrea_...@bigfoot.com
) .
........................................................
Newsgroup: it.comp.lang.c
Titolo: errore su printf

perche' printf mi stampa 4.00 e non 4.50 ????????????????????
 
 
#include<stdio.h>
 
main() {
	float a;
	a=45/10;
	printf("%5.2f", a);
	return 0;
}

 	a=45/10;
 
Ciao,
 
prima effettua la divisione tra interi (troncando), poi assegna il 
risultato al float. Prova cosě:
 
a= 45.0 / 10.0;

a= 45.0 / 10.0;
 
Efettivamente cosi funziona.
Il fatto e' che io l'ho demplificata
 
dovrebbe essere +o- cosi'
 
float = int1/int2
 
quindi non verra' mai il
risultato giusto decimale???

 risultato giusto decimale???
 
Ciao,
effettivamente, nella risposta precedente, sono stato un po' troppo 
telegrafico.
In ciò che accade nella tua funzione non c'è nulla di sbagliato:
a) effettui una divisione tra 2 interi ed il risultato è un intero i cui 
decimali, ovviamente, vengono troncati.
b) al risultato viene applicato un cast automatico (convertito in float) 
ed assegnato alla variabile 'a'.
 
Se vuoi che ciò non accada dovresti, per lo meno, far si che almeno uno 
dei due operandi della divisione sia un float; in questo modo il cast 
automatico verrà effettuato sull'altro operando prima della divisione. 
Di conseguenza la divisione verrà effettuata tra float e non avverrà il 
troncamento.
Spero di esser stato più chiaro.
 
 

Spero di esser stato più chiaro.
 
 
O.K. grazie

 risultato giusto decimale???
 
In C (e diversi altri linguaggi) la divisione di due interi produce un 
intero.
Non importa se poi converti il risultato in float.
 
Se sei curioso:
http://en.wikipedia.org/wiki/Division_(mathematics)#Division_of_integers
 
http://www.peterbe.com/Integer-division-in-programming-languages
 
 
In almeno un linguaggio (Common Lisp), la divisione di due interi 
restituisce un numero razionale.
 
 
 
Ciao  Manlio

Ciao  Manlio
 
Bah! Mi sembra una immane c@xx@t@!!!!!
 
dovrebbe essere che;
 
int=int1/int2 
 
dia intero ma:
 
float=int1/int2
 
dia il risultato reale
.................................
 
Cioe' che uno possa scegliere cosa 
ottenere

 ottenere
 
Non è possibile con il type system del C.
Il tipo di risultato di un operatore/funzione dipende *solo* dagli 
operandi/argomenti [1], e non dal tipo dichiarato per il risultato.
 
E' invece possibile in alcuni linguaggi, come Haskell.
 
 
Ciao  Manlio


Ed è giusto che ti *sembri*; a me invece risulta ed è risultata 
assolutamente utile. Vedrai che con l'esperienza mi darai ragione.
 
Ciao.

Ciao.
 
Ma se devi fare che so' una media di interi ................
 
ti troverai sempre nella condizione float=int1/int2
quindi una media  *sempre sbagliata!!!�


infatti puoi:
float f;
int a, b;
f = ((float)a)/b;
Se così non fosse non vedo come potresti fare una divisione intera e
assegnarla ad un float senza due passaggi o un'operatore speciale..
Ciao!
Newsgroup: it.comp.lang.c
Titolo: è possibile fare il DUMP della meoria ?

Buon giorno a tutti,
Una domanda per qualcuno molto esperto:
è possibile fare il DUMP della meoria(credo si dica cosi') salvarla su disco
e poi ricaricarla?
Usando le funzioni del C per gestire la memoria.
Quello che mi piarebbe fare è salvare,durante un gioco che sto cercando di
sviluppare, quello che c'è in memoria, senza andare a scrivere le variabili
locali ,globali e altro dei vari SPRITE.
Grazie per la risposta.
NIccolo'

 locali ,globali e altro dei vari SPRITE.
Mi sembra un metodo un po' bizzarro per salvare i dati. Come fai a 
sapere quale zona di memoria devi copiare?
E.

 quale zona di memoria devi copiare?
Si, lo so. Voglio solofarlo per eperimento,diciamo. Anni fa', un mio amico 
aveva usato...non ricordo se queste funzioni, .. e funzionava bene. Chissa' 
cosa salvava e dove andava a leggere...ma salvava tutte le variabili, anche 
quelle non utilizzate. Isomma quello che c'era im memoria a PC accesoą.
Facendo rpove a aumentando la grandezza di scrittura e/o lettura, questo 
amico era riuscito nell'intento.
MI piacerebbe fare lo stesso, almeno tentare. Ho un PC da "battaglia" 
proprio per fare queste prove,,cosi' se vado a scrivere in qualche zona 
della meoria..
Solo che non saprei come scrivere del codice con queste funzioni che mi hai 
indicato. NO č che tu hai qualche codice sorgente?
Grazie1000.

 
scusa ma non mi pare il massimo salvare "tutte le variabili anche quelle
inutilizzate" al limite serializza solo le strutture dati e le variabili
che ti servono...

 indicato. NO è che tu hai qualche codice sorgente?
fp=fopen("dump","wb");
fwrite(address, 1, size, fp);
fclose(fp);
dove address è l'indirizzo di partenza e size è il numero di bytes. Ma 
ti accorgerai presto che quello che vuoi fare non ha senso.
E.
Newsgroup: it.comp.lang.c
Titolo: Sovrascrivere un file

Ho un dubbio... se io scrivo con putc() su un file già esistente, vado a
sovrascrivere fisicamente il file sull'hd o viene copiato modificato in un
nuovo settore?


dipende da come hai aperto il file!
se lo hai aperto in scrittura, verrą inserito nel punto in cui si trova 
il puntatore del file.

 il puntatore del file.
l'ho aperto in modalità rb+. Quello che volevo sapere è se il file viene
sovrascritto dopo fclose()


Viene riscritto lo stesso settore nel momento in cui una qualsiasi altra
operazione richiami la fflush() e quindi è compresa la fclose().

 nuovo settore?
Non e` possibile saperlo a priori, dipende dall'OS. E` ragionevole supporre che
il sistema operativo riutilizzera` gli stessi blocchi, ma non puoi
averne la certezza usando solo quello che ti viene messo a disposizione
dal C standard.
Luca
-- 
Home: 
http://kronoz.cjb.net
Do, or do not. There is no try.

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

ciao a tutti,
ho cominciato a usare la programmazione in c, ma quando vado ad eseguire il
programma da me compilato, mi appare la finestra per pochissimo tempo che
non faccio nemmeno in tempo a leggere l'output; uso dev-c++, mi potete
aiutare?  mi hanno detto che bisogna inserire una stringa alla fine, ma
quale?
grazie
--
"You, I'm waiting for you
You, you set my desire
I trip through your wires"

 quale?
Devi eseguire il programma in una console (Prompt di MS-DOS, mi pare si
chiami).
Bye,
 Emmanuele.
-- 
I ... Owe ... You ... Pain! -- Willow, "Tough Love"
Italian Buffy Resource Site (Beta) - 
http://www.ibrs.f2s.com
GnuPG Key ID: 0xA4320FF4
GnuPG Key FP: 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

chiami).
Oppure aggiungere una bella getchar() a fine codice (in genere e'
comodo prima del return del main :)

quale?
beh o esegui il programma dal prompt di dos, oppure utilizzi la
getch()
--
Rhymes - 
rhy...@myself.com
http://www.foxhound-games.it
"Sapete cosa fa un InputStream quando
gli si racconta una barzelletta? Reader..."

 ha scritto nel messaggio
news:Kqox7.18535$g42.3...@news.infostrada.it...

....
int main()
{
...
char car;
...
scanf("\n%c",&car);
return 0;
}
oppure prova senza usare la scanf()
con
alt+F5 dopo l'esecuzione del codice

 wrote in message
9rl24m$ac6$1...@nreada.inwind.it...

Newsgroup: it.comp.lang.c
Titolo: Server e Socket c

Ciao ragazzi,
purtroppo sono nuovo nel mondo C, e volevo sapere se avevo capito bene
una cosa......!
Dovrei implementare un server c che accetti le connessioni da piu
client diversi sullo stesso indirizzo ovviamente ma su porte distinte.
Ho gia implementato in precedenza un server concorrente ma che
accettava le connessioni soltanto su una porta.
Nel caso di più porte, è giusto a livello concettuale associare più
socket (alle quali sarà associata una porta distinta) a tale server?
Grazie e scusate se la domanda è banale.....!


È la tecnica normalmente usata.  Prendi ad esempio il server inetd che 
si mette in ascolto su parecchie porte e, per ognuna di esse, è in 
grado di attivare un programma diverso, come da configurazione.
La funzione chiave per accettare richieste su varie porte è la select().
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 wrote:

Mmmm ho capito allora. Ora approfondisco meglio! Grazie mille!

 socket (alle quali sarà associata una porta distinta) a tale server?
Sì. Se usi la accept() bloccante puoi anche pensare di aprire un thread
per socket per accettare connessioni.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 La funzione chiave per accettare richieste su varie porte è la select().
uhm... io starei lontano da select. È vero che è portabile, ma ha anche
diversi problemi di scalabilità. Piuttosto io userei poll().
È pur sempre roba posix:xsi, IIRC.
E volendo si potrebbe anche usare kqueues/epoll se la portabilità non è
un problema. In particolare l'interfaccia asincrona di kqueues mi piace
*davvero* molto.
-- 
-riko
Newsgroup: it.comp.lang.c
Titolo: Passare puntatore a variable locale

Per sbaglio mi sono trovato a fare qualcosa del tipo
--8<---------------cut here---------------start------------->8---
fun1(struct pippo x) {
      // fai qualcosa con X
}
fun2() {
       struct pippo y;
       fun1(y);
}
--8<---------------cut here---------------end--------------->8---
e naturalmente non andava.
Un mio collega però più preparato di me in C mi ha detto che dovrebbe
funzionare, perché y è visibile anche in fun1.
Ma in fun1 uso una sendTo, e magari questa è una chiamata non del tutto
"normale".
In teoria funziona o (come pensavo io) è semplicemente sbagliato fare così?

 In teoria funziona o (come pensavo io) è semplicemente sbagliato fare così?
La soluzione più naturale è passare un puntatore:
void fun1(struct pippo *x)
{
    /* fai qualcosa con *x */
}
void fun2()
{
    struct pippo y;
    fun1(&y);
}
Ciao!

 neanche per idea.
Ottimo sì quello che pensavo anche io, secondo lui lo stack della
funzione chiamante è visibile dalla chiamata, ma appunto non mi
risultava...
Chissà magari con qualche flag magico e un po' di magia nera si può
fare...
Un altra cosa che non riesco a capire è:
ok devo usare i vari htonl/s quando mando dati in rete, MA
devo ad esempio anche farlo quando dichiaro gli header???
Se faccio
ipv6.field = 1
quell'uno se fosse solo 8 bit sarei già a posto, ma come fa a saperlo?
In molti esempio i vari htons non vengono chiamati però a quanto vedo...

 quell'uno se fosse solo 8 bit sarei già a posto, ma come fa a saperlo?
dal tipo di ipv6.field
Ciao!

> in che senso?
Sì ok poi ora ho capito, in sostanza qualsiasi cosa che mando in rete
che sia da più di 8 bit ha bisogno di essere htons-izzata.
Tuttora non riesco a capire quale caspita sia il problema però nel
settare l'header
Il codice quasi completo è qui...
http://gist.github.com/469597

 risultava...
Lo stack è lo stesso ma è un livello più basso del C, in questo caso ti 
devi rifare alle regole di visibilità (scope).
Secondo me da quello che hai chiesto non è evidente che tu debba passare 
a fun1() il puntatore alla struttura, dipende da cosa vuoi realizzare in 
fun1() e da come è fatta struct pippo.
Se ad esempio la struttura contiene solo puntatori allora a fun1() verrà 
passata una copia di y con gli stessi valori dei campi, cioè gli stessi 
puntatori.

Newsgroup: it.comp.lang.c
Titolo: File .lib

Premettendo che lavoro con Borland Turbo C++ 1.01, sapreste spiegarmi come
fare a includere i sorgenti delle mie librerie in un file .lib e lasciare
visibili solo gli header (*.h)?
Grazie a tutti coloro che si interesseranno, Giuseppe


ICQ #34602650

 programma lib per creare la libreria e aggiungervi i moduli compilati.
Però lo strumento fornito con il TurboC++ si chiama TLIB. Il LIB è della
Microsoft (e comunque va bene ugualmente).
EMG

 Microsoft (e comunque va bene ugualmente).
Vero.


Scusate se non vi ho risposto prima, comunque grazie per le delucidazioni
Giuseppe
Newsgroup: it.comp.lang.c
Titolo: MingW32: MAKE & DEBUG

Ho scaricato la versione ECGS 1.1.2 per Win32 nella versione di Mumit
Khan, ma non sono riuscito a trovare il file make.exe. Vuol dire che e'
impossibile     gestire i makefiles ?
Inoltre sempre per questa versione non esiste nessuna possibilità per
ottenere un debug visuale come avviene con il Cygwin32 ?
Grazie
Paolo

ottenere un debug visuale come avviene con il Cygwin32 ?
Ti riferisci a quel front-end grafico in Tcl/Tk per GDB ?
Che io sappia non c'e` nulla per Mingw32. Cmq puoi continurare ad
utilizzare la versione di Cygwin32 se tieni sull' HD tutte le
librerie necessarie. NTEmacs fornisce un front-end, 
non grafico ma cmq molto utile, verso GDB.
-- 
Roberto Gerola
Email: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola

Newsgroup: it.comp.lang.c
Titolo: Threads e priorita'...

Sto realizzando un programma (multiprocesso e multithread) in C su linux.
All'interno di un processo ho 2 o piu' thread (il numero non e'
importante). I thread piu' importanti sono 2: A e B.
Se fosse possibile vorrei che il thread A avesse una priorita' di esecuzione
maggiore rispetto a B e in generale vorrei che i thread A e B avessero
priorita' di esecuzione maggiore rispetto agli altri.
E' possibile?
Se si, come? (Ho cercato ma ho trovato solo la system call nice che pero'
modifica la priorita' dell'intero processo e non del singolo thread... se
ho capito bene...)
Grazie mille...
GiAn

GiAn wrote:

Beh se usi l'infrastruttura pthread potresti usare le funzioni
*_thread_set_priority() o qualcosa del genere per impostare la priorita di
un thread....
-- 
daniele_athome

Newsgroup: it.comp.lang.c
Titolo: algoritmo breadth-first

Come posso implementare una funzione che stampi i nodi di un albero binario
in ordine di livello (breadth-first) ? E' un pomeriggio che mi sto sbattendo
senza risultati :-((
--
----------------------------------------------------------------------------
There are 10 kinds of people in the world:
those who understand binary, and those who don't
----------------------------------------------------------------------------

 wrote in message
news:kRoFa.77648$lK4.2...@twister1.libero.it...


Puoi usare una coda...
Algoritmo č cosě...
void print_bf(node *n) {
	Queue *q;
	init_queue(q);
	if (n) {
		init_queue(q, n);
		while (!is_empty(q)) {
			node *tmp = q.get();
			print_node(tmp);
			if (tmp->left) {
				insert_queue(q, tmp->left);
			}
			if (tmp->right) {
				insert_queue(q, tmp->right);
			}
		}
	}
	done_queue(q);
}
Ciao! (vedi il Cormen-Leiserson-Rivest)

 node *tmp = q.get();
Ocio, q.get() mi sembra C++
-- 
-=[]=---iAN CooG---=[]=-
RAM = Rarely Adequate Memory

 
Ops...
	tmp = get_queue(q);
Arrossisco per la svista...
Luigi
Newsgroup: it.comp.lang.c
Titolo: Una domanda terra terra!

Ciao a tutti,
ho un problema che probabilmente farà sorridere, abbiate pena quindi per uno
che ha deciso di passare dal VB a C da circa una settimana. Ho scaricato il
manuale Tricklyc ed acquistato il testo "C corso completo di programmazione
Deitel & Deitel". Come compilatori ho provato Lcc-Win32, Dev-C++, Miracle C,
ed ho la versione Borland C++ Compiler 5.5(che però non ho installato).
Utilizzo Windows 98 ed ho il seguente problema:
Scrivendo
main()
{printf("Cosa farò da grande \n");}
due dei compilatori citati mi danno a schermo "Cosa far= da grande", Miracle
C si blocca e non esegue la compilazione.
Il layout della tastiera è Italiano, la lingua Italiano Standard. Lo stesso
problema lo trovo se cambio PC, ho tentato sia su WinME che sul 95.
Probabilmente sbaglio qualcosa. Se qualcuno potesse darmi una dritta, magari
consigliandomi un compilatore più adatto ai neofiti (per il momento free) e
risolvendomi questo problema, potrei continuare a studiare utilizzando ò à è
ecc. Grazie.

 ha scritto nel messaggio
news:GDWx6.10554$Oz4.2...@news2.tin.it...


C si blocca e non esegue la compilazione.
Il problema deriva dal fatto che la codifica di caratteri sotto dos (e nelle
finestre dos) è diversa da quella usata sotto windows.
Il tutto è perfettamente normale, non ti preoccupare. Se hai DAVVERO bisogno
delle lettere accentate si può fare qualcosa, come ad esempio modificare
l'autoexec.bat (o il config.sys, non ricordo).
Lanugo
Newsgroup: it.comp.lang.c
Titolo: la tabella di verità... AIUTO!

ho tentato di scrivere un programma che crei la tabella di verità con N
colonne (sotto c'è n'è un esempio a tre colonne), ma quello che ne è uscito
(e che allego) non funziona... sapreste dirmi come mai?
l'idea su cui si basa è semplice: il numero che identifica la colonna è lo
stesso numero a
cui si deve elevare 2 per ottenere il periodo con cui lo 0 e l'1 si
alternano all'interno della stessa colonna.
2^0     2^1       2^2
------------------------
 0          0           0
 1          0           0
 0          1           0
 1          1           0
 0          0           1
 1          0           1
 0          1           1
 1          1           1
============================================================
for (i=0;i<n;i++)   /* "i" identifica le colonne della tabella di verita' */
{
        for (l=0;l<pow(2.0,n);l++) /* "l" è un semplice fattore di
moltiplicazione che viene usato nel ciclo for successivo */
            {
              for (k=0;k<(pow(2.0,i)+(l*pow(2.0,i))) &&
(pow(2.0,i)+(l*pow(2.0,i)))<due_max;k++)
                  {
                    if (l%2==0) matrix[i][k]=1;      /* Se il fattore di
moltiplicazione l è pari o dispari, l'elemento della matrice sarà 1 o 0 */
                        else matrix[i][k]=0;
                  }
            }
}
============================================================
Grazie sin d'ora alle anime buone che mi aiuteranno...
ciao, ric

  1          1           1
Forse non c'entra nulla, ma se leggi le righe da sinistra a destra, non hai
altro che la rappresentazione binaria degli interi, da 0 a 2^n - 1, con n
numero delle colonne...
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

Prova con questo.Non e' generale e puo' essere usato per un massimo
numero di colonne uguale al numero di bit del tipo "long" del tuo
compilatore(dovrebbe bastare), ma e' semplice e funziona.
Comunque e' equivalente (in termini di "dominio" dei valori
ammissibili) alla tua versione.
La tua versione non funziona perche' la variabile "l" che dovrebbe
essere l'indice di riga, non e' usato nell'assegnamento della tua
matrix. E' un po' se per ogni riga della "tabella di verita'" tu
scrivessi solo un "1" o uno "0" .. chissa' dove.
G.
===================
#include "math.h"
#include "stdio.h"
void main(void)
{
 long colonne;
 long idx_riga , idx_colonna;
 printf("\nQuante colonne? ");
 scanf("%ld",&colonne);
 for (idx_riga=0;idx_riga<pow(2.0,colonne);idx_riga++) {
  printf("\n");
  for (idx_colonna=0;idx_colonna<colonne;idx_colonna++)
   if (idx_riga & (long)pow(2.0,idx_colonna))
    printf("  1");
   else
    printf("  0");
 }
}
===================
Newsgroup: it.comp.lang.c
Titolo: scrivere su una specifica posizione di memoria?

salve a tutti,
avrei bisogno di scrivere alcuni byte in una posizione specifica di memoria
usando il c ma non so come si fa'. mi potreste aiutare? una volta avevo
letto che si poteva specificare l'indirizzo di memoria da allocare per una
variabile ma non mi ricordo piu'.
grazie e ciao
p.s.
il prog non gira su pc

 variabile ma non mi ricordo piu'.
In che senso su una specifica memoria?? forse vuoi in uno specifico
indirizzo???


forse vuoi dire in uno specifico indirizzo???
Se č cosě puoi agire in questo modo:
char *c;
c = 23Ah;
*c = 'p';
ciao

 *c = 'p';
-- 
Enrico 'Trippo' Porreca


Esatto!!



Premesso che quando dichiari una variabile la sua posizione in memoria
è stabilita a tempo di compilazione ( se è 'auto' sarà sullo stack, se è
globale o 'static' o altro sarà creata su una parte di memoria ben precisa
(che per altro credo si possa ridefinire a tempo di linkaggio)) posso
indicarti come fare per scrivere su una posizione di memoria
_del_tuo_programma_.
char * puntatore = (char*)0x08049408;
*puntatore = 'A';
strcpy( puntatore, "Pippo" );
Ricordo ancora, ogni indirizzo qui è relativo: solo il tuo SO conosce
l'esatta posizione fisica in memoria (che può anche variare nel corso
dell'esecuzione) .. ma questo è ovvio
non so di preciso cosa intendi con 'allocare': se intendi dirottare le
chiamate a malloc() &co. non so aiutarti..
Byez

 strcpy( puntatore, "Pippo" );
si ma per quanto riguarda l' indirizzo, quello da te scritto è a 32 bit,
quindi aggiungerei che se vuoi specificare un indirizzo o a 32 o a 16bit
bisogna vedere la dimensione della word. Se è di 16 bit e vuoi specificarne
un indirizzo a 32 bit allora bisogna utilizzare 'far'.
char far *puntatore;
se invece la word è a 32bit allora tutto ok!!
Ovviamente il tutto dipende anche dal modello di memoria di default.
ciao

 ha scritto nel messaggio
news:OIX6b.301077$Ny5.9...@twister2.libero.it...

grazie a tutti per i suggerimenti
sto facendo qualche prova. vi faro' sapere.

 allocare per una variabile ma non mi ricordo piu'.
No, in C non lo puoi fare. Quando allochi la memoria ti prendi il blocco 
che dice il sistema...

 ciao
ciao

 Azz.. non l'avevo mai sentita. dimmi di piu:
http://www.webmasterpoint.org/c/04c4.asp?id=742&voto=3&cat=guida&dat=1:28:27
%20PM
ciao



non so, ma di certo 'far' e 'huge' non sono keyword del C, forse sono
specifiche per qualche vecchio compilatore ? (dico vecchio in quanto ogni
esempio è fatto dando per scontata un'architettura a 16bit, e
indirizzamento in modalità reale)
Newsgroup: it.comp.lang.c
Titolo: sizeof

Salve a tutti,
qualcuno sa perchè facendo sizeof(elemento) ho una lunghezza di 8
anziche' di 5 ovvero
1  (sizeof(p->valore))   +   4   (sizeof(p->next))      ?
Grazie
Marco
struct  tag_lista {char valore;
                   struct tag_lista *next;
        };
struct tag_lista elemento;
printf("Sizeof elemento.........>%d \n", sizeof(elemento));
printf("Sizeof elem. char ......>%d \n", sizeof(p->valore));
printf("Sizeof elem. punt ......>%d \n", sizeof(p->next));
Sizeof elemento.........>8
Sizeof elem. char ......>1 
Sizeof elem. punt ......>4

         };
perche' per motivi di velocita' di accesso i dati sono allineati
rispetto a multipli del byte. Tipicamente 2 o 4 (ma dipende dal
compilatore). In questo modo il compilatore allinea ai 32 bit
il puntatore *next, perche' evidentemente ha deciso che sul tuo
hardware questo migliora le prestazioni.
Quindi nel tuo caso la struct conterra' 3 bytes di riempimento
inutilizzati.
Se hai bisogno di forzare l'impacchettamento dei dati ci puo'
essere qualche switch del compilatore che lo fa o qualche
direttiva tipo #pragma (in ogni caso sono soluzioni che dipendono
dalla situazione specifica e non e' detto che siano portabili).
ciao,
g.

 1  (sizeof(p->valore))   +   4   (sizeof(p->next))      ?
http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_structs_on_x86
Newsgroup: it.comp.lang.c
Titolo: Array: loro deallocazione e copia

void bitmap::find_edge()
{ 
 unsigned char *neigh=new unsigned char[10];
 
unsigned char* nbmp= new unsigned char[dimension];
/* dimension è membro privato della classe bitmap
/*
corpo della funzione che prepara nbmp
*/
/* l'array bmp è membro privato della classe bitmap
 for(register p=0;p<dimension;p++) bmp[p]=nbmp[p];
/*copia di nbmp in bmp
};
Due domande:
La memoria allocata ai due array (neigh e nbmp).. verrà liberata automaticamente alla terminazione della funzione e occorre farlo eplicitamente?
e poi... 
l'unico metodo per copiare un'array  nell'altro è quello di copiare elemento per elemento?
GRAZIE
Massiale

l'unico metodo per copiare un'array  nell'altro è quello di copiare elemento per elemento?
In C, se si tratta di char[] (vedasi char*) si puo' adoperare strcpy()
o anche memcpy() 

 l'unico metodo per copiare un'array  nell'altro è quello di copiare elemento per elemento?
Forse anche la funzione memcpy() ma non ricordo se il risultato è
portabile.
EMG


ICQ #34602650

Newsgroup: it.comp.lang.c
Titolo: Help su #define

Ciao a tutti,
    compilando questo semplice programma:
#include <stdio.h>
#define prod(a,b) a*b
int main()
{
   int a=10,b=5;
   printf("%d\n",prod(a+b,a-b));
   return 0;
}
ho notato che prod(a+b,a-b) da 55 mentre prod((a+b),(a-b)) da 15*5=75.
Vorrei sapere cosa comporta a livello di calcolo l'omissione delle parentesi
nel primo caso.
Grazie.


Quando scrivi una macro e poi la usi, il preprocessore C (questa mitica 
entità, se non sbaglio) si preoccupa di sostituire *pedissequamente* la tua 
dichiarazione di macro con la sua definizione, per poi poter essere 
compilata dal compilatore. Quindi, nel caso
prod(a+b,a-b) --> diventa --> a+b*a-b --> 10+5*10-5
cosa che, per via della priorità della moltiplicazione, fa ovviamente 55.
Nel secondo caso, ti ritrovi invece:
prod((a+b),(a-b)) --> diventa --> (a+b)*(a-b) --> (10+5)*(10-5)
e quindi 75. In una macro, il testo viene proprio semplicemente sostituito, 
senza nessun calcolo precedente il passagio di paramtri (che di fatto non 
c'è =) ), come invece avviene per le funzioni. E' per questo e altri motivi, 
  legati ad esempio al controllo sui tipi di dato, che le macro sono spesso 
"pericolose", nel senso che se non sono adeguatamente testate, possono 
portare a errori difficilmente diagnosticabili. Potresti risolvere il 
problema, così a occhio, definendo la tua macro come
#define prod(a,b) (a)*(b)
In questo modo, ci saranno sempre le parentesi (al massimo ce ne saranno due 
o più, ma poco importa al compilatore) e avrai effettivamente il prodotto 
dei due "robi", di qualunque cosa si tratti.
Ah, se non sbaglio le macro si scrivono con nomi in mauiscolo, tipo PROD(a, 
b), in modo da poterle facilmente distinguere dalle funzioni.
Come al solito, aspetto *sempre* correzioni =P
'sera lietissima, Marco

Grazie.
"Markobre" <markob...@QUESTOtiscali.it> ha scritto nel messaggio
news:ghRub.12059$9k3....@tornado.fastwebnet.it...


#define prod(a,b) (a)*(b)
#define #define prod(a,b) ((a)*(b))
   Altrimenti, per esempio, 30/prod(5,6) non da` 1, come sarebbe
lecito aspettarsi, ma 36.
-- 
S.L.