Форум программистов, компьютерный форум CyberForum.ru

Файлы, сортировка и поиск в них - C++

Восстановить пароль Регистрация
 
Олег@tor
9 / 9 / 1
Регистрация: 22.10.2009
Сообщений: 24
07.04.2010, 23:07     Файлы, сортировка и поиск в них #1
Задание:
Для книг, хранящихся в библиотеке, задаются автор, название, год изда-
ния, количество страниц.
а) Вывести список книг, изданных после заданного года.
б) Упорядочить по неубыванию массив структур по заданному ключу.
Ключ: год издания. Методы сортировки: QuickSort и пузырьковая сор-
тировка.
в)!!! Найти в отсортированном массиве структур заданный элемент
указанными методами поиска (для упрощения предполагаем, что в массиве при-
сутствует только один элемент с нужными характеристиками).
Найти книгу 1966 г. издания. Методы поиска: полный перебор и интер-
поляционный.

В программе предусмотреть сохранение вводимых данных в файл и воз-
можность чтения из ранее сохраненного файла. Результаты выводить на эк-
ран и в текстовой файл.

Сделал всё, кроме пункта в) , казалось бы самое простое, просто подключить 2 функции для поиска и дописать в программу, а пробую, пробую - не получается(скорее всего не те формальные параметры передаю).

Короче, кого не затруднит, помогите переделать 2 функции из методы для поиска и "всунуть" их в мою программу.

Линейный поиск (метод полного перебора)
C++
1
2
3
4
5
6
int p_lin1(int a[],int  n, int x) 
{ 
for(int i=0; i < n; i++)  
        if (a[i]==x) return i; 
   return -1; 
}
Интерполяционный поиск.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int p_dv(int a[],int  n, int x) 
{ 
  int i=0, j=n-1, m; 
while(i<j) 
{ 
 if (a[i]==a[j])      // Предотвращение деления на нуль 
    if (a[i]==x) return i; 
           else return -1; 
 
m=i+(j-i)*(x-a[i])/(a[j]-a[i]); 
 
if (a[m]==x) return m;  
 
  else  
    if (x > a[m]) i=m+1; else j=m-1; 
} 
 
 return -1; 
}
Код моей программы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#include <iostream.h>  
#include <stdio.h>  
#include <conio.h> 
#include <stdlib.h> 
#include <string.h> 
 
 FILE *file,*filet; 
 struct  bible
{ 
    char avtor[30]; 
    char nazv[30]; 
    int god;
    char kst[200];
} knig[30];  
       char name[10];   
       char namet[10];
       int nst;  
       int g;         
int menu();             //Меню
void newf();            //Создать новый файл
void spisok();          //Ввести список
void opf();             //Открыть файл
void god();             //Год
void resc();            //Вывести результат на экран
void resf();            //Вывести результат в файл
void puz();             //Сортировка пузырьком
void quick(bible []);   //Сортировка quicksort    
 
int main()  
{  
while (true)  
{ 
 switch (menu()) 
{ 
  case 1: newf();break; 
  case 2: spisok();break; 
  case 3: opf();break; 
  case 4: god();break;
  case 5: resc();break; 
  case 6: resf();break; 
  case 7: puz(); break;
  case 8: quick (knig);break;
  case 9: return 0;break; 
    default: "Viberite pravilno!"; 
} 
  puts("Press any key to continue");  
 getch();      system("cls");  
}  
}  
 
int menu()       //Меню
{ 
 cout << "VIBERITE:" << endl; 
 cout << "1. New file" << endl; 
 cout << "2. Vvesti spisok" << endl; 
 cout << "3. Open file" << endl; 
 cout << "4. Vvesti nugniy god" << endl; 
 cout << "5. Vivesti result" << endl; 
 cout << "6. Vivesti v fail" << endl; 
 cout << "7. Puzirek" << endl;
 cout << "8. QuickSort" <<endl;
 cout << "9. Exit" << endl; 
 int i; 
 cin >> i; 
 return i; 
} 
 
 
void newf()     //Создать новый файл    
{ 
cout << "Vvedite file name" << endl; 
  cin >> name; 
 if ((file = fopen(name,"wb"))==NULL) 
 { 
   cout << "Oshibka pri sozdanii"<<endl; 
    exit(1); 
 } 
  cout << "File sozdan" << endl; 
 fclose(file); 
} 
 
void spisok()    //Ввести список     
{ 
 if ((file = fopen(name,"rb+"))==NULL) 
 { 
   cout << "Oshibka pri sozdanii spiska"<<endl; 
    exit(1); 
     } 
 
 cout << "Vvedite chislo knig "; 
 cin >> nst;  
 for (int i=0; i<nst; i++) 
 { 
  cout << "Vvedite nazvanie "<<i+1<<" knigi: "; 
  cin >> knig[i].nazv;  fputs(knig[i].nazv,file);fprintf(file,"  ");
  cout << "Vvedite avtora: "; 
  cin >> knig[i].avtor; fputs(knig[i].avtor,file);fprintf(file,"  ");
  cout << "Vvedite god izdaniya: "; 
  cin >> knig[i].god;  fprintf(file,"%d",knig[i].god);fprintf(file,"  ");
  cout << "Vvedite kol-vo stranic: "; 
  cin >> knig[i].kst;   fputs(knig[i].kst,file);fprintf(file,"\n");
  cout<<endl;
  } 
  fclose(file); 
} 
 
void opf()         //Открыть файл      
{ 
if ((file = fopen(name,"rb"))==NULL) 
   {  cout << "Oshibka pri otkritii"<<endl; 
      exit(1);  } 
 char str[100];
     while(!feof(file))
         if (fgets(str,100,file)!=NULL)
        cout<<str;
        cout<<endl;
 fclose(file);  
} 
 
void god()        //Вводим нужный год
{
cout<<"Vvedite nugniy god\n";
cin>>g;
}
 
void resc()       //Вывести результат на экран    
{ 
 for (int i=0; i<nst; i++) 
  if (knig[i].god>g)  
            cout<<knig[i].nazv<<"  "<<knig[i].avtor<<"  "<<knig[i].god<<"  "<<knig[i].kst<<endl;  
} 
 
void resf()        //Вывести результат в файл   
{ 
 cout << "Vvedite imya faila" << endl; 
  cin >> namet; 
if ((filet = fopen(namet,"w"))==NULL) 
   { 
      cout << "Oshibka pri sozdanii "<<endl; 
      exit(1); 
   } 
 for (int i=0; i<nst; i++) 
 if (knig[i].god>g)  
   { 
   fputs(knig[i].nazv,file);fprintf(file,"  ");
   fputs(knig[i].avtor,file);fprintf(file,"  ");
   fprintf(file,"%d",knig[i].god);fprintf(file,"  ");  
   fputs(knig[i].kst,file);fprintf(file,"\n");} 
   fclose(filet); 
} 
 
void puz()        //Сортировка пузырьком
{ bible t;
    for(int i=0;i<nst;i++) 
    for(int j=nst-1;j>=i;j--)  
        if (knig[j-1].god>knig[j].god&&knig[j-1].god>g&&knig[j].god>g)  
    { t=knig[j-1];  knig[j-1]=knig[j]; knig[j]=t;  } 
printf("Sortirovka puzir'kom proizvedena uspeshno\n");
} 
 
void quick (bible st[])     //Сортировка quicksort
{    
struct  
{  
  int l;  
  int r;  
} stack[30]; 
  
int i,j, left, right, x, s=0; 
bible  t; 
 
   stack[s].l=0; stack[s].r=nst-1; 
while (s != -1) 
{ 
    left=stack[s].l; right=stack[s].r;  
    s--; 
    while (left<right) 
    {      i=left; j=right; x=st[(left+right)/2].god; 
       while (i<=j) 
       { 
         while (st[i].god<x) i++; 
          while (st[j].god>x) j--; 
              if (i<=j) 
              {t=st[i];  st[i]=st[j];  st[j]=t; i++;  j--; }
       }
       
       if ((j-left)<(right-i))  
       {  
         if (i<right) {s++;  stack[s].l=i;  stack[s].r=right; }
         right=j; 
       } 
        else  
        { 
       if (left<j) {s++;  stack[s].l=left;  stack[s].r=j; } 
       left=i; 
        } 
    } 
} 
printf("Sortirovka QuickSort proizvedena uspeshno\n");
}
P.S. извиняюсь за целое "сочинение"...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2010, 23:07     Файлы, сортировка и поиск в них
Посмотрите здесь:

Массив,сортировка,файлы. C++
C++ Сортировка и поиск
Нужно просматривать папки и искать в них определенные файлы C++
Поиск простых чисел и формирование из них массива C++
C++ Заголовоные файлы, поиск
C++ сортировка и поиск
C++ Файлы и структуры. Поиск студента по имени и сортировка
C++ Как создавать файлы dat и вводить в них данные (при помощи fstream)?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 14:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru