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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 9.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. Контрольная работа на тему Основные управленческие функции в организации
4. Реферат на тему Характеристика экономики России
5. Курсовая на тему Расчет себестоимости ТО и ТР для автомобиля КраЗ 256 Б 1
6. Реферат Лизинг 22
7. Лекция на тему Моделирование экономики
8. Реферат Определение потребности предприятия в оборотных средствах. Определение норматива оборотных средс
9. Реферат Конкуренция ее сущность и виды. Классификация рынка по конкурентной среде
10. Реферат Политика и мораль 2