Контрольная работа по предмету "Информатика"


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

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


Задание:


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


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


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


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


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


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


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


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


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


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


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


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


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






ввод


str1,str2


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


выполнять


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


вывод


иначе


вывод




Алгоритм.










Листинг программы

#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’



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



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :