mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Domanda stupida sui letterali

char *t = "test";
assegna al puntatore t l'indirizzo dell'area di memoria che contiene "test".
la domanda e': in coda a "test" viene anche aggiunto '\0'? e se viene
aggiunto, quanto e' standard questo comportamento?
-- 
sign

"name" <ma...@mail.mail> ha scritto nel messaggio
news:44dee3c2$0$15881$4faf...@reader2.news.tin.it...

Sì. Viene aggiunto.
E' standard.
--
Giorgio Silvestri
DSP/Embedded/Real Time OS   Software Engineer

Newsgroup: it.comp.lang.c
Titolo: dove dichiarare le struct

Nel linguaggio C, la dichiarazione delle strutture, per esempio
struct a
{
    int i;
    char alpha;
};
deve essere fatta nella parte del programma riservata alla
dichiarazione delle variabili, ossia immediatamente dopo la parentesi
graffa aperta della funzione in cui si fa la dichiarazione?
Grazie

andrew ha scritto:

oppure, più tipicamente, fuori da ogni funzione, dove si definiscono le 
variabili globali.
E.

Newsgroup: it.comp.lang.c
Titolo: strutture globali + ordine compilazione...!!!

Ho un problemino.... ho definito uno struct globale in srctopcs.c (file 
principale) , che contiene un include a win.c (file gestione grafica), il 
prob è che una funzione presente nel file win.c prende come argomento lo 
struct globale è dice che lo sto usando anche se non è ancora stato 
definito... è un po come se stesse provando a compilare il file win.c (e 
forse con l' include fa proprio questo...) prima di avere definito le 
varibiali globali del file principale....eccovi gli spezzioni 
incirminati...:
srctopcs.c:
#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "win.c"
.....
#define PAD_LIST_MAXLINES (sizeof tab_elements / sizeof tab_elements[0])
.....
struct elements {
char *description;
char *(*func)(void);
} tab_elements[] = {
"Insert info: NAME", insert_info,
"Insert info: VERSION", insert_info,
"Insert info: REVISION", insert_info,
"Insert info: SECTION", insert_info,
"Insert info: MANTAINER", insert_info,
"Insert info: DESCRIPTION", insert_info,
"Insert info: LICENSE", insert_info,
"Insert info: WWW HOMEPAGE", insert_info,
};
......
main() .....
win.c:
....
#define PAD_LIST_MAXLINES (sizeof tab_elements / sizeof tab_elements[0])
....
func()
{
......PAD_LIST_MAXLINES....
}
errori:
...
win.c:72: `tab_elements' undeclared (first use in this function)
...
srctopcs.c: At top level:
srctopcs.c:44: `tab_elements' used prior to declaration
..
Anche l' ordine degli errori fa pensare che prima compili win.c e solo dopo 
srctopcs.c ... non è una buona idea cambiare l' ordine di inclusione xche 
il prob si presenterebbe lo stesso...
Ovviamente ho semplificato un po.... sia x func che per main.. non ho 
copiato i prototipi ecc ecc .... se metto tutto in file tutto fila liscio, 
mentre cosi no... chi mi puo dare una mano?
Grazie mille!!!
Stefano Pelux

Scusate per il disturbo... ho gia risolto.
Pelux

 win.c:
Qui` metti
extern struct elements tab_elements;
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Ci sono le balle , le megaballe e le statistiche".
 Mark Twain
Newsgroup: it.comp.lang.c
Titolo: programmare in C su un Mac

ciao, ho un Mac, vorrei provare ad usare gcc per fare i miei primi
esperimenti in C/C++. L'ho installato. Ma si deve fare tutto da
terminale o esiste un'interfaccia grafica? nel caso si dovesse fare da
terminale... non conoscendo unix, non so nemmeno come muovermi tra le
directory, non so come fare per compilare il mio programmino, come
farne il debug ed eseguirlo... insomma, parto proprio da zero. Qualcuno
può indirizzarmi ad un tutorial in rete che non sia troppo dispersivo?

 wrote in message
news:1130081774.6...@g49g2000cwa.googlegroups.com

Prova
http://216.239.59.104/search?q=cache:gMcsGVH7H8sJ:www.geocities.com/capecanaveral/hangar/5319/linux/linux.pdf+tutorial+gcc+filetype:pdf&hl=it&lr=lang_it
comunque da shell puoi sempre fare
man gcc
per compilare
gcc -c file.c
per ottenere un eseguibile
gcc -o nome_exec file.c
etc..
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Da qui scarichi direttamente il pdf
http://www.geocities.com/capecanaveral/hangar/5319/linux/linux.pdf
.


Anche qui trovi qualcosa
http://www.badpenguin.org/press/infomedia/compilare.html

Esiste XCode (Developer Tools) che dovresti avere con i cd del sistema
operativo e poi sul sito apple trovi i tutorial che fanno al caso tuo.
altrimenti impara un paio di comandi unix, quelli che ti hanno
segnalato bastano per iniziare.
Saludos

Newsgroup: it.comp.lang.c
Titolo: Float <-> int

Tempo fa lessi un articolo, non ricordo dove, riguardo la possibilita' di
simulare, entro una certa precisione, valori floating point con int e long.
Non trovo piu' la nota, qualcuno sa indicarmi qualche riferimento ?
Grazie.


Per esempio, il long tiene traccia dell'inverso del numero (normalizzato in
[0, 1]) e l'int dell'esponente moltipicativo, magari in base 2.
Comunque non è molto diverso che esprimere i numeri in notazione 10:
23e10 + 7e10 = 3e11
Basta scriversi un po' di formule e poi diventa chiaro.
Qualcosina la trovi sul mio sito:
http://digilander.iol.it/nonlibero/Notazione
 Scientifica.hml
Ovviamente non garantisco per errori.
--
Alessandro Monti
Newsgroup: it.comp.lang.c
Titolo: Libreria GTK - GNOME

Salve,
su DEV di Giugno ho trovato un articolo su come creare interfacce utente
sotto gnome utilizzando le gtk. La cosa mi ha subito interessato, così ho
provato a realizzare il programmino di esempio copiandolo pari pari e
compilandolo.
Per compilarlo ho utilizzato prima la linea
gcc -Wall -g listato1.c -o listato1 'gnome-config --cflags gnome GNOMEUI'
'gnome-config --libs gnome GNOMEUI'
e poi ho provato anche con
gcc -Wall -g listato1.c -o listato1 'gtk-config --cflags'
'gtk-config --libs'
in tutti e due i casi, ottengo un messaggio di errore, dal quale mi sembra
di capire che il compilatore non riesce a trovare un file di intestazione:
gnomesupport.h
In file included from listato1.c:1:
/usr/include/gnome.h:4: gnomesupport.h: File o directory inesistente
In file included from /usr/include/gdk/gdktypes.h:33,
                 from /usr/include/gdk/gdk.h:31,
                 from /usr/include/gtk/gtk.h:31,
                 from /usr/include/gnome.h:6,
                 from listato1.c:1:
/usr/include/gnome.h:4: gnomesupport.h: File o directory inesistente
In realtà gnomesupport.h e gnome.h esistono nella directory corretta, ho
verificato attraverso find.
Domanda: qual'è la diagnosi? ma soprattutto, qual' è la cura?????
Ciao...

 gnomesupport.h
Si', e' quello il problema, dovuto forse al fatto che gnome-config non
ti funziona (a me per es. non funziona, probabilmente non e' installato
bene); per risolvere, dovresti aggiungere, nella linea con cui lanci il
gcc, l'opzione -I/usr/lib/gnome-libs/include (o comunque la directory in
cui hai gnomesupport.h), in modo che il compilatore, nel cercare i file
.h, guardi anche in quella directory; cosi' dovrebbe trovare il .h in
questione.
 
Ciao!
-- 
Fabio Costa a.k.a. Ph0ton
--------------------------------------------------------------------
  Referente AGI - Sezione di Milano   Impaginatore capo di AmiWorld 
  Membro del MusicPlanet Musicgroup       (
http://amiga.eden.it
)    
     (
games.eden.it/musicplanet
)           Musician dei Genesis     
--------------------------------------------------------------------

Newsgroup: it.comp.lang.c
Titolo: compilatore dos

esiste un compilatore che mi permetta di scrivere programmi eseguibili sotto
dos puro, non emulatore???
utilizzo il visual c++ e non va bene, il borland c++ me lo permette???
__________________________________________________________________
Abbonati a Tiscali!
Con VoceViva puoi anche ascoltare ed inviare email al telefono.
Chiama VoceViva all' 892 800        
http://voceviva.tiscali.it
-- 
Posted from 
mail-4.tiscalinet.it
 [195.130.225.150] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Se ho capito cosa intendi scarica il djgpp e poi clicca su zip picker.
www.delorie.com
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/


utilizzo il visual c++ e non va bene, il borland c++ me lo permette???
Il Visual C++ lo permette solo fino alla versione 1.52, per quanto
riguarda il Borland invece tutto OK.
ciao, acc.   
a...@libero.it
Newsgroup: it.comp.lang.c
Titolo: compressione file

Salve a tutti, ho cominciato da poco a programmare in C, ma il mio professore
mi continuava a ripetere che non conta da quanto un programmatore sa
programmare
e se sa alla perfezione il linguaggio, quanto le idee che ha in testa, e con
questo consiglio comincio a scrivere il mio primo post su questo archivio.
Il mio interesse è spinto solo in una direzione, compressione di file.
Data la mia inesperienza non conosco la compressione descritta dal compressore
WinZip e non so che tabelle crea (e ne sento tanto parlare), ma voglio capire
come fa a fare cosa..e come riesce a creare il concetto...insomma a comprimere
in questa maniera polimorfica.
Vorrei chiedere a qualche persona che conosce questa compressione, se
cortesemente sa come questo programma riesce a farlo.
Lo so che chiedo molto ma ho gia fatto alcuni compressori cercando di
comprimere
e indubbiamente non ci vuole poi tanto a scriverne uno, il problema è
comprimere
al massimo i file...ho alcune idee ma non parto per territori inesplorati se
prima non conosco i concetti con cui si basano le compressioni attualmente
conosciute, o almeno le principali...sarebbe tempo buttato;
e poi consideriamo il fatto...cosa può fare un programmatore solo, se non
condivide le proprie soluzioni ed esperienze con un'altro programmatore o un
gruppo?
Non riesco a capire come ragiona WinZip, perciò mi sono deciso di chiedere a
qualcuno se ha del materiale che ne descrivere il contenuto, al limite anche
con similitudini ambientali, non necessariamente la spiegazione riga per
riga...
voglio capire non imparare a memoria i passaggi che spiegano.
Nel caso qualcuno abbia già cominciato un progetto di un compressore, sarei
molto interessato nell'inserirmi, anche perchè così potrei avvicinarmi in
maniera alternativa all'interesse condiviso...ovviamente se la spinta
dell'invenzione, è la ricerca di metodi di compressione avanzati, e non la
paura di parlare delle proprie idee a qualcuno...
Sto cercando un gruppo che condivida queste idee, compressione di file, il
programmatore non è un soggetto da isolare, al contrario l'unione fa i grandi
risultati, e non sono certo io che l'ha detto...
ringrazio e saluto comunque tutti i lettori, interessati e non.
duido
-- 
Posted from 
ppp-96-12.30-151.libero.it
 [151.30.12.96] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

molto interessato nell'inserirmi, 
Tempo fa ho scritto un programma di compressione, basato
sull'algoritmo di Huffman e meno efficace del LZW.
Se vuoi, te lo mando per e-mail.
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

 
http://www.geocities.com/AndreaLaforgia
Andrea to cercando tutto il materiale reperibile che spieghi concetti
o combinazioni per comprimere, sicuramente se non ti porta troppo disturbo,
accetterei volentieri quello che hai o vuoi passarmi, nel frattempo
cercherò altre spiegazioni.
Grazie ancora duido
-- 
Posted from 
ppp-212-25.30-151.libero.it
 [151.30.25.212] 

Newsgroup: it.comp.lang.c
Titolo: percorso del file da tastiera

salve a tutti.
come si dice sbattendo la capa ho scoperto che con la funzione fopen
l'argomento che indica il nome di file, per fare in modo che il file venga
creato devo scrivere
"d: \nomefile",
 notate lo spazio divisorio tra d e \:
ora leggendo il mio bel libro e facendo 2+2 capisco che se gli do
"d:\\nomefile" vabene .
ora provo ad andare piu' a fondo e vorrei passare questo valore alla
funzione fopen tramite un imput ricevuto dalla tastiera, ma cosa strana non
funziona. il mio procedimento e' questo:
FILE *fp;
char buffer[80];
/* lasciando stare il main ed eventuale*/
   gets(buffer);
   if((fp=fopen(buffer,"a+"))==NULL)
     printf("file non apeto correttamente\n");
   else
   {
     printf("file aperto\n");
     fclose(fp);
    }
cosi non funge allora faccio una prova passandogli direttamente una stringa
tramite un array:
FILE *fp;
char buffer[20]="d:\\diego";
   if((fp=fopen(buffer,"a+"))==NULL)
     printf("file non apeto correttamente\n");
   else
   {
     printf("file aperto\n");
     fclose(fp);
    }
grazie

 non funziona. il mio procedimento e' questo:
...
A me sembra tutto corretto; potresti provare ad usare la stringa:
"d:/nomefile"
che funziona correttamente anche sotto Win.
Dal momento che se fopen fallisce il codice di errore viene settato nella 
variabile errno, potresti tentare a vedere che tipo di errore hai; ti posto 
il codice modificato:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[]) {
        FILE *fp;
        char buffer[20]="d:\\diego";
        if((fp=fopen(buffer,"a+"))==NULL)
                printf("file non apeto correttamente: %s\n", strerror(errno));
        else
        {
                printf("file aperto\n");
                fclose(fp);
        }
}
Ciao,
Cecco

 funziona. 
Quando  leggi  una  stringa  da  tastiera non  devi  fare  l'escape  dei
caratteri  ;) Se  vuoi  inserire  un newline,  premi  invio, non  scrivi
\n!  Quindi da tastiera dovrestri scrivere normlemente c:\foobar.txt. Se
la stringa la  scrivi direttamente nel codice allora  devi fare l'escape
della backslash e mettere c:\\foobar.txt.
Per evitare  confusione potresti  semplicemente adottare  la convenzione
unix che usa la slash ('/') al posto della backslash come separatore.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
This message will self distruct in 5 seconds.
Newsgroup: it.comp.lang.c
Titolo: Lazy (short circuit) evaluation

In generale, tendete a sfruttare questa caratteristica?
Per es. scrivereste
if (ptr && ptr->valid)
o
if (ptr)
   if (ptr->valid)
o
if (ptr ? ptr->valid : 0)
La terza forma č utile se si vuole evitare la prima e si ha una sequenza 
di if else if.
Per es. in C++ gli operatori logici, se overloaded, sono soggetti a 
strict-evaluation e la prima forma creerebbe problemi.
Qualcuno raccomanda la prima e altri la seconda. Propenderei per la seconda.
Kiuhnm

 strict-evaluation e la prima forma creerebbe problemi.
Dove non c'è non la uso, anche in altri linguaggi gli operatori logici 
hanno una strict evaluation e ovviamente non si può fare.
Ma parliamo del C, no?

 Ma parliamo del C, no?
Spero solo di non dover usare compilatori che mi costringano a rivedere 
gran parte del codice.
Kiuhnm

 gran parte del codice.
Tranquillo, il metodo di valutazione degli operatori è ben descritto 
nello standard. Se un compilatore ti costringe a rivedere il codice puoi 
buttarlo senza passare dal via.

 strict-evaluation e la prima forma creerebbe problemi.
<semi-OT>
IMHO, è un buco del C++. Mi sembra assurdo permettere l'overloading degli
operatori "&&" e "||". Di fatto, è come permettere di fare l'"overloading"
dello stesso "if".
Secondo me si sarebbe dovuta vietare questa possibilità, come la si è
giustamente vietata per l'operatore "?:".
E poi, che utilità può mai avere una cosa del genere? Ammesso che a qualcuno
possa mai servire costruire un classe "simil-booleana" (per esempio una
classe che implementare un valore di verità fuzzy), si possono sempre usare
gli operatori "&" e "|" come AND e OR.
In ogni caso, il problema è irrilevante: se gli operatori sono overloaded
sono overloaded, e quindi non è lecito far affidamento sulla loro semantica
normale, né in questo caso né in nessun altro. Per esempio, non è lecito
assumere che "a = a + b" dia lo stesso risultato di "a += b".
</semi-OT>
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Newsgroup: it.comp.lang.c
Titolo: Chiamata di sistema "TIMES"

Un saluto al lettore,
vorrei sapere come si usa di preciso la chiamata di sistema TIMES in C sotto
linux. Ho letto cosa vuole e cosa restituisce ma faccio qualche casino con
le variabili.
Grazie

"Marcello" ha scritto:

lo scrivi minuscolo?
in caso contrario, fai questo in ordine:
1. prova a scriverlo minuscolo e riprova
2. dai "man 2 times" nella shell, leggi e riprova 
3. fai le domande su it.comp.os.linux.development

 ha scritto nel messaggio
news:19722837....@iol.it...

Penso che riguardi il C.
Sto facendo un programma in C dove devo usare la "times" ma non riesco a
usare il puntatore dove viene
immagazzinata la "struct tms" con i risultaqti della times.
Ti ringrazio per avermi risposto

 immagazzinata la "struct tms" con i risultaqti della times.
che il programma sia in C non ne dubito, ma times in C standard non 
esiste, quindi il tuo gruppo e' quello detto prima
(PS: il puntatore lo hai allocato?)

 ha scritto nel messaggio
news:1160269.F...@iol.it...

Grazie ancora provo sull'altro newsgroup.
Newsgroup: it.comp.lang.c
Titolo: Scrittura compatta del c

Un saluto al NG.
Volevo porvi una domanda relativa alla scrittura compatta del c.
Dal punto di vista del codice assembler generato è vero che le seguenti 
istruzioni sono del tutto equivalenti?
a = a + b        <=>     a += b
a = a | 0x0F    <=>    a |= 0x0F
Grazie anciticpati.
Zio! 

 a = a | 0x0F    <=>    a |= 0x0F
Naturalmente dipende dal compilatore ma qualunque compilatore "serio" 
dovrebbe generare lo stesso codice.
Per essere sicuro genera il sorgente assembler dei due casi e vedi se 
coincidono.
Per esempio compilando questo frammento con gcc -S:
int f(int a)
{
   a |= 7;
   return a;
}
int g(int a)
{
   a = a | 7;
   return a;
}
ottieni:
	.file	"x.c"
	.text
.globl _f
	.def	_f;	.scl	2;	.type	32;	.endef
_f:
	pushl	%ebp
	movl	%esp, %ebp
	orl	$7, 8(%ebp)
	movl	8(%ebp), %eax
	popl	%ebp
	ret
.globl _g
	.def	_g;	.scl	2;	.type	32;	.endef
_g:
	pushl	%ebp
	movl	%esp, %ebp
	orl	$7, 8(%ebp)
	movl	8(%ebp), %eax
	popl	%ebp
	ret
Come vedi l'assembler è lo stesso per f() e per g()

 a = a | 0x0F    <=>    a |= 0x0F
Lo standard del linguaggio non entra cosi' nel dettaglio e non dice 
nulla sulla parte di generazione del codice, ogni compilatore puo' 
comportarsi come meglio crede (basta che il codice generato faccia 
quello che deve! ;)
Quindi in generale non si puo' rispondere ne si' ne no alla tua domanda.
Penso pero' che praticamente tutti i compilatori in circolazione degni 
di questo nome dovrebbero generare lo stesso codice nei due casi.
Se devi scegliere su quale forma usare nei tuoi programmi non 
preoccuparti del codice assembler generato, usa la forma che ti sembra 
piu' chiara e leggibile!
ciao
Giacomo

 istruzioni sono del tutto equivalenti?
6.5.16.2 Compound assignment
Constraints
  For the operators += and -= only, either the left operand shall be a
pointer to an object type and the right shall have integer type, or the
left operand shall have qualified or unqualified arithmetic type and the
right shall have arithmetic type. 
  For the other operators, each operand shall have arithmetic type
consistent with those allowed by the corresponding binary operator.
Semantics
Acompound assignment of the form E1 op= E2 differs from the simple
assignment expression E1 = E1 op (E2) only in that the lvalue E1 is
evaluated only once.
Se il tuo compilatore non ottimizza:
int a, b;
/* inizializzazione di a, b */
a = a + b;
cambia compilatore. :P
-- 
-riko
Newsgroup: it.comp.lang.c
Titolo: PIXEL in ASSEMBLER: AIUTOOOO! (URGENTE)

Ho un problema con l' assembler..
Devo fare il gioco del tris. Ho utilizzato l'int 21H per disegnare la
griglia di gioco e per fare le x (Per il cerchio ho ancora qualche problema,
probabilmente diverra' un quadrato+ACE-).. Il fatto e' che quando cerco di
disegnare la x, scompare la griglia senza che io abbia chiamato una funzione
che cancelli lo schermo: come fare?
Mi hanno detto che non devo utilizzare l'int 21H ma il 10H per trattare lo
schermo come una grossa matrice ma non riesco a capire come:
qualcuno gentilmente mi potrebbe mandare un semplicissimo programma che
disegna un punto bianco (un pixel) alle coordinate 50,50 in modo che capisca
come funzioni? (FILE .ASM PER FAVORE+ACE-)
Usando questa matrice non mi viene cancellato niente? Oppure viene
cancellato e devo richiamare la matrice? In questo caso come si fa???
VI PREGO RISPONDETEMI PRESTO+ACEAIQAhACE-
Grazie mille+ACEAIQ-
-SIL.

...


 wrote in message
BHO65.313234$VM3.2...@news.infostrada.it...


Newsgroup: it.comp.lang.c
Titolo: Grafica in C.

 Gen.le Ng.
 Voerri cortesemente chiedere se qualcuno ha un po di materiale su come  
programmare la grafica col C : accendere pixels , modalita' video , 
algoritmi che genera sprites , animazioni , effetti ecc....
 Se avete qualche sito o qualche file interessante mi fareste un grosso 
favore.
 Grazie per la cortese attenzione. 

algoritmi che genera sprites , animazioni , effetti ecc....
per il C64?
Oha
-- 
"Qualcuno mi spieghi perche' 144 e' l'unico
quadrato perfetto della serie di Fibonacci"

Qui trovi dei tutorial:
http://gpi.eden.it/
http://www.programmazione.it/
http://www.brackeen.com/home/vga/
http://www.delorie.com/djgpp/doc/brennan/Brennan.html
http://www.qzx.com/pc-gpe/graphics.html
Un bel libro bello chiaro è :
Programmazione Grafica 3D
Andrea Fasano
Infomedia
metà del "libro" è dedicato al 2D, sopratutto per quanto riguarda le demo
grafiche...
--
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

 Grazie per la cortese attenzione. 
Prova con la libreria grafica WGT5, non e' male, gestisce sprites,
mouse, etc...
La puoi visionare sul sito 
www.wwdc.com/egerter
ekidna71

 Grazie per la cortese attenzione.
ciao mi chamo andrea e ho il tuo stesso problema ti posso passare un
programma che ho scritto io INTERAMENTE ...
infatti come potrai vedere riesco a decodificare un file TGA e piazzartelo
in una stupenda grafica 320x240 MODE X  sig sig
però è molto semplice. se c'è qualcosa nel listato che non capisci scrivimi
oK
è stato scritto col boarland C 5 e NON devi farlo compilale in SMOLL
begin 666 tgaV.zip
<encoded_portion_removed>
Newsgroup: it.comp.lang.c
Titolo: Problema con le stringhe per la sostituzione di un carattere

Qualcuno sa dirmi come fare per sostituire un carattere con un altro in una
stringa.Dato il progarmma:
#include<stdio.h>
#include<conio.h>
void main()
 {
    char  c,charin, charout;
    FILE *fp;
    Dopo aver introdotto da tastiera il carattere da sostituire(charin) con
quello
    da introdurre(charout)
   while( (c=fgetc(fp)) != EOF)
      {
         if(charin==charout)
           {
              c=charout;
              putchar(c);
           }
      }
Il programma si blocca dopo aver introdotto i due  caratteri ed ignora
l'istruzione if che serve per la sostituzione dei caratteri; mentre
spostando putchar fuori dal corpo dell'if, il programma funziona
regolarmente, però in questo caso a video viene visualizzato tutto il
contenuto del file senza che gli sia apportato alcuna modifica.
Qualcuno sa dirmi come fare.
Grazie.


 
 while( (c=fgetc(fp)) != EOF)
      {
         if(charin==c)
           {    c=charout;    }
         putchar(c);
      }

Newsgroup: it.comp.lang.c
Titolo: Calloc , malloc e struttura :)

Ciao a tutti,
Ho una domanda da porvi...allocare una struttura con malloc e poi 
inizializzarne ogni singolo elemento a 0 equivale a allocare una 
struttura direttamente con calloc o ci sono differenze da un punto di 
vista pratico?
Ciao e grazie
Aragorn

Aragorn Elessar ha scritto:

Con calloc potresti (non è detto) avere dei problemi se nella struttura 
ci sono dei puntatori. Per ulteriori info: 
http://c-faq.com/malloc/calloc.html
Ciao.

 vista pratico?
Credo che sia una di quelle questioni dipendenti dall'implementazione.
La funzione calloc(), in ogni caso, si limita a chiamare una malloc() e
poi azzerare la memoria allocata.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Aragorn Elessar ha scritto:

Salve,
calloc sta per "allocazione contigua" invece malloc "allocazione di memoria".
La funzione calloc() riceve due parametri, entrambi di tipo size_t(unsigned int) invece malloc() riceve solo un parametro size_t.
per esempio
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
Alloca size byte nello heap. La memoria viene inizializzata a 0.
La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
void *malloc(size_t size)
Alloca size byte nello heap. La memoria non viene inizializzata.
La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM. 
Se ho sbagliato scusami perchè sono ancora un principiante.
ciao  
albtoni.
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 La funzione restituisce il puntatore alla zona di memoria allocata in caso
di successo e NULL in caso di fallimento, nel qual caso errno assumerà il
valore ENOMEM.
Idem.
--
Giorgio Silvestri
DSP/Embedded/Real Time OS   Software Engineer
Newsgroup: it.comp.lang.c
Titolo: LISTE

Ciao a tutti, avrei un po di difficoltà nella comprensione delle
liste. Posto qui un pezzo di programma, affinchè qualcuno mi possa
gentilmente commentare riga per riga le due funzioni list_add e
list_remove sperando cosi di capirci qualcosa di più...Vi ringrazio
fin da adesso...
/* STRUTTURA GLOBALE */
typedef struct ns {
        int data;
        struct ns *next;
} node;
.........
/* FRAMMENTO DI FUNZIONE MAIN */
int main(void) {
    node *n = NULL;
    list_add(&n, 0); /* lista: 0 */
    list_add(&n, 1); /* lista: 1 0 */
    list_add(&n, 2); /* lista: 2 1 0 */
    list_add(&n, 3); /* lista: 3 2 1 0 */
    list_add(&n, 4); /* lista: 4 3 2 1 0 */
    list_print(n);
    list_remove(&n);            /* rimuove il primo elemento (4) */
    list_remove(&n->next);      /* rimuove il nuovo secondo (2) */
    list_remove(list_search(&n, 1)); /* rimuove la cella che contiene
1 (primo) */
    list_remove(&n->next);      /* rimuove il successivo (0) */
    list_remove(&n);            /* rimuove l'ultimo (3) */
.......
/* AGGIUNGO UN ELEMENTO ALLA LISTA */
node *list_add(node **p, int i) {
    node *n = malloc(sizeof(node)); /* alloco memoria */
    n->next = *p;
    *p = n;
    n->data = i;
    return n;
}
/* RIMUOVO ELEMENTO */
void list_remove(node **p) { /* rimuove head */
    if (*p != NULL) {
        node *n = *p;
        *p = (*p)->next;
        free(n);
    }
}

Grazie :)!!!

Newsgroup: it.comp.lang.c
Titolo: [OT] compilatore fortran

Scusate se sono OT, ma non so a chi rivolgermi per trovare un compilatore
Fortran f77 o f90.
Mi serve per completare la mia tesi, vi prego ditemi dove posso scricarlo..
Grazie!


Ne ha uno la GNU, e' installato sulla mia Debian ma non l'ho mai usato....
-- 
Ciao, Maurizio.

Newsgroup: it.comp.lang.c
Titolo: EOF dubbio...

qual'è il carattere da immettere da tastiera per indicare l'EOF?
grazie
		gabo

qual'č il carattere da immettere da tastiera per indicare l'EOF?
CTRL+Z su sistemi DOS/Windows.
CTRL+D su sistemi Unix/Linux.
-- 
The Follet
Newsgroup: it.comp.lang.c
Titolo: memorizzazione

Ciao,un aiuto su questo argomento:
come posso memorizzare documenti dal Web su di un file con il C per
permettere una elaborazione successiva,
tralasciando il discorso di connessione ed accesso al motore di ricerca.
Grazie!

 wrote in message
news:0BJp6.124738$Y93.3...@news.infostrada.it...

Newsgroup: it.comp.lang.c
Titolo: Per iniziare......

ciao a tutti, un amico vuole iniziare a fare i primi software con C e chiede
i seguenti consigli:
1) č meglio iniziare con C oppure con C++?
2) quale libro ritenete valido per neofiti?
3) Quale č il miglior compilatore che giri sotto windows?
Ciao a tutti Grazie.

 3) Quale è il miglior compilatore che giri sotto windows?
Puoi provare l'LCC per Win32 o il Dev-C (con incluso MinGW). Per l'LCC cerca 
su google, per il Dev-C se non vuoi usare Google, si trova facilmente su 
SourceForge.Net
-- 
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."


wrote:

1) Come vuoi.
2) Deitel&Deitel "C++ Fondamenti di Programmazione" 3°ed Apogeo , poi
passa al Lippman Laoje "C++ Corso di Programmazione" 3*ed Addison
Wesley
3) non ricordo :P io uso quello di Visual C++ anche se come
standardizzazione non č il max (ma lo uso insieme a MFC e mi serve :P)
Salute a te
P.S per il C
2) anche qui c'č il Deitel&Deitel perň non ricordo il nome

 standardizzazione non č il max (ma lo uso insieme a MFC e mi serve :P)
Ma come ottimizzatore e' il migliore, prova questo:
http://digilander.libero.it/iANCooG/C/interf_v2.5.rar
contiene gli exe generati con MSVC6, MSVC7 e LCCWIN (con quest'ultimo
non e' possibile compilarlo ottimizzato perche' crasha o_O)
-- 
-=[]=---iAN CooG---=[]=-

Newsgroup: it.comp.lang.c
Titolo: C PREPROCESSOR

Ciao al NG,
	ecco la mia questione.
Siccome sto approfondendo lo studio del preprocessore C vorrei sapere
come fare a vedere il risultato di una espansione del preprocessore.
Essite qualche utility? Ho visto nei flag del gcc ma non mi sembra di
aver trovato nulla atto allo scopo.
	P.S.: Gradirei la risposta anche al mio indirizzo
Grazie
Ciao
-- 
                      >////////<
                      / *  * /
                     /   <  /
__________oOOo______/______/_____oOOo_________
    (°>     Giovanni Costagliola   (jancos)
    //\     email:  
jan...@technologist.com
    V_/_    
http://digilander.iol.it/jancos
______________________________________________
              /      /
             /      /
            (      (    ______
             \      \  /     /#####*** *  *    *
              \      \/     /####*** *  *
               \           /###*** *  *    *
                \         /##*** *  *
                 \_______/#*** *  *    *

 Siccome sto approfondendo lo studio del preprocessore C vorrei sapere
RISOLTO...
Scusate per la fretta del post... meglio leggere attentamente le
manpage!!!
:^)

Newsgroup: it.comp.lang.c
Titolo: Alberi

Qualcuno mi sa' gentilmente suggerire un programmino che dati 2 alberi
binari A e B,verifica che B e' sottoalbero di A.
Piero

binari A e B,verifica che B e' sottoalbero di A.
Devi controllare che abbiano gli stessi elementi E che abbiano la
stessa "forma"? O vuio solo controllare che abbiano una "forma"
compatibile iniziando a confrontare dalla radice?
-- 
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."

 compatibile iniziando a confrontare dalla radice?
Se si tratta di verificare che B sia un sottoalbero di A, 
bisogna verificare che A, da qualche parte, contenga B,
quindi sicuramente non hanno ne' la stessa forma, ne' gli
stessi elementi (a meno che A = B).
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3ac362f6571035ad008...@mygate.mailgate.org...


Qualche riga di codice non guasterebbe....
Dopo il commento di Andrea ho ripensato bene al problema e mi pare
proprio la soluzione sia questa: percorri A cercando un nodo uguale
alla radice di B e se lo trovi inizi a scorrere in parallelo gli
alberi per cercare similitudini... se le trovi bene, se no ricominci
dal punto a cui si era fermata la procedura di visita di A.
Ti posto 2 righe scritte al volo, tieni solo presente che:
- non le ho testate quindi potresti riscontrare qualche errore
- non e' ottimizzata in nessun modo:
  - confronta le stesse cose piu' volte
  - nel caso piu' sfortunato la complessita' sale a O( |A|*(|B|-1) ), 
    analisi fatta al volo, quindi potrebbe non essere cosi' accurata 
    :)
<CODE>
/*
 * Struttura dati: albero binario, che usa NULL come terminatore e che
 * ha un campo key che mi serve per effettuare i confronti
 */
/* Scandisce i sottoalberi alla ricerca di una possibile partenza */
int compare_tree (tree A, tree B) {
    if (A == NULL) {
        if (B == NULL)
            return 1;
        else
            return 0;
    }
    else if (A->key == B->key) 
        if (match_subtree(A, B))
            return 1;
    compare_tree(A->left, B);
    compare_tree(A->right, B);
    return 0;
}
/* Inizia a confrontare */
int match_subtree(tree A, tree B)
{
    if (A == NULL) {
        if (B == NULL)
            return 1; /* tutti a NULL significa uguali */
        else
            return 0; /* A nullo e B no, diversi */
    }
    else if (A->key == B->key) /* se uguali */
        return (
            match_subtree(A->left, B->left)
            &&
            match_subtreee(A->right, B->right)
        ); /* match a sinistra e a destra? 
    else /* key diverse */
        return 0;
}
</CODE>



Interessante questo programma, ora ci provo a farlo.. stay tuned, come si
dice! :)

 ha scritto nel messaggio
news:PR_L8.15430$86.3...@twister1.libero.it...

Newsgroup: it.comp.lang.c
Titolo: ovrbuffer

Salve a tutto il NG
Non linciatemi, per favore
Qualcuno, smanettone di C in ambiente DOS, può darmi qualche delucidazione
sulla variabile "_ovrbuffer" ?
Perchè il manuale Borland del mio compilatore, Borland C++ 3.0, mi dice che
unsigned _ovrbuffer = 0x1000; equivale ad un buffer di overlay di 128K ?
Da quello che so, 0x1000 significa 4096, cioè 4 * 1024.
Qualcuno mi dà qualche dritta sull'uso degli overlay ?
Vi ringrazio.
Andrea

 Da quello che so, 0x2000 significa 4096, cioè 4 * 1024.
La formula di calcolo è
unsigned _ovrbuffer = (1024L * OVLBUFK) / 16;
da cui, mettendo OVLBUFK = 128 si ottiene 0x2000 come da manuale.
Per il resto ... qualcuno può darmi qualche dritta sull'uso degli overlay ?
Grazie ancora.
Andrea

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

Salve a tutti , devo fare leggere tramite fgets un file.txt
presente in una cartella.Questo e l'unico presente nella
cartella e cambia nome perchè viene sostituito .
E possibile far leggere il file senza indicare il nome
del file stesso ma solo l'estensione?
Grazie a tutti
Ciao

del file stesso ma solo l'estensione?
No.
In alternativa puoi cercare tutti i file .txt, aprirli e leggerli, ma
è meglio affidarti all'API del tuo sistema operativo:
it.comp.programmare.win32
it.comp.os.linux.development


ti ringrazio.
Ciao

Il tuo problema e' quello di dover leggere quel file che cambia sempre
nome, allora puoi provare in questo modo, scansioni la cartella (che
sicuramente saprai qual'e' ) e leggi il solo o i file con estensione
*.txt . Qui di seguito ti posto il codice per leggere i file di una
cartella, modellalo in base alle tue esigenze e spero che ti vada
bene...
<code>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, char *argv[])
{
	DIR             *dip;
        struct dirent   *dit;
        int             i = 0;
        if (argc < 2)
        {
                printf("Usage: %s <directory>\n", argv[0]);
                return 0;
        }
        if ((dip = opendir(argv[1])) == NULL)
        {
                perror("opendir");
                return 0;
        }
        while ((dit = readdir(dip)) != NULL)
        {
                i++;
                printf("\n%s", dit->d_name);
        }
        if (closedir(dip) == -1)
        {
                perror("closedir");
                return 0;
        }
        return 1;
}
</code>


 bene...
Precisa sempre la piattaforma di sviluppo per la quale posti il tuo
codice.
Non è portabile, difatti, e qui dentro si discute di C standard...


il s.o. e winxp , con djgpp, tinycc, mingw.
sapete dirmi perchè, con lo stesso codice, il tinycc produce
degli eseguibili di pochi kb e invece djgpp e mingw  producono
eseguibili di 30kb.
Saluti

ti ringrazio .
Ciao

compilato con tcc
segnala questo errore:
tcc: undefined symbol 'opendir'
tcc: undefined symbol 'readdir'
tcc: undefined symbol 'closedir'
con il djgpp non segnala errori.
Ciao
Newsgroup: it.comp.lang.c
Titolo: Come fare i CGI col C

Vorrei sapere se qualcuno mi puo' spiegare come fare i CGI per internet col
C, tenete conto che lo devo fare su un server windowsNT !!!!!
Mi potet consigliare anche un compilatore per Windows carino????
Grazie mille !!!!!!!!!!!
-- Get Down --

Mi potet consigliare anche un compilatore per Windows carino????
Ci sono delle librerie particolari e alcuni sorgenti disponibili in
rete.
Prova a collegarti con 
http://www.netscape.org/users/dwb/www-auth-noframe.html
Andrea
----------------------------------------
"Meglio cieco che negro" (Stevie Wonder)
----------------------------------------

C, tenete conto che lo devo fare su un server windowsNT !!!!!
Se ti interessa io ho delle librerie che funzionano sotto Visual basic 4.0 *
creare e usare CGI, la cosa è senzaltro + comoda che col C, inoltre se devi
usare file in locale (Memorizzare dati ecc..) è molto più comodo Xche con C
non crea dei problemi quando +persone si collegano mentre VB non ha questi
problemi.
Se ti interessa fammelo sapere via E-Mail.
CIAO
                                                                        By
Avi

Newsgroup: it.comp.lang.c
Titolo: Domanda Teorica

vediamo di incrementare il traffico sul newsgroup:
1 articolo sul C
"il passaggio per valore si ha quando si passa o un valore letterale oppure
il valore contenuto in una determinata variabile.
In C non esiste un vero e proprio passaggio per riferimento, per far ciň si
devono quindi utilizzare i puntatori"
2 articolo
"viene considerato passaggio per riferimento tutti i casi in cui il nome di
una variabile non compare in una chiamata di funzione"
 
Detto cosě cosa ne pensate?

L' articolo 1 e' corretto il passaggio per riferimento e consentito solo in
C++ (&=reference).
I puntatori sono un modo per aggirare il problema, un bel modo !!!
L'articolo 2 mi sembra una ca**ata !!!
Alex
Francesco Fassi ha scritto nel messaggio
<01c04da8$c65e7ee0$7d921997@libero>...


Detto così cosa ne pensate?
Che e' falso, visto che i puntatori vengono usati per il passaggio per
riferimento e che i puntatori SONO variabili.

Newsgroup: it.comp.lang.c
Titolo: Dove trovo esercizi?

Salve a tutti, volevo chiedervi se sapete per caso qualche sito, da dove
posso trovare degli esercizi da svolgere in C. Io sono un neofita quindi gli
esercizi dovrebbero basarsi su cose semplici (tipo while, for, array, var
esterne... cose così insomma).
Grazie a tutti quelli che mi aiuteranno.
Un saluto
--
----------------------------------------------
ICQ NUMBER: 147421455
http://www.posieidon.3000.it



-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c
Titolo: windows.h

Ciao a tutti,
vorrei sapere se windows.h funziona con tutti i tipi di Win compreso Xp o se
piuttosto è cross-platform e usa le interfacce del sistema in cui si trova.
Grazie,
Lorenzo

 piuttosto č cross-platform e usa le interfacce del sistema in cui si trova.
windows.h non usa, windows.h e' un header.
Sicuramente, in futuro, se un compilatore verra' progettato per
sfruttare le API specifiche di WinXP, allora verranno introdotti
in windows.h i prototipi adatti.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c
Titolo: GUI in c

Salve a tutti,
    e' la prima volta che scrivo in questo NG e lo faccio per trovare una
soluzione al seguente problema.
    Vorrei sviluppare una semplicissima GUI in C. Non conosco bene le
librerie grafiche e oggi ho perso molto tempo per inutili ricerche sul web.
    Ho una macchina linux, dotata del compilatore gcc, e anche delle
librerie grafiche (gtk, Qt).
    La mia domanda e' questa: sapete indicarmi un link valido o
documentazione che mi spieghi come risolvere questo problema con i miei
mezzi?
Grazie a tutti e ciao,
asast

 ha scritto nel messaggio
news:aAj76.23443$eB2.3...@news.infostrada.it...


http://glade.pn.org/
Newsgroup: it.comp.lang.c
Titolo: creazione lista con ricorsione

Ciao a tutti!
In questa funzione di esempio del Kelley & Pohl:
-----------
LINK string_to_list(char s[])
{
   LINK head;
   if (s[0] == '/0')
      return NULL;
   else {
      head = malloc(sizeof(ELEMENT));
      head->d = s[0];
      head->next = string_to_list(s + 1);
      return head;
   }
}
-------------
perchč č scritto head->d = s[0]? Funziona bene, ma non ho capito perchč. In
questo modo non dovrebbe immaganizzare sempre lo stesso elemento (s[0])?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
No, perchè alla chiamata successiva viene passato l'indirizzo che segue 
l'attuale valore di s (difatti, come parametro c'è s+1), quindi s[0] 
punta al carattere dopo ....

 punta al carattere dopo ....
Ah, ok, bello! Grazie mille!

Newsgroup: it.comp.lang.c
Titolo: come mai????

...come mai da questa funzione mi escono tutti 0?
io cercavo di generare un array binario.
Grazie
void genera_premio(void)
{
 int x             =0;
 x                 = (rand ()%2);
 premio [pos_nodo] = x;
}

 ha scritto nel messaggio
news:fiqE8.61576$US3.1...@twister1.libero.it...

Hai inizializzato correttamente il generatore di numeri casuali? Devi
mettere la seguente linea di codice in testa al main:
srand( unsigned(time(NULL) );
dopo aver incluso l'header <time.h>.
Inoltre č preferibile usare una cosa del genere:
x = ( (double)rand()/(RAND_MAX+1) ) * 2;
perchč, a seconda delle versioni di rand, i bit meno significativi dei
numeri generati sono "meno casuali".
ciao,
Cecco
---------
Visit: 
www.sourceforge.net/projects/dlab
Home Page: 
http://dlab.sourceforge.net/
Dlab-developer mailing list
https://lists.sourceforge.net/lists/listinfo/dlab-developer

 ha scritto nel messaggio
news:fiqE8.61576$US3.1...@twister1.libero.it...

In realtà la domanda è mal posta... il metodo che hai scritto in realtà non
restituisce niente, infatti riceve un void e restituisce un void, per cui la
prima cosa che mi viene in mente è che l'indice [pos_nodo]sia una qualche
variabile di ambiente che magari viene incrementata da qualche altra
parte... (strano...)
Esso genera un numero casuale binario, e lo mette nella posizione pos_nodo
dell'array premio....
Cerca magari di spiegarti meglio, o magari metti più dettagli  :-))
Cià...
--
    (@ @)
-o00-(_)-00o--->Stefano
...gli uomini con talento trovano delle soluzioni...
      ...i geni invece, scoprono dei problemi...
__________________________________________________________

 Cià...
Guarda che l'ho fatta come le altre (ricavi e costi)...quelle funzionano e
questa no.
Cerco di spiegarmi meglio....invece di un array casuale di 0 e 1 mi genera
un array con tutti 0.

 Cecco
..il bastardo non funziona neanche cosě

 ha scritto nel messaggio
news:2HrE8.62058$5k4.1...@twister2.libero.it...

Dunque, se non ho capito male, l'array premio e pos_nodo sono globali,
altrimenti non vi potresti accedere dalla funzione. Sei sicuro che pos_nodo
sia dentro i limiti dell'array, o che i valori non vengano modificati da
altre parti? Sarebbe comunque meglio passare alla funzione l'array (con un
puntatore) e la sua dimensione, e fare direttamente un ciclo all'interno
della funzione per riempire l'array? In genere l'uso di variabili globali
non è una buona cosa.

Newsgroup: it.comp.lang.c
Titolo: lcc-win32

Salve a tutti, per imparare a programmare in C, e cercando un ambiente di
sviluppo (e non un semplice compilatore) freeware, ho scaricato lcc-win32
nella sua ultima versione (Ottobre 2000).
Qualcuno di voi lo ha provato?
E cosa ne pensa?
Io ho appena iniziato e ho trovato molto buona la documentazione (che tra
l'altro sto usando come unica fonte per imparare la programmazione in C).
Grazie, ciao!

 ha scritto nel messaggio
news:8tu5vr$olg$1...@lacerta.tiscalinet.it...

Newsgroup: it.comp.lang.c
Titolo: Verifica codice fidcale e p. iva


ICQ #34602650

>Cerco l'algoritmo per la verifica di congruenza (non il calcolo) del codice
fiscale
/*
  Il 16° carattere controlla la correttezza dei primi quindici.
  A ciascuno dei 15 caratteri di posto pari e di posto dispari viene
  assegnato un numero come indicato nelle tabelle seguenti:
  Conversione dei sette caratteri di posto pari
    A o 0 = 0       G o 6 = 6        M = 12       S = 18       Y = 24
    B o 1 = 1       H o 7 = 7        N = 13       T = 19       Z = 25
    C o 2 = 2       I o 8 = 8        O = 14       U = 20
    D o 3 = 3       J o 9 = 9        P = 15       V = 21
    E o 4 = 4       K     = 10       Q = 16       W = 22
    F o 5 = 5       L     = 11       R = 17       X = 23
  Conversione degli otto caratteri di posto dispari
    A o 0 = 1       G o 6 = 15       M = 18       S = 12       Y = 24
    B o 1 = 0       H o 7 = 17       N = 20       T = 14       Z = 23
    C o 2 = 5       I o 8 = 19       O = 11       U = 16
    D o 3 = 7       J o 9 = 21       P = 3        V = 10
    E o 4 = 9       K     = 2        Q = 6        W = 22
    F o 5 = 13      L     = 4        R = 8        X = 25
  I numeri così definiti vengono addizionati e la somma si divide per
  il numero 26.
  Il carattere di controllo si ottiene convertendo il resto di tale
  divisione nel carattere corrispondente come indicato nella seguente:
  Conversione del resto nel carattere di controllo
    0 = A      6  = G      12 = M      18 = S      24 = Y
    1 = B      7  = H      13 = N      19 = T      25 = Z
    2 = C      8  = I      14 = O      20 = U
    3 = D      9  = J      15 = P      21 = V
    4 = E      10 = K      16 = Q      22 = W
    5 = F      11 = L      17 = R      23 = X
*/
Questa e' una funzione che ho scritto io:
char CodiceControllo(AnsiString codice)
{
    // analizza il C.F. fin qui calcolato e ritorna il codice di controllo
    // corrispondente al 16° carattere del C.F.
    AnsiString tabDispari = "BAKPLCQDREVOSFTGUHMINJWZYX";
    int pari, dispari, p;
    char val;
    pari = dispari = 0;
    // calcola il valore dei caratteri di posto dispari
    p = 1;
    while (p < 16) {
        val = codice[p];
        // trasforma il numero nella lettera corrispondente
        if (isdigit(val)) val = char(StrToInt(val) + 'A');
        dispari += tabDispari.Pos(val) - 1;
        p += 2;
    }
    // calcola il valore dei caratteri di posto pari
    p = 2;
    while (p < 15) {
        val = codice[p];
        // trasforma il numero nella lettera corrispondente
        if (isdigit(val)) val = char(StrToInt(val) + 'A');
        pari += int(val - 'A');
        p += 2;
    }
    pari += dispari;       // si sommano i due valori
    pari %= 26;            // e si prende il modulo 26
    return char('A' + pari);
}
Ciao.
--
Stefano Tempesta
PC Service Software
http://
Newsgroup: it.comp.lang.c
Titolo: posizione degli elementi di un array

Ho un dubbio: dichiarando un array vi è la certezza che in memoria tutti i
suoi elementi siano adiacenti, oppure no? Lo standard dice qualcosa a
riguardo?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 riguardo?
 
Non so cosa dica lo standard ma gli elementi sono assolutamente adiacenti.
Puoi averne una riprova esaminando la relazione tra vettori e puntatori e
la loro aritmetica.
Ad esempio puoi dichiarare un vettore e far puntare il suo primo elemento
da un puntatore per poi incrementare il puntatore.
Spero di averti chiarito le idee
Ciao,
Nicholas    

riguardo?
Si, sono adiacenti. Questo e' il motivo per cui a volte il compilatore
puo' aggiungere dei byte non utilizzati non solo in mezzo ma anche in
*fondo* ad una struttura per questioni di allineamento. Es:
  typedef struct X_TAG
  {
    int a;
    char b;
  } X;
In questo caso molti compilatori daranno come dimensione della
struttura un valore pari a due interi per evitare di dover aver
a che fare con interi disallineati nel caso tu voglia creare un
array di strutture X (su alcune piattaforme come i PC X86 e' solo
una questione di prestazioni, su altre e' proprio illegale avere
interi non allineati a sizeof(int)).
HTH
Andrea

 tutti i suoi elementi siano adiacenti, oppure no? 
Certamente si. E' normale scorrere gli array con l'aritmetica dei 
puntatori...