Помогите разобраться вот с такой задачей:Дана последовательность целых чисел заканчивающаяся нулем,получить сумму тех чисел последовательности,которые нечетны и отрицательны. нужно организовть три цикла с предусловием, с постусловием и с заданным количеством повторений . я никак не могу разобраться какие переменные нужно вводить
мисс_граффити
22.10.2006 19:52
а как дана последовательность? массив? или пользователь вводит числа по одному?
Hunt666
22.10.2006 20:02
я так понимаю что массив
мисс_граффити
22.10.2006 20:55
ок. тогда тебе нужно знать размер массива и ввести 1 переменную, которая будет отмечать номер текущего элемента. ну и переменная-массив и переменная, где хранить сумму, естественно больше ничего.
Hunt666
22.10.2006 22:00
я еще не очень разобрался с массивами ты не могла бы показать на примере. как организовать цикл я наверное сам додумаюсь
все равно не понятно как мне последовательность задать
Hunt666
29.10.2006 21:29
подскажите хоть как проверить число на четность и мне нужно реализовать эту задачу с помощью циклов
volvo
29.10.2006 21:37
Хотя бы раз зайди в поиск уже и набери "Четность"...
Hunt666
29.10.2006 22:11
с четностью разобрался извиняюсь за беспокойство но как последовательность задать с помощью цикла все равно догнать не могу вот тут я попытался с предусловием сделать тока ниче не вышло
program Zadacha1_a; var n : integer; i : integer; begin writeln('vvedite n '); readln(n); i:=0; while n <0 do begin if n mod 2 = 0 then i:=i+1; i:=i+1; end end.
(не смейтесь и не ругайтесь просто у нас практика идет сильно вперед лекций)
мисс_граффити
29.10.2006 22:43
1. надо считывать элементы ВНУТРИ цикла 2. у тебя цикл вечный... ты же n не изменяешь, а выход зависит от n 3. зачем тебе i? тем более 2 раза увеличивать...
Hunt666
29.10.2006 23:09
попытался сделать вот так
program xcvxcv ; var a,s:integer; begin writeln('vv a'); readln(a); s:=0; while a<0 do begin if a mod 2 = 0 then a:=a+1 else a:=a+1; s:=s+a; end; writeln('summa ravna a= '); end.
в этом случае просто нет никакого результата
мисс_граффити
29.10.2006 23:23
сделай то, про что я написала, а потом будем искать ошибки дальше.
if a mod 2 = 0 then a:=a+1 else a:=a+1;
смысл? действия одни и те же по обеим веткам.
Hunt666
30.10.2006 0:28
эту строчку я изменил на
while a<0 do begin if odd(a) then a:=a+2 else a:=a+1
мисс_граффити
30.10.2006 19:39
что-то ты совсем не то делаешь, про что писал в начале. давай определимся: что эта программа должна делать? пока что она только зацикливается при положительных а.
Hunt666
30.10.2006 22:46
Дана последовательность целых чисел заканчивающаяся нулем,получить сумму тех чисел последовательности,которые нечетны и отрицательны. нужно организовть три цикла с предусловием, с постусловием и с заданным количеством повторений . выбор по какому циклу нужно осуществить вычисление происходит с помошью case
для начала я попытался сделать цикл с предусловием как ты уже заметила у меня он зацикливается
мисс_граффити
31.10.2006 20:14
ну например так (это НЕ массив, а просто последовательность).
Sum:=0; readln(n); while n<>0 do begin if (n<0) and (n mod 2<>0) then Sum:=Sum+n; readln(n) end;
Hunt666
31.10.2006 21:01
спс как напишу всю прогу отпишусь( а ведь было то не так и сложно ........)
Hunt666
12.11.2006 19:20
для проверки ввел эту прогу так результат= неработает
мисс_граффити
12.11.2006 20:05
почему? что ты ему задал написать - то и пишет ) исправь на
writeln('sum=',sum)
только byte - это беззнаковый тип. сумма всегда будет равна 0. меняй на integer
Hunt666
12.11.2006 20:16
изменил на:
program asdfav; var sum,n:integer; begin sum:=0; writeln('введите n'); readln(n); while n<>0 do begin if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; writeln(' sum =', sum); readln(n); end; end.
в результате всегда 0
volvo
12.11.2006 20:19
Какие данные вводил? Там были отрицательные нечетные элементы?
У меня твоя программа работает...
Hunt666
12.11.2006 20:31
понятно ,не так вводил ,буду разбираться дальше
Hunt666
12.11.2006 20:44
хотя если ввести -11 -5 6 то выдаст результат 22 ,но 6 неотрицательно ведь и почему тогда сумма положительна
volvo
12.11.2006 20:53
Ну=ка, присоедини-ка сюда свой скриншот, чтобы было видно, когда ты вводишь вот эти 3 числа, и какой результат у тебя получается... У меня получается вот так:
Hunt666
12.11.2006 21:01
опять не так вводил тока поидее сумма всегда должна быть отрицательна почему она +
мисс_граффити
12.11.2006 21:03
не знаю... мне не удалось получить положительную сумму. отрицательная все время.
Hunt666
12.11.2006 21:19
извеняюсь в очередной раз сторомозил в sum=sum+n зачемто поставил минус
вот теперь у меня никак не получается сделать то же самое но в цикле с постусловием или заданным кол -вом повторений
мисс_граффити
12.11.2006 21:54
показывай как делаешь.
Hunt666
12.11.2006 22:32
вот такое вот у меня получилось при попытке сделать цикл с постусловием:
program post; var sum,n:integer; begin repeat writeln( ' n = '); readln(n); until n<0; if ((n<0) and (n mod 2 <> 0 )) then sum:=sum+n; writeln(' sum = ', sum ); readln(n); end.
тока естественно не работает, видать опять ахинея
мисс_граффити
13.11.2006 0:50
а теперь подумай, что ты делаешь.... что у тебя БЫЛО внутри цикла, когда я это писала, и что СТАЛО, когда ты написал. Сравни действия. И условие выхода из цикла тоже.
Hunt666
13.11.2006 1:22
исправил на:
program post; var sum,n:integer; begin sum:=0; repeat writeln( ' n = '); readln(n); begin if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; writeln(' sum = ', sum); readln; end; until n>0; end.
но работает частично например если вводить последовательность чисел -1,-3,-5,-7,-9,-11 проспускаются -5 и -7
ой убрал последний readln и все заработало зы теперь буду думать над циклом с for
Hunt666
13.11.2006 2:02
ндя какой то я горе программист все время торможу , теперь не выходит цикл с заданным количеством повторений
Hunt666
13.11.2006 2:26
вот моя очередная ахинея
<program fors; var sum,n:integer; begin writeln(' n = '); readln(n); sum:=0; if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; for n:=-200 to -1 do inc(n,2); writeln(' sum = ', sum ); end. >
в этом случае у меня просто выводится то число какое я ввел если оно соответствут условию после чего сразу выходит из цикла объсните в чем я опять напутал
klem4
13.11.2006 2:31
Hunt666, ты тегами принципиально не пользуешься ? Еще _один_ пост, в котором код не будет помещен в теги и ты будешь помещен в премодерацию на неделю. Настоятельно советую пользоваться тегами и исправить все свои посты. Либо объяснить вескую причину по который ты не можешь использовать теги.
Hunt666
13.11.2006 2:39
то что написано исправить не получается, а когда потом буду выкладывать коды обязательно воспользуюсь тегами
М
Теги теперь не [ pascode ] [ / pascode], а [ code = pas ] [ / code ]. На форме ответа есть соответсвующие комбобоксы.
Hunt666
13.11.2006 4:04
все иправил
мисс_граффити
13.11.2006 6:02
Цитата(Hunt666 @ 12.11.2006 22:26)
вот моя очередная ахинея
<program fors; var sum,n:integer; begin writeln(' n = '); readln(n); sum:=0; if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; for n:=-200 to -1 do inc(n,2); writeln(' sum = ', sum ); end. >
в этом случае у меня просто выводится то число какое я ввел если оно соответствут условию после чего сразу выходит из цикла объсните в чем я опять напутал
Этто еще что? Во-первых, не стоит изменять переменную-счетчик внутри цикла. Не жалей ты байты под доп.переменную. Во-вторых (чувствую себя попугаем): что должно быть ВНУТРИ цикла?
Hunt666
14.11.2006 22:49
вот что у меня получилось:
program CIKL; var sum,s,n,i,x:integer; begin writeln('VVedite X ot 1 do 3'); readln(X); if (x>=1) and (x<=3) then case x of 1 : begin writeln('S predusloviem'); sum:=0; writeln('vvedite n'); readln(n); while n<>0 do begin if (n<0) and ( n mod 2 <>0) then sum:=sum+n; writeln(' sum = ', sum); readln(n); end; end; 2 : begin writeln('S postusloviem'); sum:=0; repeat writeln(' vvedite n '); readln(n); begin if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; writeln(' sum = ', sum); end; until n>0; end; 3 : begin writeln('S zadanim kolichestvom povtoreniy'); sum:=0; writeln(' vvedite kolichestvo povtoreniy , s ='); readln(s); for i:=1 to s do begin writeln(' vvedite n '); readln(n); if (n<0) and ( n mod 2 <> 0) then sum:=sum+n; writeln(' sum = ', sum); end; end; end; end.
огромное спасибо всем кто помогал, ох уж долго со мной возились.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.