- •Метод вставок
- •Метод выбора
- •Метод обмена
- •Метод обмена Антона
- •Метод подсчета
- •Метод подсчета
- •Поиск инверсными массивами
- •Метод золотого сечения
- •Метод фиббоначи
- •Поиск по двоичному дереву(флоат)
- •Сортировка с помощью дерева
- •Хеширование
- •Хеширование
- •Шифрование. Простая подстановка
- •Метод Шелла
- •Поиск по двоичному дереву
- •Метод дихотомии
- •Многоаспектныйпоиск с использ инверстных массивов (интервал)
- •Метод выбора
- •Гаммирование
Поиск инверсными массивами
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void search(float* arr[],int len ,int height) {
char answer;
float **inv_arr=NULL,*p=NULL;
int i,j;
int flag,counter;
p=(float*)malloc(height*sizeof(float));
inv_arr=(float**)malloc(len*sizeof(float*));
for(i=0;i<height;i++) {
inv_arr[i]=(float*)malloc(height*sizeof(float)); }
for(;;) {
printf("\n");
for(i=0;i<height;i++) {
printf("Input P%d ",i+1);
scanf("%f",&p[i]); }
for(i=0;i<height;i++) {
for(j=0;j<len;j++) {
if(arr[i][j]==p[i]) inv_arr[i][j]=1;
else inv_arr[i][j]=0; } } flag=0;
for(i=0;i<len;i++) {
counter=0;
for(j=0;j<height;j++) {
if(inv_arr[j][i]) counter++; }
if(counter==height) {printf("Found object %d\n",i+1);flag=1; } }
if(flag==0) printf("Nothing found\n");
printf("Continue searching?(y\\n) ");
answer=getche();
if(answer=='n') {printf("\n");break; } }
free(inv_arr); }
int main (void) {
char file_name[500];
float **arr,temp;
int i=0,j=0,len=0,height=0;
int size;
FILE *file;
printf("Input source filename\n");
scanf("%s",&file_name);
file=fopen(file_name,"r");
if(file==NULL) {
printf("Error. File %s is not exist.\n",file_name);
system("pause");
return 0; }
fseek(file,0,SEEK_END);
size=ftell(file);
fseek(file,0,SEEK_SET);
while(!feof(file)) {
fgets(file_name,size,file); printf("%s",file_name);
height++; }
fseek(file,0,SEEK_SET);
while(!feof(file)) {
fscanf(file,"%f",&temp);
i++; }
len=i/height;
arr=(float**)malloc(len*sizeof(float));
for(i=0;i<height;i++) {
arr[i]=(float*)malloc(len*sizeof(float)); }
fseek(file,0,SEEK_SET);
for(i=0;i<height;i++) {
for(j=0;j<len;j++) {
fscanf(file,"%f",&temp);
arr[i][j]=temp; } }
search(arr,len,height);
fclose(file);
system("pause");
free(arr);
return 0; }
Метод золотого сечения
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
float func(float x) {
return sin(x*x/1)*exp(x/10)/(x*x+1); }
void main() {
char s[10];
FILE *fp;
float a, b, g, h, f1, f2, eps; //а,b - исходный интервал, g,h - точки золотого сечения, f1, f2 -
значение функции в этих точках
setlocale(LC_ALL,"Russian");
printf("введите имя файла для записи результатов:\n");
fp=fopen(gets(s), "w");
printf("введите границы вычисления:\n");
fprintf(fp, "введите границы вычисления:\n");
scanf("%f %f", &a, &b);
fprintf(fp, "%f %f\n", a, b);
printf("введите точность вычисления:\n");
fprintf(fp, "введите точность вычисления:\n");
scanf("%f", &eps);
fprintf(fp, "%f\n", eps);
g = a+(b-a)*(3-sqrtf(float(5)))/2;
h = a+(b-a)*(sqrtf(float(5))-1)/2;
f1 = func(g);
f2 = func(h);
printf ("находим минимум на [%f; %f]\n g=%f, f(g)=%f\n h=%f, f(h)=%f", a, b, g, f1, h, f2);
fprintf (fp, "находим минимум на [%f; %f]\n g=%f, f(g)=%f\n h=%f, f(h)=%f", a, b, g, f1, h,
f2);
while (abs(f1-f2) > eps)// проверка точности {
if( f1<=f2 ) // минимум слева от f2 {
b = h;
h = g; //получили интервал от a до h
f2 = f1; //значение функции в новой точке h(которая раньше была точкой g)
g = a+(b-a)*(3-sqrtf(float(5)))/2;
f1 = func(g);
printf("\nминимум в пределах [%f; %f]\n g=%f h=%f\n f(g)=%f f(h)=%f", a, b, g, h, f1, f2); fprintf(fp, "\nминимум в пределах [%f; %f]\n g=%f h=%f\n f(g)=%f f(h)=%f", a, b, g, h, f1, f2); }
else // справа от f1 {
a = g;
g = h;
f1 = f2;
h = a+(b-a)*(sqrtf(float(5))-1)/2;
f2 = func(h);
printf("\nминимум в пределах [%f; %f]\n g=%f h=%f\n f(g)=%f f (h)=%f", a, b, g, h, f1, f2);
fprintf(fp, "\nминимум в пределах [%f; %f]\n g=%f h=%f\n f(g)=%f f(h)=%f", a, b, g, h, f1, f2); } }
printf("\nТОЧКА МИНИМУМА = %f\nМИНИМУМ ФУНКЦИИ = %f", (a+b)/2, func((a+b)/2));
fprintf(fp, "\nТОЧКА МИНИМУМА = %f\nМИНИМУМ ФУНКЦИИ = %f", (a+b)/2, func((a+b)/2));
fclose(fp);
getch(); }