Вот задание :
Текстовый файл содержит данные по отпечаткам пальцев известных преступников. Разработать программу, которая печатает информацию обо всех преступниках, чьи отпечатки совпадают с отпечатками, найденными на месте преступления. Отпечаток пальцев, найденный на месте преступления, вводится с клавиатуры. Отпечаток пальцев может быть представлен кодом из 36 символов и 12 вещественных чисел, полученных в результате измерений отпечатка. Отпечатки пальцев считаются идентичными, если 35 символов из 36 совпадают и множества действительных чисел совпадают. Два действительных числа считаются “равными”, если разница между ними составляет не более 5% от большего числа. Два множества измерений считаются совпадающими, если не менее 9 из 12 пар “равны”
Вот то что у меня уже есть :
На паскале сравнение будет происходит приблизительно следующим образом:
(*
на входе упорядоченные по возрастанию массивы:
sourceChars – массив символов отпечатка из файла
inputChars – массив символов вводимого отпечатка
sourceNumbers – массив вещественных чисел отпечатка из файла
inputNumbers – массив вещественных чисел вводимого отпечатка
*)
var
iChars : integer; //Количество совпадений символов
iNumbers : integer; //количество совпадений вещественных чисел
i,j : integer;
bResult : boolean;
//считаем совпадения символов
iChars := 0;
i := 0;
j := 0;
while ((i < 36) and (j < 36)) do
begin
if (sourceChars[i] > inputChars[j]) then j := j + 1
else if (inputChars[j] > sourceChars[i]) then i := i 1
else begin
iChars := iChars 1;
i := i 1;
j := j 1;
end;
end;
//Считаем совпадения вещественных чисел
iNumbers := 0;
i := 0;
j := 0;
while ((i < 12) and (j < 12)) do
begin
if (sourceNumbers[i] > inputNumbers[j]) then
begin
if (sourceNumbers[i] – inputNumbers[j] <= 0.05 * sourceNumbers[i]) then
begin
iNumbers := iNumbers 1;
i := i 1;
end;
j := j 1;
end
else
begin
if (inputNumbers[j] – sourceNumbers[i] <= 0.05 * inputNumbers[j]) then
begin
iNumbers := iNumbers 1;
j := j 1;
end;
i := i 1;
end;
end;
//Результат
if ((iChars >= 35) and (iNumbers >= 9)) bResult := true;
else bResult := false;
ПОмагите кто нить пожалуста доделать
26 апреля 2008 в 23:00
вот по задачке,
компилил под досом
#include <conio.h>
#include <stdio.h>
FILE *A;
FILE *B;
FILE *C;
FILE *D;
void main()
{
int q,w,e;
clrscr();
if((A=fopen("A.txt","r"))==NULL){printf("error A");getch();}
if((B=fopen("B.txt","r"))==NULL){printf("error B");getch();}
if((C=fopen("C.txt","r"))==NULL){printf("error C");getch();}
if((D=fopen("D.txt","w"))==NULL){printf("error D");getch();}
while (!feof(A))
{
fscanf(A,"%i",&q);
while (!feof(B))
{
fscanf(B,"%i",&w);
if (q==w)
{
while (!feof(C))
{
fscanf(C,"%i",&e);
if (w==e) fprintf(D,"%i \n",q);
}
rewind(C);
}
}
rewind(B);
}
printf("vse sdelano");
getch();
fclose(A);
fclose(B);
fclose(C);
fclose(D);
}
25 апреля 2008 в 14:02
Агромное спасиба чувак спас меня)
25 апреля 2008 в 5:05
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TArrChars = array[0 .. 35] of char;
TArrNumbers = array[0 .. 11] of real;
(* Процедура сравнения отпечатков
на входе упорядоченные по возрастанию массивы:
sourceChars – массив символов отпечатка из файла
inputChars – массив символов вводимого отпечатка
sourceNumbers – массив вещественных чисел отпечатка из файла
inputNumbers – массив вещественных чисел вводимого отпечатка
*)
function CompareImpress(var sourceChars : TArrChars; var inputChars : TArrChars;
var sourceNumbers : TArrNumbers; var inputNumbers : TArrNumbers) : boolean;
var
iChars : integer; //Количество совпадений символов
iNumbers : integer; //количество совпадений вещественных чисел
i,j : integer;
begin
//считаем совпадения символов
iChars := 0;
i := 0;
j := 0;
while ((i < 36) and (j < 36)) do begin
if (sourceChars[i] > inputChars[j]) then j := j + 1
else if (inputChars[j] > sourceChars[i]) then i := i + 1
else begin
iChars := iChars + 1;
i := i + 1;
j := j + 1;
end;
end;
//Считаем совпадения вещественных чисел
iNumbers := 0;
i := 0;
j := 0;
while ((i < 12) and (j < 12)) do begin
if (sourceNumbers[i] > inputNumbers[j]) then begin
if (sourceNumbers[i] – inputNumbers[j] <= 0.05 * sourceNumbers[i]) then begin
iNumbers := iNumbers + 1;
i := i + 1;
end;
j := j + 1;
end
else begin
if (inputNumbers[j] – sourceNumbers[i] <= 0.05 * inputNumbers[j]) then begin
iNumbers := iNumbers + 1;
j := j + 1;
end;
i := i + 1;
end;
end;
//Результат
if ((iChars >= 35) and (iNumbers >= 9)) then result := true
else result := false;
end;
//Сравнение отпечатков
{Пример входного файла:
1
AACDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'abcd
0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6
2
0023456789:;<=>?@ABCDEFGHIJKLMNOPQRS
0.005 0.105 0.195 0.305 0.385 0.5 0.6 0.7 0.8 1.0 2.0 2.1
3
0003456789:;<=>?@ABCDEFGHIJKLMNOPQRS
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1
4
0023456789:;<=>?@ABCDEFGHIJKLMNOPQRS
0.005 0.105 0.195 0.305 0.375 0.5 0.6 0.7 0.8 1.0 2.0 2.1
}
var f : TextFile;
sourceChars, inputChars : TArrChars;
sourceNumbers, inputNumbers : TArrNumbers;
i, k, num : integer;
ch : char;
begin
//Создание простого отпечатка
writeln('Original impress:');
ch := '0';
for i := 0 to 35 do begin
sourceChars[i] := ch;
inc(ch);
write(sourceChars[i], ' ');
end;
writeln;
k := 0;
for i := 0 to 11 do begin
sourceNumbers[i] := k * 0.1;
inc(k);
write(sourceNumbers[i]:2:1, ' ');
end;
writeln;
writeln;
//Считывание отпечатков из файла
AssignFile(f, 'E:\\source.txt');
Reset(f);
while (not eof(f)) do begin
readln(f, num);
for i := 0 to 35 do read(f, inputChars[i]);
for i := 0 to 11 do read(f, inputNumbers[i]);
if CompareImpress(sourceChars, inputChars, sourceNumbers, inputNumbers) then begin
writeln('Original impress = impress N', num);
end;
end;
CloseFile(f);
writeln('Process finished.');
readln;
end.
24 апреля 2008 в 15:01
Это мой код, я уже кому-то его кидал. Поищи по темам, у кого-то точно уже готовое есть. А полный исходник писать честно говоря лень.
24 апреля 2008 в 15:01
ну я это и писал ага эт твоя прога) прост закончить нада её =) а я вапще не пойму про что там