Реферат: Найти самое длинное общее слово двух заданных предложений.

Цель работы: Научитьсяработать со строками с помощью указателей.

Задание:

Найти самое длинное общееслово двух заданных предложений.

Требования к программе:

1. Ввод и вывод как стерминала (stdio), так и из/в файл (< и >).

2. Работа со строкамитолько через указатели.

Выполнение работы

Описание входных,выходных и промежуточных данных.

Входные данные:

str1,str2: символьный          //срока 1 и строка 2

Выходные данные:

p                 :символьный              // хранит в семе максимальное слово

Промежуточные данные:

st1, st2        :символьный              // массив скалярных произведений

i,n,j,k                   : целый      // границы слова в первой и во второй строке

 

         ввод

                                        str1,str2

        I:=0; N :=0; p := “ ”;

        выполнять

 

 

       

 

                       

если (length(p) <> 0) то   

         вывод

                         

иначе

          вывод

 

Алгоритм.

/> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> />
Листинг программы

#include <conio.h>

#include<string.h>

#include<stdlib.h>

#include<math.h>

#include<stdio.h>

/*титульный лист*/

voidtit_list()

{

 clrscr();

 gotoxy(20,1);

 printf(«Министерствообразования и науки Украины»);

 gotoxy(12,2);

 printf(«Донецкийгосударственный институт искусственного интеллекта»);

 gotoxy(31,8);

 printf(«Лабораторнаяработа №3 „);

 gotoxy(35,9);

 printf(“подисциплине:»);

 gotoxy(17,10);

 printf("'Основыпрограммирования и алгоритмические языки'");

 gotoxy(50,15);

 printf(«Выполнил:»);

 gotoxy(50,16);

gotoxy(50,17);

gotoxy(50,19);

 printf(«Проверил: „);

 gotoxy(50,20);

gotoxy(50,21);

getch();

 return;

 }

int cha (charchar1){

 if( ((char1< -16)&&(char1 >-33)) || ((char1 < -80)&&(char1 >-129)) || ((char1 > 96)&&(char1 < 123)) || ((char1 >64)&&(char1 < 91))){ return 1;}

 else { return0; }

 }

int sravn_char(char c1,char c2){

 if (abs(c1)> abs(c2)){

         switch(abs(c1 — c2)){

          case32: if ( ( (c1 > -129)&&(c1 < -112) )||( (c1 >96)&&(c1 < 123) ) ){

                             return0;}

                            else{return -2;} break;

          case80: if ((c1 > -113)&&(c1 < -96)){

                             return0;}

                            else{return -3;} break;

          default:;return -1;break;

         }

 }

 else{

         switch(abs(c2 — c1)){

          case0: return 0;break;

          case32: if ( ( (c2 > -129)&&(c2 < -112) )||( (c2 >96)&&(c2 < 123) ) ){

                             return0;}

                            else{return -2;} break;

          case80: if ((c2 > -113)&&(c2 < -96)){

                             return0;}

                            else{return -3;} break;

          default:return -1; break;

         }

 }

}

int main(void)

{

 tit_list();

 clrscr();

 char*input,*name;

 char*p,*bf,*buf,*str1,*str2;

 intb=0,k,lev1,lev2,l1,l2,prv1,prv2;

 int l,bb,v,n;

//************* ВВОДДАННЫХ *****************************************

FILE *f =fopen(“Отчет.zen»,«w+»);

c:

clrscr();

printf("[1]Ввод с клавиатуры\n");

printf("[2] Ввод сфайла\n");

printf("[0]Выход\n");

switch(getch()){

case 49:

//************* ввод склавиатуры ***********************

 clrscr();

 charfstr1[10000],fstr2[10000];

         printf("\t\t\tВведите первую строку: \n");

         gets(fstr1);

 printf("\t\t\tВведите вторую строку: \n");

         gets(fstr2);

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

fprintf(f,«Данныевводяться с клавиатуры \n»);

printf("\n********************************************\n");

 fprintf(f,"\n********************************************\n");

 printf("\n Первая строка:\n");

 fprintf(f,"\n Перваястрока:\n");

 printf("%s \n\n",fstr1);

 fprintf(f,"%s\n\n",fstr1);

 printf(" Втораястрока:\n");

 fprintf(f," Втораястрока:\n");

 printf("%s \n",fstr2);

 fprintf(f,"%s\n",fstr2);

printf("\n********************************************\n");

 fprintf(f,"\n********************************************\n");

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

p[0] = '\0';

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

         b =strlen(fstr1);

         buf =strdup(fstr1);

         buf+= b;

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

         for(k=0;k<=b;k++){

          buf--;

          if((*buf == ' ')||(k == b)){

                   buf++;

                   while((cha(buf[strlen(buf)-1]) == 0)&&(strlen(buf) != 0)){

                    buf[strlen(buf)-1]= '\0';

                   }

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

          v =strlen(fstr2);

          bf =strdup(fstr2);

          bf+= v;

          for(n=0;n<=v;n++){

                    bf--;

                    if((*bf == ' ')||(n == v)){

                    bf++;

                    while((cha(bf[strlen(bf)-1]) == 0)&&(strlen(bf) != 0)){

                             bf[strlen(bf)-1]= '\0';

                    }

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

          if(strlen(buf) == strlen(bf)){

//*********************проверка отдельно каждого символа

                   l=-1;

                   do { l++;

                    bb= sravn_char (buf[l],bf[l]);

                   }while((bb== 0)&&(l < strlen(buf)-1));

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

                   if((bb == 0)&&( strlen(buf) == strlen(p))){

                    printf(«Общее найбольшое слово:'%s'\n»,buf);

                    fprintf(f,«Общеенайбольшое слово :'%s'\n»,buf);

                   }

                   if((bb == 0)&&( strlen(buf) > strlen(p))){

                    p= strdup(buf);

                   }

          }

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

                    bf--;

                    *bf= '\0';

                    }

          }

          buf--;

          *buf= '\0';

          }

         }

if (strlen(p)!= 0){

 printf(«Общее найбольшое слово:'%s'\n»,p);

 fprintf(f,«Общеенайбольшое слово :'%s'\n»,p);

}

else{

 printf(«Общих словв предложений нету\n»);

 fprintf(f,«Общихслов в предложений нету\n»);

}

         getch();

break;

//********************Ввод с файла

case 50:

FILE *ff;

clrscr();

printf(«Введите имя файла:»);

do{

 k=0;

 lev1 = 0;

 b=0;

 scanf("%s",name);

 printf(«name= {%s}\n»,name);getch();

 fprintf(f,«Данные читаем изфайла: %s\n»,name);

 if ((ff = fopen(name,«rt»))== NULL){printf(«Cannot open output file.\n»);}

 clrscr();

 b=1;

 do{

 if (b == 3){b= 2; lev2 = prv1+1;}

 input[0] ='\0';

 fscanf(ff,"%s",input);

 if(strlen(input) == 0){ b = 0;}

//**************Первая строка ****************************

 if ((b ==-1)||(b == 1)){

          if(b == 1){ str1 = strdup(input);b = -1;}

          else{strcat(str1," ");strcat(str1,input);}

          if(input[strlen(input)-1] == '.'){b = 3;prv1 = ftell(ff);}

 }

//*************** Втораястрока ***************************

 if ((b == 2)||(b ==-2)){

 if (b == 2){ str2 = strdup(input);b =-2;}

          else{strcat(str2," ");strcat(str2,input);}

          if(input[strlen(input)-1] == '.'){b = -3;prv2 = ftell(ff);}

 }

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

 }while((b !=-3)&&(b != 0));

 if (b == 0){

 clrscr();

 printf("\t\t E R RO R \n В файле не имееться двух предложений!!!\n Введите другое имя файла:");

 fprintf(f,"\t\t E RR O R \n В файле не имееться двух предложений!!!\n Введите другое имя файла.\n");

 fclose(ff);

 }

}while(b == 0);

//************************Исходные данные

 fseek(ff, 0, SEEK_SET);

 clrscr();

 printf("********************************************\n");

 fprintf(f,"\n********************************************\n");

 printf("\n Перваястрока:\n");

 fprintf(f,"\n Перваястрока:\n");

 b=0; l1 = lev1;

 do{

 fseek(ff, l1,SEEK_SET);

 fscanf(ff,"%s",input);

 printf("%s",input);

 fprintf(f,"%s",input);

 l1=ftell(ff);

 }while(l1< prv1);

 printf("\n\n");

 fprintf(f,"\n\n");

 printf("Вторая строка:\n");

 fprintf(f," Втораястрока:\n");

 l2 = lev2;

 do{

 fseek(ff, l2,SEEK_SET);

 fscanf(ff,"%s",input);

 printf("%s",input);

 fprintf(f,"%s",input);

 l2=ftell(ff);

 }while(l2< prv2);

 printf("\n\n");

 fprintf(f,"\n\n");

 getch();

//************************алгоритм сравнения слов

 fseek(ff, 0, SEEK_SET);

 l1 = lev1;

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

 b = 0;

 p[0] = '\0';

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

 k=0;

 printf("********************************************\n");

 fprintf(f,"********************************************\n");

 do{

         fseek(ff,l1, SEEK_SET);

         fscanf(ff,"%s",buf);

         l1 =ftell(ff);

          l2 =lev2;

         while((cha(buf[strlen(buf)-1]) == 0)&&(strlen(buf) != 0)){

          buf[strlen(buf)-1]= '\0';

         }

         do{

          fseek(ff,l2, SEEK_SET);

          fscanf(ff,"%s",bf);

          l2=ftell(ff);

          while((cha(bf[strlen(bf)-1]) == 0)&&(strlen(bf) != 0)){

                    bf[strlen(bf)-1]= '\0';

          }

          if(strlen(buf) == strlen(bf)){

//*********************проверка отдельно каждого символа

                   l=-1;

                   do{ l++;

                    b=-1;

                    b= sravn_char(buf[l],bf[l]);

                   }while((b== 0)&&(l < strlen(buf)-1));

//************************вывод результата прверки

                   if((b == 0)&&( strlen(buf) == strlen(p))){

                    printf(«Общее найбольшое слово:'%s'\n»,buf);

                    fprintf(f,«Общеенайбольшое слово :'%s'\n»,buf);

                   }

                   if((b == 0)&&( strlen(buf) > strlen(p))){

                    p= strdup(buf);

                   }

          }

          }while(l2< prv2);

 }while(l1< prv1);

if (strlen(p)!= 0){

 printf(«Общее найбольшое слово:'%s'\n»,p);

 fprintf(f,«Общеенайбольшое слово :'%s'\n»,p);

}

else{

 printf(«Общих словв предложениях нет\n»);

 fprintf(f,«Общихслов в предложениях нет\n»);

}

fclose(f);

getch();

break;

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

case 48:clrscr(); exit(1);

default: gotoc;

}

//***********************КОНЕЦ ************************

 return 0;

}

Тестовые примеры.

TEST № 1

Данные берем из файла:q.txt

********************************************

 Первая строка

I have manygreen apples

 Вторая строка:

I have manygreen bananas

********************************************

Общее наибольшее слово :'green'

TEST № 2:

Данные вводятся склавиатуры.

********************************************

 Первая строка:

I learn in the Institute of Artificial Intelligence

 Вторая строка:

My frienddidn’t learn in the Institute of Artificial Intelligence

********************************************

Общее наибольшее слово:'Intelligence’


Выводы: в ходе даннойлабораторной работы я изучил элементарную работу со строками, создание иоткрытие файлов, а также непосредственное использование указателей длянахождения нужной информации в память.

еще рефераты
Еще работы по информатике, программированию