Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по лабораторным работам вариант 17.doc
Скачиваний:
6
Добавлен:
20.05.2014
Размер:
49.6 Кб
Скачать

Void main()

{

char str[10][81],str1[10][81];

int n=0,n1,num[100],i1,i;

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

while(*gets(str[n])!=NULL && *str[n])

n++;

substr(n,&n1,str,str1,num);

if(n1==0)

printf("Подстроки не найдены!\n");

else

{printf("Найденные подстроки:\n");

for(i=0;i<n1;i++)

puts(str1[i]);

i1=nomstr(str1,n1);

if(i1==-1)

printf("Не было найдено подстрок!\n");

else

{ printf("Найденная подстрока:\n");

puts(str1[i1]);

udal(str[num[i1]]);

printf("Измененная строка:\n");

puts(str[num[i1]]);

}

}

}

void substr(int n,int *n1,char str[][81],char str1[][81],int num[])

{

int i;

char *s,*s1;

*n1=0;

for(i=0;i<n;i++)

{ s=str[i];

s1=s;

while(*s)

if(*s=='+' || *s=='-' |0| *s=='/' || *s=='*' )

{

if(s!=s1)

{ num[*n1]=i;

strncpy(str1[*n1],s1,s-s1);

str1[(*n1)++][s-s1]='\0';

}

while(*s&&(*s=='+' || *s=='-' || *s=='/' || *s=='*'))

s++;

s1=s;

}

else

s++;

if(s1!=s)

{ num[*n1]=i;

strncpy(str1[*n1],s1,s-s1);

str1[(*n1)++][s-s1]='\0';

}

}

}

int nomstr(char str1[][81],int n1)

{

char *s;

int i,kol,kool=0,zumber=-1;

for(i=0;i<n1;i++)

{ kol=0;

s=str1[i];

for(;*s!='\0';s++)

if(*s=='1' && *(s+1)=='1')

kol++;

if(kol>kool)

{

kool=kol;

zumber=i;

}

}

return(zumber);

}

void udal(char *s)

{ static char s2[70]="ЙйЦцКкУуЕеНнГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮшщзхъфывапролджэячсмитьбю";

char *s1;

int i, flag;

s1=s;

while(*s)

{

flag=0;

for (i=0;(i<70 && flag!=1);i++)

if(*s1==s2[i])

flag=1;

if (flag==1)

{

*s=*s1;

s++,s1++;

}

else

s1=s1+2;

*s=*s1;

}

}

/* Лабораторная работа #4(1) (Структуры. Файлы.)

Написать программу, которая вводит в режиме запросов заданное число

записей вида

Телевизор

Название Цена Размер Цвет Производитель

по диаг. Изображения Город Завод Фамилия

После ввода массива записей программа осуществляет в нем поиск следующей

информации:

Названия телевизоров с самым маленьким размером экрана

*/

#include<stdio.h>

#include<string.h>

#define CLR while(getchar()!='\n')

#define PROISV struct adres

#define TELEVISOR struct telev

PROISV{

char gorod[20];

char factory[20];

char name[30];

};

TELEVISOR{

char nazv[30];

int cena;

int diag;

int color;

PROISV pro;

};

void readcat(int *kol,TELEVISOR cat[])

{

char ch;

*kol=0;

do

{

printf("Телевизор %d :\n",++(*kol));

printf("Название.......................");

gets(cat->nazv);

printf("Цена.....................");

scanf("%d",&cat->cena);

printf("Диагональ(inch)................");

scanf("%d",&cat->diag);

printf("Цветной/Черно-белый(1/2)........");

scanf("%d",&cat->color);

CLR;

printf("Город..........................");

gets((*cat).pro.gorod);

printf("Завод..........................");

gets((*cat).pro.factory);

printf("Имя............................");

gets((*cat).pro.name);

cat++;

CLR;

printf("Дальше? (Д/Н):");

ch=getchar();

CLR;

}while(ch=='д' || ch=='Д');

}

void form(int kol,TELEVISOR cat[],char s[][20],int *nk)

{

int i,min=4000,j;

for(i=0;i<kol;i++)

if(cat[i].diag <= min)

min=cat[i].diag;

printf("min= %d\n",min);

for(i=0;i<kol;i++)

if(cat[i].diag==min)

{

for(j=0;j<*nk && strcmp(cat[i].nazv,s[j])!=0;j++);

if(j==*nk)

strcpy(s[(*nk)++],cat[i].nazv);

}

}

main()

{

int koltel,nk=0,i;

char str[40][20];

TELEVISOR catalog[40];

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

readcat(&koltel,catalog);

form(koltel,catalog,str,&nk);

if(nk>0)

{

printf("Название телевизоров с минимальной диагональю:\n");

for(i=0;i<nk;i++)

puts(str[i]);

}

else

printf("Телевизоры не найдены!");

}

/*Лабораторная работа #4(2) (Модифицировать программу, написанную в первом пункте, таким образом,

чтобы она вводила записи из текстового файла и записывала результаты в файл.)

*/

#include<stdio.h>

#include<string.h>

#include<conio.h>

#define CLR while(getc(f)!='\n')

#define PROISV struct adres

#define TELEVISOR struct telev

PROISV{

char gorod[20];

char factory[20];

char name[30];

};

TELEVISOR{

char nazv[30];

int cena;

int diag;

int color;

PROISV pro;

};

void readfile(int *kstr,TELEVISOR cat[],char *namefile)

{

int i=0;

FILE *f;

if((f=fopen(namefile,"r"))==NULL)

printf("ОШИБКА \n");

else

{

while(!feof(f))

if(fscanf(f,"%s",cat->nazv)!=EOF)

{

CLR;

fscanf(f,"%d",&cat->cena);

fscanf(f,"%d",&cat->diag);

fscanf(f,"%d",&cat->color);

CLR;

fgets(cat->pro.gorod,20,f);

fgets(cat->pro.factory,20,f);

fgets(cat->pro.name,30,f);

cat++;

(*kstr)++;

}

printf("%d\n",*kstr);

}

fclose(f);

}

void writefile(int n,char *namefile,char str[][20])

{

FILE *f;

int i;

f=fopen(namefile,"w");

if(n>0)

{

fprintf(f,"НАЗВАНИЕ ТЕЛЕВИЗОРА С МИНИМАЛЬНОЙ ДИАГОНАЛЬЮ:\n");

for(i=0;i<n;i++)

fprintf(f," %s \n",str[i]);

}

else

fprintf(f,"ТЕЛЕВИЗОР НЕ НАЙДЕН!\n");

}

void form(int kol,TELEVISOR cat[],char s[][20],int *nk)

{

int i,min=4000,j;

for(i=0;i<kol;i++)

if(cat[i].diag <= min)

min=cat[i].diag;

printf("min= %d\n",min);

for(i=0;i<kol;i++)

if(cat[i].diag==min)

{

for(j=0;j<*nk && strcmp(cat[i].nazv,s[j])!=0;j++);

if(j==*nk)

strcpy(s[(*nk)++],cat[i].nazv);

}

}

main()

{

int koltel=0,nk=0,i;

char str[40][20],namefile1[20],namefile2[20];

TELEVISOR catalog[40];

clrscr();

printf("ВВЕДИТЕ ИМЯ ФАЙЛА:\n");

gets(namefile1);

readfile(&koltel,catalog,namefile1);

form(koltel,catalog,str,&nk);

printf("nk= %d\n",nk);

if(nk>0)

{

printf("ВВЕДИТЕ ИМЯ ФАЙЛА:\n");

gets(namefile2);

writefile(nk,namefile2,str);

printf("НАЗВАНИЕ ТЕЛЕВИЗОРА С МИНИМАЛЬНОЙ ДИАГОНАЛЬЮ:\n");

for(i=0;i<nk;i++)

puts(str[i]);

}

else

printf("ТЕЛЕВИЗОРЫ НЕ НАЙДЕНЫ!");

getch();

}

/*Лабораторная работа #5 (Списки. Динамические переменные. )

Написать программу, которая вводит из файла записи вида:

Стул

Цвет Высота Изготовитель Материал

Город Завод Фамилия директора

размещает их в стеке реализованном с помощью линейного списка и выполняет следующие действия:

удаляет стул заданного цвета

Результат (содержимое стека) выводится в файл

*/

#include<string.h>

#include<conio.h>

#include<stdio.h>

#include<alloc.h>

#define chair struct CHAIR

#define clr while(getchar()!='\n')

struct izgotovitel

{

char town[20];

char factory[20];

char name[20];

};

chair

{

char color[20];

int vysota;

char material[20];

struct izgotovitel maker;

chair *next;

};

chair *stackcat()

{

FILE *f;

chair *stack=NULL,*uk;

char name1[20],hlp[20];

int flag=1,i;

do

{

printf("Please enter filename:\n");

gets(name1);

if ((f=fopen(name1,"r"))==NULL)

{

printf("Cannot find file %s \n",name1);

printf("Please, repeat again\n");

}

else

flag=0;

}

while (flag);

while(!feof(f))

{

if(fscanf(f,"%s",hlp)!=EOF)

{

uk=(chair*)malloc(sizeof(chair));

uk->next=stack;

stack=uk;

strcpy(uk->color,hlp);

while(getc(f)!='\n');

fscanf(f,"%d",&uk->vysota);

while(getc(f)!='\n');

fscanf(f,"%s",&uk->material);

while(getc(f)!='\n');

fgets(uk->maker.town,20,f);

i=0;

while(uk->maker.town[i]!='\n')

i++;

uk->maker.town[i]='\0';

fgets(uk->maker.factory,20,f);

i=0;

while(uk->maker.factory[i]!='\n')

i++;

uk->maker.factory[i]='\0';

fgets(uk->maker.name,20,f);

i=0;

while(uk->maker.name[i]!='\n')

i++;

uk->maker.name[i]='\0';

}

}

fclose(f);

return(stack);

}

void putcat(chair *uk)

{

int i=1;

while(uk!=NULL)

{

printf(" %d Chair : \n",i++);

printf("Color ..................: ");

puts(uk->color);

printf("Length.................: ");

printf("%d\n",uk->vysota);

printf("Material...............: ");

puts(uk->material);

printf("Maker : \n");

printf(" Town .............: ");

puts(uk->maker.town);

printf(" Factory .............: ");

puts(uk->maker.factory);

printf(" Name ...........: ");

puts(uk->maker.name);

getch();

uk=uk->next;

}

}

void udalchair(chair *uk,char xcolor[])

{

FILE *f;

f=fopen("result.c","w");

while(uk!=NULL)

{

if (strcmp(xcolor,uk->color)!=0)

{

fputs(uk->color,f);

fputs("\n",f);

fprintf(f,"%d\n",uk->vysota);

fputs(uk->material,f);

fputs("\n",f);

fputs(uk->maker.town,f);

fputs("\n",f);

fputs(uk->maker.factory,f);

fputs("\n",f);

fputs(uk->maker.name,f);

fputs("\n",f);

}

uk=uk->next;

}

}