Оптимальную организацию функции продумайте самостоятельно.




Продемонстрируйте работу функции для всех вариантов поиска.

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

#include <stdio.h>

#include <locale>

#include <fstream>

#include <conio.h>

#include "windows.h"

#include <iostream>

#include<string.h>

 

using namespace std;

FILE *f; int v=0;

struct person

{

char fam[20];

char name[20];

int nomer;

int date;

int oklad;}*pr[20]={NULL};

 

char vib[10];int search;

int test(int v)

{

int a;

switch(v)

{

case 1:

{

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

{

if(pr[i]->nomer > pr[i+1]->nomer) return a=0;

else a=1;

}

}break;

case 2:

{

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

{

if(strcmp(pr[i]->name,pr[i+1]->name)>0) return a=0;

else a=1;

}

}break;

case 3:

{

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

{

if(pr[i]->date > pr[i+1]->date) return a=0;

else a=1;

}

}break;

case 4:

{

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

{

if(pr[i]->oklad > pr[i+1]->oklad) return a=0;

else a=1;

}

}break;

default: cout << "FAIL! " << endl;

}

return a;

}

int BinSearch(int v)

{

int left = 0;

int right = 10;

switch(v)

{

case 1:

{

cout << "Enter monile number: "; cin >> vib;

while (true)

{

int mid = left + (right - left) / 2;

if (pr[mid]->nomer == atoi(vib))

return mid;

if (pr[mid]->nomer > atoi(vib))

right = mid;

else

left = mid + 1;

}

}break;

case 2:

{

cout << "Enter name: "; cin >> vib;

while (true)

{

int mid = left + (right - left) / 2;

if (strcmp(pr[mid]->name,vib)==0)

return mid;

if (strcmp(pr[mid]->name, vib)>0)

right = mid;

else

left = mid + 1;

}

}break;

case 3:

{

cout << "Enter month: "; cin >> vib;

while (true)

{

int mid = left + (right - left) / 2;

if (pr[mid]->date == atoi(vib))

return mid;

if (pr[mid]->date > atoi(vib))

right = mid;

else

left = mid + 1;

}

}break;

case 4:

{

cout << "Enter salary: "; cin >> vib;

while (true)

{

int mid = left + (right - left) / 2;

if (pr[mid]->oklad == atoi(vib))

return mid;

if (pr[mid]->oklad > atoi(vib))

right = mid;

else

left = mid + 1;

}

}break;

default: cout << "FAIL!" << endl;break;

}

return search;

}

int NormSearch(int v)

{ int i=0;

switch(v)

{

case 1:

{

cout << "Enter monile number: "; cin >> vib;

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

{

if(atoi(vib)==pr[i]->nomer) {return i;}

}

}break;

case 2:

{

cout << "Enter name: "; cin >> vib;

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

{

if(strcmp(vib,pr[i]->name)==0) {return i;}

}

}break;

case 3:

{

cout << "Enter month: "; cin >> vib;

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

{

if(atoi(vib)==pr[i]->date) {return i;}

}

}break;

case 4:

{

cout << "Enter salary: "; cin >> vib;

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

{

if(atoi(vib)==pr[i]->oklad) { return i;}

}

}break;

default: cout << "FAIL" << endl;

}

}

int vibor()

{

cout << " Choose Select Search:" << endl;

cout << " 1. Mobile number." << endl;

cout << " 2. Name person." << endl;

cout << " 3. Month of birth." << endl;

cout << " 4. Salary" << endl;

cin >> v;

return v;

}

void scan()

{

fstream fin("7.dat");

int sum=0;

for(int i = 0;!fin.eof(); i++)

{

pr[i] = new person;

fin >> pr[i]->fam;

fin >> pr[i]->name;

fin >> pr[i]->nomer;

fin >> pr[i]->date;

fin >> pr[i]->oklad;

}

fin.close();

}

void print()

{

for (int k=1; k<9; k++)

{

cout<<"\nSurname: "<<pr[k]->fam;

cout<<"\nName: "<< pr[k]->name;

cout<<"\nMobile number: "<< pr[k]->nomer;

cout<<"\nMonth: "<< pr[k]->date;

cout<<"\nSalary: "<<pr[k]->oklad;

cout<<"\n\n";

}

}

 

 

int search_record()

{

int i=0;int t;

t=test(v);

cout << t << endl;

switch(t)

{case 1:

{

i=BinSearch(v);

cout << "Binary search:" << endl;

cout<<"\nSurname: ";printf("%s",pr[i]->fam);

cout<<"\nName: ";printf("%s",pr[i]->name);

cout<<"\nMobile number:";printf("%d",pr[i]->nomer);

cout<<"\nMonth: ";printf("%d",pr[i]->date);

cout<<"\nSalary: ";printf("%d",pr[i]->oklad);

cout<<"\n\n";

break;}

case 0:

{

i=NormSearch(v);

cout << "Normal search:" << endl;

cout<<"\nSurname: ";printf("%s",pr[i]->fam);

cout<<"\nName: ";printf("%s",pr[i]->name);

cout<<"\nMobile number:";printf("%d",pr[i]->nomer);

cout<<"\nMonth: ";printf("%d",pr[i]->date);

cout<<"\nSalary: ";printf("%d",pr[i]->oklad);

cout<<"\n\n";

break;

return 0; }

default: cout << "FAIL!" << endl;

}}

void insertSort(person *a[], int size, int v)

{

int s;

cout << " Sorting Massiv?" << endl;

cout << " 1.Yes\n 2.No" << endl;

cin >> s;

switch(s)

{

case 1:

{

person *tmp;

for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода

{

tmp = a[i];

switch(v)

{

case 1:

{ for (j = i - 1; j >= 0 && a[j]->nomer > tmp->nomer; --j) // поиск места элемента в готовой последовательности

a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли

a[j + 1] = tmp; // место найдено, вставить элемент

}break;

case 2:

{ for (j = i - 1; j >= 0 && strcmp(a[j]->name,tmp->name)>0; --j) // поиск места элемента в готовой последовательности

a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли

a[j + 1] = tmp; // место найдено, вставить элемент

}break;

case 3:

{ for (j = i - 1; j >= 0 && a[j]->date > tmp->date; --j) // поиск места элемента в готовой последовательности

a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли

a[j + 1] = tmp; // место найдено, вставить элемент

}break;

case 4:

{ for (j = i - 1; j >= 0 && a[j]->oklad > tmp->oklad; --j) // поиск места элемента в готовой последовательности

a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли

a[j + 1] = tmp; // место найдено, вставить элемент

}break;

default: cout << "FAIL! Try again" << endl;break;

}}}break;

case 2: break;

default: cout << "FAIL! Try again" << endl;break;

}}

void main()

{int i;while(true)

{ scan();

v=vibor();

insertSort(pr,10,v);

print();

i=search_record();}}

 

Скриншоты результатов

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: