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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2008, 23:26   #1
sverhuVniz
Пользователь
 
Аватар для sverhuVniz
 
Регистрация: 24.10.2008
Сообщений: 32
Печаль проверьте моё решение

вот условие а ниже моё решение
проверьте


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

В настольном теннисе в результате каждой подачи разыгрывается одно очко. Подача переходит от игрока к игроку каждые 5 подач, т.е. первые пять раз подает первый игрок, затем 5 раз - второй, затем снова первый и т.д.

Партия играется до тех пор, пока кто-нибудь из игроков не наберет 21 очко. Тот, кто набрал 21 очко, признается победителем, и игра заканчивается.

Вася и Петя играли в игру, и забыли, кто должен подавать в данный момент. Однако они помнят, что первую подачу делал Вася, и счет в настоящий момент a:b (a очков у Васи и b очков у Пети). Напишите программу, которая по данным a и b будет определять, чья подача или устанавливать, что игра закончена.

Формат входных данных

Вводятся два числа a и b. Числа соответствуют реальному счету, т.е. оба числа целые, от 0 до 21 и не равны 21 одновременно.

Формат выходных данных

Выведите одно из четырех сообщений:

* Vasya serves - если сейчас должен подавать Вася
* Petya serves - если сейчас должен подавать Петя
* Vasya wins - если игра завершена и выиграл Вася
* Petya wins - если игра завершена и выиграл Петя

Примеры
a.in a.out

4 1 Petya serves

15 0 Petya serves

21 12 Vasya wins

вот моё решение
прошло 30 тестов из 45. какие тесты могли не пройти?
program tennis;
var t,f:text;
a,b,n:integer;
c:string;
begin
assign(f,'a.in');
reset(f);
while not eoln(f) do
read(f,a,b);
{read(f,b);}
n:=a+b;
if a<>21 then
begin
if n mod 10=0 then c:='Vasya serves'
else c:='Petya serves';
end;
if a=21 then c:='Vasya wins';
if b=21 then c:='Petya wins';
close(f);
assign(t,'a.out');
rewrite(t);
write(t,c);
if (a>21) or (b>21) or (a<0) or (b<0) then rewrite(t);
close(t);
end.
___________________________________ ____________
ВОН ВЫГНАТЬ ПРОКЛЯТЫХ СПАММЕРОВ!
sverhuVniz вне форума Ответить с цитированием
Старый 25.10.2008, 00:42   #2
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

Интересно, а чего вы решили что вот это строка
Код:
if n mod 10=0 then c:='Vasya serves'
else c:='Petya serves';
Решает вашу задачу?
Возьмём например счёт 2:2 Сумма = 4 4 mod 10 =4 , но подаёт то ведь Петя ещё, а у вас подавал бы Вася, неправильный алгоритм проверки, надо что-нибудь подейственнее...
Ну и проверку
Код:
if (a>21) or (b>21) or (a<0) or (b<0)
Я бы поставил вначале кода, а то всё выполнится, а только потом поймёт что зря всё делал, нецелесообразно.
Времени сейчас нету придумывать алгоритм проверки...

Последний раз редактировалось lexus_ilia; 25.10.2008 в 00:45.
lexus_ilia вне форума Ответить с цитированием
Старый 25.10.2008, 00:47   #3
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

Есть идея сделать через проверку if
Код:
n=a+b;
if (n<5) or ((n>10) and (n<15)) or ((n>15) and (n<20)) then
 c:='Vasya serves'
else
 c:='Petya serves';
Но сразу говорю я не проверял не тестил не смотрел, поэтоу гляньте сами...

Последний раз редактировалось lexus_ilia; 25.10.2008 в 01:13.
lexus_ilia вне форума Ответить с цитированием
Старый 25.10.2008, 01:11   #4
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

Короче держи свою задачу:
Код:
Program tennis;
var
 t,f:text;
 a,b,n:integer;
 c:string;
begin
 assign(f,'a.in');
 reset(f);
 assign(t,'a.out');
 rewrite(t);
 while not eoln(f) do
 read(f,a,b);
  {read(f,b);}
 if (a>21) or (b>21) or (a<0) or (b<0) then
  rewrite(t)
 else
 begin
  if a=21 then
   writeln(t,'Vasya wins')
  else
   if b=21 then
    Writeln(t,'Petya wins')
   else
   begin
    n:=a+b;
    if (n<5) or ((n>10) and (n<15)) or ((n>20) and (n<25)) or ((n>30) and (n<35)) then
     writeln(t,'Vasya serves')
    else
     writeln(t,'Petya serves');
   end;
 end;
end.
lexus_ilia вне форума Ответить с цитированием
Старый 25.10.2008, 09:26   #5
sverhuVniz
Пользователь
 
Аватар для sverhuVniz
 
Регистрация: 24.10.2008
Сообщений: 32
По умолчанию

огромное спасибо
___________________________________ ____________
ВОН ВЫГНАТЬ ПРОКЛЯТЫХ СПАММЕРОВ!
sverhuVniz вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте задачку {StaN} Паскаль, Turbo Pascal, PascalABC.NET 3 04.07.2008 13:20
Помогите переделать и проверьте Mokriy Паскаль, Turbo Pascal, PascalABC.NET 3 22.05.2008 17:26
Проверьте код ! Михаил Юрьевич Общие вопросы Delphi 7 08.02.2008 09:32
Проверьте пожалуйста код forumu Помощь студентам 1 27.12.2007 21:49
как поставить иконку в моё приложение? steck Паскаль, Turbo Pascal, PascalABC.NET 2 16.05.2007 18:12