- •Задача 1
- •Задача 2
- •Задача 3
- •Условие задачи
- •Входные данные
- •Описание функций
- •Название: filequestion.
- •Задача 4
- •Условие задачи
- •Входные данные.
- •Выходные данные
- •Описание функций
- •Название: filequestion.
- •Задача 5
- •Условие задачи
- •Входные данные
- •Выходные данные
- •Описание функций
- •Название: filequestion.
- •Задача 6
Задача 6
Условие задачи
Информационное поле элемента очереди – числовое. Вычислить среднее арифметическое элементов очереди и выбросить из очереди элементы, превышающие среднее арифметическое.
Входные данные
Элементы очереди
Назначение: исходные данные для необходимых действий над очередью.
Обозначение в программе: очередь numbers
Тип: вещественный (float).
Диапазон допустимых значений: [3.4E-38; 3.4E+38]
Выходные данные
Элементы очереди
Обозначение в программе: очередь numbers.
Тип: вещественный (float).
Описание функций
4.1 Название: filequestion.
Назначение: определение способа ввода исходных данных (в окне программы либо из файла); определение необходимости сохранения результатов в текстовый файл
Указания по вызову и использованию: для определения способа ввода исходных данных следует передать в функцию в качестве параметра число 1, для определения необходимости сохранения результатов в текстовый файл следует передать число 2.
Список формальных параметров:
pos
Тип: целочисленный (int).
Назначение: определение назначения функции как определяющей способ ввода исходных данных либо как определяющей необходимость сохранения результатов в текстовый файл.
Описание внешних эффектов: в зависимости от определенного для функции назначения и правильности её вызова в программе выдаются сообщения, просящие пользователя выбрать способ ввода данных; сохранять результаты в файл или нет. В случае неправильного вызова функции выводится сообщение об ошибке в программе.
Название: enter_float
Назначение: считывание вводимой информации и, в случае ввода вещественного числа, его возвращение
Указания по вызову и использованию: следует использовать при необходимости ввода вещественных данных
Описание внешних эффектов: в случае ввода невещественной информации выводится сообщение о том, что введено не вещественное число.
Название: t6
Назначение: решение и вывод результатов
Описание внешних эффектов: В случае ввода данных из файла выводится приглашение ввести название файла, из которого считывается очередь чисел. В случае ввода данных клавиатурой выводится приглашение ввести очередь. В случае ошибки открытия файла-источника выводится сообщение с названием ошибки. После завершения вычислений на экран выводится изменённая очередь. В случае необходимости сохранения результатов в текстовый файл, выводится сообщение, приглашающее ввести имя файла для сохранения. В случае невозможности создать файл с введённым именем, выводится сообщение с названием ошибки. При успешном открытии файла, в него записывается сообщение с результатами работы функции, идентичное выведенному на экран.
Список использованных источников
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=298
http://ru.wikipedia.org/wiki/Метод_Монте-Карло
http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/
http://www.youtube.com/watch?v=-Wo2FF3H65g
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);