mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Comando x pulire lo schermo in C?

Salve, volevo sapere, se esiste, qual'è il comando x pulire lo schermo
in C e se è incluso nelle librerie standard.
Fr4nz



Ciao Fr4nz,
se non erro non c'e' tale comando nella libreria
standard.
Se ti basta cancellare lo schermo, la cosa piu' comoda e' una chiamata al
sistema, tipo
system("clear");		<- unix
system("cls");		<- dos
Se devi fare altre modifiche, allora ncurses.
Ciao,
Riccardo
-- 
-=Riccardo Galli=-
 _,e.
s~  ``
 ~@.   ideralis Programs
.   ol 
 `**~  
http://www.sideralis.net

è clrscr(); però forse devi aggiungere come libreria la stdlib.h ma non sono
sicuro a memoria mi sembra di si ma sono appena tornato da un compleanno e
non sono un gran che pieno di me.....

ho dimenticato di dirti che clrscr() che ho provato sul turbo c mentre sul
dev c/c++ mi da storie, non va messo mai prima della definizione delle
variabili altrimenti non te le crea ma sempre dopo.

in C e se è incluso nelle librerie standard.
No, non lo e`.
Alcuni compilatori, come DJGPP e quelli Borland, prevedono un header
non standard, conio.h, in cui e` inclusa clrscr().

 in C e se č incluso nelle librerie standard.
E' una stra-FAQ... c'č stato un thread non piů di un mese fa, e altre
decine in passato. Usa Google.
-- 
Ciao,
    Giuseppe

 non sono un gran che pieno di me.....
non esiste tale funzione in stdlib.h. Si tratta di una funzione C
dichiarata in conio.h che è un include proprio di DOS e non portabile.
non esiste una funzione portabile per cancellare lo schermo nello
standard C.
Claudio

 variabili altrimenti non te le crea ma sempre dopo.
*eeh* ?
clrscr() PRIMA della dichiarazione variabili?!?!
Sicuro che sia C?
marco.


non ho ben capito il tuo commento, io gli ho detto un mio errore personale
che magari poteva commettere anche lui,visto che è utile all'inizio di un
programma  e gli ho inoltre spiegato cosa comporta.Inoltre non avendo
capito, o facendo finta di non capire lascio cadere la tua bella ironia per
terra! saluti

 ha scritto nel messaggio
news:attn8v$7i4$1...@lacerta.tiscalinet.it...

Nella sintassi del C sta:
- graffa
- dichiarazione variabili usate
- corpo
- graffa
Non era ironia. era un appunto per dire che non è il solo clrscr() che non
va messo prima delle variabili, ma che non deve starci "niente" prima delle
dichiarazioni delle variabili. era un semplice appunto.
marco.

dichiarazioni delle variabili.
Credo che in C99 (l'ultimo standard) sia stata ufficializzata la
caratteristica di poter dichiarare le variabili in qualunque punto del
codice (alla C++, per intenderci).


come mi è gia successo, forse qui dentro, noto che la cortesia di spiegare
bene le cose e non lasciarle all'inventiva della propria immaginazione viene
fuori solo dopo che si replica con un po' di forza. Se ti fossi spiegato
meglio invece che prendere per il culo,cosa che mi sembra palese,anche se
magari non erano le tue intenzioni, avresti evitato un'inutile discussione
senza stancare i lettore
Newsgroup: it.comp.lang.c
Titolo: Eseguire una funzione ogni volta che termina il programma

Devo creare un programma (sotto UNIX) che può essere terminato con la
sequanza di tasti Ctrl^C, come posso eseguire una  determinata serie di
operazioni anche quando il programma termina in modo anomalo (Ctrl^C
appunto)?
Grazie
 Luca
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


#include    <signal.h>
void sigint_event(int id)
{
    .....//metti ciò che vuoi fare dopo premuto Ctrl^C
}
int    main()
{
    signal(SIGINT, signal_event);//SIGINT corrsisponde
al segnale dato con Ctrl^C
....
}

 ha scritto nel messaggio
news:965p5t$mbi$1...@pegasus.tiscalinet.it...

ho fatto un errore :
  signal(SIGINT, sigint_event);

Grazie mille, ed ora una nuova domanda, come posso controllare gli attributi
di un file ,soprattutto data e ora  dell'ultimo accesso senza doverlo per
forza aprire? (altrimenti la data corrisponde a quando lo ho aperto io...)
Grazie
-- 
Posted from 
smtp6.libero.it
 [193.70.192.127] 


 
Tutor at D.S.I. - University of Milan

Newsgroup: it.comp.lang.c
Titolo: getmaxx() e getmaxy()

Ciao a tutti.
Mi sapreste dire come mai questo programma non funziona?
E' un'applicazione delle funzioni in oggetto.
La compilazione e' OK, ma non il linkaggio;
infatti dice: "Undefined symbol getmaxx() in module NOME_FILE".
Dice la stessa cosa anche per getmaxy, initgraph e restorecrtmode.
Ecco il codice:
#include <graphics.h>
#include    <stdio.h>
#include    <conio.h>
int main(void)
{
int driver, mode;
driver=DETECT;
mode=0;
initgraph(&driver, &mode, "");
printf("Valori massimi per X e Y: %d,%d", getmaxx(), getmaxy());
getch();
restorecrtmode();
return 0;
}
Cosa ne pensate??
Ciao e grazie,
Stefano.

Penso che stai utilizzando la libreria grafica della borland ma non la hai
inclusa in una delle opzioni che puoi cercare nel menu dell惺de borland.
Mi sembra che se vai sulla finestra dell徨lbero del tuo progetto e clicchi
col tasto destro sul file .exe che devi creare ti si apre una finestra dove
puoi aggiungere la libreria grafica che ti serve (la bgi mi sembra).

 Cosa ne pensate??
  Hai indicato al linker quali librerie collegare al tuo codice oggetto?
	Alla prossima,
		Marco

Cosa ne pensate??
Scusa a che servono qui la graphics.h se poi usi printf ?
Augusto Pucci
Webmaster di Prospektiva On-line
http://www.prospektiva.it

Dice la stessa cosa anche per getmaxy, initgraph e restorecrtmode.
Usi per caso il Turbo c++ ? Prova ad andare in Options / Linker /
Libraries / e abilita Graphics Libraries.
ciao

Con la graphics.h puo´ chiamare initgraph() getmaxx() e getmaxy()
e poi utilizza printf per stampare le dimensioni massime della "finestra"
grafica, anche se si potrebbe utilizzare outtextxy(...) in modalita´
grafica, al posto della printf, ma allo scopo di debug e informativo la
printf va bene lo stesso.

Scusa a che servono qui la graphics.h se poi usi printf ?
Ad usare getmaxx, getmaxy, initgraph e restorecrtmode
ciao



Ah, no, e' che non avevo capito che era solo un brandello di
programma, xche' altrimenti restava un po' li...


Grazie a tutti.
Adesso funziona.
Ciao ciao,
Stefano.:-))
Newsgroup: it.comp.lang.c
Titolo: Gestione RTS in C [OT?]

Salve,
  non sono nuovo a questo topic ma ahimè non ho ricevuto sempre risposte.
Guardate prima questo pezzo di codice che uso per inviare un carattere su  
seriale (connessa ad un modem):
void rs_putch_char(const int io_port, unsigned char character)
{
int i=0;
//alzo RTS
RTS_ON;
/* wait for transmitter holding register empty and CTS */;
while (!CTS_ACTIVE);
while (!TX_READY);
outportb(rs_ports[io_port] + DataReg, character);   /* transmit character  
*/
i=0;
//abbasso RTS
for(i=0;i<TIMEOUT2*350;i++);
RTS_OFF;
}
Ho un problema su RTS_OFF.
Ho dovuto inserire un ciclo for di pausa prima di abbassare RTS altrimenti  
il carattere spedito non arriva a destinazione...
LA DOMANDA:
Qual'è la condizione che mi abilita ad abbassare senza problemi RTS?
C'è un registro di stato che mi assicura che il dato sia stato spedito e  
che quindi posso abbassare RTS?
Grassie
Tibbolo

 Tibbolo

 Giovanni
Purtroppo non funziona lo stesso...

Newsgroup: it.comp.lang.c
Titolo: crittografia was: Dove sono conio.h io.h process.h nello gnu c ??

 on 1/19/97.  Released and 
distributed from 
http://www.dodgenet.com/~riad/hacking.htm
 as Super IDEA v1.0
secondo voi, guru  e' possibile compilarlo sotto unix?
Esistono programmi di crittografia, con o senza sorgenti disponibili sotto
unix/linux ?
---------------------------------------------------------------------
remove z by my address to contact me

unix/linux ?
GnuGP 
http://www.d.shuttle.de/isil/gnupg/
per altro dipende cosa ti serve...
saluti
F.R.
rimuovere 'noall_' e 'immondizia' dal campo From:

za...@bigfoot.com
 wrote:
 >distributed from 
http://www.dodgenet.com/~riad/hacking.htm
 as Super IDEA v1.0
 >secondo voi, guru  e' possibile compilarlo sotto unix?
Si, ma che senso ha? Ci sono dozzine di programmi migliori.
 >Esistono programmi di crittografia, con o senza sorgenti disponibili sotto
 >unix/linux ?
ftp3.linux.it
 /pub/mirrors/gnupg/
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]    | Be happy.
Marco | What was you username again? <clickety clickety click> | Be root.
      | --> Linux: be your own luser! <-- --> Votate it.fan.marco-ditri <--

Newsgroup: it.comp.lang.c
Titolo: 2 domandine

ciao a tutti,
ho un paio di quesiti da porre:
1) si può ridimensionare un array mantenendo in memoria i valori precedenti
(tipo REDIM del Basic)?
2) si può stampare una stringa in negativo (nero su bianco invece che bianco
su nero)?
saluti

su nero)?
Dipende dal tuo sistema operativo e dalle librerie che usi. Non si può
fare con le funzioni standard.
-- 
Marco Barisione (ICQ 84277092)

 su nero)?
Per potere si può come però dipende dal tuo sistema operativo,che io sappia
lo standard C non si occupa molto di grafica!
Ciao
Wezzy
Newsgroup: it.comp.lang.c
Titolo: Algoritmo Complesso

Ciao a tutti, sto cercando la soluzione a un problema spinoso.
Possiedo una variabile con un numero intero, e un vettore con n numeri 
interi generati a caso.
Vorrei sapere se esiste un algoritmo capace di trovare quella 
combinazione di numeri del vettore che sommati (sarebbe bello poter 
utilizzare anche sottrazione, moltiplicazione e divisione, se 
necessario) fra loro mi restituiscano il valore della variabile intera, 
o almeno il più vicino possibile (come valore assoluto).
Esempio:
Goal = 19
Vettore = [3, 2, 5, 7, 8]
Vi ringrazio molto
Ciao,
     Mugghy


Quanto vale n  (il numero di numeri nel vettore)
Se e' piccolo, diciamo minore o uguale a 24,
allora una soluzione veramente banale, che si puo' ottenere in una
manciata di righe di codice, consiste nel generare tutti
i possibili sottoinsiemi del vettore, che sono 2^n,
sommarli e vedere quale e' la somma che si avvicina di piu'.
Considerando che 2^(24) = 16777216 un programma che esamini
tutte le possibili somme ci mettera' si e no 3 secondi
su una macchina di media potenza.
Se n e' piccolo, diciamo n=10, allora 2^n=1024 e non ti accorgi
neache di aver lanciato il programma che e' gia terminato.
Questo programma e' alla portata di un principiante,
che conosca gli operatori bitwise (che possono servire),
tipo & e gli shift binari tipo <<, anche se in linea
di principio non e' necessario usarli.
Alternativamente si puo' considerare il segno, quindi
avere 3^n combinazioni. Naturalmente qui il valore
di n per cui la cosa e' fattibile scende.
Considera che 3^15  vale 14348907 e il programma
sara' leggermente piu' complesso.
Se n e' decisamente maggiore, o se e' richiesta maggiore velocita',
allora si puo' trattare
questo problema come un "problema dello zaino"
o "knapsack problem". In questo caso ti invito
ad usare google e troverai una caterva di
informazioni in proposito a questo studiatissimo problema.
Se poi questa cosa ti serve solo per farci dei
giochi come "numeriamo", allora esiste un
programma per Win che fa gia' questa cosa
(anche con moltiplicazioni etc)
fatto da J.Aguirregabiria, la cui home e'
http://tp.lc.ehu.es/jma.html
e il link per il programma e'
http://tp.lc.ehu.es/anonym/win95/nmbrs200.exe
ciao,
g.

mugghy wrote:
suggerisco un annealing simulato in
cui E=Goal-SommaElementiVettore sia
la funzione da minimizzare. Per quanto
eleborato sul piano teorico, nella pratica
è un algoritmo molto semplice da implementare. 
Cerca con google e facci sapere come va.
ciao 
Luke


 o almeno il più vicino possibile (come valore assoluto).
L'algoritmo di programmazione dinamica dello zaino
(piuttosto semplice) risolve il problema.
Sicuramente in rete lo trovi.
-- 
"Ciò che si ha per nulla non vale nulla"
Koala
Newsgroup: it.comp.lang.c
Titolo: Epsilon macchina

Qualcuno potrebbe farmi un esempio di algoritmo per il calcolo
dell'epsilon macchina relativo ad un numero? Penso che l'epsilon
macchina riferito al valore 1 si calcoli così :
/*  Epsilon macchina singola precisione */
#include <stdio.h>
float epss (int base)
{
        /* variabili d'appoggio */
	float epsilon, u1, u2;
	u1=1;
	do
	{	/* u e'il valore dell'epsilon */
		epsilon=u1;
		u1=u1/base;
		u2=u1+1;
	}while (u2 != 1);
                  return epsilon;
}
Che mi dite di quello riferito ad un numero come 0,7647 × 10 alla 3 (
× 1000, intendo...)?
Grazie.

 ha scritto nel messaggio
news:k43nits9vgjrl38qe...@4ax.com...


--
prova con delle istruzioni del tipo:
...
double number;
/* per il carattere di conversione %le, K&R pag. 326-327 */
scanf ("%le", &number);  
...
 
e da tastiera lo inserisci nella forma 0.7647e+3
Saluti,
Vanni

Newsgroup: it.comp.lang.c
Titolo: Microprocessori e C

Salve,
avrei bisogno di sapere se esiste della documentazione sulla
programmazione dei microprocessori tipo DSP o PIC attraverso il
linguaggio C, e la disponibilita' di ambienti di sviluppo freeware.
Grazie.
Michele

...

Newsgroup: it.comp.lang.c
Titolo: Ritornare un array multidimensionale

Salve,
e' da stamattina che sto cercando di far ritornare un array di char
multidimensionale da una funzione:
char BufferBack[20][20];
se faccio return BufferBack, non funziona..
Qualcuno mi sa aiutare (anche con esempi di codice)
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

il codice compila solo cosi.. ma mi da un segmentation fault:
char* MyDatabase::doSelectQuery(char *query)
{
        //char* query = "SELECT * FROM `test`;";
        char *cArrayBack[9999][9999];
        //char *cArrayBack = new char[99][99];
        MYSQL_ROW row;        // la riga
        MYSQL_RES* result;
        MYSQL_FIELD* field;     // il campo ritornato
        int i = 0, j = 0, n_rows = 0;
        // esegue la query
        if (mysql_query (&mysql, query)) {
                printf("Errore nella query.\n");
        }
        result = mysql_store_result (&mysql);
        n_rows = mysql_num_rows (result);
        for (j = 0; j < n_rows; j++)
        {
                printf("RIGA: %i\n", j);     // visualizza il campo
                i = 0;
                mysql_field_seek (result, 0);           // sposta a inizio
riga
                row = mysql_fetch_row (result);      // preleva i dati
della riga
                while ((field = mysql_fetch_field (result)))
                {
                        //cArrayBack[j][0] = (char)field->name;
                        //cArrayBack[j][1] = (char)row[i];
                        printf ("CAMPO %s: ", field->name);     //
visualizza il campo
                        printf ("%s\n", row[i++]);          // visualizza
il dato del campo
                }
                printf ("\n");
        }
        printf("QUERY: %s", query);
        mysql_free_result (result);
        return **cArrayBack;


 Grazie
Beh se il buffer è dichiarato come locale all'interno di una funzione viene
distrutto al termine della funzione, quindi ritorni un indirizzo di memoria
di un qualcosa che nn c'è piu. In ogni caso si tratta appunto di ritornare
un puntatore. Alloca dinamicamente la memoria, in tal modo questa continua
ad esistere anche dopo la fine della funzione.

>         char *cArrayBack[9999][9999];
Ti vorrei far notare che sono poco meno di 100 mb. Non č bene allocare sullo
stack tutta 'sta roba. Usa malloc.
--- bye

 ha scritto nel messaggio
news:c56k3l$jsq$1...@news.newsland.it...


 sullo stack tutta 'sta roba. Usa malloc.
Con un bel buffer overflow ci inserisci windows 95 completo...:-)
Newsgroup: it.comp.lang.c
Titolo: [OT] Buona Pasqua!

Poche righe per augurare buona pasqua a tutti voi.
--
----------
Lello Mele
HOMEPAGE:
http://www.lellomele.supereva.it
eMAIL:
v...@libero.it

Lello Mele
printf("Grazie, ed auguroni di Buona Pasqua a Te ed a tutti Voi.\n);
/*forse cosi' risulta meno OT*/
ciao. ale


ma forse cosi' 
printf("Grazie, ed auguroni di Buona Pasqua a Te ed a tutti Voi.\n");
risulta piu' corretta.
ale

 Poche righe per augurare buona pasqua a tutti voi.
Buona Pasqua anche da parte mia!
EMG

public class Pasqua{
public void static main {
    system.out.println("Buona pasqua a tutti :-)");
}
}

 }
Naturalmente non compila, mancava qualcosa..
Ale ;-p

 wrote in message
news:9baihg$8bl73$1...@ID-44839.news.dfncis.de...

Un compilatore Java, per caso?
Buona Pasqua
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

Il  Sun, 15 Apr 2001 03:33:34 +0200, "Andrea Ferro"
<And...@UrkaDVD.it> scrisse:
[snip]
#!/usr/bin/env python
if __name__=='__main__':
	print "Buona Pasqua"
-- 
 (o-  | Un OS per domarli, Un OS per trovarli,
 //\  | Un OS per ghermirli e nel buio incatenarli
 V_/_ | Nella terra di Redmond, ove l'ombra cupa scende...
Tessera 99ers 204           raffaele punto salmaso presso libero punto it

Altro che pasquetta fuori porta!
Qua abbiamo tutti bisogno di un mesetto di ricovero!
:-))
P.S.:  è spegnetelo sto caxxo di PC che avete nel cervello, almeno nelle
ferie!
Lello
"Lello Mele" <NOSPAM_vtm@NOSPAM_libero.it> ha scritto nel messaggio
news:3JXB6.12665$s93.7...@news.infostrada.it...


 Poche righe per augurare buona pasqua a tutti voi.
Auguri di Buona Pasqua (nonostante sia gią passata... sigh come volano
le licenze) anche da parte mia.
Manlio Perillo

Newsgroup: it.comp.lang.c
Titolo: Ordinamento Matrice

Avrei bisogno fare l'ordinamento ingenuo di una matrice (array 
bidimensionale) di interi.
La cosa mi rimane molto difficile da mettere in atto.
Sapete come fare e/o avete del codice da darmi?
Grazie mille! 


Intanto cosa intendi per ordinamento di una matrice
bidimensionale ?
Se vuoi ordinare un vettore di numeri interi e' abbastanza
chiaro cosa vuoi fare (a parte che l'ordinamento puo'
essere crescente o decrescente), ma se i numeri
sono in una matrice bidimensionale non e' chiaro che tipo di ordinamento
ti interessa.
Vuoi ordinarli comunque in modo (de)crescente come fossero in
un vettore monodimensionale distribuito (per riga o per colonna)
nella matrice ?
Vuoi ordinare i numeri all'interno di ogni riga e poi ordinare
lessicograficamente le righe ?
etc.etc.
Comunque, invece di "fare l'ordinamento ingenuo", potresti
leggerti il manuale della funzione qsort() che sta in
stdlib.h e che fa un ordinamento un po' meno ingenuo...
Se questo invece e' un esercizio per casa, ti consiglio di
consultare il tuo testo di rifermimento dove sara' sicuramente
spiegato almeno un algorimo "scemo" come il bubblesort.
ciao,
g.

Grazie ho risolto da solo.
Se a qualcuno serve posto il codice.
Newsgroup: it.comp.lang.c
Titolo: Salto di FREAD ad una locazione del file di mia scelta

Salve a tutti, ho una piccola banale domanda:
devo estrarre da un file in ingresso mediante fread tante sequenze di n byte 
distanziate tra loro di k byte;
mi spiego:
questo è il file:
seq1 di n+k byte| seq2 di n+k byte | ecc..
ma io sono interessato ai soli n byte (che si trovano sempre in coda nella 
sequenza): una soluzione
sarebbe leggere k byte in una zona di memoria qualunque (libera!) e caricare 
gli n nella zona di interesse
con un ciclo, tuttavia mi domando: esiste la posibilità di risparmiare il 
tempo di lettura e scrittura dei k
byte con qualche istruzione di salto che condizioni l' "fread"?
Vi ringrazio anticipatamente e attendo notizie ...
(PS : sperando che non siate in ferie... da buon uccellaccio del 
malaugurio!)
InuY4sHa
__________________________
Se la so, rispondo sempre (quasi) 

 byte con qualche istruzione di salto che condizioni l' "fread"?
fseek(file_in,k,SEEK_CUR);
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 fseek(file_in,k,SEEK_CUR);
Newsgroup: it.comp.lang.c
Titolo: extern e lo stack

dopo aver felicemente capito come il c utilizza il passaggio di argomenti
per valore e, tramite i puntatori, per riferimento, ho delle difficoltà a
capire la parola chiave extern...
ho definito in un punto c una variabile int esterna =0;
in un altro .c, dove c'è la  main, utilizzo questa parola chiave per
richiamare la variabile "esterna", la utilizzo in una funzione chiamata
somma e qui la setto = 5 ma, quando esco dallo stack, la variabile risulta
modificata definitivamente
credevo che una variabile vennisse modificata nello stack e, all'uscita del
sottoprogramma, ritornasse al suo valore originario;
cosa succede invece quando utilizzo la extern???
Grazie in anticipo a chi vorrà spiegarmi questo procedimento...
#include <stdio.h>
extern esterna;
int somma(void);
int main()
{
    printf("esterna prima di essere modificata: %d\n",esterna);
    somma();
    printf("esterna dopo di essere modificata: %d\n",esterna);
    return 0;
}
int somma(void)
{
    esterna = 5;
    printf("esterna durante lo stack: %d\n",esterna);
    return 0;
}


In questo caso la variabile "esterna" e' una variabile di tipo
globale:
cio' vuol dire che in qualsiasi file sorgente si puo'
rendere visibile tale variabile tramite la parola chiave extern.
Il valore delle variabili globali puo'essere modificato
all' interno della funzione,  e  il valore assegnato
alla variabile globale (all'interno della funzione)
persiste anche al termine dell' esecuzione della funzione
in quanto la variabile e' ancora visibile.
Forse facevi confusione con il concetto di passaggio delle
variabili, per valore, in una funzione .
Ciao.
Fab.
Sent via Deja.com
http://www.deja.com/

 sottoprogramma, ritornasse al suo valore originario;
Questo vale solo per le variabili locali automatiche (definite
all'interno di un blocco). Non vale per le variabili globali (come la
tua esterna) che hanno invece classe di allocazione statica. Inoltre,
extern significa semplicemente che la variabile è solo dichiarata. Deve
essere definita da qualche altra parte pena un errore del linker.
EMG

modificata definitivamente
E' corretto che sia cosi'.
Lo scope di una variabile viene assegnato al momento della
dichiarazione e la tua "esterna" e' una variabile globale.
Un altro caso simile e' il seguente :
#include <stdio.h>
int esterna = 0 ;
void funzione()
{ 
     extern int esterna ;
     esterna = 6 ;
}
int main()
{
    extern int esterna ;
    esterna = 5 ;
    funzione() ;
    printf( "%d\n", esterna ) ;
    return 0 ;
}
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."
Newsgroup: it.comp.lang.c
Titolo: Problemi di puntatori

Ciao a tutto il ng, ho un curioso (per me, sono abbastanza nuovo del
C)problema con dei puntatori. Ho realizzato una piccola applicazione con
le gtk2, lasciando inizialmente generare il codice a Glade, per poi
manipolarlo direttamente. Glade ha generato un main.c, un interface.c dove
viene creata la finestra e vari altri file (tra cui il callbacks.c dove si
trovano le funzioni di callback). Ora, il problema e' che non riesco a
passare alcun dato usando il gpointer nelle chiamate di callback. Mi
spiego meglio:
// interface.h
// callback di una voce di menu
g_signal_connect ((gpointer) (progetti1), "activate",
                    G_CALLBACK (on_projects_activate),
                    (gpointer) &pippo);
Qualunque valore passi come parametro finale di questa funzione, non
riesco poi a recuperarlo nella funzione. Nello specifico (pippo e' un
intero):
// void on_projects_activate(GtkWidget *wid, GdkEvent *ev, gpointer gp)
int *i = (int *) gp;
printf("GP contiene %i\n", *i);
ottengo 42320769. Indipendentemente dal valore di pippo...
Se invece passo una stringa ottengo dei caratteri incomprensibili.
Originariamente avrei voluto passare un GtkWidget, ma cosi' ottengo
un segmentation fault.
Francamente non capisco dove stia l'errore: chi puo' darmi una mano?
grazie in anticipo
Riccardo

 
caso mai interessasse a qualcuno, posto la soluzione: gli handler degli
eventi generati dalle voci di menu' devono avere soltanto due parametri,
il widget che li ha generati e il puntatore ai dati. Nessun GdkEvent,
quindi...
ciao

Newsgroup: it.comp.lang.c
Titolo: comparazione puntatori e portabilità

Saluti.
Ho un array [a...b] e due puntatori all'interno di esso (x e y).
Mi occorre fare un test x < y, e mi è venuto il dubbio se questa 
operazione sia sempre ben definita, secondo lo standard.
In caso contrario, conviene usare una soluzione alternativa, oppure su 
tutte le piattaforme "note" il comportamento è quello aspettato?
Grazie  Manlio Perillo

operazione sia sempre ben definita, secondo lo standard.
Il C definisce l'aritmetica tra operatori che prevede anche la
sottrazione di puntatori allo stesso tipo. Quindi la risposta alla tua
domanda č sě. Per la differenza tra puntatori esiste, in particolare,
il tipo ptrdiff_t, intero con segno.

 tipo ptrdiff_t, intero con segno.
Probabilmente il dubbio mi era venuto pensando proprio alla differenza 
tra puntatori.
Infatti x - y non credo proprio sia definito, se "x < y".
Su i386, con GCC (int) (x -y) mi restituisce -(y - x).
Saluti e grazie  Manlio Perillo

Su i386, con GCC (int) (x -y) mi restituisce -(y - x).
Lo č: ha un valore negativo. Come dicevo, ptrdiff_t č un intero con
segno. 

 segno.
Ok, grazie.
Manlio Perillo

Il C definisce l'aritmetica tra operatori[...]
Ovviamente è "tra puntatori".
Newsgroup: it.comp.lang.c
Titolo: Comando di Visual Basic in C

ciao a tutti
non so se farla qui questa domanda, ma siccome sono disperato , magari
trovo
qualcuno che si intende di C e anche di Visual Basic (e poi devo solo
sapere
un solo comando ;-))) )
cmq
dichiarato: dim ric as string, ric2 as string
in visual basic io uso il comando ric2 = left$(ric, 3)  per trovare le
prime
3 lettere verso sinistra della stringa ric
ora
siccome che devo fare un porting della mia applicazione da VB a C, ho
cercato di studiare e
di trovare un simile comando in C ma non ce l'ho fatta, riesco solo a
fare il print delle 3 lettere, ma non a inglobarle in un 'altra char (mi
da degli strani simboli
se faccio il print di ric2 in C)
premetto che per fare il print delle prime 3 lettere, ho utilizzato tre
volte ----> %c
ma poi queste tre variabili non riesco a inglobarle nella stringa.
Ditemi voi cosa devo fare :)))))
grazie ciao
lup...@hotmail.com

RZ,

<code>
	#include <string.h>
 
	/* ... */
	char *ric="Una stringa";
	char ric2[4];
	strncpy(ric2,ric,3);
</code>
	Alla prossima,
		Marco

</code>
strncpy copia al massimo n caratteri e fa un pad a zeri se
la stringa sorgente e' piu' corta di n.
Questo significa che strncpy in questo caso scrive 3 caratteri
ma che ric2[3] non viene toccato (in particolare non viene
impostato a 0.
Se la variabile ric2 e' statica o globale non ci sono problemi
ma se la variabile e' locale allora ric2[3] puo' contenere
qualunque cosa invece di '\0' e stampando ric2 come se fosse
una stringa si possono ottenere risultati strani (o crash).
In questo caso sarebbe piu' corretto usare
        strncpy(ric2,ric,3);
        ric2[3]='\0';
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

</code>

Vi ringrazio
alla prossima
Newsgroup: it.comp.lang.c
Titolo: array bidimensionali come argomenti (facile)

salve a tutti
se passo a una funzione un array bidimensonale
quando compilo mi da questo errore
prova.c:21: arithmetic on pointer to an incomplete type
(piu' in basso c'e' il codice)
dove la riga 21 e' questa: "printf(" %d ",myarr[i][j]);"
qual'e' il modo corretto di passare a una funzione un
array bidimensionali ?
grazie
davide
-- contenuto del file prova.c ---
int myfunc(int myarr[][],int dimensione);
#include<stdio.h>
#include<stdlib.h>
int
main() {
   int myarr[3][3];
   myfunc(myarr, 3);
   return 0;
}
int myfunc(int myarr[][],int dimensione)
{
   int i,j;
   for(i=0;i<dimensione;i++)
   {
     for(j=0;j<dimensione;j++)
     {
        printf(" %d ",myarr[i][j]);
     }
   }
   return 0;
}
---------------------------------

 int myfunc(int myarr[][],int dimensione);
int myfunc(int myarr[][3], int dimensione);
Devi indicare tutte le dimensioni, eventualmente puoi non indicare la prima, 
che e' opzionale, poiche' un array decade a puntatore.
In particolare:
    tipo array[dim1][dim2]...[dimN]
decate a:
    tipo * array[dim2]...[dimN]
(o se preferisci puoi usare la notazione "[]" nei prototipi).
Il resto va bene. 
Se non ti piace il sistema, ci sono delle alternative, che trovi sulle FAQ.
In particolare guarda questi link (e i link che partono da questi).
 
http://www.eskimo.com/~scs/C-faq/q6.18.html
 
http://www.eskimo.com/~scs/C-faq/q6.19.html
 
http://www.eskimo.com/~scs/C-faq/q6.20.html
-- 
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."


tipo * array[dim2]...[dimN]
rappresenta un array multiplo di puntatori
la forma corretta e'
tipo (* array)[dim2]...[dimN]
che e' appunto un puntatore ad un array multiplo.


grazie a tutti
davide

 
grazie a tutti
(anche dei link)
davide

 che e' appunto un puntatore ad un array multiplo.
Giusto, grazie della correzione.
Tra l'altro, faq 6.18 (che ho consigliato ieri, ma che dovevo leggermi 
meglio a quanto pare :) ):
+++
If you are passing a two-dimensional array to a function:
        int array[NROWS][NCOLUMNS];
        f(array);
the function's declaration must match:
        f(int a[][NCOLUMNS])
        { ... }
or
        f(int (*ap)[NCOLUMNS])  /* ap is a pointer to an array */
        { ... }
+++


[...]
+++
If you are passing a two-dimensional array to a function:
int array[NROWS][NCOLUMNS];f(array);
the function's declaration must match:f(int a[][NCOLUMNS]){ ... }
or
f(int (*ap)[NCOLUMNS])  /* ap is a pointer to an array */{ ... }
+++
ovvero? f(&array[0][NCOLUMNS]); ??
..sbagliato?ciao.

il primo caso va di sicuro bene...puoi anche usare un puntatore a puntatore
ad intero o char
--------------------------------
Inviato via 
http://usenet.libero.it
Newsgroup: it.comp.lang.c
Titolo: strutture dati

salve a tutti,
vorrei un aiuto:
ho una struttura del tipo
typedef struct element{
    char *word;
    struct element *next;
}Element;
come posso allocare l array word in una funzione?
cosě č corretto:
Element *new;
new->word=(char *)malloc(sizeof(char));
penso di no...grazie in anticipo a tutti
ci sono 10 tipi di persone,chi conosce il binario e chi no

 new->word=(char *)malloc(sizeof(char));
Element *new = (Element*) malloc(sizeof(Element));
if (new) {
        new->word = (char*) malloc(MY_LEN);
        strncpy(new->word, "prova", MY_LEN);
        ...etc..
        free(new->word);
        free(new);
        new = 0;


 
Io eviterei l'uso di new come nome di variabile. Lo stesso
programma potrebbe essere compilato tramite un compilatore
C++ che avrebbe parecchio da lamentarsi sulla sintassi precedente.
Come dovrebbero essere evitati per i nomi di variabile tutte le
altre parole riservate dal C++.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: gettimeofday

ciao...come mi è stato suggerito ho trovato che la funzione
gettimeofday permette di misurare l'intervallo tra due istanti con una
precisione migliore del secondo.
timeval ha la seguente struttura:
 struct timeval
{      long tv_sec;            /* seconds */
     long tv_usec;           /* microseconds */
 };
e quindi per misurare con la precisione del microsecondo ho fatto
così....
#include <sys/time.h>
#include <time.h>
...
...
long elapsedtime;
struct timeval tvstart, tvend;
gettimeofday(&tvstart, NULL);
...
...
...
gettimeofday(&tvend, NULL);
elapsedtime = (tvend.tv_sec - tvstart.tv_sec) * 1000000 +
                  tvend.tv_usec - tvstart.tv_usec;
solo che mi da i seguenti errori:
 C:\Documents and Settings\peppe\Desktop\provaaaaaaaaaaa\client.cpp
[Warning] In function:
113 C:\Documents and Settings\peppe\Desktop\provaaaaaaaaaaa\client.cpp
`
113 C:\Documents and Settings\peppe\Desktop\provaaaaaaaaaaa\client.cpp
(Each
vedendo altrove il seguente prototipo:
int gettimeofday(struct timeval *tv, struct timezone *tz)
ho provato ad utilizzare i puntatori ma cmq non funziona.....
forse è perchè uso windows???
ma non so come fare!!!!

 (Each
Ciao,
 puoi riportare il testo del warning?
 Federico
Newsgroup: it.comp.lang.c
Titolo: Aiuto su union e error C2664

Ciao a tutti,
cdo ho un problema :(
l'errore è
"error C2664: 'dato_stampa' : cannot convert parameter 2 from 
tipodatialunno' to 'tipodatostud'"
Ho le seguenti strutture dati:
#ifndef DATOSTUD
#define DATOSTUD
#include <stdio.h>
#include <stdlib.h>
typedef struct {
	char *nome;
	char *matricola;
} tipodatostud;
void datostud_stampa(FILE *fp,tipodatostud dato);
int datostud_uguali(tipodatostud dato1, tipodatostud dato2);
int datostud_precede(tipodatostud dato1, tipodatostud dato2);
#endif
#ifndef DATOPRES
#define DATOPRES
#include <stdio.h>
#include <stdlib.h>
typedef struct {
	int numpres;
}tipodatopres;
void datopres_stampa(FILE *fp,tipodatopres dato);
int datopres_uguali(tipodatopres dato1, tipodatopres dato2);
int datopres_precede(tipodatopres dato1, tipodatopres dato2);
#endif
#ifndef DATOSTRUCT
#define DATOSTRUCT
#include <stdio.h>
#include <stdlib.h>
#include "datostud.h"
#include "datopres.h"
typedef enum {datostud,datopres} typedati;
typedef struct {
	typedati tipodati;
	union {
		tipodatostud datostud;
		tipodatopres datopres;
	} ;
} tipodatialunno;
void dato_stampa(FILE *fp,tipodatostud dato);
int dato_uguali(tipodatialunno dato1, tipodatialunno dato2);
int dato_precede(tipodatialunno dato1, tipodatialunno dato2);
#endif
queste ultime tre funzioni controllano il valore di "tipodati", 
richiamando le funzioni di datopres o datostud.
Ho creato poi una struttura dati ABR fatta così
struct abr {
   tipodatialunno val;
   struct abr *left;
   struct abr *right;
};
e una delle funzioni di questo ABR:
void stampa_albero (FILE *fp, nodoabr *rp)
{
   	if (rp == NULL)
   	{
     	return;
	}
   	stampa_albero (fp, rp->left);
    	dato_stampa (fp, rp->val);
   	stampa_albero (fp, rp->right);
}
utilizza "dato_stampa".
Ecco la funzione incriminata:
void dato_stampa(FILE *fp,tipodatialunno dato)
{
	if (dato.tipodati == datostud)
	{
		datostud_stampa(fp, dato.datostud);
	}
	if (dato.tipodati == datopres)
	{
		datopres_stampa(fp, dato.datopres);
	}
}
Secondo voi dove potrebbe essere l'errore?
Non ridete però per la banalità del caso, sono un povero studente -__-
Scusate per la lunghezza e confusione del post, e grazie ancora...
-- 
Davide

    	dato_stampa (fp, rp->val);
Un "tipodatialunno".
Cambia la funzione in:
void dato_stampa(FILE *fp,tipodatialunno dato);
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 dal fatto che
CUT
Grazie, errore corretto! Per quanto riguarda la compilazione 
condizionale, č la prima volta che la uso :D
-- 
Davide
Newsgroup: it.comp.lang.c
Titolo: da file di testo a puntatore di array di stringhe.

volevo aggiungere la funzionalita' "prendi i path da file" al mio 
programmino.
Allora ho coperto il caso "-f" con getopt() ma la cosa mi da seg fault...
ALL'INTERNO DI data.h HO AGGIUNTO QUESTO METODO:
char **pathsFromFile (char **arr, int *dim, char *input) {
  FILE *input_file ;
  char **tmp ;
  char buf[LINESIZE] ;
  if( (input_file = fopen(input, "r")) == NULL ) {
    fprintf(stderr, "%s: Il file %s non è stato trovato!\n", input) ;
    exit(-1);
  }
  while( fgets(buf, LINESIZE, input_file) != NULL )
    tmp = (char **) inserisci(tmp, dim, buf) ;
  return tmp ;
}
IL QUALE RICHIAMA IL METODO INSERISCI:
char **inserisci(char **arr, int *dim, char *path) {
  int new_dim = *dim + 1 ;
  char **tmp = realloc(arr, (new_dim)*sizeof(char*)) ;
 if( tmp == NULL ) // controllo esito realloc
   exit(0) ;
 tmp[*dim] = strdup(path) ;
 *dim = new_dim ;
 return tmp ;
}
All'interno del MAIN il tutto viene richiamato cosi': (ma e' solo un codice 
di prova, per vedere se funziona)
    case 'f':
      strncpy(option_f, optarg, 512) ;
      printf("FILE DA CUI PRENDERE I PATH: %s\n", option_f) ;
      arr = (char **) pathsFromFile(arr, &dim, option_f) ;
il tutto e' compilato correttamente,
la printf viene eseguita... ma poi da Seg Fualt!

   char **tmp = realloc(arr, (new_dim)*sizeof(char*)) ;
/*                       ^^^                */
/*    che pensa bene di farne un realloc!!! */
Da qui' in poi ogni momento č buono per un core dump!
Confesso di non essere andato oltre, anche i char ** mi hanno un po' 
confuso.
Remo D.

mi rispondo da solo...
l'errore era che come al solito avevo dimenticato di inizializzare
char **tmp a NULL!!
e cosi' strdup impazziva! =)
che sia d'esempio per tutti eheheh!


come ho scritto, risolto questo tutto e' tornato a funzionare =)
Newsgroup: it.comp.lang.c
Titolo: funzione per lunghezza array

Mi serve necessariamente calcolare la lunghezza di un array passato ad una 
funzione.
Esempio:
<code>
int main(void) {
    int a[]={2,5,3,2,5,8,3};
    printf("La lunghezza dell'array e': %d\n",lenght(a));
    return 0;
}
int lenght(int v[]){
    return sizeof(v)/sizeof(int);
}
</code>
Ovviamente cosi', la funzione lenght, mi restituisce 1 (so il perche').
Come dovrei fare per calcolare, all'intero della funzione lenght, la 
lunghezza dell'array passato come argomento?

 lunghezza dell'array passato come argomento?
In modo standard non puoi.
Sotto alcune piattaforme (avevo sentito windows), c'e' forse qualche modo
sporco per ottenerlo (a memoria, array[-1]).
In linea di massima se ti serve saperlo devi incapsulare il tuo array in una
struttura in cui viene memorizzata anche la dimensione dell'array, oppure
passare come parametro addizionale la dimensione dell'array.
-- 
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."

 In modo standard non puoi.
Inoltre, sempre all'interno di funzioni (non la main, anche se in questo 
caso non ho provato), con questo codice:
<snip-code>
    int *freq=(int *)calloc(2,sizeof(int));
    *freq=5; *(freq+1)=1;
    printf("%d\n",freq[0]); printf("%d\n",freq[1]); 
    printf("La lunghezza dell'array e': %d\n",(sizeof(freq)/sizeof(int)));
</snip-code>
<output>
ho il seguente output:
5
1
La lunghezza dell'array e': 1
</output>
Il mio bisogno e' di avere un array inizializzato con due valori e poi, a 
seconda dell'input su cui lavora il programma, riallocare, con la funzione 
realloc, altre due locazioni per due interi. 
facendo cosě:
    int freq[2];
    freq[0]=5;freq[1]=0;
    if(something) {
        freq=(int *)realloc(freq,2*sizeof(int));
    }
il compilatore mi genera l'errore: incompatible types in assignment (nella 
riga dove uso la realloc)
Ma credo che non si possa scrivere una riga del genere (quella dove uso la 
realloc), perche' c'e' anche l'eventualita' che la realloc cambi 
l'indirizzo di partenza (freq) e che non sia piu' quello originale e quindi 
si rischierebbe di assegnare ad un indirizzo di array, che e' costante, 
un'altro nuovo. Giusto?
Quindi, alla fine, come dovrei fare?
Scusami ma all'uni abbiamo iniziato da poco con il C ed anche leggendo sul 
manuale non trovo queste cose.

 Quindi, alla fine, come dovrei fare?
unsigned int size = sizeof(int)*2;
int *freq = malloc(size);
freq[0]=5;freq[1]=0;
if(something)
{
freq = realloc(freq,size+=(2*sizeof(int)));
}
ed alla fine fai esattamente quello che volevi fare ;-)
ciao
Newsgroup: it.comp.lang.c
Titolo: Sono un principiante

Chiedo aiuto, ho comperato il libro di Linguaggio C(ANSI C)
di Kernighan e M.Ritchie, sono un super principiante,
e sono arrivato alle funzioni, qui adesso chide di fare un program. che
calcoli l'elev. a potenza con POWER
es:
      #include <stdio.h>
int power(int m, int n);
/* usa la funzione power */
main()
etc. etc. e' inutile che vi scriva tutto il programma.
all'esecuzione cmq mi dice errore, indicando lo la linea della parentesi
graffa..

prima di postare un messaggio identico a quello di 36 min. fa, aspetta e
leggi le risposte!

 graffa..
Di solito, quando usi funzioni matematiche, col gcc, devi linkare usando
l' opzione -lm
prova na' cosa tipo:
gcc  programma.c -o programma.exe -lm

...

Ciao Lorenzo,
non e´ inutile che ci posti il programma almeno per le righe riguardanti
l´errore in compilazione.
Non siamo veggenti e non possiamo aiutarti se per esempio hai fatto qualche
errore di battitura nel copiare il programma dal libro al tuo pc (cosa assai
facile, visto che il libro da cui lo hai copiato e´ la bibbia del C, per
cui...).
Ci scommetto i miei zebedei che hai sbagliato a copiarlo.
Temistocle e Aristide sono qui pronti a sacrificarsi....
Maurus

 Temistocle e Aristide sono qui pronti a sacrificarsi....
;-)
Sono pronti a sacrificarsi? Nah, non ci credo!
Alex
P.S. come potrei chiamare i miei ?!?

 -----------------------------------------------------------------------
adesso ti scrivo il prog. premetto sto sul  sistema operativo dos window
nel programma che segue le par graffe non posso metterle perche' l'outlook
non me
le fa scrivere le sostituisco con  £
#include <stdio.h>
int power(int m, int n);
/* usa la funzione power */
main()
£
       int i;
       for (i  =  0; i < 10; ++i)
             printf("%d  %d  %d\n", i, power(2, i), power(-3, i));
      return 0
£
/* power: eleva base all''n-esima potenza; n >= 0 */
int power(int base, int n)
£
           int i, p;
           p = 1;
          for (i = 1; i <= n; ++1)
               p = p * base;
         return p;
£
Spero riusciate a risolvere il problema ve ne saro' grato
distinti saluti


Allora Roberto,
Ci sono ben 2 errori nel tuo programma.
Il primo sta nel fatto che hai dimenticato il punto e virgola dove fai
return 0 nel main.
Il secondo sta nel fatto che nel for della funzione power, fai l´incremento
alla costante 1 (++1) invece che alla variabile i (++i).
Ora non dirmi che hai sbagliato a copiare anche nel tuo post senno´ non
finiamo piu´ :-)
Maurus

 finiamo piu´ :-)
Mi intrometto:
Mi sembra logico che siano errori di copiatura.... sono errori che il
compilatore segnala subito ed in modo chiaro! (se non lo sono, beh, *azzo,
la cosa si fa un tantino preoccupante....)
Alex

           for (i = 1; i <= n; ++1)


anch'io ho avuto il tuo stesso problema e ho scoperto che era colpa del
compilatore un po' vecchiotto. In seguito ho provato a compilare lo stesso
file con gcc di Linux e ha funzionato bene. Prova e fammi sapere!
Ciao
Newsgroup: it.comp.lang.c
Titolo: Cammino in un grafo

Ragazzi ho un problema e spero che qualcuno possa aiutarmi al piu'
presto.
Devo creare una funzione in C che, presi in ingresso un
grafo(rappresentato con liste di adiacenza) e due vertici ( a e b),
ritorni una lista contenente l'insieme di nodi che formano un qualsiasi
cammino dal vertice a al vertice b. Qualcuno sa realizzarla? Aspetto
vostre notizie. Grazie mille


non e' complicato.
per esempio puoi calcolare il cammino di lunghezza minima
tra i due nodi dati.
Volendo su google come "shortest path"  o forse anche
con "cammino minimo" trovi gia' tutto, sia l'algoritmo
da implementare, sia probabilmente il codice.
per trovare un cammino, senza fare una cosa sofisticata,
basta fare una cosa di questo tipo (chiaramente
migliorabile, ma per dare una idea) che si implementa
in meno di 5 minuti.
sia N il numero dei nodi che immagino numerati da 0 a N-1.
Siano i due vertici A e B.
inizializzi un vettore Precede[0..N-1] con tutti valori -1
(che indicano "nessun nodo").
inizializzi un vettore Trattato[0..N-1] con tutti valori
0 (=falso).
Poni Precede[A]=A in modo da segnalare che A e' il punto
di partenza.
A questo punto, iteri la seguente procedura fino a che
non si verificano due casi
1) Il valore Precede[B] e' diventato diverso da -1.
2) durante l'esecuzione della procedura sotto neanche
un valore del vettore Precede[] e' cambiato.
Se il caso (2) si verifica per primo significhera' che
B non e' raggiungibile da A.
La procedura da iterare e' la seguente:
scorri tutte le posizioni di Precede[],
fermandoti in quelle per cui il valore Precede[J]=K
e' maggiore o uguale a 0 e il valore di Trattato[J] e' 0,
che indica che il nodo non e' ancora stato "espanso",
ma che e' raggiungibile da A.
A questo punto, metti Trattato[J] a 1 (=vero) e per ogni nodo X
raggiungibile con un un arco dal nodo J, tale che
il valore Precede[X] sia a -1, poni Precede[X]=J.
Fine.
Ripetendo la procedura in pratica memorizzi in Precede[]
i cammini inversi che portano ad A.
Infatti al primo ciclo succedera' che per ogni nodo X raggiungibile
da A, setterai Precede[X]=A. Supponiamo che ci siano 3 nodi tali che
A->X1 A->X2 A->X3, avrai Precede[X1]=A, Precede[X2]=A, Precede[X3]=A.
Al secondo ciclo, se ad esempio nel grafo hai gli archi X1->Y1 X1->Y2 e
X1->X3, aggiornerai Precede[Y1]=X1, Precede[Y2]=X1, mentre Precede[X3]
e' gia'stato settato ad A, quindi non devo aggiornarlo. etc.etc.
Quando arrivi a settare il valore Precede[B] a qualcosa, allora
seguendo i valori all'indietro arrivi fino ad A e hai il tuo cammino.
Questo e' quello che posso dirti.
Di scrivere il codice al posto tuo, chiaramente non se parla nel
modo piu' assoluto.
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: Code in C

Hello world,
ho un array che rappresenta un albero binario
e vorrei leggerne i nodi in level-order.
L' array è definito:
a[row][3]
dove a[row][0] è il numero di nodo,
         a[row][1] è il numero di nodo del figlio sinistro,
         a[row][2] è il numero di nodo del figlio destro.
-1 nel campo figlio significa che il nodo non ha figlio in quella direzione.
I numeri di nodo vanno da 0 a N,
ma non hanno un ordine relativo nell'albero.
Ad esempio, ecco un array a:
{{0,1,3},
  {1,-1,2},
  {2,-1,4},
  {3,-1,5},
  {4,-1,6},
  {5,10,7},
  {6,-1,-1},
  {7,9,8}
  {8,-1,-1},
  {9,-1,-1},
  {10,-1,-1}}
E io vorrei accedere ai nodi in questo ordine:
0,                liv. 0
1,3,             liv. 1
2,5,             liv. 2
4,10,7,        liv. 3
6,9,8.          liv. 4
So che devo usare una coda, ma non riesco a scrivere il codice in C.
Qualcuno mi aiuti perfavore!
Grazie mille,
Ale

Se ti serve il codice di una coda, fammelo sapere che te lo invio...
Ciiips
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/





Scusate...solo una 
prova!



 Tutor at D.S.I. University of Milan
V_/_ 'The future will not remember, the past doesn't forget.'
I'm Linux zion 2.2.19 #7 Tue Apr 24 12:58:56 CEST 2001 i586

Newsgroup: it.comp.lang.c
Titolo: Ncurses :cosa sono e dove le trovo?

Salve a tutti , sapete dirmi cosa sono le
ncurses? e dove le posso trovare, su qualche
sito specifico?, sono free?
documentazione in italiano se ne trova?
funzionano con gcc+WinME?
Grazie a tutti
Ciao


I'm not prejudiced, I hate everyone equally.