Реализации различных алгоритмов на Си / Поиск инверсными массивами (float)
.doc
Задание кафедры
Написать программу, осуществляющую поиск заданного элемента в последовательности из входного файла. Имя входного файла вводится пользователем. На экране должна отображаться исходная последовательность и найденный элемент с указанием его номера в последовательности. Формат входного файла текстовый. Количество записей не ограничено. Если для алгоритма поиска требуется отсортировать последовательность, то предварительную сортировку нужно осуществлять алгоритмом из лабораторной работы №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;
}