Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2008, 00:09   #1
Devoto
Пользователь
 
Регистрация: 05.07.2008
Сообщений: 17
Вопрос Использование входных выходных файлов в Delphi

Доброго времени суток ув. эксперты.
Во многих олимпиадных задачах требуется реализовать решение с входным и выходным файлом, без использования визуальной формы.
Вот и возникли такие вопросы:
1) На примере данной задачи объясните как реализовать создание файлов kvid.in и kvid.out(и вообще, что это за файлы, почему приняты расширения .in и .out), чтение из файла и запись в файл данных:

Имя входного файла: kvid.in
Имя выходного файла: kvid.out
Ограничение по времени: 1 секунда
Ограничение по памяти: 64 Мб

Компьютеры прочно вошли во все сферы магловской жизни. При этом они настолько упрощают многие задачи, что даже в Министерстве Магии подумывают о внедрении информационных технологий в магическую жизнь. Но прежде чем внедрять, нужно опробовать эти странные устройства, работающие от какого-то там электричества.

Заняться экспериментальной установкой первого магического компьютерного класса доверили главному специалисту по электротехнике Министерства Магии Артуру Уизли. Мистер Уизли первым делом материализовал 10 новеньких машин на базе Intel Core 2 Duo Magic Edition и установил на них последний срез Debian GNU/Linux "Magic". Установить первый магический компьютерный класс решили в Хогвартсе, чтобы магловская компания Microsoft ни в коем случае не пронюхала о том, что волшебники используют Linux.

После установки класса перед мистером Уизли стала проблема - а что же собственно делать с компьютерами? Поскольку о существовании Quake он пока не знает, Артур решил что-нибудь автоматизировать с помощью компьютера. В раздумьях он выглянул в окно и увидел тренировку команды Гриффиндора по квиддичу. "Конечно! Я автоматизирую подсчет очков в квиддиче! Тогда все поймут, какие эти компьютеры - классная штука" - подумал он. Поскольку мистер Уизли пока не знает ни одного языка программирования, он просит вас написать программу подсчета очков в квиддиче.

Как известно, цель игры в квиддич - забрасывать мяч квофл в кольца противника. За каждое попадание команде начисляется 10 очков. Игре заканчивается, когда одна из команд поймает другой мяч - снитч. Тогда этой команде начисляется 150 очков. Выигрывает команда, набравшая больше очков. Вас Артур Уизли просит по информации о ходе матча сказать, какая команда выиграла и с каким счетом.

Входные данные

Входной файл содержит несколько строк, описывающих события во время игры. Строки состоят из названия события и номера команды (1 или 2). Событием может быть "GOAL", если команда закинула квофл в кольцо соперника или "SNITCH", если команда поймала снитч. При этом событие "SNITCH" встречается в файле ровно один раз и обязательно является последним. Входной файл содержит не более 1000 строк.

Выходные данные

Выходной файл должен содержать две строки. Первая должна содержать исход игры. Если выиграла первая команда, то выведите строку "TEAM 1 WINS" (без кавычек), если выиграла вторая команда, то "TEAM 2 WINS", если же результатом игры была ничья, то выведите "DRAW".

Вторая строка должна содержать счет игры в виде строки "A:B" (без кавычек), где А - число очков, которые набрала первая команда, а B - вторая.

Пример
kvid.in содержит:
GOAL 1
GOAL 2
GOAL 1
SNITCH 2

kvid.out содержит:
TEAM 2 WINS
20:160

2) И вопрос по поводу решения без формы:
Как я понимаю форму надо удалить, из менеджера проектов и писать в файле проекта, но вопрос, куда вставлять код решения задачи?
Учиться, учиться и ... ВЫИГРЫВАТЬ!!!

Последний раз редактировалось Devoto; 10.12.2008 в 00:14.
Devoto вне форума Ответить с цитированием
Старый 10.12.2008, 23:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
На примере данной задачи объясните как реализовать создание файлов kvid.in
Файл kvid.in создаётся перед запуском программы (он создаётся оператором, экзаменатором или ещё кем-то - это неважно, главное, что он есть и его формат известен).
файл обычный текстовый. Вы можете создать его в том же блокноте Винды (Notepad.exe). расширение просто показывает, что файл является ВХОДНЫМ для решаемой задачи. Соответсвенно, файл с расширение out создаётся программой (и является ВЫХОДНЫМ - т.е. результатом работы программы).
читать файл можно так, по старинке (AssignFile Readln/WriteLn), а можно и через Delphi`ский TStringList...
вот пример программки. писал тут. не проверял. доверяю это сделать Вам. :-)
Код:
var
   f:TextFile;
   Count1, count2 :integer;
   s : string;
   Finish : boolean;
begin
   Count1 := 0; Count2:=0; {начальный счёт ноль:ноль}
   AssignFile(f,'kvid.in');
   Reset(f); {открыли файл на чтение}
   Finish := false;
   while Not Eof(f) and Not Finish do begin
     ReadLn(f,s);
     if Pos('GOAL 1',s)>0 then Inc(Count1,10)
     else 
       if Pos('GOAL 2',s)>0 then Inc(Count2,10)
       else 
         if Pos('SNITCH  1',s)>0 then begin
            Inc(Count1,150);
            Finish := true;
         end
       else
           if Pos('SNITCH  2',s)>0 then begin
              Inc(Count2,150);
              Finish := true;
           end;
   end;
   CloseFile(f);
   AssignFile(f,'kvid.out');
   Rewrite(f);
   if Count1>Count2 then WriteLn(f,'TEAM 1 WINS')
   else
     if Count2>Count1 then WriteLn(f,'TEAM 2 WINS')
     else WriteLn(f,'DRAW');
  WriteLn(f,Count1:1,':',Count2:1);
  CloseFile(f);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.12.2008, 14:20   #3
Devoto
Пользователь
 
Регистрация: 05.07.2008
Сообщений: 17
Радость

Огромное вам спасибо, все понял, все работает
Только вот это надо немного подправить:
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
         if Pos('SNITCH  1',s)>0 then begin
            Inc(Count1,150);
            Finish := true;
         end
       else
           if Pos('SNITCH  2',s)>0 then begin
На это:
Код:
         if Pos('SNITCH 1',s)>0 then begin
            Inc(Count1,150);
            Finish := true;
         end
       else
           if Pos('SNITCH 2',s)>0 then begin
Учиться, учиться и ... ВЫИГРЫВАТЬ!!!
Devoto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
встроенные функции,использование записей и файлов OLesechka300490 Общие вопросы Delphi 5 09.06.2008 08:41
Использование EhLib 4.1 в Delphi 2006 beketova Компоненты Delphi 2 15.11.2007 09:30
Использование JavaScript в Delphi... Valdis Общие вопросы Delphi 2 27.09.2007 08:45
Использование JPEG в Delphi 7 Aslan Мультимедиа в Delphi 11 02.08.2007 13:25
Использование функции Excel из Delphi Геля Общие вопросы Delphi 3 07.06.2007 07:33