- •Метод вставок
- •Метод выбора
- •Метод обмена
- •Метод обмена Антона
- •Метод подсчета
- •Метод подсчета
- •Поиск инверсными массивами
- •Метод золотого сечения
- •Метод фиббоначи
- •Поиск по двоичному дереву(флоат)
- •Сортировка с помощью дерева
- •Хеширование
- •Хеширование
- •Шифрование. Простая подстановка
- •Метод Шелла
- •Поиск по двоичному дереву
- •Метод дихотомии
- •Многоаспектныйпоиск с использ инверстных массивов (интервал)
- •Метод выбора
- •Гаммирование
Метод дихотомии
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <string.h>
double f(float x)
{return sin(x*x/10)*exp(x/10)/(x*x+1);}
int main()
{ setlocale(LC_ALL,"Rus");
double a,b,c,epsilon;
char namefile[20];
FILE *fp;
printf("Введите левый конец отрезка в пределах [-10;10]: ");
scanf("%lf",&a);
printf("Введите правый конец отрезка в пределах [-10;10]: ");
scanf("%lf",&b);
if (a>b)
{ printf("Начало отрезка не может быть больше конца отрезка");
getch();
return 0; }
if(a<-10||a>10||b>10||b<-10)
{ printf("\nКонцы отрезков не входят в [-10;10]");
getch();
return 0; }
printf("Введите точность: ");
scanf("%lf",&epsilon);
printf("Введите имя файла, в который будет записан ход решения: ");
scanf("%s",&namefile);
strcat(namefile,".txt");
fp=fopen(namefile,"w");
fprintf(fp,"Ход нахождения корней функции:\nsin(x^2/10)*exp(x/10)/(x^2+1) на отрезке: [%lf;%lf] с точностью: %lf\n\n",a,b,epsilon);
printf("\n");
if(f(a)*f(b)>0)
{ printf("Нет решения, так как функция на концах отрезков имеет одинаковые знаки...");
fprintf(fp,"Нет решения, так как функция на концах отрезков имеет одинаковые знаки...");
getch();
return 0; }
while(fabs(b-a) > epsilon)
{ c=(a+b)/2;
printf("a=%lf b=%lf c=%lf ",a,b,c);
printf("f(a)=%lf f(b)=%lf f(c)=%lf\n",f(a),f(b),f(c));
fprintf(fp,"a=%lf b=%lf c=%lf ",a,b,c);
fprintf(fp,"f(a)=%lf f(b)=%lf f(c)=%lf\n",f(a),f(b),f(c));
if(f(b)*f(c)<0)
a=c;
else
b=c; }
c=(a+b)/2;
printf("a=%lf b=%lf c=%lf ",a,b,c);
printf("f(a)=%lf f(b)=%lf f(c)=%lf\n",f(a),f(b),f(c));
printf("\n\nКорень: %lf",c);
fprintf(fp,"a=%lf b=%lf c=%lf ",a,b,c);
fprintf(fp,"f(a)=%lf f(b)=%lf f(c)=%lf\n",f(a),f(b),f(c));
fprintf(fp,"\n\nКорень: %lf",c);
getch(); }
Многоаспектныйпоиск с использ инверстных массивов (интервал)
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#define L 5
int N,K=0;
struct unit{int key1;float key2[L];char data[L];};
int comparison(unit a,unit b,int q)
{if(q==1)
{for(int i=0;i<L;i++)
{if(a.key2[i]>b.key2[i])return 1;
else if(a.key2[i]<b.key2[i])return -1;}
return 0;}
else if(!q)
{if(a.key1<b.key1)return -1;
else if(a.key1>b.key1)return 1;
else return 0;}
else
{for(int i=0;i<L;i++)
{if(a.data[i]>b.data[i])return 1;
else if(a.data[i]<b.data[i])return -1;}
return 0; } }
unit* shell(unit *items,int q)
{ register int i, j, gap;
unit x;
gap=(int)(N/2);
while(gap>0) {
for(i=gap;i<N;i++) {
x=items[i];
for(j=i-gap;(comparison(x,items[j],q)==-1)&&(j>=0);j=j-gap)
{ items[j+gap]=items[j]; }
items[j+gap]=x;}
gap=(int)(gap/2); }
return items;}
unit* search(unit*I){
int a1,a2,N1=0,N2=0;
unit b1,b2;
unit* A=new unit[N];
unit* B=new unit[N];
for(int i=0;i<N;i++)
{ A[i]=I[i];
B[i]=I[i];}
A=shell(A,0);
B=shell(B,1);
printf("Input bottom border key(int):\t");
scanf("%d",&a1);
printf("Input top border key(int):\t");
scanf("%d",&a2);
for(int i=0;i<N;i++)
{if(A[i].key1>a2)break;
if(A[i].key1>=a1)A[N1++]=A[i]; } A=(unit*)realloc(A,sizeof(unit)*(N1));
for(int i=0;i<L;i++)
{ printf("Input %d elemet bottom border key(float):\t",i+1);
scanf("%f",&b1.key2[i]); }
for(int i=0;i<L;i++)
{ printf("Input %d element top border key(float):\t",i+1);
scanf("%f",&b2.key2[i]); }
for(int i=0;i<N;i++)
{ if (comparison(B[i],b2,1)==1)break;
if(!(comparison(B[i],b1,1)==-1))B[N2++]=B[i]; }
B=(unit*)realloc(B,sizeof(unit)*(N2));
for(int i=0;i<N1;i++)
{ for(int j=0;j<N2;j++)
{if((A[i].key1==B[j].key1)&&!comparison(A[i],B[j],1)&&!comparison(A[i],B[j],2))A[K++]=A[i]; }}
A=(unit*)realloc(A,sizeof(unit)*(K));
return A; }
void main()
{ SYSTEMTIME tim;
GetSystemTime(&tim);
srand(tim.wMilliseconds);
printf("Input count elements:\t");
scanf("%d",&N);
unit* I=new unit[N];
unit* O;
for(int i=0;i<N;i++)
{ I[i].key1=rand();
for(int j=0;j<L;j++)I[i].key2[j]=rand()/100.;
for(int j=0;j<L;j++)I[i].data[j]=(char)(rand()%220+32); }
for(int i=0;i<N;i++)
{ printf("%d\t",I[i].key1);
for(int j=0;j<L;j++)printf("%.3f\t",I[i].key2[j]);
printf("\t");
for(int j=0;j<L;j++)printf("%c",I[i].data[j]);
printf("\n"); }
O=search(I);
printf("--------Search--------\n");
for(int i=0;i<K;i++)
{ printf("%d\t",O[i].key1);
for(int j=0;j<L;j++)printf("%.3f\t",O[i].key2[j]);
printf("\t");
for(int j=0;j<L;j++)printf("%c",O[i].data[j]);
printf("\n"); }
getch();}