Newsgroup: it.comp.lang.c
Titolo: cosa fa ilprogramma

ciao a tutti cosa fa sto programma?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/******************struttura*************************************/
struct parola
{
 char val[128];
 struct parola *next;
};
/*******************************prototipi*************************/
int vuota(struct word *head);
struct parola *insert(char *c,struct parola *head);
struct parola *elimina(struct parola *head);
int palindroma();
void svuotaStack(struct parola *p,struct parola *q);
/*****************************variabiliglobali**********************/
/*Testa lista ausiliaria*/
struct parola *aus=NULL;
/*Testa della lista principale*/
struct parola *listPr=NULL;
/*Contatore parole inserite*/
int k=0;
/**************************inserisci********************************/
/*Inserimento nuovo elemento in lisPr*/
 struct parola *insert(char *c, struct parola *listPr)
      {
        struct parola *tmp;
  tmp = (struct parola *)malloc(sizeof(struct parola));
  tmp->next=listPr;
  strcpy(tmp->val,c);
  return tmp;
       }
/***************************togli*********************************/
/*Eliminazione dell'ultimo elemento*/
 struct parola *elimina(struct word *listPr)
 {
 struct parola *temp;
 if(vuota(lisPr)==0) return NULL;
 temp = lisPr->next;
        free(lisPr);
 return temp;
 }
/***************************vuota************************************/
/*Controlla se lo stack è vuoto*/
int vuota(struct parola *listPr)
 {
  int valore=1;
              if(listPr == NULL )
      {
                     valore=0;
     }
     return valore;
     }
/***************************PALINDROMA*********************************/
/*Controlla se la frase è palindroma*/
int palindroma()
   {
 int tmp=0,palValore=0;
                                  /*se la frase è pari*/
       if(k%2==0)
       {
         while(tmp<(k/2))
         {
         /*Crea lista supporto*/
           aus=insert(listPr->val,aus);
           listPr=elimina(listPr);
           tmp++;
         }
       }
     else
       {
        while(tmp<(k/2))
         {
                                                                  /*Crea
lista supporto*/
          aus=insert(listPr->val,aus);
          listPr=elimina(listPr);
          tmp++;
          }
          /*cancella elemento centrale*/
        listPr=elimina(listPr);
       }
       k=0;
       tmp=0;
       while(listPr!=NULL && aus!=NULL)
        {
        /*Compara le stringhe*/
          if(strcmp(listPr->val,aus->val)==0)
           {
            /*elimina gli elementi comparati*/
            listPr=elimina(listPr);
                aus=elimina(aus);
           }
          else{
               /*pulisce tutto*/
                                       svuotaStack(listPr,aus);
            palValore=1;
            break;
           }
         }
  return palValore;
 }
/*****************************svuotaPila*********************************/
/*pulizia generale*/
void svuotaStack(struct parola*a,struct parola *b)
  {
    while(listPr!=NULL && a!=NULL)
   {
     listPr=elimina(a);
     a = listPr;
   }
   while(aus!=NULL && b!=NULL)
    {
   aus=elimina(b);
   b = aus;
    }
    }
/****************************MAIN*****************************************/
int main(int argc, char *argv[])
{
int i=0,value,j=0;
/*contiene la parola*/
char word[128];
/*contiene la frase*/
char frase[256];
char c;
FILE *f;
/*Errore nel caricamento del file*/
if( (f = fopen( argv[1], "r" )) == NULL )
 {
   perror("Errore nel caricamento del file");
   exit( 1 );
    }
else
{
 /*Acquisizione del contenuto del file*/
while(!feof( f ))
 {
       c=(char)getc(f);
            /*Identificazione di una frase*/
     if(c!='\n' && c!='.')
  {
         frase[k]=c;
            k++;
                        /*identificazione di una parola*/
   if(c!=',' && c!=' ' && c!=':' && c!=';')
    {
                 parola[i++]=c;
    }
                        else{
                                         /*inserimento della parola nella
struttura*/
     if(i!=0)
      {
      parola[i]='\0';
      lisPr=inserisci(parola,lisPr);
         j++;
         }
      i=0;
        }
  }
  else
   {
                          /*Caso frase successiva*/
   if (i==0 && k!=0)
   {
   if(c=='.')
    {
     frase[k]=c;
     frase[k+1]='\0';
    }
    else frase[k]='\0';
    printf("%s",frase);
    printf("--> ");
             value=palindroma();
   if(value==0) printf("palindroma\n");
   else printf("non palindroma\n");
                        /*pulisce la stringa contenente la parola*/
   memset((void *)frase,' ',sizeof(frase));
   k=0;
   }
   else if(i!=0)
    {
     parola[i]='\0';
     if(c=='.')
      {
       frase[k]=c;
       frase[k+1]='\0';
          }
     else frase[k]='\0';
     lisPr=inserisci(parola,lisPr);
     j++;
                    printf("%s",frase);
     printf("--> ");
                    value=palindroma();
     if(value==0) printf("palindroma\n");
     else printf("non palindroma\n");
     memset((void *)frase,' ',sizeof(frase));
     k=0;
    }
   i=0;
   }
     }
        fclose(f);
  return 0;
}
}

 ciao a tutti cosa fa sto programma?
Apparentemente legge un file, identifica le frasi come
sequenze di parole separate da punti o ritorni a capo
e testa se le frasi sono palindrome, dove
palindroma in questo caso e' riferito (stranamente)
alle parole componenti e non alle lettere.
Si tratta quindi di un programma totalmente inutile,
e apparentemente programmato anche male.
ciao,
g.