Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с текстовым файом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ZeroQ
Помогите плиз!!!!!!!! Нада составить программу опрделения по данным из таблицы результатов участников лотерии, упорядоченных по количеству угаданных чисел))))))
ZeroQ
таблица находится в текстовом файле
Первая стока таблицы содержит пять полей числовог типа длиной по два символа - результаты тиража.
Каждая из следующих строк таблицы содержит по шестьполей. Перове из них - символьного типа, содержит ФИО участника тиража, длина поля 30 символов. Следующие пять полей - числового типа, содержат числа, выбранные участником. Длина каждого из этих полей - по два символа.
ПОМОИТЕ ПОЖАЛУЙСТА!!!!!!!!!!!!!!!!!!!!
volvo
Смотри:
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
Спасибо что откликнулся))))) Но она не работает в строке readln(f, s); в теле самой программы пишет "Invalid file handle"
чё делать????????
volvo
Ничем помочь не могу, у меня нормально отработала, иначе я б ее не выложил... А компилятор, кстати, ты не указал - хотя надо было бы...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.