mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Con che struttura rappresentereste questo problema?

Calogeno, il contadino deve attraversare un torrente e ha con se un lupo, un
cavolo e una capra ma ha un vascello tanto piccolo da poter portare con se
uno solo degli elementi indicati (lupo, capra, cavolo).
Se il lupo rimane solo, questo mangia la capra.
Se la capra rimane sola, questa mangia il cavolo.
Come farà Calogeno per far attraversare il fiume a lupo, capra e cavolo,
evitando che uno di questi venga mangiato?
Saluti

 wrote


E' vecchia!
Tommy

 ha scritto nel messaggio
news:bbj47m$g20$1...@hercules.btinternet.com...

allora per grazia mi puoi aiutare dandomi una risposta?

 allora per grazia mi puoi aiutare dandomi una risposta?
Calogeno deve portare la capra dall'altra parte. Il lupo ed il cavolo da
soli non danno nessun problema.
Poi Calogeno torna indietro lasciando la capra da sola, essa non crea
problemi.
Quando calogeno torna dal lupo e dal cavolo prende il cavolo e lo porta
dall'altra parte. Il lupo da solo non crea problemi.
Quando arriva dall'altra parte deve pero' riportare indietro la capra per
non lasciarla da sola con il cavolo. Il cavolo da solo non da problemi.
Quando torna indietro con la capra Calogeno, prendera' il lupo e lo portera'
da cavolo lasciando la capra da sola.
Infine Calogeno tornera' indietro per prendere la capra.
Non so cosa abbia a che fare con il C !?!?
Tommy
l...@libero.it

Kronomor wrote:

Il minimo e' una struttura di 8 bit (3 bit per sponta, 2 bit per dire cosa
c'e' sulla barca), un char quindi.
Su questa puoi applicare una ricerca esaustiva.
La dimensione della struttura dipende da quanto sara' grosso il tuo albero
di ricerca... in questo caso potresti anche abbondare e rappresentare le
cose in modo meno stringato, visto che e' un problema giocattolo.
Per risolvere il problema ti bastano un test per controllare se i 2 elementi
possono convivere sulla riva e una buona funzione di ricerca.
-- 
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."

 ha scritto nel messaggio
news:an9Da.58776$Ny5.1...@twister2.libero.it...


 implementarla come un grafo orientato?
Cosa?
Il problema si rappresenta come di ho detto, con un qualche tipo di
struttura che tenga conto di quelle 7 informazioni (oggetti sulle 2 rive,
oggetto in viaggio con lo scafista).
Se invece parli della ricerca, si usa un albero... che e' un grafo orientato
ma con delle limitazioni: ogni nodo, ad eccezione della radice, ha uno ed
un solo arco entrante e la radice NON ha archi entranti.
Ci sono n-mila nodi diversi di procedere con la ricerca per risparmiare
tempo o memoria (piu' importante la seconda), ma tutte quelle che conosco
si appoggiano sempre su una struttura ad albero.

Newsgroup: it.comp.lang.c
Titolo: Perchè dà errore in compilazione? (son 3 righe eh...)

Sono un niubbo e stò imparando il C (vengo da ambiente Pascal/Delphi) e stò 
provando un programmino del piffero...
Ho preso un programma che si compila benissimo, ma se aggiungo la riga:
if (buffer=='test') THEN (comando=1);
dà errore in compilazione.
Credo che sia per il tipo char/string, ma non sò come toglierci le gambe...
Ecco il listato!
int main(int argc, char *argv[])
{
char buffer[256];
int comando;
...
....
if (buffer=='test') THEN (comando=1);
return 0;
}

 
1) le stringhe costanti si scrivono cosi': "test" ( notare le virgolette )
2) non esiste il contronto di stringhe con == , ma si deve usare 
strcmp() ( o le sue varianti )
3) che cosa e' THEN ? in C non si usa
la sintassi giusta e':
if ( strcmp(buffer,"test)==0 ) { comando=1; }
ricordati inoltre che il C e' case sensitive ANCHE per le parole chiave:
if e non IF
while e non WHILE o While
un consiglio: recupera un buon manuale di riferimento del C :-)


 un consiglio: recupera un buon manuale di riferimento del C :-)
Ovviamente!
Grazie infinite! 

Addirittura??????
Che vuol dire "addirittura"?

 Che vuol dire "addirittura"?
Delphi non è case sensitive...non ricordavo (dai tempi delle superiori...) 
che il C era case sensitive :(
Ciauo!

Newsgroup: it.comp.lang.c
Titolo: credo OT

Conoscete qualche sito dove si possono trovare implementazioni di
algoritmi in C?

che genere di algoritmi?
"Giovanni Casu" <qgio...@tin.itq> ha scritto nel messaggio
news:3AB2604F...@tin.itq...


euterpex wrote:

ad esempio un algoritmo per creare la trasposta di una matrice sparsa
oppure per ricercare una stringa all'interno di un testo.
sto seguendo un corso di algorirtmi e strutture dati e vorrei altre
implementazioni oltre a quella del testo

 implementazioni oltre a quella del testo
una discreta quantita' di algoritmi numerici li trovi sul 'numerical
recipes in C'
www.nr.com

 
www.nr.com
Grazie mille!
Newsgroup: it.comp.lang.c
Titolo: Input invisibile

Volevo sapere come poter evitare in C sotto Unix che l'input da tastiera
sia leggibile a video. Esempio tipico: inserimento di una password.
Grazie a tutti.

sia leggibile a video. Esempio tipico: inserimento di una password.
Io so che sotto dos c'e' la getch che non fa echo, diversamente dalla
getche.
Ciao!



sia leggibile a video. Esempio tipico: inserimento di una password.
Dipende dalla versione di Unix -- BSD (o buon vecchio Unix V7)
oppure Posix (System/V); il secondo ha modi piu` complessi e
ricchi per controllare questo tipo di cose.  Molti sistemi Posix (ma
non l'originale System/V) supportano l'approccio V7/BSD per
compatibilita`.
Nello Unix "di una volta" (quello semplice e snello, ma pur
sempre molto potente), la system call ioctl, con parametro di
opzioni TIOCGETP, ti ritorna una "struct sgttyb" nel cui
campo sg_flags puoi settare o resettare il bit "ECHO"; tutte
le dichiarazioni necessarie le ottieni includendo l'header di
sistema sgtty.h.  Infine, rispedisci la struct sgttyb da te
modificata al sistema con un'altra ioctl, con parametro di
opzioni TIOCSETN, e cosi` abiliti o disabiliti l'eco a piacere.
(Per offrire il simpatico servizio di echeggiare "*" al posto
di qualsiasi carattere, questo pero` non basta; devi anche
cambiare alcuni altri bit di sg_flags per ottenere l'input "non
cucinato"/"un carattere alla volta", e implementare tu stesso
l'eco, il backspace per cancellare l'ultimo carattere, ecc).
In Posix (e simili), per quel che riguarda il puro discorso
di "eco si`/eco no", la situazione non e` molto diversa: tu
includi l'header di sistema termios.h, ottieni la struttura che
descrive i settaggi della tty (una "struct termios") con una
system call tcgetattr, setti o resetti il bit ECHO del campo
c_lflag di quella struct, poi la rimandi al sistema con una
system call tcsetattr con parametro di opzioni TCSANOW.
(Un poco piu` complesso e` settare l'input "non cucinato"
per gestirlo tu stesso).
Ti consiglio di usare il comando "man" del tuo sistema per
vedere se ti conviene il primo approccio o il secondo (se
vuoi preparare dei sorgenti portatili, dovrai usarli entrambi
con i soliti opportuni #if, ecc).
Alex

Grazie a tutti.
Newsgroup: it.comp.lang.c
Titolo: [OT?] CYGWIN

.... ho installato questa sorta di emulatore di UNIX sotto Windows, ma è
strano. Non mi riconosce una marea (quasi tutti) comandi di UNIX. Qualcuno
ha esperienza?
Grazie e scusate se sono OT.

 Grazie e scusate se sono OT.
I comandi di Unix non esistono per magia, ma esistono perche' li hai 
installati (ognuno e' un programma a parte, pacchettizzato in genere con 
altri simili). Prova a installare i pacchetti necessari (tip: inizia da 
fileutil(s), non ricordo se c'e' o no la 's') e poi controlla che siano nel 
path (soprattutto se non li usi dalla bash fornita con il cygwin).
-- 
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."


Grazie, ma cercandi sul sito CygWin non sono riuscito a trovarli. Mi
sapresti dare la url da cui scaricare tutte le librerie per la simulazione
di Unix con Cygwin?
Grazie

 path (soprattutto se non li usi dalla bash fornita con il cygwin).
Ho controllato del file setup e mi risultano tutte installate. Uffa, che
devo fare?

 devo fare?
1) hai solo scaricato su una directory locale o hai anche installato ?
dovresti avere una directory c:\cygwin
con le sottodirectory bin,etc,lib,sbin,tmp,usdr,var
2) stai usando cygwin.bat ?
3) almeno bash funziona ? 
4) qualche altra info ? La sfera di cristallo e' al tagliando ;-)
Marco
-- 
       marco.atzeri at 
fastwebnet.it
La prima delle Frequently Asked Questions: 
dove sono le FAQ ?      it.faq

 devo fare?
quando mi dava quel problema era solo perche non avevo messo il percorso
delle sottodirectory bin e sbin (e volendo anche usr/bin usr/sbin e
usr/local/bin e usr/local/sbin) di cygwin nel path
-- 
Stefano Balocco
RIPE handle:	6BONE-SB27
ID:             8EF05AB2
Fingerprint:    DF65 A9E5 E307 D647 9E41  1CD1 9265 BF7D 8EF0 5AB2
Key:            
http://www.denialofservice.it/stefano/stefanobalocco.asc
Keyserver:      
http://keyserver.linux.it

 ha scritto nel messaggio
news:20030419012015....@despammed.com...


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

vorrei iniziare ad imparare la programmazione in c.
ho un win xp.
cosa mi serve per editare e testare i miei primi esercizi?
grazie
ciao

 ha scritto nel messaggio
news:a27ea5f5.03110...@posting.google.com...

Newsgroup: it.comp.lang.c
Titolo: clrscr

Ciao a tutti,
Ho due domande:
1) io uso come complilatore il Visual Studio 6.0 ma putroppo non c'è la 
funzione clearscreen.
Come potrei fare?
2) Non mi è charo cosa faccia il seguente frammento di codice. Chi me lo 
spiega algoritmicamente e perchè il for non è inizializzato?
	for (;;) {
		do {
			printf ("(I)nsert Grades\n");
			printf ("(P)rint Grades\n");
			printf ("(E)xit\n");
			gets(str);
			ch = toupper(*str);
			}
		while (ch!='I' && ch!= S' && ch!= 'U');
}
Ringrazio in anticipo

 }
Questa sintassi del for e' il tipico modo del C per dire "cicla 
all'infinito". Quindi quello che il for fa, e' eseguire sempre quello 
che c'e' all'interno, senza uscire mai. Il while semplicemente fa 
inserire all'utente una scelta, e continua a proporgliela fintanto che 
l'input che gli viene dato non e' quello che vuole lui.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 che c'e' all'interno, senza uscire mai. 
Si, a meno che un non scriva un break.
Tommy

 Si, viene spesso chiamato "forever".
Questa non la sapevo, mi piace ;D

Newsgroup: it.comp.lang.c
Titolo: matrici e funzioni

sapreste dirmi come passare una matrice ad una funzione???mi spigo meglio:
se ho una matrice tipo ciao[100], come faccio a passare tutti gli elementi
della matrice alla funzione byebye(?????)
spero di avermi fatto capire
ciao ciao
PS:potrei avere una risposta diretta???
riciao
--
Posted from 
jona...@stud.fisica.unipg.it
 [141.250.2.211] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 passare tutti gli elementi della matrice alla funzione byebye(?????)
  Passane il puntatore.
<code>
	TYPE array[SIZE];
	RET_TYPE func(TYPE arr[]) { /* ... */ }
	func(array);
</code>
	Alla prossima,
		Marco

della matrice alla funzione byebye(?????)
Che intendi per "tutti gli elementi" ?
Se intendi lo spostamento nello stack di ogni singolo elemento della
matrice, te lo puoi scordare ! :)
L'unica cosa che puoi fare e' quella di passare il nome della matrice
alla funzione, che decade, quindi, nel puntatore al primo elemento
della matrice. Poi all'interno della funzione utilizzi la matrice
normalmente o come puntatore indicizzato con [].
Es.: 
int calc_len( char *s )
{
    char *p = s ;
    for ( ; *s++ ; ) ;
    return ( s - p ) ;    
}
main()
{
   char s [100] = "andrea" ;
   int l = calc_len( s ) ;
}
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

 della matrice alla funzione byebye(?????)
Ma vuoi passare una copia di tutti gli elementi dell'array oppure ti
basta passare il puntatore al primo? In questo secondo caso basta
utilizzare il normale passaggio di parametri per valore:
tuafunz( ciao );
dove
void tuafunz( T ciao[] );
EMG

> spero di avermi fatto capire
English? :-D

Ai spik&span inglisc veri veri uell end iu´ ????

 matrice, te lo puoi scordare ! :)
In realtà basterebbe mettere l'array (a patto che non sia allocato
dinamicamente) dentro una struttura e passare quella.
EMG

dinamicamente) dentro una struttura e passare quella.
Si ma, sinceramente, non ne capisco l'utilita'.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

 Si ma, sinceramente, non ne capisco l'utilita'.
Ah, se è per quello neanche io. :-)
EMG
Newsgroup: it.comp.lang.c
Titolo: creare pagine web in C

Ciao a tutti, vorrei creare uan pagina web generando i tag con un 
programma C. E' possibile generare i tag usando la printf, salvare la 
pagina su disco e successivamente aprirla con il browser? Per generare i 
tag e lanciare il browser non c'è problema, ma non saprei come salvare 
la pagina generata. Esiste un comando specifico richiamabile con la 
system? Ecco il sorgente:
#include<stdio.h>
#include<stdlib.h>
main()
{
  system("cls");
  printf("<html><title>pagina generata con linguaggio C</title>");
  printf("<body>");
  printf("<br><br>ho creato una pagina html generando i tag con un 
programma in linguaggio C");
  printf("</body></html>");
  printf("\n\navvio internet explorer\n\n");
  system("pause");
  system("start iexplore");
  printf("\n\n");
  system("pause");
}
Grazie in anticipo a tutti.

 system? 
Il comando 'start' che stai usando va gia' bene. Sotto windows puoi
usarlo per aprire direttamente i documenti html (start nomefile.html)
 > #include<stdio.h>
 > #include<stdlib.h>
 >
 > main()
 > {
Una sottigliezza: ricordati che e' meglio definire main come
int main(void) { ... }
ciao
   Giacomo

 {
FILE *out;
   out=fopen("file.html","wt");
   fprintf(out,"<html>...\n");
  // etc
   fclose(out);
E.

 E.
Ottimo, grazie. Ecco il sorgente:
#include<stdio.h>
#include<stdlib.h>
main()
{
 system("cls");
 FILE *ciccio;
 ciccio=fopen("pagina.htm","wt");
 fprintf(ciccio,"<html><title>pagina generata con linguaggio C</title>n");
 fprintf(ciccio,"<body>n");
 fprintf(ciccio,"<br><br>ho creato una pagina html generando i tag con un
programma in linguaggio Cn");
 fprintf(ciccio,"</body></html>n");
 fclose(ciccio);
 printf("nnavvio browsernn");
 system("pause");
 system("start pagina.htm");
 printf("nn");
 getchar();
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

  fprintf(ciccio,"<body>n");
non e' n, ma \n se vuoi andare a capo.
Ciao Jack

 
Non è colpa dell'OP. Newsland ci ha messo lo zampino.
Max


ahh ok.
Ciao Jack
Newsgroup: it.comp.lang.c
Titolo: array

Gli indici degli array nel C vanno da 0 a n-1, ma io devo usare una
routine che conta con gli indici da 1 a n.
Come posso fare a traslare gli indici del mio array da 1 a n in modo
da applicargli la routine senza problemi?
Ho pensato che potrei mettere un elemento arbitrario alla posizione
zero del mio array, fregarmene di lui, e passare solo i successivi
elementi dell'array alla mia routine, ma preferirei se si potesse fare
in maniera piu' elegante senza dover aumentre la dimensione dell'array
...
Grazie!


Un metodo poco elegante ma nel caso tuo di grande aiuto e' passare alla 
routine l'indirizzo
dell'array decrementato di 1 !!!
Cioe'
se hai una funzione chiamata es. routine che accetta un array e la 
dimensione :
   void routine (int array[],int size);
ed hai un array di 5 elementi:
   int array[5]={1,2,3,4,5};
pui passarlo alla funzione routine che esegui i suoi calcoli dall'indice 
1 ad n semplicemente in questo modo:
   routine(array-1,5);
Attento pero' assicurati che la routine non acceda all'indice zero se no 
potrebbe procurarti un segmentation fault!!!
Ti scrivo un piccolo esempio:
#include <stdio.h>
#define SIZE_ARRAY 5
void routine (int array[],int size);
main (){
   int array[SIZE_ARRAY]={1,2,3,4,5};
   routine(array-1,SIZE_ARRAY);
   return 0;
}
void routine  (int array[],int size)
{
   printf("\n");
   for(int i=1;i<=size;i++)
      printf("%d,",array[i]);
   printf("\n");
}

Newsgroup: it.comp.lang.c
Titolo: array e array

Devo realizzare un programma che conteggi i voti (che vanno da 1 a
10) di 40 studenti e che poi riassuma i responsi.
#include <stdio.h>
#define RESPONSE_SIZE 40
#define FREQUENCY_SIZE 11
main()
{
    int answer, rating;
    int responses[RESPONSE_SIZE] = {1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3,
8, 6, 10, 3, 8, 2, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10};
    int frequency[FREQUENCY_SIZE] = {0};
    for(answer = 0; answer <= RESPONSE_SIZE - 1; answer++)
        ++frequency[responses[answer]];
    printf("%s%17s\n", "Rating", "Frequency");
    for(rating = 1; rating <= FREQUENCY_SIZE - 1; rating++)
        printf("%6d%17d\n", rating, frequency[rating]);
    return 0;
}
Sul Deitel&Deitel c'è scritto a proposito:
 "++frequency[responses[answer]];
incrementerà in frequency il contatore appropriato secondo il valore di
responses[answer]. Per esempio quando la variabile contatore answer varra 0,
responses[answer] varrà 1, perciò ++frequency[responses[answer]]; sarà
interpretata in realtà come:
++frequency[1];
che incrementerà l'elemento uno del vettore. Quando answer varrà 1,
responses[answer] varrà 2, perciò ++frequency[responses[answer]]; sarà
interpretata come
++frequency[2];
che incrementerà l'elemento due del vettore. Quando answer varrà 2,
responses[answer] varrà 6, perciò ++frequency[frequency[answer]]; sarà
interpretata come
++frequency[6];
che incrementerà l'elemento 6 del vettore e così via."
Perchè, ad esempio, il vettore responses[answer] vale 6 quando la variabile
contatore vale 2?
Grazie

 wrote in message
Y0kO8.13097$Kt3.3...@twister2.libero.it...

Scusate!....Gia risolto.
Grazie
Ciao
Daryl
Newsgroup: it.comp.lang.c
Titolo: C++? No Grazie!

Mi è stato suggerito da Alessandro Monti di usare GetCursorPosition per
stampare un carattere in una pos X e Y, ma questo è un comando per Visual
C++, io invece sto usando C compilando con Ms Visual C/C++ 4.0, e vorrei
trovare qualcosa come GotoXY che sul compilatore Microsoft non c'è.
Qualcuno può aiutarmi?
Grazie.
--
Marco @Madarco
mad...@hotmail.com
 &&§$$§&
&|@  @|#&
 '[   /  , ]## <- Io
  | °---> |#&
  \_, _/&&'

 wrote in message
7vvnpe$a4g$4...@nslave1.tin.it...


senti non ho sottomano i msgs precedenti, per cui spero di non dire
bischerate.... ma credo che tu faccia un po' di confusione: GetCursorPos e
SetCursorPos non sono "comandi" del Visual C++ (che e' un ambiente di
sviluppo e non un liguaggio) ma semplici API Win32, ovvero funzioni C
(guardacaso), che puoi usare senza problemi, a prescindere dal linguaggio
(oddio questo non è proprio vero, ma è anche un'altra storia......).
hope this helps,
Lorenzo


 stampare un carattere in una pos X e Y,
Non ho seguito i msg precedenti e non riesco a trovatli,ma se ti riferisci
al DOS c'è un'apposita chiamata al bios per ottenere il posizionamento del
cursore (INT 10h, AH = 02, DH = y, DL = x, BH = display page), tra l'altro
dovrebbe avere l'equivalente funzione C (forse gotoxy ? ma sicuramente
dipenderà dal compilatore perchè non è standard).
Ciao da Explobot!

 Qualcuno puň aiutarmi?
#define Gotoxy SetCursorPos
Va bene?
Se cosě non ti basta, definisciti tu una funzione che poi chiami GotoXY. A
questo punto il tuo problema mi sembra sia solo il nome della funzione, no?
Se vuoi, poi, puoi mettere la funzione da te creata in un file separato e
chiamare la relativa intestazione "conio.h", cosě puoi avere anche l'header
giusto proprio come se usassi il Borland.
--
Alessandro Monti

se hai proprio l'acqua alla gola puoi usare le sequenze di escape...
Le sequenze di escape valgono solo per il driver ANSI.SYS ed in
ambiente DOS/Windows.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

 > C++, io invece sto usando C compilando con Ms Visual C/C++ 4.0, e vorrei

Newsgroup: it.comp.lang.c
Titolo: Aiuto per puntatori doppi e alberi binari

Salve a tutti,
 sono un principiante alle prime armi e avre bisogno di un aiuto per un
esame :(
Non riesco a capire la convenienza dell'utilizzo di puntatori doppi negli
alberi binari risetto ai "semplici" puntatori.
Se qualcuno potesse spiegarmelo in maniera semplice, e magari con degli
esempi, mi farebbe un enorme piacere.
Grazie a tutti :)
t2t

 Grazie a tutti :)
Ad esempio in una ipotetica funzione che *modifica* l'albero binario
solitamente viene utilizzato un puntatore a puntatore (oppure viene
restituito il puntatore).
Altrimenti non potresti modificare l'indirizzo del puntatore all'albero,
cosa che va fatta qualora si voglia allocare nuovi nodi ad esempio.
void insert(Tree *t, TYPE data)
{
    if(t == NULL)
    {
        t = malloc(sizeof(*t));
        t -> data = data;
        t -> left = NULL;
        t -> right = NULL;
     }
    else
    {
    //ecc....
    }
}
ecco, una simile funzione equivale dal punto di vista logico a fare una cosa
così visibilmente inutile :
void f(int n)
{
    n = 4;
}
solo che nel primo caso oltre che inutule perdi l'indirizzo della memoria
allocata con malloc e quindi fai uno spreco e ovviamente la fnuzine non fa
quello che vuoi.
Ora per non perdere il nuovo indirizzo di t restituito da malloc o ritorni
l'indirizzo della memoria allocata così:
Tree* insert(Tree *t, TYPE data)
{
    if(t == NULL)
    {
        t = malloc(sizeof(*t));
        ...
        return t;
     }
    ...
}
oppure passi per indirizzo il puntatore : utilizzi un puntatore a puntatore
:
ora se
viod f(int *n)
{
    *n = 5;
}
non è più un inutile allora allo stesso modo
void insert(Tree_node **t, TYPE data)
{
    if(*t == NULL)
    {
        *t = malloc(sizeof(Tree_node));
        (*t) -> data = data;
        (*t) -> left = NULL;
        (*t) -> right = NULL;
     }
    ...
}
non perderà l'indirizzo della momoria allocata con malloc che ora si trova
in *t.

     file://ecc....

Newsgroup: it.comp.lang.c
Titolo: Pila

Ciao,
chiedo scusa per la domanda elementarissima...
devo fare il classico programma per la pila (stack).
Questa č una parte del programma:
...
    struct Nodo
    {
        int Info;
        Nodo *Punt;
    };
/*void CreaPila (Nodo Testa)
    {
 Testa = NULL; *****
 printf("Pila creata!");
 getch();
    }*/
...
Quando vado a compilare mi dice:
ERROR 14: Cannot Convert Int to Nodo (evidenziando la riga dove ho messo i 5
asterischi).
Ma non č cosě che si inizializza la pila??? Aiutatemi...

 ha scritto nel messaggio
news:L5uwa.171014$K35.4...@news2.tin.it...

Tieni conto di questo:
NULL = 0, ovver e' un intero, e viene usato per inizializzare i puntatori.
Quindi stai cercando di assegnare un intero ad una struttura di tipo nodo.
Forse dovrebbe essere
void CreaPila (Nodo * Testa)
{
 Testa = NULL;
...
ciao,
Ema

 /*void CreaPila (Nodo Testa)
prova con Nodo *testa?
-- 
Andrea Bergia - studente              Linux Registered User #281550

 Testa = NULL; *****
questa operazione, fatta senza che Nodo sia un puntatore, ti da errore su
int, perchè la struttura è costituita da un puntatore alla struttura stessa
e un intero, quindi si arrabbia:
Testa.varInt = 0;
Testa.ptr_Nodo = NULL; // o 0 è uguale
Usando il puntatore a Nodo, devi stare attento perchè in questo modo perdi
il riferimento alla locazione di memoria della struttura:
Testa = NULL; // imposti testa a null, perdendo l'indirizzo che ti porta
alla struttura allocata.
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

Newsgroup: it.comp.lang.c
Titolo: help char *ptr[n] !

Ciao devo dire che nonostante tutti i miei
studi gli array di puntatori mi sfuggono:
Dove sbaglio ?
Vorrei inserire delle stringhe e poi stamparle...
#include<stdio.h>
main()
{
char *arrstr[5];
int i = 0, c = 0;
     while(i<=4)
     {
       printf("Inserisci stringa N° :%d\n",i);
       scanf("%s",&arrstr[i]);
       ++i;
     }
         while(c<=4)
         {
	printf("La stringa in *arrstr[%d] è : %s\n",c, &arrstr[c]);
         c++;
          }
  return 0;
}

        scanf("%s",&arrstr[i]);
Sbagli.
Devi allocare lo spazio per le 5 stringhe.
Tommy

 }
I puntatori sono bestie difficili...
Io facevo di peggio.
Saluti
-- 
Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.
Worship Him! 666

Grazie..
Newsgroup: it.comp.lang.c
Titolo: Codice per eliminazione punti

Devo scrivere un programma in C che legga un file di testo contenente nella
prima riga il numero di punti (bidimensionali) che compongono il contorno di
una figura (ad es. punti = n) , e nelle successive n righe le coordinate
(float) x, y dei punti .
Normalmente ho a che fare con figure il cui contorno č composto anche da
9000-10000 pixels, per cui vorrei eliminare alcuni punti (la maggior parte)
per arrivare ad avere circa 1000-2000 punti.
L'algoritmo da implementare č questo:
Considero un punto del contorno P1 di coordinate (x1,y1) , questo punto
diventa il centro di un cerchio di raggio r. Adesso elimino tutti i punti
del contorno della figura che cadono all'interno del cerchio (tranne P1).
Fatto questo vado a considerare un punto P2 che scelgo in modo che sia il
piů vicino a P1 di tutti i punti non ancora eliminati e vi applico il
procedimento seguito prima. Alla fine vorrei avere al massimo diciamo 1500
punti superstiti da 10000.
Fatto ciň il programma deve stampare un file in cui sono presenti il numero
di punti superstiti e le coordinate (x,y) di questi punti.
Ringrazio in anticipo chiunque mi voglia dare qualche idea per risolvere
questo problema.
Ciao a tutti,  Luca.

 procedimento seguito prima.
mah, questo algoritmo non mi sembra troppo bello
sinceramente io affronterei il problema in un altro modo:
per prima cosa leggerei il file e creerei, che so, una lista o un array con
tutte le coppie di coordinate.
poi assegnerei ad ogni coppia (ovvero ad ogni punto) un valore calcolato
secondo tutti gli altri punti, una sorta di "coefficiente di vicinanza"
...che so, 0 se due punti sono più lontani di un tot predefinito, 1 se sono
coincidenti - non so quale formula vada meglio, bisogna fare qualche
prova...
e poi unire tutti gli "n meno 1" valori in un unico coefficiente da
assegnare al punto stesso.
poi elimini dalla lista tutti i punti con coefficiente maggiore di un tot
sempre predefinito (oppure calcolato a seconda di quanti punti farebbe
eliminare)
questa è solo un'idea, però già mi sembra meglio del tuo algoritmo di
"eliminazione spartana"
in effetti però è anche più pesante :-(
ci penserò...
TobiX
Newsgroup: it.comp.lang.c
Titolo: confronto tra vettori

Ciao a tutti,
vorrei porvi un quesito, scusate se per caso è banale ma sono alle prime
armi con C. Ho un vettore di 4 elementi di tipo char, ogni elemento è un bit
ovvero 1 oppure 0. DEvo effettuare il confronto di questo vettore con tutte
le possibili combinazioni di 4 bit per individuare quella corrispondente. In
teoria dovrei dichiarare un vettore di char per ogni combinazione e poi
effettuare il confronto con il vettore da testare, non esiste un modo +
veloce senza che io debba dichiarare tutti i vettori? avete qualche
suggerimento?
grazie!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
I possibili vettori sono solo 16.
se il vettore e'
char v[4];
allora basta calcolare
K = v[0]|(v[1]<<1)|(v[2]<<2)|(v[3]<<3);
o equivalentemente
K = v[0]+2*v[1]+4*v[2]+8*v[3];
per ottenere un numero tra 0 e 15 che identifica
univocamente il vettore.


Il 05 Apr 2007, 13:15, Giovanni Resta
<g.res...@iit.cnr.it.CUT_THIS_AND_xxx> ha scritto:

grazie mille per il suggerimento! non ci avevo pensato


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

unsigned short Data;
scanf("%hd",Data);
La riga esposta dovrebbe inserire in Data (uno short senza segno) il
risultato di scanf(). Ma mi da un errore strano mentre eseguo
l'applicazione. Qual'č il problema?
Ciao
Grazie
p.s se č possibile rispondete qui : 
cla...@tin.it

l'applicazione. Qual'è il problema?
Che devi passare l'indirizzo della variabile .
scanf("%hd",&Data);

...
Eccoti la riga corretta :
scanf("%hd", &Data);
ciao
Newsgroup: it.comp.lang.c
Titolo: Parametri di una funzione

Salve volevo averere alcune delucidazioni su alcune questioni sui parametri
formali di una funzione , e in particolare sui puntatori.
Premetto che sto iniziando a imparare il c ed il mio superiore , che dice di
essere un dio,
dice che i parametri  devono essere passati solo come puntatori,
cioč solo per riferimento e non per valore.
Inoltre quando passo il puntatore alla funzione ,
il mio capo mi fa fare la malloc
di un puntatore dello stesso genere e poi mi fa assegnare l'indirizzo del
puntatore a quello appena allocato.
es.
int funzione1( int *valore);
int main()
{ int a;
funzione1( &a);
return(0);
}
int funzione1( int *valore)
{    int   *valore2 ;
valore2 = (int *) malloc(sizeof(int));
valore2= valore;
free(valore2);
return(0);
}
Dato che di questa persona che si spaccia di essere un dio in c , sarei
molto felice se potreste darmi una risposta , anche perchč in alcuni testi
di c e c++ non ho trovato niente di tutto ciň.

di c e c++ non ho trovato niente di tutto ciň.
Cosa non esiste?
-- 
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."

 l'indirizzo.
Non devo ritornare nessun indirizzo!
Grazie.

:

La malloc riserva a runtime una porzione di memoria, e questa memoria
viene allocata con la malloc e non staticamente perche':
- devi crearla in una funzione ma usarla in altre che non sono
chiamate direttamente dalla funzione che alloca la memoria (es in una
funzione crei un buffer che verra' poi usato dal chiamante)
- non sai a priori quando spazio ti serve, ma lo scopri durante il
programma
Nota: in molti casi sono vere entrambe.
Non devi abusare della malloc perche' ha un costo non trascurabile
(soprattutto nel caso debba effettivamente richiedere nuova memoria al
sistema).
A volte potrebbe servirti un buffer locale, di cui non conosci a
priori la dimensione: in questo caso lo allochi dinamicamente, lo usi,
prima di uscire lo distruggi e poi esci... in casi del genere pero'
andrebbe a pennello la funzione (non standard) alloca [1], se il
sistema su cui lavori la mette a disposizione, piu' che una malloc.
[1] Riserva una porzione di spazio sullo stack della funzione...
spazio che viene automaticamente liberato al momento della return.


di c e c++ non ho trovato niente di tutto ciň.
Scomodare una malloc() per allocare un int e' un'emerita stronzata, mi
pare evidente che il tuo capo odia il C e fa di tutto per tirarne
fuori gli aspetti piu' negativi.
ciao, acc.   
a...@libero.it

 di c e c++ non ho trovato niente di tutto ciň.
Credo che tu non l'abbai trovato perchč usare un malloc per assegnare un 
valore non č proprio l'esempio piů costruttivo del mondo... forse č il 
caso che il tuo capo si sgonfi un po'...
Leonardo

 cioč solo per riferimento e non per valore.
Parlando dal punto di vista del C non ha senso obbligare ad usare solo il
passaggio per riferimento. Penso invece che il tuo *dio* ritenga *blasfemo*
il passaggio per valore e quindi lo abbia *scomunicato* obbligando i suoi
*discepoli* (cioe' tu ) ad evitarlo... :)
[cut]
Ciao, Davide :)
Newsgroup: it.comp.lang.c
Titolo: programma da riga di comando

Salve... ho un problema:
ho creato un programma in cui il main ha fondamentalmente alcune
funzioni che hanno come parametro il file "location":
#include<iostream.h>
......
extern int funzione(char nm_location[12]);
.....
void main(){
char location[12]="mio_file.abc";
funzione(location);
.......
.......
Il problema è che posso gestire solo il file "mio_file.abc"... Invece
vorrei fare in modo di poter gestire qualsiasi file, passandolo da
riga di comando, stile:
mioprog -f voglioquesto.abc
oppure 
mioprog voglioquesto.abc
come si fa?? grazie

> void main(){
invece di scrivere void main() (che come ti diranno molti č sbagliato),
scrivi
int main(int argc, char *argv[ ])
e poi (sono pigro, copio e incollo dall'msdn):
argc
An integer that contains the count of arguments that follow in argv. The
argc parameter is always greater than or equal to 1.
argv
An array of null-terminated strings representing command-line arguments
entered by the user of the program. By convention, argv[0] is the command
with which the program is invoked, argv[1] is the first command-line
argument, and so on, until argv[argc], which is always NULL. See Customizing
Command Line Processing for information on suppressing command-line
processing.
The first command-line argument is always argv[1] and the last one is
argv[argc - 1].
Chiaro no? se argc == 1, allora non ci sono parametri, argc = 2 allora c'č
un parametro in argv[1] e cosě via.
--- bye

 come si fa?? grazie
Puoi trastullarti con argc e argv oppure cercare qualcosa tipo la getopt().
Ciao
-- 
none

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

sembra assurdo anche a me... ma dopo aver installato il turbo C ora sia
scanf che gets si rifiutano di leggermi stringhe.... semplicemente il
puntatore non subisce l'assegnazione: qualcuno sa dirmi che sarà successo?

you wrote :
#sembra assurdo anche a me... ma dopo aver installato il turbo C ora sia
#scanf che gets si rifiutano di leggermi stringhe.... semplicemente il
#puntatore non subisce l'assegnazione: qualcuno sa dirmi che sarà successo?
Senza la sfera di cristallo non e' possibile. ;) 
Posta un po' di codice...
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: Porta Seriale in C:come usarla?

vorrei scambiare dati tra un semplice circuito digitale in TTL e il
mio computer, conosco il C, un po' di C++, ma non ho idea di che porta
usare, e sopratutto come usarla.. potreste aiutarmi?
GRAZIE!!
CIAO 

Devi specificare il SO !!!
Ciao, Mat

Devi specificare il SO !!!
per ora il DOS, poi imparero' linux..
ma inoltre io vorrei sapere la piedinatura per cercare di collegare
qualche circuito fatto da me al computer..
Grazie a chi rispondera'
CIAO

...

Se vuoi interfacciare direttamente un circuito TTL al PC di conviene
utilizzare la porta parallela. Per accedervi, dipende tutto dal sistema
operativo, e se puoi scegliere ti consiglierei il buon vecchio DOS così da
non avere limitazioni di sorta per l'accesso all'hardware. Infine segnati
questo link 
www.senet.com.au/~cpeacock
 dove puoi trovare tutte le
informazioni di cui hai bisogno.
Ciao Andrea
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
per rispndere rimuovere NOSPAM dall'indirizzo
to reply please remove NOSPAM from the address
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

...

 Su 
www.serres.hol.gr/computers/conector/
 trovi il pinout di tutti i connettori
della terra. Ad esempio la seriale:
 Serial Port (DB 25 pin)
-------------------------------------------------------------
\ 1   2   3  4   5   6   7   8  9 10 11 12 13 /     (Male)
 \ 14 15 16 17 18 19 20 21 22 23 24 25 /
  ------------------------------------------------------
PIN       SIGNAL
1.........N/C (Not Connect)
2.........TxD (Transmit Data)
3.........RxD (Receive Data)
4.........RTS (Request To Send)
5.........CTS (Clear To Send)
6.........DSR (Data Set Ready)
7.........GND (Signal Ground)
8.........DCD (Data Carrier Detect)
9-19......N/C (Not Connect)
20........DTR (Data Terminal Ready)
21........N/C (Not Connect)
22........RI  (Ring Indicator)
23........N/C (Not Connect)
24........N/C (Not Connect)
25........N/C (Not Connect)
 Su quel sito trovi anche 2 o 3 file .HLP per Windows (in formato .ZIP)
contenenti tutti gli schemi che presentano nelle loro pagine HTML: se non vuoi
buttare troppo tempo ti consiglio di scaricare direttamente quelli.
 Purtroppo il sito è greco ed altri dati tecnici li hanno scritti in lingua
madre... sigh.
        Bye
        Sky
/* togliere il '-' davanti all'e_mail
    per rispondermi direttamente
    oppure 
men...@writeme.com
 */
Newsgroup: it.comp.lang.c
Titolo: big int

ciao.
esiste una libreria per gli interi a 256 bit?
grazie
-- 
             , _
            O |_)   
http://magicforum.altervista.org
        |_ /_[__]
_______ | |b|   | ______

 grazie
Specificatamente a 256 bit mi sembrerebbe un po' strano,
comunque esiste una ottima libreria per fare calcoli
con interi in precisione arbitraria.
Si chiama gmp e la trovi qui:
http://www.swox.com/gmp/
recentemente hanno trovato un bug nella routine
di moltiplicazione che usa la FFT, ma se ti limiti
a numeri "piccoli" (come sono numeri a 256 bit, per gmp)
non dovresti aver nessuun problema e in ogni
caso l'uso della fft puo' essere disabilitata in
fase di creazione della libreria.
ciao,
g.

 fase di creazione della libreria.
Credo che questa sia da preferire
http://www.tc.umn.edu/~ringx004/mapm-main.html
Ho preso spunto da questa per l'aggiornamento di un generatore di frattali
(mandelbrot&julia) su AmigaOS 'FlashMandelWOS' ;-)
Gestisce sia interi che non e sotto c++ ti facilita enormemente le cose.
Inoltre ha i sorgenti sia per win che per linux.

On Tue, 20 Apr 2004 14:41:34 +0200, Fl@sh wrote:
le proverň entrambe. grazie 1000
-- 
      ,-"""-.
 oo._/ \___/ \
(____)_/___\__\_)	
http://magicforum.altervista.org
    /_//   \\_\
Newsgroup: it.comp.lang.c
Titolo: keyword register

Ciao,
premessa: io uso prevalentemente cross-compiler per HC08  e 56F800/E
dela Freescale (Codewarrior).
Oggi mi e' venuto in mente la faccenda della keyword register.
Mi spiego: questa keyword e' un consiglio per il compilatore per
mantenere la variabile nei registri del processore invece di metterla
nella RAM.
La domanda e': visto che cmq il compilatore puo' tranquillamente
fregarsene, e che normalmente i compilatori che ottimizzano sono piu'
smart degli esseri umani (nel campo dell'ottimizzazione) cosa serve
questa keyword?
Ciao Jack

 serve questa keyword?
Alle origini dei primi compilatori era utile per rendere più 
efficienti e più piccoli i programmi, ma al giorno d'oggi serve 
veramente poco.
Fra le varie FAQ sull'uso del gcc ricordo di aver letto che non è 
consigliato usarla perché rende più difficile l'ottimizzazione e non 
permette l'uso di certi comandi dei debugger che non possono operare 
direttamente sui registri.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 direttamente sui registri.
gcc non e' sto gran compilatore infatti.
e cmq se si debugga di solito si evita di ottimizzare proprio
perquesto motivo.
Ciao Jack

> gcc non e' sto gran compilatore infatti.
Questa e' un'affermazione un po' forte ;-)
Pleg 

 Questa e' un'affermazione un po' forte ;-)
a livello di crosscompiling per roba embedded (ad esempio ARM) e' la
verita', per processori general purpose...anche, basta vedere la
differenza tra il compilatore della intel e gcc...
Ciao Jack

Jack ha scritto:

andrea ,intendeva i contatti(amici etc etc) che ognuno ha aggiunto sul 
suo messenger..non le informazioni di contatto credo
so che amsn+emesene+pymsn si sono uniti assieme fonte:
http://www.ossblog.it/post/4195/amsn-emesene-e-pymsn-si-uniscono-per-dar-vita-ad-amsn2
prova ad unirti pure te :P

bruce ha scritto:

sorry sbagliato :P
Newsgroup: it.comp.lang.c
Titolo: programmazione DSP

Ciao a tutti,
sto cercando di programmare un DSP in c per applicazioni audio...nella 
documentazione mi sono imbattuto nella dichiarazione di un array di questo 
tipo:
volatile short sCodec1836TxRegs[CODEC_1836_REGS_LENGTH] =
{
     DAC_CONTROL_1  | 0x000,
     DAC_CONTROL_2  | 0x000,
     DAC_VOLUME_0    | 0x3ff,
     DAC_VOLUME_1    | 0x3ff,
     DAC_VOLUME_2    | 0x3ff,
     DAC_VOLUME_3    | 0x3ff,
     DAC_VOLUME_4    | 0x3ff,
     DAC_VOLUME_5    | 0x3ff,
     ADC_CONTROL_1  | 0x000,
     ADC_CONTROL_2  | 0x180,
     ADC_CONTROL_3  | 0x000
};
cosa vuo dire il separatore "|"?
PS: tutte le variabili contenute nell'array sono già state definite ed 
inizializzate precedentemente.
Grazie a tutti 

SDV ha scritto:

Non è un "separatore", ma l'OR binario. Praticamente mette a 1 i bit 
delle variabili a sinistra in accordo coi bit a 1 nelle maschere a 
destra lasciando i rimanenti invariati.
Ciao.

 ha scritto nel messaggio 
news:447470a9$0$18289$4faf...@reader1.news.tin.it...

Le due maschere sono definite in esadecimale, l'or va fatto sul 
corrispettivo binario delle maschere giusto?
Ad es. se DAC_VOLUME_0 è 0x2000
l'operatore calcola "0x2000 | 0x3ff" cioè "10000000000000 | 00001111111111" 
giusto? 

 giusto? 
Si, l'or binario ti restituirà un valore i cui bit sono il risultato di 
un or bit per bit dei due operandi.
Ciao.

 ha scritto nel messaggio 
news:44747e9b$0$36923$4faf...@reader3.news.tin.it...


 
e' una questione di pulizia, importante nella programmazione generale, 
ma che diventa fondamentale quando si scrivono programmi su piattaforme 
embedded come DSP e/o microcontroller dove i programmi interagiscono 
molto con l'HW
prova ad immaginare un DSP/micro con un trentina di registri di 
configurazione dell'HW in cui si scrivono particolari valori , 
spessisimo in bitfield , se metti le costanti numeriche combinate dopo 
una settimana nno ricordi piu' cosa vogliono dire :-)
inoltre un compilatore appena decente le espressioni formate da sole 
costanti ( senza riferimenti a variabili ) le risolve in fase di 
compilazione nno generando alcun codice

 di codice?
Be' si. Però probabilmente risulta più chiaro così (e.g.: alterazione di 
valori di default o preparazione di maschere da usare in seguito). 
Utilizzando i valori pre-calcolati risparmi qualche operazione 
all'inizializzazione, ma se cambia qualcosa nei valori delle variabili o 
nelle maschere e devi ricompilare devi rifarti tutto di nuovo a mano. 
Lasciando al programma l'onere di smazzarsi il calcolo dell'or ti eviti 
il problema, senza contare che, come detto prima, dovrebbe risultare più 
chiaro che cosa stai facendo.
Ciao.
Newsgroup: it.comp.lang.c
Titolo: Lista... ricorsione

Buonasera a tutti...
Avrei bisogno di sfogliare una lista in modo ricorsivo(anche se è un
po'stupido accedere x ricorsione, è un esercizio)... e sostituire a
tutti i valori=A un valore B
Il programma si compila... ma quando eseguito... nella chiamata a
funzione da errore di segmentazione(visto con il debug) e termina...
qualcuno riesce ad aiutarmi?
FUNZIONE
void sostituisci(dato_t *testa, int a, int b)
{
dato_t *temp;
temp=testa;
printf("%d", testa);
if(temp==0)
 return;
else
 sostituisci(temp->next, a, b); \\QUI DA
ERRORE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(temp->valore==a)
  temp->valore=b;
return;
}
CODICE COMPLETO
typedef struct dato {
                    int valore;
                    struct dato *next;
                    } dato_t;
void sostituisci(dato_t *, int, int);
dato_t *inserisciintesta(dato_t *, int);
int main()
{
dato_t *testa;
int a, valore;
//No ho usato il ciclo.. xkè mi serve mettere elementi in lista  x
prova
printf("Inserisci un valore intero in testa\n");
scanf("%d", &valore);
testa=inserisciintesta(testa,valore);
printf("Inserisci un valore intero in testa \n");
scanf("%d", &valore);
testa=inserisciintesta(testa,valore);
printf("Sostituisci")
scanf("%d", &valore);
printf("con... ")
scanf("%d", &b);
sostituisci(testa, valore , b);  \\QUI DA
ERRORE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

 qualcuno riesce ad aiutarmi?
non hai riportato tutto il codice...
come facciamo ad essere sicuri che tu ti sia ricordato
di allocare effettivamente memoria per gli elementi
della lista ?
molto spesso, quando si lavora con i puntatori,
l'errore non e' affatto detto che sia nella funzione
che da errore. Puo' essere benissimo nel codice
eseguito prima.
ciao,
g.

è allocata... cmq posto la funzione mancante...
dato_t * inserisciintesta(dato_t *testa, int val)
{
  dato_t *nuovo;
  if(nuovo=(dato_t *)malloc(sizeof(dato_t)))
    {
    nuovo->valore=val;
    nuovo->next=testa;
    testa=nuovo;
    }
  else
    printf("Impossibile allocare memoria");
  return(testa);
}
Grazie mille!!!
djmad
nano bagonghi ha scritto:


  sostituisci(temp->next, a, b); \\QUI DA ERRORE
Sbaglio, o questa chiamata ricorsiva fa scorrere la lista fino in fondo? 
E siamo sicuri che l'ultimo elemento abbia next impostato correttamente?
Ciao
  Andrea 

 dato_t *testa;
Giustappunto...
dato_t *testa = NULL;
Ciao
  Andrea
PS: Quota meglio, per favore.

bravo... grazie mille...
Lo avevo dimenticto! :d
Buona giornata
Andrea Palazzi ha scritto:


 Buona giornata
Sì, ok, però impara a quotare: 
http://www.krisopea.it/mvp/Quoting.htm
Ciao
  Andrea
Newsgroup: it.comp.lang.c
Titolo: Consiglio testo C: Deitel vs Schildt

    Ciao, devo scegliere un testo di riferimento per il linguaggio C fra:
Herbert Schildt
C - Guida completa
McGraw Hill Libri Italia
    e
Deitel & Deitel
C - Corso completo di programmazione
Apogeo
    Quello che cerco è un manuale completo, corretto e possibilmente chiaro,
che mi serva anche dopo per andare a consultarlo.
    Se qualcuno conosce questi testi (o altri) e può darmi un consiglio...
beh, grazie!!!
    Renzo



Lascia stare lo Schildt (dai un'occhiata su accu.org-..) 
Prendi il Deitel e magari il K&R
----
Lawrence "Rhymes" Oluyede
rhy...@myself.com

 Prendi il Deitel e magari il K&R
    Non capisco... su 
accu.org
 dicono che "C - The Complete Reference 3aEd"
sia l'unico buon libro scritto da Herbert... del Deitel non parlano...
    Ma questi due libri li conosci/hai letti o li consigli per via della
recensione su 
accu.org
 o mi consigli il deitel per via della cattiva fama di
Herbert??
    Qual'è il K&R??
    Grazie,
    Renzo

     Qual'č il K&R??
E' la bibbia del linguaggio, un po' ostico, forse, per chi
si avvicina ad esso la prima volta, ma assolutamente 
necessario: 
"Linguaggio C", II edizione
Brian W. Kernighan, Dennis M. Ritchie
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Talking about music is like dancing about architecture.
                -- Laurie Anderson

Brian W. Kernighan, Dennis M. Ritchie
La bibbia e' la si apprezza quando si conosce gia' un po' di C secondo
me. Dopo che impari le basi la bibbia si legge molto piu' facilmente.
Io consiglio anche "C Triks and Pitfall" di Andrew Koenig...
ovviamente questo come testo complementare, dopo che impari il
linguaggio.
Mox :)

Io sto leggendo il libro di Shildt e ho finito lo standard c89.
Anche se i commenti sono brevi si capisce lo stesso il contenuto. È vero che
ci sono degli errori, soprattutto nella parte finale della prima parte (il
libro si divide in tre parti).
Non avendo altri libri C non so farti un paragone, quindi sta a te la
scelta.
Ciao
mnka

Hai toccato il nocciolo della questione: Shildt non parla male ne usa
un tono scortese... semplicemente infila nei suoi libri una marea di
errori e soprattutto denota una scarsa conoscenza dello standard
ISO... celebre la sua:
struct foo { int i; double d; } main (double argc, struct foo argv)
(Rif. 
http://www.lysator.liu.se/c/schildt.html
)
Mox :)

 che ne danno, leggiti qualche recensione.
Le recensioni le ho lette, 
accu.org
 lo conosco, 
e' una vita che predico di non acquistare i testi 
di H.S. proprio per le book reviews di 
accu.org
.


di H.S. proprio per le book reviews di 
accu.org
.
Errore mio, il msg non doveva essere una risposta a te, ma a Renzo.
Lo so bene che conosci Shildt, da te ho imparato a diffidare, mi scusi
per l'equivoco maestro :)
Mox :)