Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Министерство образования Республики Беларусь2.docx
Скачиваний:
4
Добавлен:
29.09.2019
Размер:
95.99 Кб
Скачать

Задача 6

  1. Условие задачи

Информационное поле элемента очереди – числовое. Вычислить среднее арифметическое элементов очереди и выбросить из очереди элементы, превышающие среднее арифметическое.

  1. Входные данные

    1. Элементы очереди

Назначение: исходные данные для необходимых действий над очередью.

Обозначение в программе: очередь numbers

Тип: вещественный (float).

Диапазон допустимых значений: [3.4E-38; 3.4E+38]

  1. Выходные данные

    1. Элементы очереди

Обозначение в программе: очередь numbers.

Тип: вещественный (float).

  1. Описание функций

4.1 Название: filequestion.

Назначение: определение способа ввода исходных данных (в окне программы либо из файла); определение необходимости сохранения результатов в текстовый файл

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

Список формальных параметров:

  • pos

Тип: целочисленный (int).

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

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

    1. Название: enter_float

Назначение: считывание вводимой информации и, в случае ввода вещественного числа, его возвращение

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

Описание внешних эффектов: в случае ввода невещественной информации выводится сообщение о том, что введено не вещественное число.

    1. Название: t6

Назначение: решение и вывод результатов

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

Список использованных источников

  1. http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=298

  2. http://ru.wikipedia.org/wiki/Метод_Монте-Карло

  3. http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/

  4. http://www.youtube.com/watch?v=-Wo2FF3H65g

  5. http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/6904bddf-e790-4e20-b325-0ea5abccffe2/

Приложение А

Код программы

//Текст файла file.cpp-----------------------------------------------------------------

#include"tfn.h"

void t1(),t2(),t3(),t4(),t5(),t6();

void (*pf[])()={t1,t2,t3,t4,t5,t6};

void (*pf2[])()={newf,addf,editf,delf,findf,sort_by_author,sort_by_price,outf,nothing};

void main(){

SetConsoleOutputCP(1251);

while(true){

system("pause"); system("cls");

(*pf[menu()])();}

}

void t1(){

bool p,not_int=false; int n,i,j; char filename[255];

do{

puts("\n1 – Целочисленная матрица\n2 – Матрица вещественных чисел:");

n=enter_int();}

while(n!=1&&n!=2);

if(n==2) not_int=true;

p=filequestion(1);

if(p){

FILE *fp;

puts("\Файл должен содержать размерность матрицы, затем матрицу\nВведите имя файла:"); enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fscanf(fp,"%i",&n); fclose(fp);

}

else{

puts("Введите размерность: "); do {n=enter_int();} while(n<2);}

float **a=new float*[n],**c=new float*[n];

for(i=0;i<n;i++) {a[i]=new float[n]; c[i]=new float[n];}

if(p){

FILE *fp=fopen(filename,"r");

fscanf(fp,"%i",&i);

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

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

fscanf(fp,"%f",&a[i][j]);

fclose(fp);}

else{

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

printf("Введите %i строку:",i+1);

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

if(not_int) a[i][j]=enter_float();

else a[i][j]=enter_int();}}

float r1=sum(a,n,n),r2=mindiag(a,n);

newmatrix(a,n,n,c);

p=filequestion(2);

if(not_int) printf("r1=%f\nr2=%f\nНовая матрица:\n",r1,r2);

else printf("r1=%i\nr2=%i\nНовая матрица:\n",int(r1),int(r2));

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

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

if(not_int) printf("%f\t",c[i][j]);

else printf("%i\t",int(c[i][j]));

printf("\n");}

if(p){

FILE *fp;

puts("Введите имя файла: "); enter_string(filename);

if((fp=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

if(not_int) fprintf(fp,"r1=%f\nr2=%f\nНовая матрица:\n",r1,r2);

else fprintf(fp,"r1=%i\nr2=%i\nНовая матрица:\n",int(r1),int(r2));

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

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

if(not_int) fprintf(fp,"%f\t",c[i][j]);

else fprintf(fp,"%i\t",int(c[i][j]));

fprintf(fp,"\n");}

fcloseall();}

}

void t2(){

bool p=filequestion(1),ex; char temp[50],filename[255]; int n=0,k,k2;//i,i2 !

if(p){

FILE *fp;

puts("\nФайл должен содержать текст\nВведите имя файла:"); enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

while(!feof(fp)) {fscanf(fp,"%s",temp); n++;}

}

else {puts("Введите количество слов: "); n=enter_int();}

char **words=new char*[n];

for(k=0;k<n;k++) words[k]=new char[50];

if(p){

FILE *fp=fopen(filename,"r");

k=0;

while(!feof(fp)){

ex=true;

fscanf(fp,"%s",words[k]);

for(k2=k-1;k2>=0&&k2!=k;k2--)

if(strcmp(words[k],words[k2])==0){

ex=false; break;}

if(ex) k++;}

fclose(fp);}

else{

puts("Вводите текст: ");

k=0;

for(int k3=0;k3<n;k3++){

ex=true;

scanf("%s",words[k]);

for(k2=k-1;k2>=0&&k2!=k;k2--)

if(strcmp(words[k],words[k2])==0){

ex=false; break;}

if(ex) k++;}

for(n=0;n<k;n++) OemToChar(words[n],words[n]);

}

p=filequestion(2);

for(n=0;n<k;n++) printf("%s ",words[n]);

printf("\n");

if(p){

FILE *fp; puts("Введите имя файла: "); enter_string(filename);

if((fp=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

for(n=0;n<k;n++) fprintf(fp,"%s ",words[n]);

fcloseall();}

}

void t3(){

SetConsoleCP(1251);

int p;

while(p!=8){

system("pause"); system("cls");

p=menu2();

(*pf2[p])();}

}

void t4(){

bool p=filequestion(1); float a,b; int N;

if(p){

FILE *fp; char filename[255];

puts("\nФайл должен содержать пределы интегрирования и количество точек для метода Монте-Карло\nВведите имя файла:");

enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fscanf(fp,"%f%f%i",&a,&b,&N); fclose(fp);}

else{

puts("Введите a:"); a=enter_float();

puts("Введите b:"); b=enter_float();

puts("Введите N:"); do {N=enter_int();} while(N<=0); }

float r=MMK(a,b,N);

p=filequestion(2);

printf("I=%f\n",r);

if(p){

FILE *fp; char filename[255];

puts("Введите имя файла: "); enter_string(filename);

if((fp=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

fprintf(fp,"I=%f\n",r);

fcloseall();}

}

void t5(){

bool p=filequestion(1); float M,m1,m2;

if(p){

FILE *fp; char filename[255];

puts("\nФайл должен содержать массу бруска и гирь\nВведите имя файла:"); enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fscanf(fp,"%f%f%f",&M,&m1,&m2); fclose(fp);}

else{

puts("Введите M:"); do {M=enter_float();} while(M<=0);

puts("Введите m1:"); do {m1=enter_float();} while(m1<=0);

puts("Введите m2"); dp {m2=enter_float();} while(m2<=0); }

float T1=m1*g,T2=m2*g,result=F(m1,m2)/M;

FILE *excel;

if((excel=fopen("excel.txt","w"))==NULL) perror("Данные не передались в Excel");

else for(float t=0;t<11;t+=1) fprintf(excel,"%f\n%f\n",t,result*t);

p=filequestion(2);

printf("T1=%f\nT2=%f\na=%f\n",T1,T2,result);

if(p){

FILE *fp; char filename[255];

puts("Введите имя файла: "); enter_string(filename);

if((fp=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

fprintf(fp,"T1=%f\nT2=%f\na=%f",T1,T2,result);}

fcloseall();

ShellExecute(NULL,"open","таблица.xls",NULL,NULL,SW_SHOWNORMAL);

}

void t6(){

bool p=filequestion(1); queue<float> numbers; float num,sum=0;

if(p){

FILE *fp; char filename[255];

puts("\nФайл должен содержать очередь\nВведите имя файла:"); enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

while (!feof(fp)) {fscanf(fp,"%f",&num); numbers.push(num);}

fclose(fp);

}

else{

int p2;

do {puts("1 – Добавить в очередь\n2 – Добавление закончено\n\nВаш выбор:"); p2=enter_int();}

while(p2!=1&&p2!=2);

while(p2==1){

puts("Вводите"); num=enter_float(); numbers.push(num);

do {puts("1 - Добавить в очередь\n2 – Добавление закончено\n\nВаш выбор:"); p2=enter_int();}

while(p2!=1&&p2!=2);

}

}

queue<float> temp=numbers;

while(!numbers.empty()) {sum+=numbers.front(); numbers.pop();}

sum/=temp.size();

while(!temp.empty()){

if(temp.front()<=sum) numbers.push(temp.front());

temp.pop();}

p=filequestion(2);

if(p) temp=numbers;

while(!numbers.empty()) {printf("%f\n",numbers.front()); numbers.pop();}

if(p){

FILE *fp; char filename[255];

puts("Введите имя файла: "); enter_string(filename);

if((fp=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

while(!temp.empty()) {fprintf(fp,"%f\n",temp.front()); temp.pop();}

fcloseall();}

}

//Текст файла tfn.cpp---------------------------------------------

#include"tfn.h"

int menu(){

char answer;

do{

puts("\nМеню\n1 - Задача1\n2 - Задача2\n3 - Задача3\n4 - Задача4\n5 - Задача5\n6 - Задача6\n7 - Выход\n\nВаш выбор: ");

fflush(stdin); answer=getchar();}

while(strchr("1234567",answer)==NULL);

if(answer=='7') exit(0);

return answer-49;

}

int menu2(){

char answer;

do{

puts("3\n\n1 – Создать новый файл\n2 – Дозаписать в имеющийся\n3 – Редактировать запись\n4 – Удалить запись\n5 – Поиск записи\n6 – Сортировка по автору\n7 – Сортировка по начальной цене\n8 – Просмотреть файл\n9 – В главное меню\n\nВаш выбор:");

fflush(stdin); answer=getchar();}

while(strchr("123456789",answer)==NULL);

return answer-49;

}

void enter_string(char *str){

do {fflush(stdin); gets(str);} while(strcmp(str,"")==0);

}

int enter_int(){

int result; float ftemp; char temp[255],*err;

while(true){

enter_string(temp);

ftemp=strtod(temp,&err);

if(*err||strchr(temp,'.')) puts("Введено не целое число");

else break;}

result=int(ftemp); return result;

}

float enter_float(){

float result; char temp[255],*err;

while(true){

enter_string(temp);

result=strtod(temp,&err);

if(*err) puts("Введено не вещественное число");

else break;}

return result;

}

void delete_slash_n(char *str){

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

}

bool filequestion(int pos){

int answer;

if(pos==1) puts("1 – Ввод данных из файла\n2 – Ввод клавиатурой\n\nВаш выбор:");

else if(pos==2) puts("1 – Сохранить в файл\n2 – Без сохранения\n\nВаш выбор:");

else {puts("Ошибка в программе: функция filequestion"); exit(0);}

do {fflush(stdin); answer=enter_int();} while(answer!=1&&answer!=2);

if(answer==1) return true;

else return false;

}

float t4f(float arg){

return (pow(arg,2)+arg+2);}

float MMK(float a,float b,int N){

bool negative=false;

if(b<a) {float temp=b; b=a; a=temp; negative=true;}

float result=0;

srand(time(NULL));

for(int i=0;i<N;i++)

result+=t4f(a+fabs(b-a)*rand()/RAND_MAX);

result/=N; result*=(b-a);

if(negative) result*=(-1);

return result;

}

float F(float m1,float m2){

return fabs(m1*g-m2*g);}

void newf(){

FILE *fp,*fp2; int n; char filename[255]; WORKS s;

if((fp=fopen("t3l.txt","a"))==NULL) {perror("Базовый файл не открыт"); return;}

if(filequestion(1)){

FILE *fp3;

puts("\nФайл должен содержать имя создаваемого файла, количество добавляемых записей, информацию в порядке название-автор-материал-номер-нач.цена\nВведите имя файла:");

enter_string(filename);

if((fp3=fopen(filename,"r"))==NULL ) {perror("Файл не открыт"); return;}

fgets(filename,255,fp3); delete_slash_n(filename);

if((fp2=fopen(filename,"ab"))==NULL ) {perror("Файл не открыт"); return;}

fscanf(fp3,"%i",&n);

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

fgets(s.name,50,fp3); delete_slash_n(s.name);

fgets(s.author,100,fp3); delete_slash_n(s.author);

fgets(s.material,50,fp3); delete_slash_n(s.material);

fscanf(fp3,"%i%f",&s.number,&s.bid);

fwrite(&s,sizeof(WORKS),1,fp2);}

}

else{

puts("Введите имя файла:"); enter_string(filename);

if((fp2=fopen(filename,"ab"))==NULL ) {perror("Файл не открыт"); return;}

puts("Введите количество записей, добавляемых в файл"); n=enter_int();

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

printf("\nЗапись %i\n",i+1); structin(s);

fwrite(&s,sizeof(WORKS),1,fp2);}

}

fputs(filename,fp); fputs("\n",fp);

fcloseall();

}

void addf(){

FILE *fp; int n; WORKS s;

char filename[255];

if((fp=fopen("t3l.txt","r"))==NULL) perror("Базовый файл не открыт");

else{

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);}

fclose(fp);

if(filequestion(1)){

FILE *fp2;

puts("\nФайл должен содержать имя файла, куда нужно добавить информацию, количество добавляемых записей, информацию в порядке название-автор-материал-номер-нач.цена\nВведите имя файла:");

enter_string(filename);

if((fp2=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fgets(filename,255,fp2); delete_slash_n(filename);

if((fp=fopen(filename,"ab"))==NULL) {perror("Файл не открыт"); return;}

fscanf(fp2,"%i",&n);

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

fgets(s.name,50,fp2); delete_slash_n(s.name);

fgets(s.author,100,fp2); delete_slash_n(s.author);

fgets(s.material,50,fp2); delete_slash_n(s.material);

fscanf(fp2,"%i%f",&s.number,&s.bid);

fwrite(&s,sizeof(WORKS),1,fp);

}

}

else{

puts("Введите файл для добавления"); enter_string(filename);

if((fp=fopen(filename,"ab"))==NULL) {perror("Файл не открыт"); return;}

puts("Введите, сколько записей необходимо добавить"); n=enter_int();

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

printf("\nЗапись %i\n",i+1); structin(s);

fwrite(&s,sizeof(WORKS),1,fp);}

}

fcloseall();

}

void editf(){

FILE *fp; char filename[255]; int num,num2; WORKS s; // look at INT list

if((fp=fopen("t3l.txt","r"))==NULL) {perror("Базовый файл не открыт"); return;}

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);

fclose(fp);

bool p=filequestion(1);

if(p){

FILE *fp2;

puts("\nФайл должен содержать имя файла, запись в котором нужно редактировать, номер редактируемой записи, правильные варианты полей в виде номер поля-его правильный вариант\nВведите имя файла:");

enter_string(filename);

if((fp2=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fgets(filename,255,fp2); delete_slash_n(filename);

if((fp=fopen(filename,"r+b"))==NULL) {perror("Файл не открыт"); return;}

fscanf(fp2,"%i",&num);

fseek(fp,(num-1)*sizeof(WORKS),SEEK_SET); fread(&s,sizeof(WORKS),1,fp);

while(!feof(fp2)){

fscanf(fp2,"%i",&num2);

switch(num2){

case 1: fgets(s.name,50,fp2); delete_slash_n(s.name); break;

case 2: fgets(s.author,100,fp2); delete_slash_n(s.author); break;

case 3: fgets(s.material,50,fp2); delete_slash_n(s.material); break;

case 4: fscanf(fp2,"%i",&s.number); break;

case 5: fscanf(fp2,"%f",&s.bid); break;}}

}

else{

puts("\nВведите имя файла, запись в котором нужно редактировать:"); enter_string(filename);

if((fp=fopen(filename,"r+b"))==NULL) {perror("Файл не открыт"); return;}

puts("Введите номер записи, в которой нужно редактировать поля"); num=enter_int();

fseek(fp,(num-1)*sizeof(WORKS),SEEK_SET); fread(&s,sizeof(WORKS),1,fp);

puts("Выбранная запись:"); structout(s);

do{

puts("\n1 – Редактировать название\n2 - Редактировать автора\n3 - Редактировать материал\n4 - Редактировать номер\n5 - Редактировать начальную цену\nВаш выбор:");

do {num2=enter_int();} while(num2<1||num2>5);

switch(num2){

case 1: puts("Введите новое название работы:"); enter_string(s.name); break;

case 2: puts("Введите нового автора:"); enter_string(s.author); break;

case 3: puts("Введите новый материал:"); enter_string(s.material); break;

case 4: puts("Введите новый номер:"); s.number=enter_int(); break;

case 5: puts("Введите новую начальную цену:"); s.bid=enter_float(); break;}

do{

puts("\n1 – Редактировать другое поле\n2 – Завершить редактирование\nВаш выбор:");

num=enter_int();}

while(num!=1&&num!=2);

}

while(num!=2);

}

fseek(fp,-sizeof(WORKS),SEEK_CUR); fwrite(&s,sizeof(WORKS),1,fp);

fcloseall();

}

void delf(){

FILE *fp; int n; char filename[255];

if((fp=fopen("t3l.txt","r"))==NULL) perror("Базовый файл не открыт");

else{

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);}

fclose(fp);

if(filequestion(1)){

puts("\nФайл должен содержать название файла, из которого нужно удалить запись, и номер записи\nВведите имя файла:");

enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) perror("Файл не открыт");

fgets(filename,255,fp); delete_slash_n(filename); fscanf(fp,"%i",&n);

fclose(fp);}

else{

puts("Введите файл, из которого нужно удалить запись:");

enter_string(filename);

puts("Введите номер записи, которую нужно удалить:");

n=enter_int(); }

if((fp=fopen(filename,"rb"))==NULL) {perror("Файл не открыт"); return;}

FILE *fp2=tmpfile();

WORKS s;

int i=1;

while(fread(&s,sizeof(WORKS),1,fp)){

if(i!=n) fwrite(&s,sizeof(WORKS),1,fp2);

i++;}

fclose(fp);

fseek(fp2,0L,SEEK_SET);

if((fp=fopen(filename,"wb"))==NULL) {perror("Файл не открыт"); return;}

while(fread(&s,sizeof(WORKS),1,fp2)) fwrite(&s,sizeof(WORKS),1,fp);

fcloseall();

}

void findf(){

bool p=filequestion(1),fit; FILE *fp,*fp2,*fp3; int i,num[5]={0},num2; WORKS s,s2; char filename[255];

if(p){

puts("\nФайл должен содержать критерии в виде номер критерия-поисковый запрос\nВведите имя файла");

enter_string(filename);

if((fp2=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

for(i=0;(i<5)&&(!feof(fp2));i++){

fscanf(fp2,"%i",&num[i]);

switch(num[i]){

case 1: fgets(s.name,50,fp2); delete_slash_n(s.name); break;

case 2: fgets(s.author,100,fp2); delete_slash_n(s.author); break;

case 3: fgets(s.material,50,fp2); delete_slash_n(s.material); break;

case 4: fscanf(fp2,"%i",&s.number); break;

case 5: fscanf(fp2,"%f",&s.bid); break;}}

}

else{

for(i=0,num2=0;(i<5)&&(num2!=2);i++){

puts("\n1 – Учесть название\n2 - Учесть автора\n3 - Учесть материал\n4 – Учесть номер\n5 - Учесть начальную цену\nВаш выбор:");

do {num[i]=enter_int();} while(num[i]<1||num[i]>5);

switch(num[i]){

case 1: puts("Введите название:"); enter_string(s.name); break;

case 2: puts("Введите автора:"); enter_string(s.author); break;

case 3: puts("Введите материал:"); enter_string(s.material); break;

case 4: puts("Введите номер:"); s.number=enter_int(); break;

case 5: puts("Введите начальную цену:"); s.bid=enter_float(); break;}

do{

puts("\n1 – Добавить критерий\n2 – Завершить добавление\nВаш выбор:");

num2=enter_int();}

while(num2!=1&&num2!=2);

}

}

p=filequestion(2);

if(p){

puts("Введите файл для сохранения:"); enter_string(filename);

if((fp3=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); p=false;}

}

if((fp=fopen("t3l.txt","r"))==NULL) {perror("Базовый файл не открыт"); return;}

while(fgets(filename,20,fp)){

delete_slash_n(filename);

if((fp2=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

while(fread(&s2,sizeof(WORKS),1,fp2)){

fit=true;

for(i=0;(i<5)&&(num[i]!=0)&&fit;i++)

switch(num[i]){

case 1: if(strcmp(s2.name,s.name)!=0) fit=false; break;

case 2: if(strcmp(s2.author,s.author)!=0) fit=false; break;

case 3: if(strcmp(s2.material,s.material)!=0) fit=false; break;

case 4: if(s2.number!=s.number) fit=false; break;

case 5: if(s2.bid!=s.bid) fit=false; break;}

if(fit){

printf("\n%i запись файла %s\n",ftell(fp2)/sizeof(WORKS),filename); structout(s2);

if(p) fprintf(fp3,"\n%i запись файла %s\n%s\n%s\n%s\nНомер лота: %i\nНачальная цена: %f\n",ftell(fp2)/sizeof(WORKS),filename,s2.name,s2.author,s2.material,s2.number,s2.bid);

}

}

}

fcloseall();

}

void sort_by_author(){

FILE *fp; char filename[255];

if((fp=fopen("t3l.txt","r"))==NULL) perror("Базовый файл не открыт");

else{

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);}

fclose(fp);

bool p=filequestion(1);

if(p){

puts("\nФайл должен содержать название файла, записи которого нужно отсортировать по автору \nВведите имя файла:");

enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fgets(filename,255,fp); fclose(fp);}

else{

puts("Введите название файла, записи которого нужно отсортировать по автору:");

enter_string(filename);}

if((fp=fopen(filename,"r+b"))==NULL) {perror("Файл не открыт"); return;}

WORKS s,s2;

p=true;

while(p){

p=false;

fseek(fp,0,SEEK_SET);

while((fread(&s,sizeof(WORKS),1,fp))&&(fread(&s2,sizeof(WORKS),1,fp))){

if(strcmp(s.author,s2.author)>0){

fseek(fp,-2*sizeof(WORKS),SEEK_CUR);

fwrite(&s2,sizeof(WORKS),1,fp); fwrite(&s,sizeof(WORKS),1,fp);

p=true;}

fseek(fp,-sizeof(WORKS),SEEK_CUR);

}

}

fcloseall();

}

void sort_by_price(){

FILE *fp; char filename[255];

if((fp=fopen("t3l.txt","r"))==NULL) perror("Базовый файл не открыт");

else{

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);}

fclose(fp);

bool p=filequestion(1);

if(p){

puts("\nФайл должен содержать название файла, записи которого нужно отсортировать по начальной стоимости\nВведите имя файла:");

enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fgets(filename,255,fp); fclose(fp);}

else{

puts("Введите название файла, записи которого нужно отсортировать по начальной стоимости:");

enter_string(filename);}

if((fp=fopen(filename,"r+b"))==NULL) {perror("Файл не открыт"); return;}

WORKS s,s2;

p=true;

while(p){

p=false;

fseek(fp,0,SEEK_SET);

while((fread(&s,sizeof(WORKS),1,fp))&&(fread(&s2,sizeof(WORKS),1,fp))){

if(s.bid>s2.bid){

fseek(fp,-2*sizeof(WORKS),SEEK_CUR);

fwrite(&s2,sizeof(WORKS),1,fp); fwrite(&s,sizeof(WORKS),1,fp);

p=true;}

fseek(fp,-sizeof(WORKS),SEEK_CUR);

}

}

fcloseall();

}

void outf(){

FILE *fp; char filename[255];

if((fp=fopen("t3l.txt","r"))==NULL) {perror("Базовый файл не открыт"); return;}

puts("\nСуществующие файлы:");

while(fgets(filename,255,fp)!=NULL) puts(filename);

fclose(fp);

bool p=filequestion(1);

if(p){

puts("\nФайл должен содержать имя файла, который надо просмотреть\nВведите имя файла:");

enter_string(filename);

if((fp=fopen(filename,"r"))==NULL) {perror("Файл не открыт"); return;}

fgets(filename,255,fp); fclose(fp);}

else{

puts("Введите файл, который нужно просмотреть:");

enter_string(filename);}

if((fp=fopen(filename,"rb"))==NULL) {perror("Файл не открыт"); return;}

WORKS s;

p=filequestion(2);

while(fread(&s,sizeof(WORKS),1,fp)) structout(s);

if(p){

FILE *fp2;

puts("Введите имя файла: "); enter_string(filename);

if((fp2=fopen(filename,"w"))==NULL) {perror("Файл не открыт"); return;}

fseek(fp,0L,SEEK_SET);

while(fread(&s,sizeof(WORKS),1,fp))

fprintf(fp2,"\n%s\n%s\n%s\nНомер лота: %i\nНачальная цена: %f\n",s.name,s.author,s.material,s.number,s.bid);

}

fcloseall();

}

void nothing(){}

void structin(WORKS &s){

puts("Введите название работы"); enter_string(s.name);

puts("Введите автора:"); enter_string(s.author);

puts("Введите материал:"); enter_string(s.material);

puts("Введите номер лота:"); do {s.number=enter_int();} while(s.number<=0);

puts("Введите начальную стоимость:"); do {s.bid=enter_float();} while(s.bid<0);

}

void structout(WORKS &s){

printf("\n%s\n%s\n%s\nНомер лота: %i\nНачальная цена: %f\n\n",s.name,s.author,s.material,s.number,s.bid);

}

// Текст файла tfn.h ------------------------------------------------

#define g 9.8

#include<math.h>

#include<stdio.h>

#include<windows.h>

#include<string.h>

#include<stdlib.h>

#include<time.h>

#include<queue>

using namespace std;

struct WORKS {int number; char name[50],author[100],material[50]; float bid;};//255 255 255 !

int menu();

int menu2();

void enter_string(char *str);

int enter_int();

float enter_float();

void delete_slash_n(char *str);

bool filequestion(int);

template <class type> type sum(type **mas,int ms1,int ms2){

int i,j; bool pos; type result=0;

for(j=0;j<ms2;j++){

pos=true;

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

if(mas[i][j]<0) {pos=false; break;}

if(pos)

for(i=ms1-1;i>=0;i--)

result+=mas[i][j];}

return result;}

template <class type> type mindiag(type **mas,int ms){

type temp,result=0; int i,j,k;

for(i=0,j=1;i<2;i++,j--) result+=fabs(mas[i][j]);

for(k=2;k<ms;k++){

temp=0;

for(i=0,j=k;i<=k;i++,j--)

temp+=fabs(mas[i][j]);

if(temp<result) result=temp;

}

for(k=1;k<ms-1;k++){

temp=0;

for(i=k,j=ms-1;i<ms;i++,j--)

temp+=fabs(mas[i][j]);

if(temp<result) result=temp;

}

return result;}

template <class type> void newmatrix(type **mas,int ms1,int ms2,type **res){

type divisor=0;

for(int i=0;i<ms1;i++)

for(int j=0;j<ms2;j++)

divisor+=mas[i][j];

divisor/=(ms1*ms2);

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

for(int j=0;j<ms2;j++)

res[i][j]=mas[i][j]/divisor;}

float MMK(float a,float b,int N);

float F(float m1,float m2);

void newf(),addf(),editf(),delf(),findf(),sort_by_author(),sort_by_price(),outf(),nothing();

void structin(WORKS &s);

void structout(WORKS &s);