Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Различные методы сортировки и поиска си, программирование .docx
Скачиваний:
8
Добавлен:
04.01.2017
Размер:
49.33 Кб
Скачать

Метод фиббоначи

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <math.h>

float function(float x) {

float exp=2.718281, y;

y=(sin(x*x/10)*pow(exp,x/10))/(x*x+1);

return y; }

void main() {

setlocale(LC_ALL,"Rus");

float x1, x2, a, b, P1=1.0, P2=1.0;

char name[30];

int i=0,n;

FILE *fp;

printf("Введите имя файла: ");

scanf("%s",&name);

printf("Введите интервал поиска минимума функции [a,b] (a > -10 , b < 10): ");

scanf("%f",&a);

scanf("%f",&b);

printf("Введите количество итераций n: ");

scanf("%f",&n);

fp=fopen(name,"a+");

fprintf(fp,"Начальные условия:\na= %f\nb= %f\ne= %f",a,b,e);

for(i=0;i<n;i++) {

x1=b-(P1/P2)*(b-a);

x2=a+(P1/P2)*(b-a);

if(function(x1)>function(x2))

a=x1;

else if(function(x1)<function(x2))

b=x2;

P2=P1+P2;

P1=P2-P1;

printf("\nШаг %d: \nТекущий интервал поиска:%f %f\nЗначения в этих точках: %f %f",i,a,b,function(a),function(b));

fprintf(fp,"\nШаг %d: \nТекущий интервал поиска:%f %f\nЗначения в этих точках: %f %f",i,a,b,function(a),function(b)); }

printf("\nl* %f%f\n",a,b);

if(function(a)<function(b))

printf("\nx= %f\ny= %f",a,function(a));

else

printf("\nx= %f\ny= %f",b,function(b));

fclose(fp);

getch(); }

Поиск по двоичному дереву(флоат)

#include<conio.h>

#include<stdio.h>

#include<alloc.h>

#include<stdlib.h>

struct tree{

float data;

int number;

struct tree*left;

struct tree*right;

}*root,*tmp;

struct tree* input_tree(int n,float a, struct tree *p);

float* poisk(struct tree*root);

main() {

char name[10];

FILE*f;

int i,k=0;

float a;

float*adres_el;

system("echo Введите имя входного файла ");

scanf("%s",name);

f=fopen(name,"rt");

if(f==NULL){

system("echo Ошибка");

system("pause");

return 0; }

root=NULL;

tmp=NULL;

for(i=1;!feof(f);i++){

fscanf(f,"%f",&a);

if(k==0){ root=input_tree(i,a,root);

tmp=root;

k=1; }

else

tmp=input_tree(i,a,tmp); }

fclose(f);

if(root==NULL) system("echo В файле 0 элементов");

else{

adres_el=poisk(root); }

k=1;

while(k==1){

system("echo Найти другой элемент?(1-да,0-нет): ");

scanf("%d",&k);

if(k==1)

adres_el=poisk(root); }

printf("\nFile: ");

f=fopen(name,"rt");

for(i=1;!feof(f);i++){

fscanf(f,"%f",&a);

printf("%.3f ",a); }

fclose(f);

getch();

return 0; }

struct tree* input_tree(int n,float a, struct tree *p) {

if(p==NULL){

p=(struct tree*)malloc(sizeof(struct tree));

p->data=a;

p->number=n;

p->left=NULL;

p->right=NULL; }

else if(a>p->data)

p->right=input_tree(n,a,p->right);

else

p->left=input_tree(n,a,p->left);

return p; }

float*poisk(struct tree*root) {

float a;

float*pa=NULL;

struct tree*p;

p=root;

system("echo Введите элемент, который хотите найти: ");

scanf("%f",&a);

while(a!=p->data){

if(a<p->data)

p=p->left;

else

p=p->right;

if(p==NULL)

break; }

if(p==NULL){

system("echo Извините, но такого элемента нет");

return NULL; }

else{

pa=&(p->data);

system("echo Адресс искомого элемента:");

printf("%p\n",pa);

system ("echo Номер элемента");

printf("%d\n",p->number);

return pa; }}