Newsgroup: it.comp.lang.c
Titolo: Aiuto per un programma [lunghetto]

Ciao  a tutti,
Ho un problema con il seguente programma che "dovrebbe" (dico dovrebbe
perchè lo fa male ^_^) spostare dei blocchetti da una posizione di partenza
ad una di arrivo...Questo è il sorgente:
# include <stdio.h>
# include <conio.h>
# include <string.h>
# include <stdlib.h>
typedef struct list{
  int key;
  struct list *next;
  struct list *prev;}nodo;
nodo *alloca (void);        /* Allocazione della memoria */
void menu (int *posx,int *posy);
int main (void)
{
int n,i,j,posx=0,posy=0;
nodo **vet,**testa,**coda;
char c;
clrscr();
fprintf(stdout,"Selezionare il numero di cubetti:\n");
fscanf(stdin,"%d",&n);
/* menu(&posx,&posy); */
testa=(nodo*)malloc(n*sizeof(nodo*));
coda=(nodo*)malloc(n*sizeof(nodo*));
vet=(nodo*)malloc(n*sizeof(nodo*));
for (i=0;i<n;i++){
  testa[i]=NULL;
  coda[i]=NULL;}
/* Allocazione delle 10 strutture */
for (i=0,j=0;i<n;i++,j++){
  vet[i]=alloca();
  vet[i]->key=j;
  vet[i]->next=NULL;
  vet[i]->prev=testa[i];
  vet[i]->prev=coda[i];
  testa[i]=vet[i];
  coda[i]=vet[i];}
while ((c=getc(stdin))!=EOF){
if (testa[posx]==NULL){
  clrscr();
  fprintf(stdout,"Il blocchetto non può essere spostato!\n");
  fprintf(stdout,"\nLa lista è vuota!\n");
  getch();}
testa[posy]->next=testa[posx];
testa[posx]->prev=testa[posy];
testa[posx]->next=NULL;
testa[posy]=testa[posy]->next;
clrscr();
for(j=0,i=0;j<n,i<n;j++,i++){
fprintf(stdout,"%d : ",j);
vet[i]=coda[i];
while(vet[i]!=NULL){
   fprintf(stdout,"%d ",vet[i]->key);
   vet[i]=vet[i]->next;}
fprintf(stdout,"\n");}
menu(&posx,&posy);
}
return(0);
}
/* FUNZIONI */
void menu (int *posx,int *posy)
{
puts("Selezionare le coordinate dello spostamento");
fscanf(stdin,"%d %d",posx,posy);
fprintf(stdout,"%d %d",*posx,*posy);
getch();
}
nodo *alloca (void)
{
nodo *new;
if ((new=(nodo*)malloc(sizeof(nodo)))==NULL){
  clrscr();
  fprintf(stdout,"Errore nella allocazione della memoria\n");
  getch();
  exit(1);}
return(new);
}
Scusate se il mex postato è troppo lungo, ma sono disperato ...è da poco che
uso i vari puntatori e temo che l'errore sia proprio lì, ma non riesco ad
individuarlo!
Grazie 1000 e scusate ancora!
Enrico S.


Si potrebbero annotare altre inesattezze formali e logiche.
Suggerimento: i linguaggi di programmazione sono solo uno strumento
per costruire qualcosa di astratto come algoritmi e strutture dati;
prima di tutto si dovrebbe avere coscienza di questi aspetti perche'
altrimenti si potrebbe correre il rischio di scrivere qualcosa di cui
nonsi ha coscienza - questa non e' una critica.
Se il problema ancora ti assilla saro' felice di suggerire una mia
soluzione esemplificativa non appena avrai spiegato cosa vorresti
fare.

Prendo atto delle critiche, magari qualche consiglio sarebbe stato piů
gradito...grazie lo stesso.
Enrico S.

Non volevo essere scortese, ma solo manifestare il mio interesse al
tuo problema, che purtroppo non ho capito a fondo.
Ho evidenziato alcuni punti di possibile contraddizione perche' tu ne
prendessi atto, sperando che i problemi provenissero da queste sviste
veniali.
Se vorrai, saro' lieto, nel mio piccolo, di studiare con te la cosa,
purche' tu chiarisca meglio le tue esigenze.

Grazie, se non riesco ti farň sapere.
Ciao
Enrico S.