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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 3. Дана символьная строка. Подсчитать в ней количество вхождений букв r, k, t. http://www.cyberforum.ru/cpp-beginners/thread114085.html
3. Дана символьная строка. Подсчитать в ней количество вхождений букв r, k, t. у кого какие идеи??
C++ Описать структуру "знак зодиака" Вот условие Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие... http://www.cyberforum.ru/cpp-beginners/thread114077.html
C++ Сложение векторов
Здрасти. #include <iostream> #include <conio.h> #include <cmath> class vector3D{ public: vector3D(int inita=0, int initb=0, int initc=0): a(inita), b(initb), c(initc){}; int...
C++ Описать структуру с именем ZNAK
Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия; • ввод с...
C++ Программа копирования файла http://www.cyberforum.ru/cpp-beginners/thread114049.html
написать программу копирования файла в двойном экземпляре.Чтение файла происходит блоками.Обработать ошибки.
C++ Нужно доделать код! матрица представляет собой вектор векторов (это не моя желание, это требование к лабораторной работе) #include <iostream> #include <vector> #include <ctime> using namespace std; typedef... подробнее

Показать сообщение отдельно
Олег@tor
9 / 9 / 1
Регистрация: 22.10.2009
Сообщений: 24

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

07.04.2010, 23:07. Просмотров 843. Ответов 0
Метки (Все метки)

Задание:
Для книг, хранящихся в библиотеке, задаются автор, название, год изда-
ния, количество страниц.
а) Вывести список книг, изданных после заданного года.
б) Упорядочить по неубыванию массив структур по заданному ключу.
Ключ: год издания. Методы сортировки: 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. извиняюсь за целое "сочинение"...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru