пользователь вводит последовательнось целых чисел, признак окончания ввода - 0. Найти первый положительный член, равный сумме трех предыдущих.
Malice
22.10.2006 23:30
Цитата(18192123 @ 22.10.2006 19:52)
пользователь вводит последовательнось целых чисел, признак окончания ввода - 0. Найти первый положительный член, равный сумме трех предыдущих.
Что не получается ? Задача же простая.. Цикл через Repeat, выход если 0 или совпадение условия. Предыдущие значения запоминать в 3-х переменных. Если выход из repeat-a был по нулю, то решений небыло, иначе еще 1 repeat для ввода следующих чисел, без анализа. Условие выхода - 0, после чего вывод результатов
Bokul
22.10.2006 23:44
Цитата
Если выход из repeat-a был по нулю, то решений небыло
А если последовательность будет такой: -5,3,2,0 ? Или 0 не есть положительным членом?
Malice
22.10.2006 23:56
Цитата(Bokul @ 22.10.2006 20:44)
А если последовательность будет такой: -5,3,2,0 ? Или 0 не есть положительным членом?
Хитрый ты Если такой случай тоже нужен, то эту фразу читать так: "Если выход из repeat-a был не по условию, то .."
18192123
22.10.2006 23:58
Цитата(Malice @ 22.10.2006 20:30)
Что не получается ? Задача же простая.. Цикл через Repeat, выход если 0 или совпадение условия. Предыдущие значения запоминать в 3-х переменных. Если выход из repeat-a был по нулю, то решений небыло, иначе еще 1 repeat для ввода следующих чисел, без анализа. Условие выхода - 0, после чего вывод результатов
а как насчет более подробного ответа!?
volvo
23.10.2006 0:02
Цитата
а как насчет более подробного ответа!?
А как насчет САМОЙ попробовать хоть что-то сделать?
18192123
23.10.2006 0:26
Цитата(volvo @ 22.10.2006 21:02)
А как насчет САМОЙ попробовать хоть что-то сделать?
Видишь ключевое слово? Вместе, а не "за Вас"... Тебе уже подсказали, теперь твоя очередь.
А вот хамить не надо. Чревато...
18192123
23.10.2006 20:06
Цитата(Malice @ 22.10.2006 20:30)
Что не получается ? Задача же простая.. Цикл через Repeat, выход если 0 или совпадение условия. Предыдущие значения запоминать в 3-х переменных. Если выход из repeat-a был по нулю, то решений небыло, иначе еще 1 repeat для ввода следующих чисел, без анализа. Условие выхода - 0, после чего вывод результатов
я не понимаю, как привязать к программе эти три переменные
Malice
23.10.2006 20:13
Что-то типа этого:
Код
x1:=x2; x2:=x3; x3:=x; readln (x);
т.е. происходит постоянный сдвиг и в х1, х2,х3 остаются 3 предыдущие переменные.
18192123
23.10.2006 20:42
Цитата(Malice @ 23.10.2006 17:13)
Что-то типа этого:
Код
x1:=x2; x2:=x3; x3:=x; readln (x);
т.е. происходит постоянный сдвиг и в х1, х2,х3 остаются 3 предыдущие переменные.
а как с этими переменными соотносится первый положительный элемент?
мисс_граффити
23.10.2006 20:47
если он равен их сумме и положителен - то он подходит
18192123
23.10.2006 21:08
Цитата(мисс_граффити @ 23.10.2006 17:47)
если он равен их сумме и положителен - то он подходит
а сколько переменных мне вводить, если для ввода задаю одну, то программа дальше ввода не идет
мисс_граффити
23.10.2006 21:59
приводи код - я не могу вот так сказать, почему она не идет. сомневаюсь, что дело в кол-ве переменных.
18192123
23.10.2006 22:59
Цитата(мисс_граффити @ 23.10.2006 18:59)
приводи код - я не могу вот так сказать, почему она не идет. сомневаюсь, что дело в кол-ве переменных.
нет ... я вывесила решение задачи, а потом в нем нашла ошибку.
Код
x1:=x2; x2:=x3; x3:=x; s:=x1+x2+x3; if ((x3>0)and(s=x3)) then writeln ('pervy poloshitelniy element naiden=',x3);
этот код говорит если x2+x3=0 и x>0 то выведи x
впринципе могу решить, но если на это даст добро Вольво, а то он похоже против того, что-бы тебе полностью решили эту задачу. А если модератор так думает, то значит на это есть какие-то причины.
Reflex
24.10.2006 3:21
на то что ты написала Volvo ругатьси еще больше будет, а код вот:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils; const nn = 100; type arr = array [1..nn] of integer; var a : arr; n : integer;
function check(num : integer) : boolean; var j, i : integer; begin check:=false; if a[num]<0 then exit; for i:= 1 to num - 1 do for j:= 1 to num - 1 do if (i<>j) and (a[num]=a[i]+a[j]) then begin check:=true; exit; end; end;
procedure read_data; var temp:integer; begin n:=0; read(temp); while temp<>0 do begin inc(n); a[n]:=temp; read(temp); end; end;
function find: integer; var i : integer; begin find := 0; for i:= 3 to n do if check(i) then begin find := i; exit end; end;
begin read_data; write(find); readln; readln; end.
Malice
24.10.2006 15:42
Функция check здесь что-то другое проверяет.
Reflex
24.10.2006 17:24
она проверяет является ли число суммой двух предыдущих, я надеюсь, что автор этой темы догадаетьси как это исправить в сумму трех предыдущих.
мисс_граффити
24.10.2006 21:42
а по-моему, она проверяет не совсем то.... ты же проходишь от начала массива, то есть речь не обязательно о последних 2.
klem4
24.10.2006 23:01
18192123, Сколько можно мусолить этот маразм ?! Функция, которая ищет нужный по твоему заданию элемент, если такого элемента нет, ф-я возвращает - 1.
function Find(const v: PVector; n: Integer): Integer; var s, i, j: Integer; flag: Boolean; begin i := 4; flag := false; while (i <= n) and not(flag) do begin if v^[i] > 0 then begin j := i - 3; s := 0; while (j < i) and (s <= v^[i]) do begin s := s + v^[j]; inc(j); end; flag := (s = v^[i]); end; if not(flag) then inc(i); end; if flag then Find := i else Find := - 1; end;
18192123
25.10.2006 12:37
Цитата(klem4 @ 24.10.2006 20:01)
18192123, Сколько можно мусолить этот маразм ?! Функция, которая ищет нужный по твоему заданию элемент, если такого элемента нет, ф-я возвращает - 1.
мне такой способ не подходит! в этом задании мне нельзя использовать массивы, в основе решения должен лежать цикл. наверняка, в этом задании все гораздо проще.
klem4
25.10.2006 14:58
uses crt;
var x, x1, x2, x3, s : Integer; count: Integer; find: Boolean;
begin clrscr; count := 0; find := false; repeat write('x = '); readln(x); inc(count); case count of 1: x1 := x; 2: x2 := x; 3: x3 := x; else if (x > 0) and (x1 + x2 + x3 = x) then find := true else begin x1 := x2; x2 := x3; x3 := x; end; end; until (x = 0) or (find);
if find then writeln('Find') else writeln('Not find');
readln; end.
?
Malice
25.10.2006 15:38
klem4, "Найти первый положительный член", раз первый, значит могли бы быть и другие, значит прерывать ввод по find не надо. 0 тоже положительное число.
klem4
25.10.2006 15:41
Malice, а как же быть с
Цитата
пользователь вводит последовательнось целых чисел, признак окончания ввода - 0.
?
Если делать выход по find, может возникнуть зацикленность, так как искомого числа до того как введен 0 может просто не быть ...
Если уточнить условие так что среди введенных чисел _точно_ есть искомое, то это меняет дело.
Malice
25.10.2006 16:06
Цитата(klem4 @ 25.10.2006 12:41)
Если делать выход по find, может возникнуть зацикленность, так как искомого числа до того как введен 0 может просто не быть ...
А ты говоришь "Маразм". По find выходите _не надо_, об этом я и написал.
klem4
25.10.2006 16:43
Все, понял
uses crt; var x, x1, x2, x3, s : Integer; count: Integer; find: Integer;
begin clrscr; count := 0; find := -maxint; repeat write('x = '); readln(x); inc(count); case count of 1: x1 := x; 2: x2 := x; 3: x3 := x; else if (x > 0) and (x1 + x2 + x3 = x) and (find = -maxint) then find := x else begin x1 := x2; x2 := x3; x3 := x; end; end; until (x = 0);
if find <> -maxint then writeln('Find = ', Find) else writeln('Not find');
readln; end.
18192123
25.10.2006 20:46
Цитата(klem4 @ 25.10.2006 13:43)
Все, понял
скажи пожалуйста, что такое find := -maxint в твоей программе и что такое count?
мисс_граффити
26.10.2006 1:32
0 - это не положительное число! и не отрицательное.
18192123
26.10.2006 1:42
Цитата(мисс_граффити @ 25.10.2006 22:32)
0 - это не положительное число! и не отрицательное.
может ты мне объяснишь, что такое в последней проге klem4 count, find:=-maxint
мисс_граффити
26.10.2006 1:55
find:=-maxint это мы присваиваем самое маленькое возможное значение. если find равен такой бяке, значит, подходящее число мы еще не нашли.
count - количество введенных чисел. если оно меньше 3, мы просто записываем новое число в подходящую переменную, а если больше - сдвигаем имеющиеся и в последнюю записываем.
18192123
26.10.2006 2:49
Цитата(мисс_граффити @ 25.10.2006 22:55)
find:=-maxint это мы присваиваем самое маленькое возможное значение. если find равен такой бяке, значит, подходящее число мы еще не нашли.
count - количество введенных чисел. если оно меньше 3, мы просто записываем новое число в подходящую переменную, а если больше - сдвигаем имеющиеся и в последнюю записываем.
большое спасибо, что объяснила, теперь с заданием все ясно!
мисс_граффити
26.10.2006 2:59
пожалуйста.
Reflex
27.10.2006 18:03
а... извините, неправильно поняла задачу я думал трех чисел, которые до этого числа встречались в массиве.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.