Лабораторная работа

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

Работа добавлена на сайт bukvasha.net: 2014-12-15

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.11.2024


Цель работы: Научиться работать со строками с помощью указателей.
Задание:
Найти самое длинное общее слово двух заданных предложений.
Требования к программе:
1. Ввод и вывод как с терминала (stdio), так и из/в файл (< и >).
2. Работа со строками только через указатели.
Выполнение работы
Описание входных, выходных и промежуточных данных.
Входные данные:
str1,str2 : символьный          // срока 1 и строка 2
Выходные данные:
p                 : символьный              // хранит в семе максимальное слово
Промежуточные данные:
st1, st2        : символьный              // массив скалярных произведений
i,n,j,k                   : целый      // границы слова в первой и во второй строке
 
         ввод
                                        str1,str2
        I:=0; N :=0; p := “ ”;
        выполнять
 
 
       
 
                       
если (length(p) <> 0) то   
         вывод
                         
иначе
          вывод
 

Алгоритм.
Общих слов нет
I:= N;
пока ((str1[i] <> “ ”) и (I < length(str1)))
st1 := copy(str1,n,i-n);
n := i + 1; J:=0; K :=0;
        выполнять
до (length(str1) <= I)
J:= K;
пока ((str2[i] <> “ ”) и (J < length(str2)))
st2 := copy(str2,K,J-K);
K := J + 1;
если (st1 = st2) то
        если (length(p) < length(st1)) то
                p := st1;
       
K := 0;
до ((length(str2) <= J) или (k = 0))
            I := I + 1;
            J := J+1;
 P
Блок-схема: документ:  P
Листинг программы
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
/*титульный лист*/
void tit_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 (char char1){
 if( ((char1 < -16)&&(char1 >-33)) || ((char1 < -80)&&(char1 > -129)) || ((char1 > 96)&&(char1 < 123)) || ((char1 > 64)&&(char1 < 91))){ return 1;}
 else { return 0; }
 }
int sravn_char (char c1,char c2){
 if (abs(c1) > abs(c2)){
         switch (abs(c1 - c2)){
          case 32: if ( ( (c1 > -129)&&(c1 < -112) )||( (c1 > 96)&&(c1 < 123) ) ){
                             return 0;}
                            else {return -2;} break;
          case 80: if ((c1 > -113)&&(c1 < -96)){
                             return 0;}
                            else {return -3;} break;
          default: ;return -1;break;
         }
 }
 else{
         switch (abs(c2 - c1)){
          case 0: return 0;break;
          case 32: if ( ( (c2 > -129)&&(c2 < -112) )||( (c2 > 96)&&(c2 < 123) ) ){
                             return 0;}
                            else {return -2;} break;
          case 80: if ((c2 > -113)&&(c2 < -96)){
                             return 0;}
                            else {return -3;} break;
          default: return -1; break;
         }
 }
}
int main(void)
{
 tit_list();
 clrscr();
 char *input,*name;
 char *p,*bf,*buf,*str1,*str2;
 int b=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();
 char fstr1[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 R O R \n В файле не имееться двух предложений!!!\n Введите другое имя файла: ");
 fprintf(f,"\t\t E R R 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: goto c;
}
//*********************** КОНЕЦ ************************
 return 0;
}
Тестовые примеры.
TEST № 1
Данные берем из файла: q.txt
********************************************
 Первая строка
I have many green apples
 Вторая строка:
I have many green bananas
********************************************
Общее наибольшее слово :' green'
TEST № 2:
Данные вводятся с клавиатуры.
********************************************
 Первая строка:
I learn in the Institute of Artificial Intelligence
 Вторая строка:
My friend didn’t learn in the Institute of Artificial Intelligence
********************************************
Общее наибольшее слово:' Intelligence’

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

1. Презентация Курская битва 2 Место Курской
2. Книга на тему Разработка операционной технологии выполнения полевых механизированных работ
3. Реферат на тему Counselors Essay Research Paper INTRODUCTIONAccording to the
4. Контрольная работа на тему Теоретические основы управления проектами
5. Реферат на тему Координация экономической деятельности в рыночной системе хозяйствования
6. Реферат на тему Florence Nightingal 2 Essay Research Paper Florence
7. Реферат на тему How Media Influences Women Essay Research Paper
8. Курсовая Найважливіші індикатори фінансового стану компанії
9. Реферат Исторические события в России в начале 20 века 2
10. Курсовая Организация управления растениеводством на примере СПК Пригородный