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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2012, 21:59   #1
tata7393
Пользователь
 
Регистрация: 19.10.2012
Сообщений: 15
По умолчанию задача <<загадка>>

помогите пожалуйста!!!!на языке паскаль.
задача по программированию:
Задача «Загадка»

Петя и Катя – брат и сестра. Петя – студент, а Катя – школьница. Петя помогает Кате по математике. Он задумывает два натуральных числа X и Y (X,Y≤1000), а Катя должна их отгадать. Для этого Петя делает две подсказки. Он называет сумму этих чисел S и их произведение P. Помогите Кате отгадать задуманные Петей числа.
Формат входных данных
Входной файл ZAGADKA.IN содержит два натуральных числа S и P, разделенных пробелом.
Формат выходных данных
В выходной файл ZAGADKA.OUT выведите два числа Х и Y, загаданные Петей. Числа следует вывести в порядке неубывания своих значений, разделенные пробелом. Если таких чисел не существует, следует вывести «NO».
мои наработки:
Код:
program zagadka;
var x,y,s,p:integer;
    f:text;
begin
assign(f,'zagadka.in');
reset(f);
read(f,s,p);
assign(f,'zagadka.out');
rewrite(f);
for x:=1 to 1000 do
for y:=x to 1000 do
if(x+y=s)and(x*y=p) then
write(f,x,' ',y);
close(f);
end.
у меня не получается выводить ответ no.как это сделать??
пример на ответ no :во входном файле: 50 30





________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 11.11.2012 в 22:11.
tata7393 вне форума Ответить с цитированием
Старый 11.11.2012, 22:10   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Код:
var s, p, i: longint;
t: boolean;
 
begin
  assign(input, 'zagadka.in); reset(input);
  assign(output, 'zagadka.out'); rewrite(output);
  read(s, p);
  t:=false;
  for i:=1 to s do
  if i*(s-i)=p then begin
    t:=true;  
    break;
  end;
  if t then
    writeln(i,' ',s-i)
  else
    writeln('no');
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 11.11.2012, 22:10   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
program zagadka;
var x,y,s,p:integer;
f:text;
begin
assign(f,'zagadka.in');
reset(f);
read(f,s,p);
assign(f,'zagadka.out');
rewrite(f);

rx := 0;
ry := 0;

for x:=1 to 1000 do
for y:=x to 1000 do
if(x+y=s)and(x*y=p) then begin
     rx := x;
     ry := y
end;
if rx <> 0 then
    write(f,rx,' ',ry)
else
    WriteLn (f, 'no');
close(f);
end.
Poma][a вне форума Ответить с цитированием
Старый 11.11.2012, 22:13   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

BDA, Вы как всегда впереди планеты всей
Ток наверное i нужно где-то сохранить, т.к. после завершения цикла for. Никто не знает чему будет = счетчик цикла (и не важно как он(цикл) завершился).
Poma][a вне форума Ответить с цитированием
Старый 11.11.2012, 22:18   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну Вы почти всё правильно написали.
Единственное, не проверяете нашолся вариант или нет...
в случае, когда сумма равна 50 и произведение равно 30,
программа должна написать в файле 'zagadka.out' NO

я предлагаю такой вариант решения задачи:
Код:
program zagadka;
var x,y,s,p:integer;
    k : boolean;
    f:text;
begin
assign(f,'zagadka.in');
reset(f);
read(f,s,p);
assign(f,'zagadka.out');
rewrite(f);
k := false;
for x:=1 to 1000 do
  for y:=x to 1000 do
    if(x+y=s)and(x*y=p) then begin
       write(f,x,' ',y);
       k := true;
    end;

if not k then Write(f, 'NO');
close(f);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2012, 22:19   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Poma][a, впереди, т.к. подсмотрел решение и немного его "допилил" только.
По-моему, можно вполне надеяться, что в переменной i будет то, что нужно, а не мусор
(Кстати, что же Вы сообщение-то не редактируете, а пишите новое? )
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 11.11.2012, 22:23   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Кстати, что же Вы сообщение-то не редактируете, а пишите новое?
Ой, как это я... Простите уж... Склероз...
Poma][a вне форума Ответить с цитированием
Старый 11.11.2012, 22:31   #8
tata7393
Пользователь
 
Регистрация: 19.10.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну Вы почти всё правильно написали.
Единственное, не проверяете нашолся вариант или нет...
в случае, когда сумма равна 50 и произведение равно 30,
программа должна написать в файле 'zagadka.out' NO

я предлагаю такой вариант решения задачи:
Код:
program zagadka;
var x,y,s,p:integer;
    k : boolean;
    f:text;
begin
assign(f,'zagadka.in');
reset(f);
read(f,s,p);
assign(f,'zagadka.out');
rewrite(f);
k := false;
for x:=1 to 1000 do
  for y:=x to 1000 do
    if(x+y=s)and(x*y=p) then begin
       write(f,x,' ',y);
       k := true;
    end;

if not k then Write(f, 'NO');
close(f);
end.
отдельное спасибо)))
tata7393 вне форума Ответить с цитированием
Старый 11.11.2012, 22:32   #9
tata7393
Пользователь
 
Регистрация: 19.10.2012
Сообщений: 15
По умолчанию

всем спасибо!!))
tata7393 вне форума Ответить с цитированием
Старый 11.11.2012, 22:47   #10
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
var
  s, p, x0, x1: LongInt;
  d: Double;
begin
  Assign(input, 'zagadka.in'); Reset(input);
  Assign(output, 'zagadka.out'); Rewrite(output);
  Read(s, p);
  d := sqr(s) - 4 * p;
  if d >= 0 then
  begin
    x0 := round(0.5 * (s - sqrt(d)));
    x1 := round(0.5 * (s + sqrt(d)));
    if (x0 + x1 = s) and (x0 * x1 = p) then
    begin
      WriteLn(x0, ' ', x1);
      exit;
    end;
  end;
  WriteLn('no');
end.
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загадка vostok Microsoft Office Excel 4 11.11.2010 22:58
загадка NordKeeper Помощь студентам 0 01.06.2010 18:36
Загадка Liones БД в Delphi 1 31.08.2009 12:33