Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализации различных алгоритмов на Си / Поиск инверсными массивами (float)

.doc
Скачиваний:
19
Добавлен:
20.06.2014
Размер:
56.83 Кб
Скачать

5

Задание кафедры

Написать программу, осуществляющую поиск заданного элемента в последовательности из входного файла. Имя входного файла вводится пользователем. На экране должна отображаться исходная последовательность и найденный элемент с указанием его номера в последовательности. Формат входного файла текстовый. Количество записей не ограничено. Если для алгоритма поиска требуется отсортировать последовательность, то предварительную сортировку нужно осуществлять алгоритмом из лабораторной работы №1. После поиска одного элемента программа должна предлагать ещё один поиск.

Вариант

5F

поиск инверсными массивами

#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;

}