Gå til innhold

se over denne koden


Anbefalte innlegg

noen som gidder å se over denne koden og muligens finne ut hvordan jeg skal få bort alle warningene, beklager hvis dette er litt mye å poste her men trenger hjelp. får ikke Eliza til å svare.

 

 

/* Including Files */

# include<iostream.h>

# include<conio.h>

# include<string.h>

# include<time.h>

# include<math.h>

# include<stdlib.h>

# include<dos.h>

# include<stdio.h>

# include<fstream.h>

 

/* Defining Costants*/

// Max. length in characters of any automated reply ( Keyword only)

# define MAX_RESP_LEN 65

// Max. number of responses for any keyword

# define MAX_RESP_NO 20

// Max. number of keywords

# define MAX_KEY 14

// Max. number of Transpositions

# define TRANSPOSE 12

// Max. Size Of User Input

# define MAX_USER_INPUT 100

// Max. Length of Keyword

# define MAX_KWD_LEN 20

// Delay involved in typing (in ms)

# define DELAY 20

 

/* Defining Global Variables */

 

// for getting the user name

char user[30];

// for word transpositions

char wordin[TRANSPOSE][MAX_RESP_LEN];

char wordout[TRANSPOSE][MAX_RESP_LEN];

int RanNum(int max);

void initialize_global();

 

class progstr

{

public:

char userip[MAX_USER_INPUT];

char keyword[30];

int keyfound;

int keyno;

int nullip;

// constructor

progstr()

{

keyno=-1;

nullip=0;

}

}ip;

 

class resp

{

int tot_resp;

int last_resp;

char replys[MAX_RESP_NO][MAX_RESP_LEN];

char word[MAX_KWD_LEN];

public:

// constructor

resp()

{

tot_resp=0;

last_resp=-1;

}

int getcount()

{

return last_resp;

}

void addword(char str[MAX_KWD_LEN])

{

strcpy(word,str);

}

char * getword()

{

return word;

}

void addresp(char str[MAX_RESP_LEN])

{

strcpy(replys[++last_resp],str);

}

void display_resp(int num);

void quit_display_resp(int num);

 

};

void display_logo()

{

 

cout<<" K K AAAAAAAAA L L EEEEEEE "<<endl;

delay(DELAY);

cout<<" K K A A L L E "<<endl;

delay(DELAY);

cout<<" K K A A L L E "<<endl;

delay(DELAY);

cout<<" K K A A L L EEEEEE "<<endl;

delay(DELAY);

cout<<" K K AAAAAAAAA L L E "<<endl;

delay(DELAY);

cout<<" K K A A L L E "<<endl;

delay(DELAY);

cout<<" K K A A LLLLLLLL LLLLLLLL EEEEEEEE "<<endl;

}

void display_line()

{

int width=80;

int i=0;

int x=wherex();

int y=wherey()+1;

x=40;

for(int k=0;k<40;k++)

{

delay(DELAY);

gotoxy(x+k,y);

cout<<(char)240;

gotoxy(x-k,y);

delay(DELAY);

cout<<(char)240;

}

cout<<"n";

{

 

void resp :: display_resp(int num)

 

cout<<"KALLE > ";

for(int i=0;i<strlen(replys[num]);i++)

{

// for deliberate typing errors

if(RanNum(6)==0)

{ char c=RanNum(100);

if(c=='n' || c=='b' || c==13)

cout<<"w";

else

cout<<c;

delay(RanNum(DELAY));

cout<<"b";

}

 

if(replys[num]=='*')

{

char * s1=ip.userip+strlen(ip.keyword);

short int flag=0;

for(int m=0;m<TRANSPOSE;m++)

{

char * s2=wordin[m];

char *ptr=NULL;

ptr=strstr(s1,s2);

 

if(ptr!=NULL)

{

// transposition word found in the

// user input

flag=1;

 

// printing text before wordin[m]

int times=ptr-s1;

for(int i=0;i<times;i++)

{

delay(DELAY);

cout<<ip.userip[strlen(ip.keyword)+i];

}

// printing the wordout

cout<<wordout[m];

// printing the left overs

char c;

c=*(ptr+strlen(wordin[m]));

int t=0;

while(c!='0')

{

cout<<*(ptr+strlen(wordin[m])+t);

t++;

c=*(ptr+strlen(wordin[m])+t);

}

}

} // end of for

// if flag is still zero , this means no transpose.

if(0==flag)

{

char c;

c=*(s1+strlen(ip.keyword));

int t=0;

while(c!='0')

{

cout<<*(s1+t);

t++;

c=*(s1+t);

}

} // end of if

break;

}

else

{

cout<<replys[num];

delay(RanNum(DELAY));

}

} // end of for

cout<<"n"<<user<<" > ";

 

void resp :: quit_display_resp(int num)

{

cout<<"KALLE > ";

for(int i=0;i<strlen(replys[num]);i++)

{

// for deliberate typing errors

if(RanNum(6)==0)

{ char c=RanNum(100);

if(c=='n' || c=='b' || c==13)

cout<<"w";

else

cout<<c;

delay(RanNum(DELAY));

cout<<"b";

}

cout<<replys[num];

delay(RanNum(DELAY));

} // end of for

}

resp keys[MAX_KEY];

int RanNum(int max)

{

randomize();

return rand() % max;

}

void find_keyword()

{

int len=0;

int lenkey=0;

int key_no=0;

char teststr[50];

while((ip.keyfound==0) &&(key_no!=MAX_KEY))

{

// getting the length of the keyword

lenkey=strlen(keys[key_no].getword());

 

char *ptr=NULL;

ptr=strstr(ip.userip,keys[key_no].getword());

if (ptr!=NULL)

{

// keyword found !

ip.keyfound=1;

ip.keyno=key_no;

strcpy(ip.keyword,keys[key_no].getword());

break;

}

/*//////////////////////////////////////////

for(int i=0;i<lenkey;i++)

{

teststr=ip.userip;

}

teststr='0';

if (strcmp(teststr,keys[key_no].getword())==0)

{

ip.keyfound=1;

ip.keyno=key_no;

strcpy(ip.keyword,keys[key_no].getword());

}

//////////////////////////////////////////*/

key_no++;

}

 

void read_from_file()

{

ifstream fin;

int index=-1;

fin.open("eliza.dat");

char line[MAX_RESP_LEN];

while(fin)

{

fin.getline(line,MAX_RESP_LEN);

char *ptr=NULL;

ptr=strstr("@KWD@",line);

if(strlen(line)<1)

{

break;

}

else if(ptr!=NULL)

{

// the next line is a keyword

fin.getline(line,MAX_RESP_LEN);

keys[++index].addword(line);

}

else

{

// it is a response

keys[index].addresp(line);

}

 

} // end of while

} // end of function

 

void main()

{

clrscr();

 

display_line();

display_logo();

display_line();

// for initializing the global variables

initialize_global();

 

// for no response by the user.

resp null_resp;

null_resp.addresp("HUH ?");

null_resp.addresp("HVA ?");

null_resp.addresp("UNSKYLD ?");

null_resp.addresp("HVORDAN ER DET MENINGEN AT JEG SKAL SNAKKE HVIS DU IKKE SIER NOE ?");

 

// upon logging in

resp signon;

signon.addresp("HEI, JEG ER KALLE. HVA VIL DU SNAKKE OM ?");

signon.addresp("S HVORDAN HAR DU DET I DAG ?");

signon.addresp("JA JEG VET, KARL SIVERT SKATLAND ER EKSTREMT KUL, S HVA VIL DU SNAKKE OM? ");

 

// when no key found

resp no_key;

no_key.addresp("BARE FORTSETT...");

no_key.addresp("HVA BETYR DET FOR DEG ?");

no_key.addresp("JEG SHNNER");

no_key.addresp("HVA SNAKKER DU EGENTLIG OM N? ");

no_key.addresp("HVA SKAL DET BETY !?");

no_key.addresp("KAN DU FORKLARE DET LITT BEDRE ?");

no_key.addresp("INTERRESANT...");

no_key.addresp("S ????");

 

resp bye;

bye.addresp("HADET BRA! HA EN FIN DAG...");

bye.addresp("HADET, HA DET FINT...");

bye.addresp("SNAKKES...");

bye.addresp("JAJA, SNAKKES SENERE DA?");

// reading data from dictionary

read_from_file();

 

// STARTING CONVERSATION WITH THE USER

// welcoming the user

 

cout<<"KALLE > (BRUK CAPS-LOCK) HVA ER NAVNET DITT KJ’RE ?n";

cin>>user;

signon.display_resp(RanNum(signon.getcount()));

fflush(stdin);

gets(ip.userip);

strcpy(ip.userip,strupr(ip.userip));

while(strcmp(ip.userip,"BYE")!=0)

{

find_keyword();

if(strlen(ip.userip)<1)

{

null_resp.display_resp(RanNum(null_resp.getcount()));

}

else if(ip.keyfound==1)

{

keys[ip.keyno].display_resp(RanNum(keys[ip.keyno].getcount()));

}

else

{

no_key.display_resp(RanNum(no_key.getcount()));

}

// again returning to normal values of the data items

strcpy(ip.userip," ");

ip.keyno=-1;

ip.keyfound=0;

fflush(stdin);

gets(ip.userip);

strcpy(ip.userip,strupr(ip.userip));

} // end of while

bye.quit_display_resp(RanNum(null_resp.getcount()));

cout<<endl;

display_line();

cout<<"tttVIKTIGnnPlease note that the current functionality and

features of this program are very limited and they are just for

accompanying the article that I posted on Planet Source Code. If you want

to make this program more intelligent, make entries in Eliza.Dat file.

n You can also increase the string manipulation power of the program,

like considering multiple lines from the user, etc. I had written this code in 1 1/2 hr.

just to make it more easier for the readers of my article about what is

happening.nn HOW SMART YOU MAKE YOUR ELIZA DEPENDS ON HOW FAR YOU EXTEND

THIS PROGRAM. THERE IS PRACTICALLY NO LIMIT ! nnn

THIS CODE IS THE MINIMAL WORKING SKELETON !!nn";

display_line();

getch();

}

 

 

void initialize_global()

{

strcpy(wordin[0],"ARE");

strcpy(wordout[0],"AM");

 

strcpy(wordin[1],"AM");

strcpy(wordout[1],"ARE");

 

strcpy(wordin[2],"WERE");

strcpy(wordout[2],"WAS");

 

strcpy(wordin[3],"WAS");

strcpy(wordout[3],"WERE");

 

strcpy(wordin[4],"YOU");

strcpy(wordout[4],"ME");

 

strcpy(wordin[5]," I ");

strcpy(wordout[5],"YOU");

 

strcpy(wordin[6],"YOUR");

strcpy(wordout[6],"MY");

 

strcpy(wordin[7],"MY");

strcpy(wordout[7],"YOUR");

 

strcpy(wordin[8],"I'VE");

strcpy(wordout[8],"YOU'VE");

 

strcpy(wordin[9],"YOU'VE");

strcpy(wordout[9],"I'VE");

 

strcpy(wordin[10],"I'M");

strcpy(wordout[10],"YOU'RE");

 

strcpy(wordin[11],"YOU'RE");

strcpy(wordout[11],"I'M");

 

strcpy(wordin[12],"ME");

strcpy(wordout[12],"YOU");

 

strcpy(wordin[13],"YOU");

strcpy(wordout[13],"ME");

 

}

Lenke til kommentar
Videoannonse
Annonse
  • 1 måned senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...