mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Vi pongo una domanda

Ciao a tutti vorrei imparare, non proprio da zero, questo linguaggio di
programmazione.
(Oppure il C++, ancora non so!)
Che cosa mi consigliate?
Ho molta buona volonta'.
Mi consigliate un buon libro?
E meglio che lascio perdere...
Accetto tutti i consigli.
Ciao e grazie.


Io credo che l'importante sia fare. C o C++ ? Sono due cose diverse.
Personalmente adoro il C++ e credo sia meglio impararlo prima del C.
Se non altro potrai imparare la programmazione ad oggetti.
Il 'C' č bello, esiste da non so quanti anni. E' elegante, versatile,
potente. Puoi usarlo da cani oppure creare dei capolavori.
Per me č stato il primo linguaggio vero.
I libri. Mah. non ne ho mai usati. Studiavo il codice altrui e mi appoggiavo
all'help in linea dei vari IDE che mi sono trovato ad utilizzare.
Esiste comunque la bibbia che si chiama Kernighan & Ritchie ( spero si
scriva cosě)
Byes
FusionFai

 scriva cosě)
e' in italiano?
ciao e grazie mille

 ciao e grazie mille
Prego e ciao,
Cecco

be io invece ti dico:
se devi imparare per esigenza lavorative, allora sarebbe meglio imparare il
C++ poiche' e' ad oggetti, e oggigiorno e' la tecnologia utilizzata
ma se devi imparare per te stesso, e' molto meglio iniziare prima dal C, per
capire meglio i concetti fondamentali
Prima di studiare il C++ sarebbe meglio una buona infarinatura sull' OOP in
generale
La bibbia del C e' il K&R ma non e' da principianti, io consiglio "Sam
teaches yourself C in 24 days" che la trovi in rete
Ciao


prova anche "trickyc" la trovi qui: 
http://www.aspide.it/trickyc
ciao  gabo

generale
Non necessariamente.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it

prova anche "trickyc" la trovi qui: 
http://www.aspide.it/trickyc
io direi di non farlo, dato che contiene vari errori a quanto mi hanno
detto.
--
Rhymes - 
rhy...@myself.com
http://www.foxhound-games.it
"Sapete cosa fa un InputStream quando
gli si racconta una barzelletta? Reader..."

 C++ poiche' e' ad oggetti, e oggigiorno e' la tecnologia utilizzata
Su questo avrei una piccola obiezione: Java rappresenta la portabilità ( ma
a "maicrosoft" della portabilità non glie ne frega un tubo)
Visual Basic e HTML sono le tendenze per le applicazioni distribuite ( la
maggior parte dei nostri clienti vuole cose di questo tipo e rigorosamente
 è ovvio) "maicrosoft"  ... )

 ha scritto nel messaggio
news:Pkqw7.54325$0Y2.5...@news.infostrada.it...
Ma sei Andrea?
Quello di ISCR?
Fly

 pericolosi.
atteggiamenti pericolosi?
Io cmq sono per quella filosofia che dice che per imparare a correre e'
necessario prima sapere camminare bene :)

 necessario prima sapere camminare bene :)
In C++ si puo' camminare benissimo, non e' detto che
bisogni correre.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Quello di ISCR?
si!
Newsgroup: it.comp.lang.c
Titolo: Help ! File exe che lancia altri file .exe

 bottone "OK".
MsgBox ad esempio, ma qui dipende da cosa stai usando per lo
sviluppo.
HTH,
==========================
Stefano Frosio
http://www.esse-effe.com
==========================

 sviluppo.
Questo invece non si puo` fare in modo standard.

 ho la necessita' di scrivere una piccola applicazioncina x
Windows
Windows, questo sconosciuto.


 Windows, questo sconosciuto.
Perche`, quello che ho detto io non funziona forse anche sotto Windows?

Newsgroup: it.comp.lang.c
Titolo: Lettura file gif bmp pcx tif ecc.

Qualcuno puo' aiutarmi a  visualizzre un immagine in un formato
qualsiasi sotto dos in C .....
Potrebbe bastarmi una libreria o se avete dei sorgenti in C
Ho un urgente bisogno mi serve per un lavoro che dovrei fare al piu'
presto grazie .......
Attendo risposte .....

 Mailgate is maintained online by Dario Centofanti
PROVA A CONTATTARE IL SITO:
http://wotsit.simsware.com/
FORSE C'E' QUALCOSA CHE PUO' AIUTARTI (HAI VISTO MAI...)
--
Automatic posted from 
stinch17.csmtbo.mi.cnr.it
 [155.253.8.17]
via Mailgate Server - 
http://www.mailgate.org

presto grazie .......
Sorgentino per leggere files .PCX da 256 colori, attendo che per 16
colori cambia la memorizzazione!
Newsgroup: it.comp.lang.c
Titolo: Cronometrare funzione

Salve sapete come si puň cronometrare il tempo
trascorso in una funzione?
Avevo provato con time(), ma restituisce i
secondi e invece mi servirebbe qualcosa di piů
preciso. Uso gcc 2.95.
Grazie.



Penso sia una cosa legata al SO.
Se ti trovi in ambiente WIN potresti usare l'API GetTickCount() che ti 
restituisce i millisecondi trascorsi dall'avvio di Win.
Quindi:
T = GetTickCount();
funzione();
T = GetTickCount() - T;
ed ottieni i millisecondi impegnati dalla funzione. Ovviamente non sarà 
attendibilissimo come risultato perchè win non è un sistema operativo 
real-time, ma qui si diventa OT :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 
Mi sono dimenticato di dire che sono su Linux... :-/
Grazie lo stesso.

 Grazie lo stesso.
it.comp.os.linux.development e gettimeofday()
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Grazie lo stesso.
Di GNUiente :D


 man clock
clock e' la soluzione dello standard per avere il tempo di processore. 
Per ottenere i tempi in secondi il valore della differenza di due 
chiamate successive di clock va diviso (dopo averne fatto un cast a 
float)per la macro (intera) CLOCKS_PER_SEC (tutto reso disponibile dal 
file time.h).
Giorgio

Newsgroup: it.comp.lang.c
Titolo: problema concettuale con l'allocazione di memoria

Guardate il seguente codice (banale):
int main(int argc, char** argv) {
        char* sParametro = (char*)malloc(1);
        sprintf(sParametro ,"%s", argv[1]);
        printf("%s\n",sParametro);
        return 0;
}
Quello che fa dovrebbe essere chiaro, no? Prende quanto passato come
parametro da riga di comando e lo copia su una stringa.
Il suddetto codice funziona...  MA:
come vedete alloco un solo byte per sParametro, quindi mi aspetto che, se
argv[1] è superiore al byte (ex. argv[1] = "aaaaaaaaaaaaaaaaaaaa"), mi
dovrebbe dare segmentation fault o errori da "invasione" proibita di
memoria.
Ciò non succede. Eseguendo il programma e passandogli come parametro una
stringa di lunghezza notevole (saranno almeno 150 caratteri) fila tutto
liscio come l'olio.
Ovvio, non che questo mi dispiaccia, ma vorrei capire il perchè di questo
atteggiamento. Seguono ipotesi personali (da ignorante allo sbaraglio):
1) il compilatore assegna più memoria di quanta richiesta (ma dovrebbe
essere molta di più!)
2) ho beccato un caso fortuito in cui in tutte le esecuzioni fatte non sono
mai andato a invadere aree di memoria altrui
3) la sprintf() opera "subdolamente" una riallocazione per far entrare
argv[1] in sParametro
Mi illuminate?
Grazie  
        Fabbro

 argv[1] in sParametro
Questa sicuramente no!
g.

         Fabbro
Ciao
Matic


Prego,
Marco
Newsgroup: it.comp.lang.c
Titolo: Ancora scroolbar

Scusatemi... ma ho davvero bisogno di avere una scrollbar all' interno del
programma... anche una cosa simile.... Per favore se sepete qualcosa in
proposito non esitate a dirmelo.... Il fatto e che ho il bisogno di
visualizzare alcuni nominativi... che vi sono all' interno di un file.... ma
poichè questo sn troppi o quasi.... non vengono visualizzati tutti(nella
finestra DOS)... ma solo gli ultimi due... Lo so che è scorretto postare due
volte la stessa cosa.... ma questo fatto della scroolbar mi sta molto
turbando....
Grazie e ciao

 ha scritto nel messaggio
news:XZl%a.244889$lK4.7...@twister1.libero.it...

Non puoi semplicemente visualizzare le righe un pò per volta richiedendo di
premere un tasto per continuare la visualizzazione?
Se vuoi proprio inserire delle scrollbars devi spostarti sul NG relativo
alla piattaforma su cui lavori.
Ciao

 proposito non esitate a dirmelo....
Mi sembra che tu voglia il codice bello e pronto e non un'informazione
te lo hanno detto se sviluppi sotto linux studiati la libreria <curses.h>
invece se sviluppi sotto winzozz studiati la <conio.h> entrambe non fanno parte
dell'ANSI C quindi diciamo che qui sei OT.
Ma già che ti ho risposto ti dico che con le curses.h lo puoi fare,
e leggendo un pò di documentazione ... 
Se ti servono siti da cui prendere informazioni basta che fai un ricerca
con google c'è l'imbarazzo della scelta.
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: sigsegv su free()


The trouble with being poor is that it takes up all your time.

 if ( (tmp_car = malloc(strlen(car) * sizeof(char)+1)) ==  NULL)
avrai gia' letto sul NG dell'inutilita' di sizeof( char ), ma se proprio lo
vuoi usare, e comunque fai cosi' per tutti gli altri tipi di dato, la forma
giusta e':
malloc( (strlen(car)+1) * sizeof(char) )
actung, non e' questo il motivo per cui il tuo prog non funziona!
e poi perche' 'resto' e' static?
ciao
donCiccio

 ho due cicli innestati del tipo
[CUT]
scusate la stro**ata .... era un problema di malloc(), nel senso che
andando a scrivere piu' volte parole di diversa lunghezza si
"incasinavano" le stringhe .... e' bastato usare calloc()
scusate di nuovo ;-)))
ciao


scusate di nuovo ;-)))
Quello che ti e' successo e' qualcosa di assolutamente tipico...
Un errore da undefined behaviour in un punto (es. uno
sconfinamento) non genera nessun problema apparente in
quel punto ma provoca comportamenti bizzarri in altre
parti del codice che invece sono corrette.
Quando se ne viene fuori grazie al debug e' una vera
fortuna. Il problema e' che i bug di quel tipo bisogna
proprio evitare di metterceli... toglierli e' molto
piu' difficile.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 Andrea
ciao ...

Newsgroup: it.comp.lang.c
Titolo: Calcolo di una potenza a compilazione

Se definisco base ed esponente mediante #define, posso calcolare la potenza
dei due numeri ma durante la compilazione?
#define BASE 3
#define EXP  5
#define POTENZA pow(3,5)
Facendo cosě, perň, ogni volta che scrivo "POTENZA" il compilatore inserisce
pow(3,5) e cosě in fase di compilazione sono costretto a richiamare sempre
la funzione pow().

 potenza dei due numeri ma durante la compilazione?
in C, non credo, a meno di non calcolarla e inserirne il valore comke 
define. Puoi pero' farlo con la metaprogrammazione in C++, usando i 
template, anche nella forma 
POTENZA<3,5>



potresti usare una variabile, evitando di modificarla.
#define BASE 3
#define EXP 5
int POTENZA=pow(3,5)
Sarebbe meglio dichiararla 'const', ma non so se si puo' assegnare ad una
const un valore dinamico.
Ciao,
Riccardo
-- 
-=Riccardo Galli=-
 _,e.
s~  ``
 ~@.   ideralis Programs
.   ol 
 `**~  
http://www.sideralis.net
Newsgroup: it.comp.lang.c
Titolo: stranezza dimensione variabili

Ciao ragazzi ho un problema abbastanza assurdo...
vi posto il codice:
#include <stdio.h>
#include <conio.h>
int main(void) {
 int intero;
 long lungo;
 intero=192000;
 lungo=192000;
 printf("int: %d",sizeof(int));
 printf("long: %d",sizeof(long));
 printf("\nint: %d",intero);
 printf("\nlong: %d",lungo);
 getch();
 return 0;
}
in il risultato č:
int: 2
long: 4
intero: -4608
long: -4608
Per quanto riguarda l'intero mi sembra abbastanza logico perche 192000 
occupa 18 bit.
Per il long non riesco proprio a capire il perchč mi dia sto strano 
risultato!
Illuminatemi grazie :)
PS: come compilatore uso borland c++ 3.1, si lo so č stra vecchio ma a me 
serve lavorare sotto dos.
CIAO! 

 lungo=192000;
diventa:
lungo=192000L;
Questo dice al compilatore che 192000 ora e' di tipo long e non int.
Strano che il compilatore non ti desse nessuna warning!
Tommaso

 }

 wrote:

No. La soluzione e' di usare
  printf("\nlong: %ld",lungo);
La costante 192000 ha sempre il tipo long se un int non puň
rappresentare il valore 192000. 
Un caso dove L č necessario se sizeof(int) č sconosciuto, perque il
tipo di 1234 e' *sempre* int:
    long l = 1234L * 1234L;
 /* long l = 1234L * 1234; */
-- 
Horst

 printf("\nlong: %ld",lungo);
gia' questa ovviamente non la avevo notata ;-)
ero partito in 4a con la storia del suffisso L ...
Grazie,
Tommaso

Grazie raga siete stati gentilissimi!

Newsgroup: it.comp.lang.c
Titolo: tutorial programmazione UNIX

salve a tutti,
sto facendo un corso di sistemi operativi e tra poco inizia la parte
unix. il docente ha consigliato come testo di riferimento il Bach
M.J., "The design of the Unix operating system". Pensate che il libro
sia buono? Siccome si tratta di programmazione e la teoria non serve
vorrei sapere se conoscete qualche buon tutrial on-line (almeno non mi
compro il libro!) perchè io ho trovato solo qualche scarna lezione
sulle cose basilari ma non mi basta...
speravo che appunti linux avesse quello che cercavo ma mi serve la
gestione delle pipe e cose di questo tipo (wait signal fork ecc.)
grazie

 compro il libro!)
Sarebbero cmq soldi ben spesi
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

Sarebbero cmq soldi ben spesi
se lo trovo usato si ^__^

 codice, per la teoria sono già a posto :-)
Allora ok.
Se vuoi ti mando quel poco che ho trovato in rete sulle socket; sono 5 doc
in html, per un totale di circa 70K zippati. Se vuoi te li mando, fammi
sapere in privato.


grazie
Un buon libro e' "Advanced Programming in the UNIX Environment", di W.
Richard Stevens (e' anche l'autore di "TCP/IP illustrated").
Questo libro e' utilissimo se oltre al corso di teoria ti interessa
anche programmare sotto Unix (se ti viene assegnato il classico
progetto SmallShell da espandere questo libro ti sara' molto utile).
By
Paolo
Newsgroup: it.comp.lang.c
Titolo: VisualC++ & winXP non vanno daccordo

Salve a tutti,
ho riscobntrato alcuni problemi nell'uso di visual C++ sotto windows Xp.
La versione di visual c++ e' la 6, usato sia sotto al versione home che
professional di Xp. I problemi sono i seguenti:
_ a volte quando apro un progetto mi compare un messaggio che dice che
non tutti i file del progetto possono essere aperti e conseguentemente
non si riesce a ricompilare il progetto
_ altre volte invece il compilatore lancia un errore nella scrittura del
file compilato dicendo che non riesce ad accedere alla cartella Debug
nella quale il file eseguibile deve essere creato. Inoltre se cerco di
cancellare la cartella debug ricevo un errore di protezione generale.
Non capisco se ci sia una qualche impostazione dell'ambiente che non
conosco e che vada settata o se proprio sia la vc++6 a non funzionare
bene sotto windows Xp. Sotto windows2000 non ho mai verificato questi
problemi.
Qualche suggerimento?
Grazie.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:e502e3256addfd58cc3...@mygate.mailgate.org...

Newsgroup: it.comp.lang.c
Titolo: REPL per il C

Salve a tutti,
  provengo da un paio d'anni d'esperienza con linguaggi di alto livello,
quasi tutti dotati di un ambiente interattivo, che mi hanno "viziato" con
il loro "«Read, Eval, Print» Loop".
Tuttavia per un progetto devo rimettere mano al caro vecchio c (che ho
studiato tempo fa, ma è più o meno un lustro della mia breve vita che non
ci faccio praticamente niente) e mi chiedevo se esisteva qualcosa di
simile.
Cioè, so benissimo che il c è compilato e tutt'il resto, solo mi chiedevo se
esisteva qualcosa di simile ad una shell.
zio Google m'ha trovato "c-repl" ( 
http://neugierig.org/software/c-repl
 ),
ma mi sembra che abbia troppe limitazioni (il primissimo che ho notato è
che ogni statement, anche il corpo d'una funzione, deve essere scritto in
una riga sola).
sapete consigliarmi qualche altra soluzione?
-- 
Under construction

 sapete consigliarmi qualche altra soluzione?
Scusa la franchezza, ma "soluzione" a cosa ?
Se devi usare il C per un
progetto ci sara' un motivo. Non capisco il vantaggio
di usare un C castrato e interpretato linea per linea:
se devi scrivere una procedura un minimo complessa,
magari di qualche centinaio di righe di codice, dovresti
comunque salvarla su un file, e a quel punto averci il prompt
tipo basic del commodore 64 non mi sembra tanto utile.
Tu col C cosa ci dovresti fare ?
ciao,
g.

>> sapete consigliarmi qualche altra soluzione?
In seconda battuta, forse dovresti considerare
di usare il linguaggio Python. Mi sembra di capire
che sia un buon compromesso. E ha il prompt...
ciao,
g.


L'interprete C c'è. Per avere un interprete interattivo (ammesso che già
non lo offra lui o qualcun altro) non devi sbatterti più di tanto, IMHO.
-- 
cc = callcc {|cc| cc.call cc}; cc.call cc

 tipo basic del commodore 64 non mi sembra tanto utile.
Guarda, da utente di lunga data di vari linguaggi con simili features
posso dirti che sono di una comodità sconvolgente. E' qualcosa che ti
manca molto quando torni a qualcosa che non lo ha (e non è questione di
staticità: per dire sia in Haskell che in Objective C ho tali features).
E' semplicemente qualcosa che velocizza enormemente il ritmo di lavoro.

Newsgroup: it.comp.lang.c
Titolo: Applicazione con timer

Ciaoa tutti.
Stò scrivendo un programma in c però avrei bisogno che partisse il
giorno e l'ora da me preimpostati. C'è qualche comando a riguardo??
Premetto che non voglio usare le operazioni pianificate.
Ringrazio tutti.
m@nuel


Le "operazioni pianificate" o "cronjobs" a questo servono! Altrimenti
dovresti far partire il tuo programma in background e controllare in
un loop se l'ora corrente è quella desiderata. Non vedo altre
soluzioni...

 soluzioni...
Come faccio a far partire il programma in background? come faccio a
controllare la data e se fosse quella desiderata avviare
l'applicazione??
La teoria più o meno l'ho capita...mi sefvirebbe un pò di codice...o
qualcosa da poter prendere spunto.


Per quanto riguarda l'ora corrente puoi utilizzare la funzione time()
o localtime(), che dovresti trovare in <time.h>. Ritorna il numero di
secondi dall'Epoch (01/01/1970 00:00:00). Ragionando con i timestamps
(così si chiamano) le operazioni di controllo sulle date sono normali
operazioni sui numeri interi. E' più semplice di quanto non puoi
pensare, vedrai che scrivendo un po' di righe sarà molto più chiaro di
quanto non lo sarebbe se te lo spiegassi io.
Se ti servono altre funzioni su ora/date ti consiglio di spulciarti il
file <time.h>, dove probabilmente troverai quello che ti serve.
Per quanto riguarda il background purtroppo è un'operazione dipendente
dal sistema su cui sviluppi, e con lo standard C ha poco a che fare.
Posso intuire che ti servirebbe codice per Windows, giusto? In questo
caso passo la palla, visto che non tocco un sistema microsoft da anni.
Ciao

>     
Cerca un clone "cron" per windows, che implementa quello che vuoi fare e
poi modificalo.
Questo e' un esempio, in C++, ma puoi trasformarlo in C o puoi
prenderne esempio e poi scriverti la tua app.
https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8220&lngWId=3
B.
Newsgroup: it.comp.lang.c
Titolo: [it.comp.lang.c] benvenuto su Usenet!

Ciao!
Questo gruppo (it.comp.lang.c) non è moderato: puoi
trovare informazioni su di esso nel suo manifesto, che trovi qui in fondo.
Tutto questo è arabo per te? leggi 
http://www.news.nic.it/news-it/docs/glossario.html
 .
Tieni presente che esistono anche questi gruppi:
it.test        - per fare tutte le prove con le news
it.aiuto       - per domande generiche di aiuto
it.news.aiuto  - per tutti i problemi riguardanti le news
Se hai fretta, probabilmente la soluzione al tuo problema connesso alle 
news la trovi già qui: 
http://www.news.nic.it/news-it/oth/aiuto-20.txt
 .
Alcuni gruppi sono moderati, e funzionano in modo diverso: scopri
come a 
http://www.news.nic.it/news-it/docs/moderaz1.html
 .
Ricorda che l'educazione è una dimostrazione di intelligenza, mentre
prepotenza e volgarità viaggiano a braccetto con stupidità.
Sappi inoltre che SCRIVERE MAIUSCOLO equivale a gridare, e che la cosa può
infastidire molti di coloro che ti leggeranno. E già che ci sei, ricordati
di quotare poco, e di lasciare il testo citato *prima* del tuo. 
Infine, questo gruppo fa parte della gerarchia it.*: se non sai cos'è un
gruppo, una gerarchia, oppure it.*, lo puoi scoprire a
http://www.news.nic.it/news-it/
 .
Questo e` il manifesto di it.comp.lang.c:
- ------------------------------------------------------------------------
it.comp.lang.c  Il linguaggio di programmazione C 
- ------------------------------------------------------------------------
Il gruppo trattera` del linguaggio C, ideato da Brian W. Kernighan e
Dennis M. Ritchie.
Il gruppo trattera` di qualsiasi dialetto del linguaggio C, in modo
particolare del vecchio K&R e di quello specificato dall'istituto
americano ANSI come standard "ANSI X3.159-1989" e ratificato
dall'istituto internazionale ISO come standard "ISO/IEC 9899:1990".
Argomenti compresi:
  - Il linguaggio in generale;
  - Gli algoritmi;
  - Le ottimizzazioni;
  - La portabilita`;
  - I sistemi di sviluppo.
Il gruppo non si intende moderato ne` collegato a mailing-list
bidirezionali.

   - I sistemi di sviluppo.
Può andare bene tutto tranne l'ultimo punto e, come sopra, si dovrebbe
aggiungere che il newsgroup tratta ora solo del linguaggio
indipendentemente dal sistema di sviluppo utilizzato, altrimenti si
ricadrebbe nel problema precedente.
Fatemi sapere il vostro parere al riguardo e chi si occupa di preparare
ed inviare a chi di dovere l'estensione del manifesto.
Ciao a tutti.
EMG
Newsgroup: it.comp.lang.c
Titolo: Comme yacc puo aprire un file per analizzare la grammatica del suo contenuto ?

Buona sera membri del foro it.comp.lang.c
Per piacere ho bisogno di vostra scienza.
Vorrei creare un analizzatore della grammatica d'espressioni logiche.
per esempio "a and b" or "(b or c) and d" con {a, b, c} variabili e {and,
or, not ...} operatori.
Anche voglio che queste expressioni logiche siano dati da un file che yacc
aprira
(e non dalla tastiera standard input).
Ma stdin= fopen( argv[1], "r" ); no funziona.
Per piacere lei mi puo mostrare comme fare ad aprire il file delle
espressioni "input.txt" ?
Grazie.
Octavio
analys.flex
%{
#include "y.tab.h"
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
%}
and            ("AND"|"and")
et             ("ET"|"et")
or             ("OR"|"or")
ou             ("OU"|"ou")
not            ("NOT"|"not")
non            ("NON"|"non")
var            ([a-zA-Z]+)
arret          (";")
parouv         ("(")
parferm         (")")
%%
{and}           {
                return AND;
               }
{et}            {
                  return ET;
              }
{or}            {
                 return OR;
               }
{ou}            {
                 return OU;
              }
{not}           {
                return NOT;
              }
{non}           {
                 return NON;
              }
{var}          {
                return VAR ;
               }
{arret}         {
                return ARRET;
               }
{parouv}         {
                   return PAROUVR;
               }
{parferm}      {
                return PARFERM;
              }
%%
+++++++++++++++++
analys.y
%{
%}
%token   VAR
%token   OR
%token   ET
%token   OU
%token   NOT
%token   NON
%token   PAROUVR
%token   PARFERM
%token   ARRET
%token   AND
%left OU
%left ET
%left NOT NON
%%
Exp : s ARRET{printf ("mot accepté\n");return 0;}
op:OR
  |OU
  |ET
  |NOT
  |NON
  |AND
;
s:PAROUVR VAR PARFERM
 |VAR op VAR
 |op VAR
 |s op s
 ;
%%
#include <stdio.h>
yyerror () {}
int main(int argc,char** argv )
{
stdin= fopen( argv[1], "r" );
                      /*ouverture du fichier a analyser
                          openning the file that contains the expression to
analyse */
 if ( yyparse() != 0 )
  {
    fprintf(stderr,"Syntaxe incorrecte\n");
    return 1;
   }
 else
  {
    return 0;
   }
}
++++++++
input.txt
(a or b) and c

 
guarda nella documentazione del flex e' li che viene gestito fisicamente 
la lettura del file, ora non ricordo come si fa ma forse devi solo 
settare opportunamente qualcosa del tipo:
YYFILEIN = miofile;
dove miofile e' l'handler del file di input ( aperto come al solito )
prima di avviare la scansione
lo yacc, o meglio il psrser generato dallo yacc, neanche sa i token chi 
li genera in quanto si limita a chiamare la funzione yylex() ogni volta 
che vuole un nuovo token, infatti con un po' di pazienza e' possibile 
farla a mano senza usare il flex.
puoi come alternativa comunque usare la redirezione della shell.
Newsgroup: it.comp.lang.c
Titolo: info su array

Ciao ho una domanda stupida ma non capisco l'errore, anche se sono
sicuro di averlo davanti agli occhi.
Ho questo esempietto:
main(){
    //int i,ii;
    char *frase[] = {"luca","marco"};
    char *frase_compl[2];
    int i[] = {42,43};
    char *buffer[20];
    char *sep[] ={"----","____"};
    int c;
    for (c=0;c<2;c++){
        sprintf(buffer,"%d",i[c]);
        frase_compl[c] = strcat((strcat(buffer,sep[c])),frase[c]);
        printf("%s\n",frase_compl[c]);
}
printf("\n%s",frase_compl[0]);
}
alla prima del ciclo for vedo 42-----luca e poi 43____marco.
ma perchè quando chiedo la print di frase_compl[0] ho 43____marco che
a parer mio dovrebbe essere  42-----luca
mi ritrovo con frase_complcon indice 0 e indice 1 esattamente uguali a
43____marco,
Mi dite che sbaglio
Saluti
Luca

     char *buffer[20];
char buffer[20];
Assicurati di dimensionarlo correttamente, comunque. Ricordati che se lo
usi come stringa devi riservare l'ultimo carattere per il terminatore
nullo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Mi dite che sbaglio
Perch� nella seconda iterazione del for stai sovrascrivendo buffer e 
frase_compl[c] non � altro che un puntatore a buffer.
E.

 a parer mio dovrebbe essere  42-----luca ?
Perch� la sequenza di strcat restituisce sempre l'indirizzo di 'buffer', che
a ogni ciclo viene riscritto.
(Ovviamente, senza la modifica di Andrea il codice non � nemmeno valido.)
Max
Newsgroup: it.comp.lang.c
Titolo: Compilatore C per Java

Ciao a tutti, come va?
  Qualcuno di voi e` a conoscenza di un ambiente di sviluppo che
produca, a partire da codice sorgente scritto in linguaggio C, byte code
eseguibile da una Java virtual machine?
  Grazie in anticipo, e...
	Alla prossima,
		Marco

Mai saputo che esistesse. Mesi fa mi ero posto il problema
e ho scaricato le vmspec per esaminare i bytecode. Malgrado
ci siano due articoli che aiutano a cenerare compilatori
di altri linguaggi, mi sono fatto l' idea che non sia possibile
o comunque totalmente svantaggioso produrre un compilatore C
che generi bytecode JAVA. I punti di forza de C vengono tutti a
mancare: Type casting dei puntatori, aritmetica dei puntatori...
non puoi ad esempio, incrementando un puntatore di n unita' di
sizeof del tipo puntato per puntare all' ennesimo,
persino realizzare una generica funzione 
memcopy(void *source, void * destination) e' impossibile. La
vm Java non garantisce la continuita' della memoria allocata.
L' unico linguaggio di cui mi piacerebbe vedere una implementazione
per bytecode Java e' il Pascal. Peccato che lo standard sia molto
trascurato, ma l' originale non ammettaeva typecasting e aritmetica
dei puntatori (purtroppo neanche file accesso random e altro).
Credo che non vedremo mai quel compilatore, a meno che SUN non decida
di cambiare le specifice della VM.
Ciao.


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

scusate, ma snprintf() fa parte della lib. standard del C 
ANSI? alcuni mi dicono che sia standard C99.
grazie, ciao.

 mi dicono che sia standard C99.
Se per C ANSI intendi lo standard 89 direi di no.
Pero' non direi che l'ANSI (American National Standards Institute)  sia 
rimasto al vecchio standard !
Giorgio

 ANSI? alcuni mi dicono che sia standard C99.
E' standard in C99, ma non nel C classico (cosiddetto ANSI C o C89)  
In alcuni ambienti snprintf era già disponibile, in alcuni casi con una 
leggera differenza di comportamento rispetto a quanto previsto ora dal C99.
Max

 scusate, ma snprintf() fa parte della lib. standard del C ANSI?
Il nome corretto dello standard è ISO, non ANSI, perché lo standard è 
internazionale, non solo americano.  In ogni caso, snprintf() è 
standard, a partire dal C99.  Alcuni compilatori aderenti al C89 la 
implementano comunque come estensione.
Newsgroup: it.comp.lang.c
Titolo: Bug nello Shellsort del Kernighan & Ritchie?

Salve,
 ho testato l'algoritmo di ordinamento di Shell nell'implementazione proposta da Kernighan e Ritchie in Linguaggio C (II ed.). Per chi non avesse il libro a disposizione, l'immarcescibile duo, nel paragrafo 5 del capitolo 3, implementa l'algoritmo utilizzando un'ampiezza del passo data da n/2^k con k=1,2,3.... come suggerito dallo stesso Shell.
 
/* shellsort: ordina v[0] .... v[n-1] in ordine crescente */
  void  shellsort(int v[], int n)
  {
    int gap, i, j, temp;
 
    for (gap=n/2; gap>0; gap/=2)
        for (i=gap; i<n; i++)
            for (j=i-gap; j>=0  &&  v[j]>v[j+gap]; j-=gap)
	    {
	        temp=v[j];
	        v[j]=v[j+gap];
		v[j+gap]=temp;
	    }
  }
 
 
 
 
Io ho fatto un test utilizzando il codice contenuto nel libro e mettendo dei dati di prova. Adoperando questo codice:
 
#include <stdio.h>
 
void stampVet (int u[], int k)
{   
    int h;
 
    for (h=0; h<k; h++)
	  printf("%2d ", u[h]);
    printf("\n");
}
 
main()
{
   int v[] = {11, 6, 24, 30, 3, 14, 23, 16, 5, 11, 30, 2, 5};
   int n = 13;
   int gap, i, j, temp, h;
 
   for (gap = n/2; gap > 0; gap /=2) {
      stampVet(v, n);
      for (i = gap; i < n; i++)
	 for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-gap) {
	    temp = v[j];
	    v[j] = v[j+gap];
	    v[j+gap] = temp;
	 }
   }
   stampVet(v, n);
 
   return 0;
}
 
Ottengo questo output:
11  6 24 30  3 14 23 16  5 11 30  2  5
11  6  5 11  3  2  5 16 24 30 30 14 23
11  3  2  5  6  5 11 16 14 23 30 24 30
 3  2  5  6  5 11 11 14 16 23 24 30 30
 
Come si può notare nell'ultima riga non si ottiene l'ordinamento! Perché? C'è un errore nell'implementazione di Kernighan e Ritchie? O mi sfugge qualcosa (probabile!)?

 for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-gap) {
 
 
ma non deve essere  ...gap]; j-=gap ?  

 	 for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-gap) {
 
; j-=gap;
 
nell'esempio riportato l'avevi anche scritto bene! :)
 
Ciao!


Grazie per le risposte, avevate ragione l'errore era quello che mi avete indicato sul decremento di j. Infatti, facendo la correzione l'output diventa:
 
11  6 24 30  3 14 23 16  5 11 30  2  5
 5  6  5 11  3  2 11 16 24 30 30 14 23
 5  3  2 11  6  5 11 16 14 23 30 24 30
 2  3  5  5  6 11 11 14 16 23 24 30 30
 
e alla fine il vettore risulta correttamente ordinato.

 proposta da Kernighan e Ritchie in Linguaggio C (II ed.)
 
[...]
 
e' un pesce d'aprile?

 e' un pesce d'aprile?
 
Un immarcescibile pesce d'aprile.
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
 

 Un immarcescibile pesce d'aprile.
 
:) hehe

 for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-gap) {
 
 

Newsgroup: it.comp.lang.c
Titolo: generazione numeri pseudocasuali

Ciao a tutti e grazie x l'attenzione!
Sono un novellino della programmazione in C e vorrei saperne di piu'
circa i numeri pseudocasuali. Vi spiego il mio problema: ho fatto un
programmino che ricalca il gioco del tris e mi servirebbe dare un tocco
di difficoltà usando dei numero casuali per far si che il computer metta
le crocette in ordine sparso. 
Come posso fare? ho provato a leggere qualcosa sulle funzioni rand() e
srand() ma ci ho capito poco o niente.
A me servirebbero due righette dalle quali io possa avere un valore
casuale tra 1 e 3.
Big Fat Boy
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Big Fat Boy
Maurizio

 n = ( rand()%3 ) + 1
grazie mille, se mi sapessi dire un sito dove possotrovare le funzioni
della libreria standard del C sarebbe una gran cosa. cmq grazie ancora!


libreria time.h
funzioni
void srand (int)
e
int rand ()
La srand provvede a modificare la rand secondo il "seme" che è quello che tu
le fornisci attraverso l'int (a tal proposito spesso si usa fornire l'orario
di sistema che per sua natura intrinseca non è mai uguale)
mentre la rand (opportunamente) modificata dalla srand provvede alla
effettiva generazione di numeri pseudocasuali.
Ciao
Claudio

 Big Fat Boy
Sinceramente non ti so dire con esattezza, prova a fare un ricerca con
google o nelle sue directory
Maurizio
Newsgroup: it.comp.lang.c
Titolo: cosa si può fare col c

Salve a tutti!
Stavolta Vi porgo un quesito non tecnico, ma (per me sicuramente) comunque
interessante.
Come già alcuni di questo NG sapranno, ho iniziato da poco a programmare in
C, e vorrei sapere "fin dove si piò arrivare"...
Se potessi avere qualche esempio di programmi (belli tosti) che sono stati
sviluppati in C, in modo da avere le idee più chiare.
AH! Cosa molto importante, non deve essere stato usato l'assembler!
Con quello lo so anche io, si può fare qualsiasi cosa... :)
Grazie a tutti, e scusare il semi-OT!

fatti un giro su 
sourceforge.net
 e guarda i progetti fatti in c...
in c puoi fare tutto penso...

 in c puoi fare tutto penso...
Ma proprio ma, proprio tutto.... anche un sistema operativo ... un esempio č
il famosissimo Linux.

 in c puoi fare tutto penso...
In effetti la domanda + corretta sarebbe:
"Cosa è meglio fare in c?"
Perchè col c si può fare veramente tutto, ma ci sono delle cose che si
possono fare in maniera molto semplice ed altre in maniera molto
complicata. Penso che una delle doti di un programmatore sia anche
quella di scegliere il linguaggio giusto per il tipo di problema che ha.
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

 Con quello lo so anche io, si può fare qualsiasi cosa... :)
E' insensato usare interamente l'assembly per produrre qualcosa: nel tempo
che ci impiegheresti un'altra persona ha tempo a scrivere tutto in C,
debuggare a fondo, analizzare il tutto con un profiler, eliminare i colli
di bottiglia (eventualmente in assembly in quei casi in cui in C non riesci
ad essere cosi' performante) e passare ad altre applicazioni mentre tu sei
ancora infognato nell'assembly :)
Esempi?
Kernel di Linux. GCC. GDB. Python. Perl. Gtk
Tanto per citarti qualcosa di Open Source.
Il C e' un linguaggio general purpose ed e' stato concepito per scrivere un
sistema operativo in modo da non dover riscrivere tutto appena fosse
cambiata l'architettura. Non e' nato per avere dei limiti: serviva un
assembly di alto livello ed e' quello che hanno prodotto.
-- 
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."

Ritengo che ogni funzione touring-calcolabile possa essere realizzata in c
in quanto touring-completo.
ciao,
nids

 C, e vorrei sapere "fin dove si piò arrivare"...
In un manuale del C c'è scritto più o meno così o almeno in sostanza:
I limite del C è dato dall'immaginazione del programmatore.
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: Creazione programma

Ciao a tutti,
scusate la mia ignoranza....
Dopo aver compilato un programma come faccio per visualizzare il risultato?
Per esempio compilandolo con SciTE tutte le volte che tento di "costruirlo"
(Build) dopo averlo salvato come file *.c mi dà sempre un errore, dice che
non trova il file... cmq in generale, come si fa??
Grazie.
Ciao!



Dipende completamente dal compilatore.
Quale file non trova?
by LjL
ljl...@tiscalinet.it

 Quale file non trova?
Ciao,
ho risolto il problema.....
Perň ora ne ho un altro.... :-)
Quando ho creato il programma e l'ho avviato, dopo che mi ha dato la
soluzione (se per esempio č una banale somma tra numeri) rimane aperto solo
per pochissimi istanti: non ce la faccio nemmeno a vederla la soluzione!!
Cosa devo modificare per far sě che rimanga aperto finchč non lo voglio
chiudere io?
Grazie,
ciao!.



Puoi aggiungere alla fine del programma delle istruzioni che
richiedano dell'input all'utente (ad esempio, di premere un tasto).
Quello che viene da dire a me č di usare una scanf(), dato che non ho
presente quali altre siano bloccanti.
by LjL
ljl...@tiscalinet.it

Newsgroup: it.comp.lang.c
Titolo: Problema con stringhe

Ho prestato il mio manuale c e ultimamente mi dedico a Java, quindi ho un
poco di confusione in testa!
Devo leggere righe di testo da un file di questo tipo:
riga 1
riga 2
...
riga N
e mettere i risultati in una variabile
char* righe[100];
la procedura che uso è la seguente:
void carica()
{
 FILE *fp;
 char stringa[100]="\0";
 int i=0;
 fp = fopen("funzioni.dat", "r");
 if(fp!=NULL)
 {
  while(fgets(stringa,100,fp))
  {
   funzione[i++]=stringa;
  }
  fclose(fp);
 }
}
Alla fine mi ritrovo la variabile righe con i campi tutti uguali a "riga N".
Teoricamente ho capito dove sbaglio, ma praticamente come faccio?
Grazie!
--
Marco "DUFF" Palermo
Marco...@SPAMHotmail.com
http://www.MarcoDuff.cjb.net/
http://www.cribiobot.cjb.net/

 char righe[100][100];
Non posso, avrei incompatibilità con il resto del codice!
Ho risolto il problema (in modo rozzo) in questo modo:
void carica()
{
 FILE *fp;
 char acc[100][100];
 int i=0;
 int lette = 0;
 fp = fopen("funzioni.dat", "r");
 if(fp!=NULL)
 {
  while(fgets(acc[lette++],100,fp));
  fclose(fp);
  for(i=0;i<lette;i++)
   funzione[i]=acc[i];
}
}
Grazie lo stesso!
Ciao!

Newsgroup: it.comp.lang.c
Titolo: aggiungere in coda ricorsivamente

questa funzione mi dà un segmentation
xchè nn riesce a aggiungere il coda ricorsivamente?
/* Crea elementi successivi */
hello *aggiungi(hello *p, int ins)
{
	hello *paus;
	paus = malloc(sizeof(hello));
	paus->n = ins;
	paus->next = NULL;
	if (p == NULL) {
		p->next = paus;
	}
	else {
		aggiungi(p->next, ins);
	}
	return p;
}

 xchè nn riesce a aggiungere il coda ricorsivamente?
Per un sacco di buoni motivi ;)
Ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 }
Devi spezzare il codice in due funzioni: la prima crea l'elemento da
inserire ed inizia la ricorsione, la seconda e` la funzione ricorsiva
vera e propria:
hello *aggiungi(hello *head, int n) {
        hello *newel = malloc(sizeof(hello));
        if (!newel)
                return NULL;
 
        newel->n = n;
        newel->next = NULL;
        /* Inizia la ricorsione */
        aggiungi_r(head, newel);
        return newel;
}
void aggiungi_r(hello *p, hello *el) {
        if (p->next == NULL) {
                p->next = el;
                return;
        }
        aggiungi_r(p->next, el);
}
Occhio che non viene gestito il caso in cui head sia NULL (dovresti
usare un doppio puntatore).
Luca
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

 Luca
scusa ma i due puntatori in questa funzione a cosa sono?
il primo alle testa?
l'altro?

 ha scritto nel messaggio
news:ZtPnc.233022$rM4.9...@news4.tin.it...

L'altro è il puntatore all'elemento che vuoi inserire
Pep

 [snip]
Cioe` quando  la lista  e` vuota;  questo implica  che quando  si vorra`
aggiungere il primo elemento il programma ricevera` un SIGSEGV in quanto
la  aggiungi_r (tra  parentesi, visto  che le  convenzioni ci  piacciono
tanto, l'"_r"  si utilizza per le  funzioni rientranti e non  per quelle
ricorsive :P) andra` a dereferenziare  un puntatore nullo (errore che tu
stesso hai corretto all'OP).  Le funzioni di cui sopra  non sono affette
da questo problema.

Newsgroup: it.comp.lang.c
Titolo: cancellare schermo DOS in VC

salve,
uso il visual C di visual studio 6 microsoft,
ho un problema banale, devo cancellare lo schermo
della finestra DOS in cui ho scritto con le solite printf(...)
e non ci riesco...
clrscr(), cls() etc  non esistono...
come si fa?
grazie
GCL 


si chiede su it.comp.programmare.win32,perche' qui sei OT.
oppure prova a fare qualcosa come
system("nome-del-comando-dos-che-cancella-lo-schermo");
ciao,
g.
-- 
AIUTARE= Accrescere il numero degli ingrati
(Ambrose Bierce, Il Dizionario del Diavolo)


system( "cls" );
dove system e` standard e come ti e` stato suggerito cls e` il comando per
pulire la finestra in un programma dos
Newsgroup: it.comp.lang.c
Titolo: lcc win32

Raga ho scaricato il prg l'ho installato e lo faccio partire!
sono alle prime armi e ho scritto
#include<stdio.h>
int main(void)
{
        printf("ciao\n");
        return 0;
}
Ora come faccio a farlo compilare x vedere se ci sono errori?
e sopratutto come diavolo faccio a farlo partire sto prg?
mi so scaricato anche la guida ma non ho capito che opzione devo scegliere
:(
Ciaoooooo!

 ha scritto nel messaggio
news:9rjfl2$c9s$1...@nreadb.inwind.it...


 wrote in message
UObD7.838$7A4....@news.infostrada.it...


Ora come faccio a farlo compilare x vedere se ci sono errori?
menu compiler, compile nome-file
ti dirą che ha creato un nuovo progetto nella cartella
..qualcosa\lccX (X č un numero che si incrementa ogni volta per
ciascun progetto) e lo compila. per farlo partire premi due volte F5.
la prima volta entri nello stato di debug, a quel punto con F5 lo fai
partire normalmente, con F8 esegui passo passo...
ciao!
Newsgroup: it.comp.lang.c
Titolo: Help riconscimento stringhe

Ho un problema di riconoscimento stringhe : ho un file contenenti 
stringhe del tipo
N001 G00 Y02 X01;note [Enter]
N002 G01 Y03 X21;note [Enter]
N003 G00 Y00 X00;note [Enter]
Quelcuno ha una funzione già fatta che mi legga una riga alla vota e mi 
restituisa il Vlore di G,X,Y,N?????
GRAZIE
<<SAX>>

Guarda strtok()
NM


Newsgroup: it.comp.lang.c
Titolo: [abbastanza OT] sorgenti libreria

>>>>riservata agli utenti linux (un po' + esperti di me)<<<<
sto cercando i sorgenti della libreria sys/time.h (non l'header,
ovviamente)... essendo open source li dovrei trovare facilmente, no?
google non mi ha aiutato sennò non chiederei qui.
Grazie per il supporto
        F

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Fabbro ha scritto:

allora ti servono i sorgenti della GNU C Library. Prova a cercare su
http://www.gnu.org/software/libc/
sku
- --
~  \|/
~ -(o< -- I'm a punk, dude!
~  //\
~  V_/_
Carlo Sciolla
Linux User #372086
http://www.skuro.altervista.org
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFCMV4fcjOfgCSFxEARAjpiAKCCtK61SutmoEv6WoBloVokRBBRmgCggTiJ
2NH+OxBH9k4mgDmwGItAjBc=
=7k1/
-----END PGP SIGNATURE-----
Newsgroup: it.comp.lang.c
Titolo: qualcuno conosce il codice per implementare ....

...un albero binario nei tre modi( postorder,inorder,preorder)..
oppure se è possibile potete darmi il link dove posso trovarlo...
Vi ringrazio..
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ...un albero binario nei tre modi( postorder,inorder,preorder)..
Quelli che citi sono tre  metodi di attraversamento dell'albero, non tre
metodi di implementazione.
struct node {
        int data;
        struct node *sx, *dx;
};
void postorder(struct node *n) {
        if (n == NULL)
                return;
 
        postorder(n->sx);
        postorder(n->dx);
        /* Qui` stampo l'informazione contenuta nel nodo, tu puoi
         * elaborarla come meglio credi.
         */
        printf("%d\n", n->data);
}
void inorder(struct node *n) {
        if (n == NULL)
                return;
        postorder(n->sx);
        printf("%d\n", n->data);
        postorder(n->dx);
}
void preorder(struct node *n) {
        if (n == NULL)
                return;
        printf("%d\n", n->data);
        postorder(n->sx);
        postorder(n->dx);
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Quando un uomo porta dei fiori a sua moglie senza motivo, 
un motivo c'e`.

 Vi ringrazio..
L'albero si implementa sempre allo stesso modo. I vari *order sono i modi di
attraversamento. Se conosci come si implementano le liste non ti dovrebbe
essere difficile. In pratica anzichè tenerti un puntatore al nodo
successivo, ti tieni un puntatore a N nodi figli. Graficamente:
A       p1 = B          p1 = C
                        p2 = D
        p2 = E
[Vabbè, come grafica fa schifo]. Comunque ti consiglio di cercare con google
qualcosa di più esaustivo.
-- 
Andrea Bergia - studente              Linux Registred User #281550
"The one thing we're all waiting for, is peace on Earth and an end to war,
it's a miracle we need, the miracle, the miracle, 
Peace on earth and end to war today,
That time will come one day you'll see when we can all be friends"
Newsgroup: it.comp.lang.c
Titolo: Aiuto sull' utilizzo dei Pthread e sul linguaggio in generale

Salve ragazzi,
Ho spulciato un po' il forum ed ho visto che c'è stata una diattriba sull' evoluzione  dei linguaggi in questi ultimi anni.. Io personalmente negli ultimi anni ho perso la mano con il c avendolo soppiantato per linguaggi interpretati di alto livello che mi hanno "abituato bene"... Ma cè poco da fare.. quando servono performance e controllo su come vengono gestite le cose bisogna fare un passo indietro...
 
Veniamo a noi..
Devo usare i Posix Thread in c e mi sono bloccato su un esempio di codice..
Mi aiutate?
 
#include <stdio.h>
#include <pthread.h>
 
struct arg {
    int a, b;
    int *rst;
};
typedef struct arg arg;
 
void* sum(void *);
 
int main()
{
    pthread_t sum1, sum2;
    int s1, s2;
    pthread_create(&sum1, NULL, sum, &(arg){1, 500000000, &s1});
    pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2});   
    pthread_join(sum1, NULL);
    pthread_join(sum2, NULL);
    printf("%d\n", s1 + s2);
}
 
void* sum(void *ptr)
{
    int i, temp = 0;
    arg *x = ptr;
 
    for(i = x->a; i <= x->b; ++i)
        temp += i;
    *(x->rst) = temp;   
}
 
La cosa che non capisco è :
quando inizializza il tipo definito arg passo &(arg){1, 500000000, &s1} ossia passo l'indirizzo di arg alla funzione che crea il thread.
 
Successivamente creo un altro thread : pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2}); e ripasso l'indirizzo della stesso tipo definito sovrascrivendo i campi.
 
Ma i thread a differenza dei processi condividono le variabili globali!!!
Questo esempio trovato su stack overflow è sbagliato?
Grazie mille.

 Successivamente creo un altro thread : pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2}); e ripasso l'indirizzo della stesso tipo definito sovrascrivendo i campi.
 
No, attenzione: e' come se tu avesi definito due *variabili temporaenee* entrambe di tipo arg e passi alla funzione i due indirizzi delle due variabili, che rimangono quindi separati in memoria.
 
ciao
Giacomo


Grazie mille per la risposta,
ora mi è più chiaro, mi sorge però un dubbio..
Questo è uno strano comportamento perchè io passo un puntatore ad una struttura, quindi per riferimento. Come fa tale tipo definito a "duplicarsi"?

 Questo è uno strano comportamento perchè io passo un puntatore ad una struttura, quindi per riferimento. Come fa tale tipo definito a "duplicarsi"?
 
Non e' il tipo che "si duplica", seplicemente vengono istanziate
due variabili dello stesso tipo. :)
 
Quello che accade e' piu' o meno una cosa del genere:
 
arg a1;
arg a2;
 
a1 = (arg){ 1, 500000000, &s1 };
a2 = (arg){ 500000001, 1000000000, &s2 };
 
pthread_create( ..., &a1 );
pthread_create( ..., &a2 );
 
come vedi ci sono due variabili. Ogni thread lavora su una delle due
quindi lavorando su due aree diverse non occorre sincronizzazione.
 
ciao
Giacomo