Eh si avete ragione![]()
Questo è il main
*************************************************M AIN
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Struttura.h"
#include "LeggiFile.h"
#include "StampaLista.h"
#include "CostruisciArray.h"
#include "StampaVettore.h"
#include "HeapSort.h"
#include "QuickSort.h"
#include "DeallocaLista.h"
#include "IndovinaGenere.h"
int main()
{
Lista testa = NULL; // la testa della lista
Lista testa1 = NULL;
Lista tmp;
int N_parole=0, //il numero di parola nella lista
i, g;
char Genere[6][10] = {"Politica", "Sport", "Cultura", "Economia", "Scienze", "Cronaca"};
Lista *A;//array di tipo lista
FILE *fp, //FILE in.txt
*fp1, //FILE out.txt
*fp2; //FILE generi.txt
int scelta, //scelta dello switch
step = 0, //definisce i passi dello switch
k; //
printf("\n\t\t\t\tBENVENUTI!\n\nQuesto programma permette di visualizzare le prime 100 parole");
printf(" piu' frequenti \nin un testo in input oppure le prime 100 in ordine alfabetico.\n");
printf("\nIl programma \"Tree Tagger\", inoltre, permettera' di visualizzare ");
printf("anche i campi \nPos e Lemma di ogni parola.\n");
printf("\n\nPremere un tasto per iniziale la lettura da FILE \ne l' inserimento in lista...\n");
getch();
//-----esecuzione di Tree Tagger da FILE in.txt ed inserimento ordinato in lista-----
fp = fopen("in.txt","r");
if(fp == NULL )// se non trova il FILE in input
{
printf("\nApertura FILE fallita\n\n");
system("pause");
}
else
{
system("cls");
printf("BY:\t\t\t\t\t\t|\nALBANO GIOVANNI & ALESSIO DOMENICO ABBINANTE\t|\n");
printf("------------------------------------------------+\n\n\n");
//richiamo il Tree Tagger
system("tag-italian.bat in.txt out.txt");
fclose(fp);//non mi serve più in.txt
fp2 = fopen("generi.txt","w");
fp1 = fopen("out.txt", "r");
//---------INSERIMENTO IN LISTA PER GENERI-----------
for(k=0;k<=6;k++)//6 sono i generi
{
fp1 = fopen("out.txt", "r");
LeggiFile(fp1, fp2, &testa, &testa1, &N_parole, k);
tmp = testa1;
if(k<6)
{
while(tmp)
{
if(tmp->Frequenza == 2 || tmp->Frequenza == 3)
if( !strcmp(tmp->Pos, "NOUN") || !strncmp(tmp->Pos, "VER:", 4))
fprintf(fp2, "%-20s\n", tmp->Parola);
tmp = tmp->nodo_successivo;
}
}
fclose(fp1);
if(k == 6)
StampaLista(testa1);
if(k != 6 )
DeallocaLista(testa1);
}
fclose(fp2);
fp2 = fopen("generi.txt", "r");
g = IndovinaGenere(testa1, fp2);
printf("\n\nIl genere dell' ultimo articolo e' : %s\n", Genere[g]);
system("pause");
DeallocaLista(testa1);
fclose(fp2);
printf("\n\n\nIl FILE e' stato letto correttamente e copiato nella lista.\n\n");
printf("\nSi desidera visualizzare la lista? (S o N)\n");
do
i = getch();
while( i !=110 && i !=115);// 115 = s , 110 = n
if( i == 115)//si è scelto di visualizzare la lista
StampaLista(testa);
do
{
istruzioni(); //stampa istruzioni
scelta = getch() - 48;
printf("%d\n", scelta);
switch(scelta) //scelta da tastiera
{
case 1: //si è scelto di visualizzare la lista
StampaLista(testa);
istruzioni();
break;
case 2: //si è scelto di richiamare l' heap sort
if(step == 0) //la prima volta
{
A = malloc(N_parole*(sizeof(struct lista)));
Costruisci_Array(testa,A,N_parole);
//alloca e costruisci l' array
Heapsort(A,N_parole);
step = 1; // per non ripetere l' ordinamento
}
printf("\n\n\nL' Heap Sort ha funzionato correttamente.\n\n");
printf("\nSi desidera visualizzare l' array? (S o N)\n");
do
i = getch();
while( i !=110 && i !=115);// 115 = s , 110 = n
if( i == 115)//si è scelto di visualizzare l' array
StampaVettore(A,N_parole);
istruzioni();
break;
case 3: //si è scelto di chiamare il quick sort
if(step == 0) //se non è stato ancora chiamato l' heap sort
{
printf("\n\n\nDevi prima richiamare l' Heap Sort!!\n");
getch();
}
else
{
if(step == 1) //già è stato chiamato l' Heap Sort
{ //ma non il quick sort
QuickSort(A,0,N_parole);
step = 2;
}
printf("\n\n\nIl Quick Sort ha funzionato correttamente.\n\n");
printf("\nSi desidera visualizzare l' array? (S o N)\n");
do
i = getch();
while( i !=110 && i !=115);// 115 = s , 110 = n
if( i == 115)//si è scelto di visualizzare l' array
StampaVettore(A,N_parole);
}
istruzioni();
break;
}
}while(scelta != -21); //finchè non si preme ESC (27 - 48 = 21)
free(A); //libera la memoria occupata dall' array
DeallocaLista(testa);
printf("\n\n\n\n\t\tARRIVEDERCI!!!\n\n\n");
system("pause");
return 0;
}
}
Questa è la struttura
*****************************STRUTTURA************ ***
#define LenLine 80 // Lunghezza massima della parola
#define LenMax 21
#define LenPos 15
//STRUTTURA LISTA
struct lista{
char Parola[LenMax];
char Pos[LenPos];
char Lemma[LenMax];
int Frequenza;
struct lista *nodo_successivo;
};
typedef struct lista *Lista;
**************************COSTRUISCI ARRAY DI PUNTATORI ************
#include <stdio.h>
#include "Struttura.h"
void Costruisci_Array(Lista ptr, Lista *A, int N_parole)
{
//printf("\nHai inserito %d parole\n",N_parole);
int i=0;
while(i<=N_parole && ptr!=NULL){
A[i]=ptr;
(ptr)=(ptr)->nodo_successivo;
i=i+1;
}
}
__________________________________________________
Come vi avevo detto questo è il programma con l'array di tipo Lista e funziona...se dovessi fare un array dove ogni elemento dell'array punta ad un nodo della lista...come si fa?