Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с текстовым файом

Автор: ZeroQ 11.03.2007 17:07

Помогите плиз!!!!!!!! Нада составить программу опрделения по данным из таблицы результатов участников лотерии, упорядоченных по количеству угаданных чисел))))))

Автор: ZeroQ 11.03.2007 17:18

таблица находится в текстовом файле
Первая стока таблицы содержит пять полей числовог типа длиной по два символа - результаты тиража.
Каждая из следующих строк таблицы содержит по шестьполей. Перове из них - символьного типа, содержит ФИО участника тиража, длина поля 30 символов. Следующие пять полей - числового типа, содержат числа, выбранные участником. Длина каждого из этих полей - по два символа.
ПОМОИТЕ ПОЖАЛУЙСТА!!!!!!!!!!!!!!!!!!!!

Автор: volvo 11.03.2007 17:56

Смотри:

var
n_of: integer;
arr_of: array[1 .. 6] of integer;

function count_match(const X, player: array of integer;
const n: integer): integer;
var
s: set of byte;
i, count: integer;
begin
s := [];
for i := 0 to n_of do include(s, X[i]);

count := 0;
for i := 0 to n do
if player[i] in s then inc(count);
count_match := count;
end;
procedure parse_numbers(s: string; var arr: array of integer;
var count: integer);
var
i: integer;
err: integer;
begin
i := 1; count := -1;
while i < length(s) do begin
inc(count);
val(copy(s, i, 2), arr[count], err);
inc(i, 2);
end;
end;
procedure print_numbers(const arr: array of integer;
const count: integer);
var i: integer;
begin
for i := 0 to count do
write(arr[i]:4);
writeln(count_match(arr_of, arr, count):3, ' matches');
end;


var
f: text;
s: string;
arr: array[1 .. 6] of integer;
n: integer;

begin
assign(f, '__res.txt');
reset(f);
readln(f, s);
parse_numbers(s, arr_of, n_of);
print_numbers(arr_of, n_of);

while not eof(f) do begin
readln(f, s);
write(copy(s, 1, 30));
parse_numbers(copy(s, 31, 255), arr, n);
print_numbers(arr, n);
end;

close(f);
end.

Работаем вот с таким файлом:
 2 6111829
ivanov 11 6 4192931
petrov 2126 4192732
sidorov 3116 4192933
ivanova 21 614192934
petrova 3115 4192835
sidorova 21 624192936


Получаем список участников, их номера, и количество угаданных номеров... В принципе, можно создавать список из фамилий участников, и числа угаданных номеров, а потом его отсортировать, и вывести на печать (с массивом конечно проще, но неэффективно сразу резервировать слишком много памяти, да и ограничен массив размером в 64K)

Попробуй, если не получится - поможем...

Автор: ZeroQ 11.03.2007 18:36

Спасибо что откликнулся))))) Но она не работает в строке readln(f, s); в теле самой программы пишет "Invalid file handle"
чё делать????????

Автор: volvo 11.03.2007 18:38

Ничем помочь не могу, у меня нормально отработала, иначе я б ее не выложил... А компилятор, кстати, ты не указал - хотя надо было бы...