Membuat program dan membangun struktur data yang dapat mengelompokkan kata dari sebuah file teks berdasarkan huruf awal dari kata tersebut. STRUKTUR DATA YANG HARUS DIGUNAKAN adalah gabungan antara struktur array dan linked list. ~ Ivul varel

Membuat program dan membangun struktur data yang dapat mengelompokkan kata dari sebuah file teks berdasarkan huruf awal dari kata tersebut. STRUKTUR DATA YANG HARUS DIGUNAKAN adalah gabungan antara struktur array dan linked list.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node * NodePtr;
typedef struct node
{
char kata[50];
NodePtr next;
} Node;

typedef struct list
{
NodePtr head;
unsigned jumlah;
} List;

/* prototipe */
void init(List * p);
int add(List * p, char *pt);
void display(List * p);
int remuv(List *, char *);
void freeList (List *);

int main ()
{
List huruf[26], *p=&huruf[0];
int i, menu=0;
char tampung[50], *pt=&tampung[0], tampil;
char del[50], *pd=&del[0];
        char file[30];

        printf("Masukkan Nama file Input (txt):");
        scanf("%s",file);

for(i=0;i<26;i++)
{
init(&huruf[i]);
}

FILE *ifp=fopen(file, "r");  /* buka file */
if (ifp == NULL)
{
printf("\n Error saat fopen... \n\n");
}

while (!feof(ifp)) /* baca file dan kelompokkan */
{
fgets(tampung,50,ifp);
pt=&tampung[0];
i=*pt;
switch (i)  /* memakai switch case untuk mencari kata dimasukkan dalam huruf apa */
{

/* bs diubah jadi perulangan for, dengan tambahan variabel j
* for(i=25, j=97;i<26;i--, j++)
* dengan i memegang index array, dan j memegang ascii untuk menyamakan huruf
*/
case 97: /* a */
add(&huruf[25], &tampung[0]);
break;
case 98: /* b */
add(&huruf[24], &tampung[0]);
break;
case 99:
add(&huruf[23], &tampung[0]);
break;
case 100:
add(&huruf[22], &tampung[0]);
break;
case 101:
add(&huruf[21], &tampung[0]);
break;
case 102:
add(&huruf[20], &tampung[0]);
break;
case 103:
add(&huruf[19], &tampung[0]);
break;
case 104:
add(&huruf[18], &tampung[0]);
break;
case 105:
add(&huruf[17], &tampung[0]);
break;
case 106:
add(&huruf[16], &tampung[0]);
break;
case 107:
add(&huruf[15], &tampung[0]);
break;
case 108:
add(&huruf[14], &tampung[0]);
break;
case 109:
add(&huruf[13], &tampung[0]);
break;
case 110:
add(&huruf[12], &tampung[0]);
break;
case 111:
add(&huruf[11], &tampung[0]);
break;
case 112:
add(&huruf[10], &tampung[0]);
break;
case 113:
add(&huruf[9], &tampung[0]);
break;
case 114:
add(&huruf[8], &tampung[0]);
break;
case 115:
add(&huruf[7], &tampung[0]);
break;
case 116:
add(&huruf[6], &tampung[0]);
break;
case 117:
add(&huruf[5], &tampung[0]);
break;
case 118:
add(&huruf[4], &tampung[0]);
break;
case 119:
add(&huruf[3], &tampung[0]);
break;
case 120:
add(&huruf[2], &tampung[0]);
break;
case 121:
add(&huruf[1], &tampung[0]);
break;
case 122:
add(&huruf[0], &tampung[0]);
break;
}
}

printf("\nkata telah di kelompokkan\n");
while(menu!=3)
{
printf("menu. \n1.tampil \n2.hapus \n3.exit \n");
scanf("%d", &menu);

switch (menu)
{
case 1:
printf("\nTampilkan huruf : ");
getchar();
scanf("%c", &tampil);
switch (tampil) /* copas yang diatas tapi gandi add nya jadi display */  /* bisa diubah pake for juga, */
{
case 97:
display(&huruf[25]);
break;
case 98: /* b */
display(&huruf[24]);
break;
case 99: /* z */
display(&huruf[23]);
break;
case 100: /* z */
display(&huruf[22]);
break;
case 101: /* z */
display(&huruf[21]);
break;
case 102: /* z */
display(&huruf[20]);
break;
case 103: /* z */
display(&huruf[19]);
break;
case 104: /* z */
display(&huruf[18]);
break;
case 105: /* z */
display(&huruf[17]);
break;
case 106: /* z */
display(&huruf[16]);
break;
case 107: /* z */
display(&huruf[15]);
break;
case 108: /* z */
display(&huruf[14]);
break;
case 109: /* z */
display(&huruf[13]);
break;
case 110: /* z */
display(&huruf[12]);
break;
case 111: /* z */
display(&huruf[11]);
break;
case 112: /* z */
display(&huruf[10]);
break;
case 113: /* z */
display(&huruf[9]);
break;
case 114: /* z */
display(&huruf[8]);
break;
case 115: /* z */
display(&huruf[7]);
break;
case 116: /* z */
display(&huruf[6]);
break;
case 117: /* z */
display(&huruf[5]);
break;
case 118: /* z */
display(&huruf[4]);
break;
case 119: /* z */
display(&huruf[3]);
break;
case 120: /* z */
display(&huruf[2]);
break;
case 121: /* z */
display(&huruf[1]);
break;
case 122:
display(&huruf[0]);
break;
}

break;

case 2:
printf("\n kata yang dihapus : ");
scanf("%s", del);
pd=&del[0];
i=*pd;
switch (i) /* diubah ke for juga bisa */
{
case 97:
p=&huruf[25];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[25], &del[0]);
break;
case 98:
p=&huruf[24];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[24], &del[0]);
break;
case 99:
p=&huruf[23];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[23], &del[0]);
break;
case 100:
p=&huruf[22];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[22], &del[0]);
break;
case 101:
p=&huruf[21];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[21], &del[0]);
break;
case 102:
p=&huruf[20];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[20], &del[0]);
break;
case 103:
p=&huruf[19];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[19], &del[0]);
break;
case 104:
p=&huruf[18];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[18], &del[0]);
break;
case 105:
p=&huruf[17];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[17], &del[0]);
break;
case 106:
p=&huruf[16];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[16], &del[0]);
break;
case 107:
p=&huruf[15];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[15], &del[0]);
break;
case 108:
p=&huruf[14];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[14], &del[0]);
break;
case 109:
p=&huruf[13];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[13], &del[0]);
break;
case 110:
p=&huruf[12];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[12], &del[0]);
break;
case 111:
p=&huruf[11];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[11], &del[0]);
break;
case 112:
p=&huruf[10];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[10], &del[0]);
break;
case 113:
p=&huruf[9];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[9], &del[0]);
break;
case 114:
p=&huruf[8];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[8], &del[0]);
break;
case 115:
p=&huruf[7];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[7], &del[0]);
break;
case 116:
p=&huruf[6];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[6], &del[0]);
break;
case 117:
p=&huruf[5];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[5], &del[0]);
break;
case 118:
p=&huruf[4];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[4], &del[0]);
break;
case 119:
p=&huruf[3];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[3], &del[0]);
break;
case 120:
p=&huruf[2];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[2], &del[0]);
break;
case 121:
p=&huruf[1];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[1], &del[0]);
break;
case 122:
p=&huruf[0];
if(p->jumlah==0)
{
printf("\n kata yang dicari tidak ada ");
}
remuv(&huruf[0], &del[0]);
break;
}

case 3:
break;
}
}

fclose(ifp);

return EXIT_SUCCESS;
}


void init(List * p)
{
p->head=NULL;
p->jumlah=0;
}

int add(List * p, char * pt)
{
NodePtr new;
int i=0;

new = malloc(sizeof(Node));
if(new == NULL)
{
printf("\n Error dalam membuat alokasi memori \n");
return 0;
}

for(;*pt!='\n';i++, pt++)
{
new->kata[i]=*pt;
}
new->next=p->head;
p->head=new;
p->jumlah++;

return 1;
}



void display(List * p)
{
 NodePtr current = p->head;
 int x = 0;
 printf("\n");
 while (current != NULL && x<10)
       {
         printf("%s \n", current -> kata);
         current = current -> next;
         x++;
       }
         printf("null\n");  
}


int remuv (List * lptr, char * delete)
{
  NodePtr delhead = lptr -> head;
  NodePtr current = delhead->next;
  NodePtr del = current->next ;
    int y = 0;

  if(strcmp(delhead->kata, delete)==0) /* apabila kata yang dihapus didepan head */
  {
  lptr->head=current;
  free(delhead);
  current=NULL;
  y++;
  }


  while(current != NULL)
       {
//         next = current -> next;
         if (strcmp (current -> kata, delete)==0)
            {
y++;
  delhead->next=del;
              free(current);
              lptr -> jumlah--;
//              p -> next = next;
           
              break;
            }
         else
            {
//              p = current;
if(del!=NULL)
{
                delhead=current;
                current=del;
                del=current->next;
}
else
{
delhead=current;
current=del;
}
            }
//         current = next;
       }
   if(y==0)
      {
        printf("Kata %s tidak ditemukan \n\n", delete);
}
return 0;
}
====================================================================
DAN INI TXT NYA
http://www.informatika.unsyiah.ac.id/tfa/ds/dbterms.txt
Previous
Next Post »
Post a Comment
Thanks for your comment