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

ciao a tutti!
vorrei sapere......ma esiste il multithreading in c?
incredibile ma io nn ho trovato nulla su 2 ottimi libri!
ma è possibile che non ci sia?
ciao e grazie!

Aceto wrote:

In C standard no!
Se vuoi utilizzare i thread in C devi farlo tramite librerie fatte apposta
per il tuo sistema operativo. Se ad esempio stai usando Linux puoi
utilizzare le pthread che è una libreria di gestione dei thread secondo lo
standard POSIX. ciao


Io so che la programmazione multithreading in c è possibile
in ambiente Unix/Linux perchè appunto supportata dal sistema
operativo e da molte librerie
Ti posto questo link dove forse potrai trovare qualcosa in merito
e sperando ti sia utile
linux.ing.uniroma1.it/ita/proj/introC/imparareC.pdf
Ciao Max
+-----------------------------------------------------------+
| Secondo alcuni autorevoli testi di tecnica Aeronautica,   |
| il calabrone non può volare, a causa della forma e del    |
| peso del proprio corpo in rapporto alla superficie alare. |
| Ma il calabrone non lo sa e perciò continua a volare.     |
|					     Igor Sikorsky  |
+-----------------------------------------------------------+

 wrote

No, non c'e' multithreading in C!
Puoi ovvimamente fare programmazione multithreading in C, ma usando cose
"esterne" al C.
Ad esempio io faccio molto spesso programmazione multithreading sotto
windows.... usando le API di windows (sono funzioni che puoi chiamare dal C,
ad esempio: CreateThreadEx(), etc...).
Tommy
Newsgroup: it.comp.lang.c
Titolo: dubbio v[4] = {1, 2, 3, 4}

Ciao.
Ho letto (e provato) che in C e in C++ si può definire un vettore
ponendo
int v[4] = {1, 2, 3, 4};
Domanda: qual è la ragione infomatica (in termini di aree di memoria
suppongo) per cui non si può fare
int w[4];
w[4] = {1, 2, 3, 4};
Grazie

 segno di = ci deve essere un valore,
left- e right-value


Nella forma che proponi non funziona perche'  viola la semantica del 
linguaggio: w[4]  e'  un elemento di un array (peraltro illegale con la 
dicharazione che metti) mentre a destra avresti qualcosa che dovrebbe 
essere inteso come array di interi.
Una possibilita' piu' consistente potrebbe essere:
  w = {1, 2, 3, 4};
Qui la risposta e'  che non c'e' nessuna impossibilita' informatica 
profonda (memoria o altro) solo che lo standard non la prevede come non 
prevede operazioni "di array" o "costruttori" di array. Tanto e' vero 
che altri linguaggi permettonno tranquillamente cose del genere.
Giorgio

 segno di = ci deve essere un valore, non 4 valori.
Contestualizza quello che ti sta dicendo. Ha scritto un'espressione che
in C non e' valida sintatticamente. Ergo non ha manco una semantica. In
particolare non ha la semantica che tu hai detto essere sbagliata.
Di fatto leggi con "perche' non posso scrivere piu' valori in un array
*dopo* la dichiarazione?
La risposta e' semplice. C non lo consente. Non esiste nessun buon
motivo per cui non lo faccia, se non che, senza nozione di slice,
sarebbe terribilmente poco utile. Piu' tutta una serie di considerazioni
accessorie.
Quindi leggila cosi': ci sono motivazioni tecniche per cui non posso
scrivere
w[0..4] = {1,2,3,4}
?
-- 
-riko

 prevede operazioni "di array" o "costruttori" di array.
Confesso che se proprio bisogna farlo, allora mi piace di piu'
w[0..4] = {1,2,3,4};
oppure
w[0:4] = {1,2,3,4}
e si, quoto. Nessuna impossibilita'.
-- 
-riko

andrew ha scritto:

Non c'entrano memoria, processori, e roba che si tocca!
E' quel poco di tipizzazione che c'è in c. Cerchi di assegnare ad una 
variabile che hai dichiarato contenere un intero, un puntatore ad un intero.
Newsgroup: it.comp.lang.c
Titolo: Come scorrere i campi in un file di testo?

Dato un file di testo in questo formato:
Dato1:Dato2:Dato3:Dato4:Dato5
Dato1:Dato2:Dato3:Dato4:Dato5
Dato1:Dato2:Dato3:Dato4:Dato5
Dato1:Dato2:Dato3:Dato4:Dato5
Dato1:Dato2:Dato3:Dato4:Dato5
come posso
- analizzare il primo campo di ogni riga
- se, nella riga corrente, tale campo ha un valore che mi interessa, leggere
anche gli altri campi (possibilmente ognuno singolarmente)
Quali funzioni esistono per questo problema?
Esiste qualcosa tipo "awk" in C?
Sapete magari anche indicarmi esempi di codice già scritti che riguardino
problemi simili?
tnx
-- 
SigiTM
Togli 'NOSPAMMM' per rispondermi.
Visita il sito dei Metal Detector: 
http://listen.to/metaldetector

 Esiste qualcosa tipo "awk" in C?
strtok(); 
Fa esattamente quello che ti serve
Ciao Max
-- 
+-----------------------------------------------------------+
| Secondo alcuni autorevoli testi di tecnica Aeronautica,   |
| il calabrone non può volare, a causa della forma e del    |
| peso del proprio corpo in rapporto alla superficie alare. |
| Ma il calabrone non lo sa e perciò continua a volare.     |
|					     Igor Sikorsky  |
+-----------------------------------------------------------+

Newsgroup: it.comp.lang.c
Titolo: Programma indentatore

Sto cercando un applicativo (o un editor) che indenti automaticamente
sorgenti C (per MsDos o Windows).
Grazie.



Ti consiglio per Windows il PFE (Program File Editor). Prodotto free e
ottimo. Pochi fronzoli, e quei pochi comodi. Per dos ti consiglio una
versione vecchia del PFE.
E' quasi introvabile. Dopo lunga ricerca lo avevo beccato su
www.shareware.com
. Spero che sia ancora li.
--- (Elimina il papero per le repliche) ---


www.shareware.com
. Spero che sia ancora li.
Oppure puoi andare nella homepage:
http://www.lancs.ac.uk/people/cpaap/pfe
'ao!
Paolo Perini
lau...@digibank.it
http://www.digibank.it/kaiohshin/
"Non ho bisogno delle riviste! La mia vista divina mi permette
di vedere chi fa la doccia e chi si cambia!" - il dio KaiohShin
Newsgroup: it.comp.lang.c
Titolo: Posizionare il cursore sullo schermo

Come faccio per posizionare il cursore sullo schermo ???
Per intenderci... faccio un
printf("Ciao...");
il cursore rimane su quella riga, giusto ?
Se voglio riportarlo a capo, cioč stessa riga, colonna 1 ???
E se volessi cancellare lo schermo ??
E se volessi posizionarlo alla riga n , colonna k ???
Grazie.
Joyce
ICQ 10607234
Per una pera, una pera cazzo...
Per affrontare questa lunga giornata dura !

E se volessi posizionarlo alla riga n , colonna k ???
Se il tuo compilatore supporta la libreria conio.h, puoi usare quella.
Alcune funzioni supportate sono clrscr() per la cancellazione del
video, gotoxy() per il posizionamento del cursore.
Comunque le operazioni di spostamento del cursore sullo schermo, di
cancellazione dello schermo e qualsiasi altra operazione che riguardi
lo schermo nello specifico, non possono essere fatte in modo standard.
Il C, difatti, non contempla l'esistenza di alcuno schermo : esiste
solo il flusso di output che ha una struttura unidimensionale
(sequenziale) e unidirezionale (non si torna indietro) e non
bidimensionale come il video.

Grazie.
Non esiste una funzione portabile ne' per cancellare lo schermo ne' per
spostare il cursore. Comunque se stai utilizzando un compilatore della
Borland o il DJGPP puoi usare la funzione gotoxy per spostare il cursore e
clrscr per pulire lo schermo con l'attuale colore di background.
Ciao, Giuseppe

 Se voglio riportarlo a capo, cioč stessa riga, colonna 1 ???
Puoi provare con
printf("Ciao...\r");
ma non so se sia portabile al 100%.
EMG
Newsgroup: it.comp.lang.c
Titolo: Vista è scritto in C o C++?

ciao come da oggetto
grazie

 grazie
quello che scrivo non lo s� per certo, ma sar� scritto in C, piccole
parti, C++, sicuro, forse anche C#. Me ne assumo la responsabilit�.
:-))
Ciao

 
ragionando direi che:
visto che ci sono ancora le api win32 e si chiamano da c scusso scusso:
il kernel e la gui almeno a basso livello sono scritte in C (ossia
bottoni, label etc)
la parte di aereo e magari la gui avanzata (tipo pannello di controllo,
explorer etc) sono scritte quasi sicuramente in C++.
Ovviamente solo microsoft puï¿œ rispondere di preciso a questa domanda.

 (ossia bottoni, label etc)
quali librerie utilizzano? Il C non ha delle librerie native grafiche.
Ciao

 
dai un occhiata qua:
http://en.wikipedia.org/wiki/Architecture_of_Windows_NT
http://en.wikipedia.org/wiki/Windows_Display_Driver_Model
http://en.wikipedia.org/wiki/Windows_Presentation_Foundation
banalmente non usano nessuna libreria o meglio avranno una serie di
wrapper sempre piï¿œ di alto livello, ad esempio una che astrae
dall'hardware (chiamiamola hal.dll), una che disegna punti linee cerchi
etc (chiamiamola gdi.dll) e una serie di api che chiameremo win32 che
danno accesso a tutte le funzionalitï¿œ sottostanti come processi,
network, gestione memoria, etc... e ovviamente anche quelle per gestire
finestre e bottoni che si baseranno su gdi.
A livello piï¿œ alto hai diciamo da C++ hai le MFC che sono dei wrappers
ad oggetti sulle api win32 e che le estendono ovviamente con widgets piï¿œ
evoluti, un altra libreria carina sempre livello c++ ï¿œ smartwin
Poi hai il mondo managed (.net) che sotto sotto comunque chiama le win32
api e si appoggia a gdi o da vista in poi a WDDM (un equivalente piï¿œ
evoluto che sfrutta in ogni caso l'hardware accellerato della scheda
video e i composite cosi hai trasparenze reali etc..)
sotto .net quindi sia da c# ma anche da 
vb.net
, j# e tutti i vari
linguaggi managed puï¿œ programmare interfacce grafica tramite winforms e
per grafica piï¿œ sofistica (vettoriale animazioni etc) WPF.
Ovviamente sono tutte librerie custom nate dentro microsoft che si
poggiano su wrapper sempre piï¿œ evoluti.

interessante. Hai qualche esempio di codice C o conosci
qualche sito?
Ciao

 
per le api di win32? ovviamente molto materiale ï¿œ sul sito microsoft
dedicato agli sviluppatori, msdn..:)
per una panoramica sulle api:
http://msdn.microsoft.com/en-us/library/aa383723.aspx
mentre per la lista e la firma della varie api
http://msdn.microsoft.com/en-us/library/aa383749(VS.85).aspx
ci sono anche molti libri ovviamente.
comunque devi avere una solida base di C, altrimenti se ti interessano
solo le interfacce grafiche in ambiente windows ï¿œ molto piï¿œ comodo e
immediato usare winforms e wpf da c# o 
vb.net
, per altro su riviste come
ioprogrammo che trovi tutti i mesi in edicola e piano di articoli su .net
io non ho ancora capito cosa ti interessa fare e che background hai....

COBOL per il 60%.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
e gwbasic il restante 40%
Newsgroup: it.comp.lang.c
Titolo: valore minimo array

Ciao a tutti!
Ho un'array e dovrei prendere il suo valore minimo, esiste qualche routine
che mi faccia questo? Ho pensato che potrei usare qsort e una volta ordinato
prendere il primo elemento, ma visto che sono un po' nuovo del C magari
esiste una funzione adatta allo scopo ...
Se si, potreste dirmi quale e come fare?
Grazie!
Pie
--------------------------------
Inviato via 
http://usenet.libero.it

 magari esiste una funzione adatta allo scopo ...
No, non c'è una funzione specifica C, per il semplice fatto che l'algoritmo 
è semplicissimo:
// Suppongo vett = vettore di dimensioni len
min = vett [0]
for i = 1 to len:
        if min > vett [i]:
                min = vett [i]
Ciao.
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html

                min = vett [i]
Ma questo non e' C...
Alla prossima,
Giovanni Cappellini
http://giovacappo.cjb.net
ICQ 166932196

 Se si, potreste dirmi quale e come fare?
Beh, scusa, ma un semplice scorrimento sull'array cercando il valore 
minimo?
for(int i=0; i<size;i++)
    	if(min>vet[i]) min=vet[i];
mi sembra *leggermente* più ottimale di ordinare tutto il vettore :-)
-- 
---
In silenzio anche un idiota sembra intelligente. Ma non c'è problema,
l'idiota vuol sempre dire la sua.

 Pie
/* arr->array len->lunghezza array */
int i, len;
min=arr[0];
for(i=0; i<len; i++) {
    if (arr[i]<min) min=arr[i];
}
ciao,
Costa

Newsgroup: it.comp.lang.c
Titolo: 'cp' (e 'mv') /origine /destinazione

Come si fa a copiare un file in C?
E a muoverlo? 
C'è solo: 
system("cp /orig  /dest");
o
system/"mv /orig/ (dest");
?
Mi serve saperlo perchè ho scritto un programmino C che al tramonto
(calcola l'angolo al polo secondo declinazione e latitudine) deve farmi
cambiare l'apparenza di un' icona sul desktop copiandoci "sotto" un'
immagine "serale" (es. la Luna) con lo stesso nome della precedente
"pomeridiana" che l'icona ha rivestito fino allora (es. Il Sole).
.
Mi piacerebbe far fare anche questo direttamente a C, senza ricorrere
a Linux. Grazie e saluti.
-- 
Qui si usa Linux
http://www.puppylinux.org

 ?
Oppure lo leggi carattere per carattere e lo ricopi a destinazione,
funziona anche sui binari. E' molto poco efficiente ma e' estremamente
semplice.
Altra cosa, puoi leggerlo N caratteri alla volta e copiarli in un
buffer e rsicriverli a destinazione. Un pelo piu' efficiente.
Altrimenti vai giu' con le Syscall, estremamente efficiente ed
elegante.
Newsgroup: it.comp.lang.c
Titolo: Azzerare una stringa

Se dichiaro una stringa:
 char myString[10];
Ci scrivo qualche cosa:
 myString = "pippo";
Come faccio ad azzerarla in un secondo tempo ??
In sostanza voglio che non contenga nessun carattere precedentemente
inserito.
grazie... PAOLO.


ICQ #34602650

 inserito.
_Nessun_ carattere precedentemente inserito?  Direi un bel
memset(myString, 0, sizeof(myString));
O, se ti basta che myString contenga una string nulla,
myString[0] = '\0'; .
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

assegna in quel modo una stringa al vettore di caratteri.
A meno che non sia un'inizializzazione :
   char myString [10] = "andrea" ;
e' legale.

una stringa di lunghezza zero caratteri.
Scusate l'intromissione...vorrei chiedervi una cosa :-) :
Dopo 		myString[0] = '\0';
Il rimanenti caratteri all'interno di myString[] vengono "dimenticati"
dal compilatore,ma esistono ancora nella memoria del
calcolatore,giusto ?
Ciao e grazie :-)
Ciao e grazie :-)
P.S: Per favore rispondetemi in email
mailto:
mg...@polbox.com

calcolatore,giusto ?
Certo.
Se myString inizia alla locazione A ed e' "andrea" si ha :
  A  A+1 A+2 A+3 A+4 A+5  A+6
| a | n | d | r | e | a | \0 |
myString[0] = '\0' ; vuol dire :
   A  A+1 A+2 A+3 A+4 A+5  A+6
| \0 | n | d | r | e | a | \0 |

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

Ciao a tutti,
sto cercando una libreria che mi aiuti in un progetto musicale, ho bisogno 
di oggetti (lo so in c non ci sono gli oggetti, ma l'ho detto tanto per 
capirci) come oscillatori sinusoidali e cose simili.
Ne esistono? Ovviamente opens-source visot che il mio progetto sarà 
open-source.
Grazie in anticipo.
Riccardo 

 open-source.
Prova a postare su it.comp.os.linux.development (forse c'è qualcuno che 
può darti risposta ;)).
Magari c'è qualche libreria free, magari portabile, di certo su l'altro 
NG ci sarà qualcuno che ti può aiutare.
PS: Buona fortuna ;) (Nel senso che sono contento che hai deciso di 
scrivere codice libero!).
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Xoen
Jabber ID : 
xo...@jabber.linux.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Newsgroup: it.comp.lang.c
Titolo: C e Modem e seriali

Come posso comunicare con la porta com1 e dialograre con il modem?
esistono librerie?
e per trasmettere file ?
grazzie
                                            Sergio

 writes:

Fortunato!  La mia Sun non ha una "porta com1"; dove posso acquistarla?
(tradotto: questa domanda non riguarda il linguaggio C, ma un ambiente
specifico; prova in un newsgroup dedicato al tuo hardware e/o sistema
operativo)
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

Newsgroup: it.comp.lang.c
Titolo: Problema con rimozione spazi

Salve,
ho questo semplice sorgente in cui ho scritto una funzione per rimuovere gli 
spazi finali di una stringa, ma il programma va in crash.
Ho un warning in cui mi dice che ritorno una variabile temporanea (temp) ma 
io devo ritornare quella variabile per forza.
#include <stdio.h>
char* f (char* str, const int N) {
    char temp[N];
    int i;
    for (i = 0; i < N; i++)
        temp[i] = '\0';
    i = 0;
    while (!isspace(str[i])) {
        temp[i] = str[i];
        i++;
    };
    printf ("temp = %s\n ", temp);
    return temp;
}
int main() {
    char str = malloc(sizeof(char) * 6);
    str = "CIAO X";
    str = f(str, strlen(str));
    printf("%s \n", str);
    return 0;
} 


E qui sta l'errore "grave". Intuitivamente, "temp" è una variabile
locale della funzione f, ed il suo tempo di vita è limitato alla
durata della funzione: all'uscita di questa temp viene "distrutta".
Hai tre alternative possibili: o modifichi la stringa che ricevi in
input, o passi alla funzioni un buffer dove lavorare (ovvero passi la
tua temp come parametro) oppure da dentro la funzione lavori su della
memoria presa con malloc() e soci.
Detto questo, la funzione non fa comunque quel che dici dovrebbe
(suggerimento: per rimuovere gli spazi finali dovresti iniziare dal
fondo e fermarti quando di spazi non ne trovi più).
Ciao!

 Ciao!
Gli spazi li toglie, infatti temp all'interno della funzione è giusta.
Comunque poi il codice l'ho modificato proprio come hai appena detto tu:
int main() {
    char c[10] = "CIAO   ";
    int i = strlen(c);
    while (isspace(c[--i]))
        c[i] = '\0';
    printf("%s %d\n", c, strlen(c));
    return 0;
}
Ma volevo ugualmente risolvere quel problema della variabile temporanea.
-- 
Noixe

 Noixe
Ciao!

 Ma anche se alloco memoria rimane temporanea no?
Saluti
-- 
Noixe

 quindi è anche una buona regola generale..
Allora ricordavo male, pensavo che ci fosse qualche deallocazione automatica 
almento a livello di funzioni.
-- 
Noixe


anche questo è un errore molto grave: malloc restituisce
un puntatore, pur risolvendo il primo errore il programma
non avrebbe funzionato: char* str = malloc...
-- 
Vincenzo Mercuri
The more C dislikes me, the more I like it.
Newsgroup: it.comp.lang.c
Titolo: dubbio con scanf("%c")

Potete spiegarmi che differenza c'è fra scrivere:
scanf("%c", altri_argomenti);
e scrivere:
scanf("\n%c", altri_argomentii);
in altre parole non capisco a cosa serve il newline iniziale...
ho notato che alcuni banalissimi programmi non mi funzionano se non
c'è quel newline iniziale; in sua assenza la scanf (con la specifica
del carattere) si comporta in modo stranissimo...
attendo lumi
-- 
Vinicio
"In galera l'aria, quando riesce a passare, è ottima"
(Totò)

 ha scritto nel messaggio
news:a3mvmi$m7$1...@newsreader.mailgate.org...

Perché scanf é una funzione che legge dal buffer.
Come ripetutamente detto in questo stesso newsgroup (per cui ti invito a
cercare su deja) si dovrebbe scrivere:
scanf("%c",&carattere);
while(getchar()!='\n');

Che cos'è deja e dove si trova?

Che cos'è deja e dove si trova?
www.deja.com
è un archivio enorme, contiene tutti i messaggi di newsgroup italiani
e stranieri a partire da diversi anni fa (io ho trovato messaggi del
1993 penso ce ne siano anche di più vecchi) fino ad oggi, sempre
aggiornato.

aggiornato.
Oppure se non ti piace deja c'e' sempre il mitico Google (sezione
Gruppi).
Mox :)

Gruppi).
E' la stessa cosa. ;-)
Deja non esiste più da circa un anno, poiché è stato incorporato da
google. Prova ad aprire 
www.deja.com
, oppure 
www.dejanews.com
, oppure
http://groups.google.com
Aprirai la stessa identica pagina. ;-)

Aprirai la stessa identica pagina. ;-)
Sapevo che google si era espanso assorbendo un'altro servizio di news,
ora so anche quale, scusate :)
Mox

Newsgroup: it.comp.lang.c
Titolo: Scrivere CGI in C

Salve!
Sarei interessato a scrivere un'applicazione CGI in C che gestisca l'accesso 
a un database (niente di complesso, come database mi andrebbe bene anche un 
semplice file di testo con un record per ogni riga) magari tramite password.
Qualcuno puō aiutarmi magari consigliandomi dei siti dove poter trovare 
degli esempi giā fatti di simili applicazioni per prendere spunto?
Pių in generale mi andrebbe bene qualsiasi raccolta di applicazioni CGI 
scritte in C.
Grazie mille
-- 
Elminster 

 Grazie mille
ciao ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}
Newsgroup: it.comp.lang.c
Titolo: preincremento e postincremento nel ciclo FOR

Buon ferragosto.
Sono equivalennti le seguenti?
   for (contatore = 1; contatore <= 3; ++contatore)   // (1)
   for (contatore = 1; contatore <= 3; contatore++)   // (2)
Grazie


Concettualmente no.
Ma in pratica si.
Purtroppo c'era un compilatore (Microsoft) che fino a poco piu' di un
decennio fa interpretava le due istruzioni diversamente.
Io ormai non uso piu' quegli operatori nel mio codice.


analogamente dovrebbero essere equivalenti le seguenti:
while (condition)
{
    something;
    ++i;
}
while (condition)
{
    something;
    i++;
}

 Sono equivalennti le seguenti?
Sì. Ogni compilatore che si rispetti non dovrebbe creare problemi al
programmatore interpretando diversamente quelle due istruzioni. Fatta
salva la semantica, che è ovviamente diversa, le due istruzioni hanno
tempo prestazionale uguale. Tanto per completezza, ti preciso che il
discorso cambia se si considera il C++. In C++ è legittimo che ci sia
differenza se si usa l'overload degli operatori. Anche in C++ il discorso
non cambia per i tipi ordinali.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Newsgroup: it.comp.lang.c
Titolo: Distinguere tra file e directory

Ciao a tutti, come da titolo, esiste una funzione in C alla quale posso
passare il nome di un file e mi dice se � effettivamente un file o una
directory?
 

 directory?
http://www.opengroup.org/onlinepubs/009695399/functions/stat.html
http://www.opengroup.org/onlinepubs/000095399/toc.htm
Non fa parte dello standard C, ma di POSIX.
E' supportato anche da Windows, nella sua libc:
http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx
Manlio

Grazie.

Newsgroup: it.comp.lang.c
Titolo: Toeplitz, questo sconosciuto???

Salve, ho un bel problemino, premetto che sono un principiante nel
linguaggio C e nel mondo della programmazione in generale, e ora mi trovo di
fronte a questo esercizio da risolvere:
  1.. algoritmo per il prodotto matrice per vettore, con matrice piena di
Toeplitz e vettore pieno; nei test usare matrici di ordine 10, 20, 50.
qualsiasi consiglio sarà ben accetto, lavoro e non ho potuto seguire il
corso di programmazione e studiare dai soli libri, senza una spiegazione del
professore, almeno per me è dura.
Grazie mille!!!!!!!!!!!!!!!!!!
Ciao


Numerical recipes in C
http://www.library.cornell.edu/nr/bookcpdf.html
Dai un occhio alla libreria del matlab se puoi.

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

Qualcuno conosce di preciso la formula completa del meto di integrazione di
Cavaieri-Simpson
quella che ho io risulta meno precisa del metodo di integrazione dei trapezi
eccola
intanto si inzializza
I=(F(a)+F(b)+4*F(a+h*(2*n-1)))*h/3.0
poi con una for si fa la sommatoria per i che va da 0 a n-1 dove n č il
numero di suddivisioni e F č la funzione (sinx/x)
I=I+h/3.0*(4*F(a+i*h)+2*F(a+(i+1)*h))
grazie!

Si, forse cercando fra i miei appunti c'è, ma non ho capito cosa voui
sapere.

 grazie!
  Che tu sei un po OOOOOTTTTTTTTTTTTTTTT!!!!!!!!!!!!???????????
Ivan Molella
Newsgroup: it.comp.lang.c
Titolo: strano wile

Ciao a tutti,
Ho un while che mi fa impazzire (per completezza vi devo dire che sto
compilando con arm-elf-gcc per una AT91SAM7S). Ecco il codice:
[code]
   pPIOA->PIO_CODR = LED1; // turn LED on
   while (!(status & AT91C_TWI_RXRDY)){
 
      status = AT91C_BASE_TWI->TWI_SR;
 
      if (status){
        pPIOA->PIO_CODR = LED3; // turn LED on
        AT91F_AT24C_WaitMicroSecond(10000);
      }
      else{
        pPIOA->PIO_SODR = LED3; // turn LED off
        AT91F_AT24C_WaitMicroSecond(10000);
      }
 
      if (AT91C_TWI_RXRDY){
        pPIOA->PIO_CODR = LED2; // turn LED on
        AT91F_AT24C_WaitMicroSecond(10000);
      }
      else{
        pPIOA->PIO_SODR = LED2; // turn LED off
        AT91F_AT24C_WaitMicroSecond(10000);
      }
   }
   pPIOA->PIO_SODR = LED1;      // turn LED off <-- qui non ci arrivo mai!
[/code]
Se i led 2 e 3 stanno accesi fissi, significa che
!(status & AT91C_TWI_RXRDY) == false
Oppure sono fuso? Però il led 1 si accende, ma non si spegne, e ciò
significa che non esco dal while (infatti si inchioda tutto).
Dove sbaglio (o sbaglia il compilatore???)
grazie a tutti
-- 
g4b0, linux user n. 369000
http://gabo.homelinux.com

g4b0 ha scritto:

Ciao,
Non dovrebbe essere:
     while (!(status && AT91C_TWI_RXRDY)){
?
Giuseppe

   
brix
bye

Newsgroup: it.comp.lang.c
Titolo: Posta elettronica

Salve a tutti! ho un problema: devo realizzare un programma in C/C++ che mi 
consenta di leggere la posta elettronica da un server(es. Libero). Questo 
programma poi verrà interfacciato graficamente in Windows con Visual Basic 
o simili e in Linux con vari linguaggi che sto imparando.
Che librerie devo usare??Dove posso trovare informazioni???
Grazie a tutti!
-- 
--
Acquistapace Yuri

 Che librerie devo usare??Dove posso trovare informazioni???
Avrai un client (la gui che va' a leggere i dati) e un server (che 
materialmente va a leggere la posta).
Domandati dove vuoi far girare il server e spostati su 
it.comp.programmare.win32 o it.comp.os.linux.developmente a seconda di 
quale sara' la risposta :)
Ne il C ne il C++ gestiscono nativamente il protocollo di comunicazione di 
rete, ma devi appoggiarti ad API esterne (fornite dal sistema sottostante).
Un modo potrebbe essere l'utilizzo dei socket/winsocket (la versione Windows 
delle API originali BSD). Per Linux e' la soluzione piu' utilizzata, per 
Windows penso non sia l'unica, chiedi su it.comp.programmare.win32 per 
avere un consiglio migliore.
Esistono anche altre librerie (alcune multipiattaforma)... puoi provare a 
rivolgerti a queste, ma devi prima decidere l'ambiente di sviluppo del 
server e il linguaggio.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."
Newsgroup: it.comp.lang.c
Titolo: Richiesta chiarimento relativo a fdopen

Ciao!
Da qualche giorno ho iniziato a sviluppare un codice per pilotare degli strumenti di misura via lan.
 
Per iniziare ho trovato un esempio presente su di un manuale Agilent e piu' o meno mi ci ritrovo. Si tratta di utilizzare socket e comuniare con loro.
 
Una funzione di questo codice pero' mi ha stupito, la riporto per semplicita':
char * recv_line(SOCKET sock, char * result, int maxLength)
{    
    FILE * instFile;
    instFile = fdopen(sock, "r+");
    if (instFile == NULL)
    {
        fprintf(stderr, "Unable to create FILE * structure : %s\n",
        strerror(errno));
        exit(2);
    }
    return fgets(result, maxLength, instFile);
}
 
La domanda e' relativa all'apertura fdopen a cui non corrisponde una chiusura.
 
Ho provato strade alternative tipo caricare l'uscita dell'fgets in una variavile globale, chiudere instFile ed uscire ma e' come se si chiudesse anche il relativo socket e non riesco piu' a comunicare con lo strumento. Pare quindi che debba lasciare aperto instFile (sock e' un identificativo di socket ed il tipo SOCKET e' essenzialmente in int definito tramite un typedef).
 
Potreste aiutarmi a chiarire le idee
 
Grazie

>La domanda e' relativa all'apertura fdopen a cui non corrisponde una chiusura.
 
Non corrisponde una chiusura perché fdopen non apre nulla ma associa
uno stream a un file descriptor ->esistente<-.
-- 
andrea - ri mi cci, name


Sì, lo stream deve essere chiuso con
 
fclose( instFile );
 
ma quella funzione, così com'è scritta, non va bene perché all'uscita ti 
perdi la variabile instFile e quindi la possibilità di chiudere lo 
stream. Un modo potrebbe essere di aprire lo stream esternamente e poi 
passarne l'handle alla funzione di lettura.
 
EMG
 
--
http://www.emagsoftware.it
 
http://www.emagsoftware.it/emgmusic
 
http://www.emagsoftware.it/spectrum
 
http://www.emagsoftware.it/tbosg
 

 uno stream a un file descriptor ->esistente<-.
 
Ops! Hai ragione, ho sbagliato.


 
Grazie a tutti.
 
Faccio un piccolo riassunto come mio promemoria 
1 - il socket viene aperto all'inizio e come identificatore ho essenzialmente un intero;
2 - Nella funzione che ho riportato si associa all'identificatore intero del socket una variabile di tipo FILE attraverso cui posso usare la fgets (ma non sto _sostanzialmente_ aprendo niente);
3 - instFile allora dovrebbe essere considerata una variabile locale alla funzione che quando termina di girare (la funzione) sparisce;
4 - Quando ho finito di usare il socket lo chiudo in modo opportuno (close, shutdown, etc.) 
 
Spero di aver capito
Newsgroup: it.comp.lang.c
Titolo: printf e tipi enum

Ho definito il seguente tipo enum:
typedef enum {lunedi, martedi, mercoledi, giovedi, venerdi, sabato, domenica
     } day;
e dichiarato la variabile
day giorno;
La funzione
printf("\nIl giorno della settimana corrispondente è %d",giorno);
mi restituisce ad esempio il valore:
Il giorno della settimana corrispondente è 4
Come faccio a visualizzare qualcosa del tipo:
Il giorno della settimana corrispondente è giovedi   ?
Grazie
··· Vito Dantona  ···
http://www.vitus.cjb.net
vi...@milanmania.com
ICQ: 18231643
«If I can see further than others,
    it is by standing on the shoulders of giants» (I. Newton)

Il giorno della settimana corrispondente è giovedi   ?
char* giorno_str[7] = { "lunedi'", "martedi'", "mercoledi'",
                        "giovedi'", "venerdi'", "sabato", 
                        "domenica" } ; 
printf( "\nIl giorno della settimana corrispondente è %s",
        giorno_str[giorno] ) ;
--
Andrea Laforgia (ICQ 87230455)

Semplicemente perché una enumerazione è un insieme di identificatori di
costanti intere alle quali il compilatore assegna automaticamente un valore
interno (generalmente partendo da 0, a meno che non si fornisca un diverso
intervallo).
Prova con un array di char*.




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

Come posso ricavare l'handle della mia applicazione (Consolle MsDos)?
grazias...
               --Please also reply via E-Mail--
                      4169522043485253

 wrote in message
37d21d98...@news.interbusiness.it...


Devo ancora provarlo, comunque ti ringrazio in anticipo per la
disponibilitŕ! Ciao e Grazie 1000!!!! ;-)

Newsgroup: it.comp.lang.c
Titolo: long troppo poco long... : )

Ciao a tutti e grazie in anticipo per l'attenzione.
Sto scrivendo un piccolo programmino per il calcolo dei numeri primi, e ho
il seguente problema: tutto il mio prog si basa sulla funzione
long scannumber(long num)
{
 //verifica se il numero datogli come parametro e' primo.
 //In tal caso ritorna 0, altrimenti ritorna il divisore.
  long i;
  for(i=2;i<num;i++)
   if( (num % i) == 0 ) return i;
  return 0;
}
che come si puo notare dalla dichiarazione ritorna un long, e accetta un
long come parametro. Pero  i long hanno un range "limitato" per l'uso che ne
devo fare io. Infatti arrivano solo a 4 miliardi di numeri....(unsigned).
Volevo quindi usare un altro tipo di dato, come i double, che cmq sono gia
di gran lunga migliori per i miei scopi. Il problema è che l'operatore %
(resto di divisione intera) funziona solo con gli interi (come dice il
nome), e quindi non sui double e simili.
Come posso fare? Esiste un modo di "allungare" i long (magari con un
bitplane?) o magari esiste una funzione standard (ma anche non) che mi dia
il resto di una divisione intera usando i double?
Grazie in anticipo!
Tdx
PS: gia che ci sono: secondo voi come potrei ottimizzare la funzione scritta
sopra? Dovrei togliere l'autoincremento possibilmente, ma non vedo
come...vabbe : ) lasciamo stare :)

come...vabbe : ) lasciamo stare :)
Beh... diciamo che a prima vista potresti fare i loop solo sui dispari
(dopo aver verificato che il numero non sia divisible per 2).
Inoltre e' sufficiente fermarsi nella ricerca alla radice di num;
il motivo e' banale... se num e' divisibile per p e ha come risultato
k allora num e' anche divisibile per k e non k e p possono essere
entrambi numeri piu' grandi della radice in quando il prodotto e' num.
Se lo scopo e' cercare tutti i numeri primi allora esistono algoritmi
decisamente piu' efficienti (vedi il famoso "crivello di eratostene")
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Grazie in anticipo!


k allora num e' anche divisibile per k e non k e p possono essere
                                         ^^^^^^^^^^^
sostituire con "k e p non" :DDDD
/me comincia a perdere colpi ;)


come...vabbe : ) lasciamo stare :)
Eliminare la funzione. :-) Se vuoi semplicemente trovare tutti i numeri
primi rappresentabili in 64bit, e' meglio non usare funzioni, ma cicli for.
Se invece ti serve qulla funzione, potresti crearti un array di N elementi,
contenente i primi N numeri primi; potresti prima tentare la divisione % con
quegli N numeri, e poi implementare il ciclo for solo per i numeri > N.
Saluti,
    Mardy

 il resto di una divisione intera usando i double?
Per calcolare il resto di una divisione fra double puoi usare la funzione standard
double fmod(double x, double y);
Ma non è consigliabile fare i calcoli che intendi con un double.
Manlio Perillo


BCD?
-------------------
Aranar
Newsgroup: it.comp.lang.c
Titolo: settimana dell'anno

Ciao a tutto il newsgroup.Sto cercando un modo per ottenere il numero
della settimana (ad es. è la 37esima settimana dell'anno).
ho cercato attraverso la funzione localtime che uso di solito ma nella
struttura non ha il formato che mi serve.
qualcuno mi può dare qualche info?
Grazie a tutti
Ciao!


nella struct tm che ritorna localtime c'è tm_yday /* day in the year */
lo dividi per sette, prendi il valore intero e hai la settimana
dell'anno.. questo comunque non tiene conto delle settimane da lunedì a
domenica.. ma solo dei gruppi di sette giorni.. se l'anno iniziasse di
venerdì la prima settimana secondo noi sarebbe di tre giorni..
la cosa penso si possa risolvere con tm_wday (day of the week)
magari prendendo ((tm_yday - tm_wday) / 7) e approssimando per eccesso
all'intero successivo se il risultato non è intero..
non ho provato ma a occhio dovrebbe funzionare..
ciao ciao
-- 
[Filippo...........................]
[Linux User #342745................]
        ==[...penguin powered...]==

Newsgroup: it.comp.lang.c
Titolo: Cosa non va??

Non capisco cosa c'e' di sbagliato..
#include <stdio.h>
#include <stdlib.h>
#define DIM 10
void swap(int *a, int *b)
{
 int appo;
 appo = *b;
 *b = *a;
 *a = appo;
}
int main() {
 int flg = 1;
 int i;
 int vett1[DIM];
 vett1[0] = 8;
 vett1[1] = 4;
 vett1[2] = 3;
 vett1[3] = 45;
 vett1[4] = 5;
 vett1[5] = 9;
 vett1[6] = 23;
 vett1[7] = 54;
 vett1[8] = 19;
 vett1[9] = 6;
 while (flg) {
  flg = 0;
  for (i = 1; i <= DIM; i++)
  {
   if (vett1[i] < vett1[i-1]) {
    swap(&vett1[i], &vett1[i-1]);
    flg = 1;
   }
  }
 }
 for (i = 0; i < DIM; i++)
  printf("\n vett1[%d]: %d", i, vett1[i]);
Grazie

 Non capisco cosa c'e' di sbagliato..
Nulla a quanto sembra. 
Compilato con gcc:
vett1[0]: 3
vett1[1]: 4
vett1[2]: 5
vett1[3]: 6
vett1[4]: 8
vett1[5]: 9
vett1[6]: 19
vett1[7]: 23
vett1[8]: 45
vett1[9]: 54
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

   for (i = 1; i <= DIM; i++)
vett[10] non esiste.
for (i = 1; i < DIM; i++)
--
-=[]=- 
ian...@libero.it
 -=[]=-

 vett1[0]: 3
con MS VC++ 6.0
vett1[0]: 0 <-- va di culo che vett[10] trovi uno 0
                ma potrebbe esserci qualsiasi cosa.
vett1[1]: 3
vett1[2]: 4
vett1[3]: 5
vett1[4]: 6
vett1[5]: 8
vett1[6]: 9
vett1[7]: 19
vett1[8]: 23
vett1[9]: 45


                 ma potrebbe esserci qualsiasi cosa.
Non capisco che c'entri vett1[0] con vett1[10].
BTW, effettivamente non avevo notato che il ciclo va
fino a DIM, mentre si deve fermare prima.


 Non capisco che c'entri vett1[0] con vett1[10].
Come cosa c'entra?
vett[DIM] (cioe' vett[10]) assume valore 0 (per puro caso)
Dopo il sort finisce in vett[0].
O sbaglio?


O sbaglio?
E io non mi spiego perche' finisca in vett1[0]...
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 E io non mi spiego perche' finisca in vett1[0]...
Ohibo`, finisce li` perche` viene sortato!
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non capisco tutta questa eccitazione per il Multitasking: 
io sono anni che leggo in bagno.

Ohibo`, finisce li` perche` viene sortato!
ROTFL... perdo colpi.... 

Newsgroup: it.comp.lang.c
Titolo: eseguire

ciao a tutti,mi sto interessando alla programmazione in c (ho appena
incominciato a studiare)volevo sapere quando finisco un comando in
notepad,poi per farlo eseguire lo devo salvare con l'estensione exe?o non
centra niente??devo fare delle altre operazioni per farlo eseguire?
scusatemi per la domanda forse stupida per voi,ma sofisticata per me:)
ringrazio per la pasienza

"del" <cs@fu.c> ha scritto nel messaggio
news:%iYcb.1483$uv4....@news.edisontel.com...

Ciao,
ti consiglio di scaricarti un compilatore (gratuito): DEV C/C++ a questo
sito 
http://www.bloodshed.net/dev/devcpp.html
Ti permetterà di scrivere il tuo codice (quindi abbandona notepad) e di
compilarlo.
Se la compilazione andrà a buon fine (ossia non saranno riscontrati errori
di sintassi  sullo scritto) ti creerà un file bytecode (ossia il .exe) nella
stessa cartella dove hai salvato il sorgente.
Quando crei un nuovo file ricorda oltre chei dare un percorso al file ,
anche di selezionare l'estensione .c .
Es. primoprogramma.c
      una volta compilato ti genera : "primoprogramma.exe"
Tasti utili del DEV:
 ctrl+N  (apri un nuovo file sorgente)
ctrl+F9  (compila il codice)
ctrl+F10 (lancia l'eseguibile)
Spero di averti aiutato. Non ti far sentire prima di aver comprato un buon
manuale o i + esperti dell' NG ti uccidono :-PP
-Simone-

 ringrazio per la pasienza
Sono stato paziente :)
Ciao Max
-- 
-----------------------------------------------------------
 Secondo alcuni autorevoli testi di tecnica Aeronautica,
 il calabrone non può volare, a causa della forma e del
 peso del proprio corpo in rapporto alla superficie alare. 
 Ma il calabrone non lo sa e perciò continua a volare.
					     Igor Sikorsky
-----------------------------------------------------------

Newsgroup: it.comp.lang.c
Titolo: dov'e' il sito di Bruce Eckel?e chi e'?

dov'e' il sito di Bruce Eckel?e chi e'?
l'ho letto sopra e vorrei sapere chi e' e dove posso visitare il suo sito?
ciao


www.bruceeckel.com
-- 
Non c'č piů forza nella normalitŕ, c'č solo monotonia.

e chi e'?
Un benefattore.

 e chi e'?
Un "guru" dell'informatica.
EMG

 Un benefattore.
Proprio vero!
EMG

 ha scritto nel messaggio
news:3987EE65...@iol.it...



-- 
================================================================================
TO REPLY
CHANGE 
user...@technologist.com
 IN ingv at 
technologist.com
"...Unix, MS-DOS, and Windows NT (also known as the 
    Good, the Bad, and the Ugly)."                     (by Matt Welsh)

Newsgroup: it.comp.lang.c
Titolo: DJGPP e Allegro

Ho installato tutto come da docs e faqs varie.
Ho settato anche "alleg" da Rhide, come scritto sulla documentazione.
Il problema č che quando vado a runnare il programma appena compilato,
mi dice che -lalleg non sa cosa ***** sia. Infatti se faccio ld - alleg,
(ld č evidentemente il programma chiamato in causa), dą lo stesso errore.
Possibile che si siano sbagliati a scrivere sulle Faq?
Come posso fare? Tnx.
--
Sparviere (aka Novalis)
mail: 
spar...@ngi.it
web: 
http://sparviere.tsx.org
web2: 
http://utenti.tripod.it/framestorm

 (ld ? evidentemente il programma chiamato in causa), d? lo stesso errore.


Naturalmente
Newsgroup: it.comp.lang.c
Titolo: estrarre singoli bit

Avrei bisogno di leggere una variabile bit a bit.
Come si può fare?

 Come si può fare?
puoi testare per esempio il bit più a destra della variabile x con x & 1 
e ricavare così se è 0 o 1, poi shiftare a destra x di 1: x >>= 1 e 
procedere col bit successivo, ecc...
ciao.

Newsgroup: it.comp.lang.c
Titolo: problema con quicksort

Salve a tutti,
qualcuno saprebbe dirmi per il codice di ordinamento che riporto qui
sotto non funziona correttamente?
void quicksort(int a[], int left, int right)
{
        int i,j,pivot;
        if (left+2<=right)
        {
                pivot=median3(a,left,right);
                i=left;j=right-1;
                for(;;)
                {
                        while(a[++i]<pivot);
                        while(a[--j]>pivot);
                        if (i<j)
                                swap(&a[i],&a[j]);
                        else
                                break;
                }
                swap(&a[i],&a[right-1]); //restore pivot
                quicksort(a,left,i-1);
                quicksort(a,i+1,right);
        }
}
int median3(int a[], int left, int right) {
    int center = (left+right)/2;
    if (a[left] > a[center])
        swap(&a[left], &a[center]);
    if (a[left] > a[right])
        swap(&a[left], &a[right]);
    if (a[center] > a[right])
        swap(&a[center], &a[right]);
    swap(&a[center], &a[right-1]);
    return a[right-1];
}
Grazie in anticipo a chi mi aiuterą

 Grazie in anticipo a chi mi aiuterà
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Questa non mi pare molto iterativa.... forse vuoi dire che hai messo inline
il lavoro di partition()???????
Tommy

Newsgroup: it.comp.lang.c
Titolo: Laureato: ringraziamenti al NG

Ieri finalemente mi sono laureato con la tesi: algoritmi euristici per il
problema MAXSAT.
Ringrazio tutto il NG per l'aiuto fattivo durante la scrittura del codice.
Vorrei fare alcuni ringraziamente particolari, ma so che non è corretto in
un NG.
Credo che le persone in questione sappiano che mi riferisco a loro.
GRAZIE DAVVERO A TUTTI !!!!!
P.S.: Ho avuto 108

Newsgroup: it.comp.lang.c
Titolo: x FtM

Ma perchè i tuoi messaggi interrompono i thread nel mio newsreader?

 newsreader?
è quella nuova zozzeria di gugl groups, che ha devastato
una quantità innumerevole di NG.
-- 
"La teoria è sapere come funzionano le cose e
non sapere come farle funzionare; la pratica è
sapere come far funzionare la cose senza sapere come
funzionano; il nostro scopo è unire la pratica
alla teoria per riuscire a non far funzionare
le cose senza capire come abbiamo fatto"

 
Già, utilizzo google groups da un po' di tempo per questione di comodità, ma a dire il vero non ho idea di come/cosa posti o perché..
Spero solo riescano a mettere tutto a posto come era una volta :(
Sorry!
Newsgroup: it.comp.lang.c
Titolo: system

Perchč se apro in Dos e scrivo al prompt
copy c:\1\pippo.txt c:\1\2
il file pippo.txt viene copiato dalla directory 1 alla 2
mentre se:
#include <stdio.h>
#include <stdlib.h>
int main()
{system("copy c:\1\pippo.txt  c:\1\2");
return o;}
non me lo copia?
Insomma system sembra non  funziona perchč?

 return 0;}
Riz

Insomma system sembra non  funziona perchè?
system funziona eccome.
Le funzioni di output in C adottano per convenzione la coppia
back-slash + carattere che segue come una sequenza di escape.
Per specificare la slash e basta, bisogna usare \\ al posto del
semplice \.  Ti consiglio un manuale del linguaggio.

 Ti consiglio un manuale del linguaggio.
Quale? In internet ci sono tante guide e manuali.
Ma uno come me, che si avvicina ora al C, può restare frastornato.
Quale titolo potrebbe fare al caso mio, ad uno con i miei limiti,
come si è visto?
ciao
Angelo

come si è visto?
La bibbia del linguaggio C e' "Linguaggio C", II edizione di Brian W.
Kernighan & Dennis M. Ritchie, pero' a mio avviso e' un po' ostico per
chi comincia.  E' un ottimo manuale di riferimento che chiunque
conosca il C seriamente possiede sulla sua scrivania.  Ti consiglio di
evitare i testi di Herbert Schildt (che purtroppo sono tra i pochi
testi sull'argomento presenti nelle librerie italiane).
Harbison & Steel hanno scritto un manuale sul C che non so se sia
reperibile anche in italiano e Kelley & Pohl ne hanno scritto un altro
che e' molto ben voluto dai principianti.
Purtroppo di questi ultimi non ricordo i titoli.
Newsgroup: it.comp.lang.c
Titolo: Errore di calcolo con variabili double!

Ciao a tutti!
sono nuovo del NG e vi messaggio per un problemino.
Allora ho un ciclo dentro al quale devo eseguire un calcolo su 2 variabili
double. Le variabili sono globali e il risultato del calcolo viene messo in
una delle 2 variabili perchè poi viene usato, come dato, alla successiva
iterazione per calcolare un successivo risultato.
Le variabili sono inizializate all'inizio del ciclo.
Ad un certo punto il calcolo viene sballato (non riesce a fare 1,234 - 1,0).
Mi ricordo qualcosa riguardo ad un metodo secondo il quale bisogna
moltiplicare e dividere per 9, ma o non funziona nel mio caso, oppure (come
è + probabile) non me lo ricordo bene.
Qualcuno può aiutarmi a ricordare il trucchetto (e come mai si moltiplica e
divide proprio per 9) e aiutarmi con il problemino del programma?
Ringrazio tutti anticipatamente per la cortesia ed il tempo concessomi.
Al
P.S. Tutti coloro che pensano di potermi aiutare mi farebbero una immensa
cortesia a mandarmi la risposta alla mia casella mail.
nealg...@tiscali.it

è + probabile) non me lo ricordo bene.
??? la prova del nove ???
Non credo ti possa essere di qualche aiuto in questo contesto.
Andrea


-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."
Newsgroup: it.comp.lang.c
Titolo: calloc e free

Come faccio a liberare la memoria allcata con calloc?
Se uso free(PUNTATORE AL PRIMO ELEMENTO DELL'ARRAY)
libero la memoria di tutto l'array o della sola aria puntata dal puntatore?
Grazie.

 libero la memoria di tutto l'array o della sola aria puntata dal puntatore?
Il puntatore, in quanto variabile, non viene liberato.
Il puntatore e' una variabile come tutte le altre e contiene al suo
interno un valore, che e' poi un indirizzo di memoria.
La sola memoria che viene "deallocata" e' quella relativa all'indirizzo
puntato.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

in un for liberi tutti i vari elementi, suppongo che stai usando
un'array di puntatori

puntato.
Scusa, una richiesta di precisazione perche' l'ultima frase rispetto
alla domanda posta mi pare ambigua.
Deallochi l'area di memoria relativa all'indirizzo puntato: tutta
l'area di memoria riservata con la chiamata alla calloc pero', non
solo il primo elemento.
Intendevi questo, no?
-- 
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."

 solo il primo elemento.
Non  esiste   la  nozione  di   "primo  elemento"  a   quel  livello. E`
un'invenzione del programmatore: io posso  allocare N bytes per metterci
un'array di interi oppure per  metterci una struttura di dati arbitrari,
ecc. Non esiste una  separazioni tra i vari elementi,  l'area di memoria
e` continua.
Una possibile implementazione di calloc potrebbe essere questa:
void *calloc(size_t nmemb, size_t size) {
        void *p;
        p = malloc(nmemb * size);
        memset(p, 0, nmemb * size);
        return p;
}
Come  vedi l'informazione  sul fatto  che l'area  potrebbe contenere  un
array va perduta. Volendo andare piu` in profondita`:
void *malloc(size_t size) {
        void *p;
        struct internal_{
                size_t size;
                usefull_t informations;
        } *tag;
        size = align(size);
        tag = p = gimme_some_memory_in_os-specific_way(size);
        tag->size = size;
        tag->informations = foobar();
        return p + sizeof(struct internal_);
}
L'allocazione  della memoria  avviene in  un'unico passaggio,  non viene
mantenuta l'informazione su "cosa" quell'area dovra` contenere.
HTH
Kronos
-- 
Home: 
http://kronoz.cjb.net
Io mi ricordo sempre il compleanno della mia ragazza:
cade il giorno dopo di quando lei me lo ricorda

Intendevi questo, no?
Si, vero, scusate l'ambiguità.


Merita un grazie. E pazienza se qualcuno protesterà per aver scaricato un
messaggio
in più contenente un solo grazie.