Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ задача на циклы

Автор: Hunt666 22.10.2006 18:50

Помогите разобраться вот с такой задачей:Дана последовательность целых чисел заканчивающаяся нулем,получить сумму тех чисел последовательности,которые нечетны и отрицательны. нужно организовть три цикла с предусловием, с постусловием и с заданным количеством повторений .
я никак не могу разобраться какие переменные нужно вводить

Автор: мисс_граффити 22.10.2006 19:52

а как дана последовательность? массив?
или пользователь вводит числа по одному?

Автор: Hunt666 22.10.2006 20:02

я так понимаю что массив

Автор: мисс_граффити 22.10.2006 20:55

ок.
тогда тебе нужно знать размер массива и ввести 1 переменную, которая будет отмечать номер текущего элемента.
ну и переменная-массив и переменная, где хранить сумму, естественно
больше ничего.

Автор: Hunt666 22.10.2006 22:00

я еще не очень разобрался с массивами ты не могла бы показать на примере. как организовать цикл я наверное сам додумаюсь

Автор: мисс_граффити 22.10.2006 23:15

http://forum.pascal.net.ru/index.php?showtopic=2694

Автор: Hunt666 27.10.2006 21:42

все равно не понятно как мне последовательность задать

Автор: 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

для проверки ввел эту прогу так результат= неработает


Прикрепленные файлы
Прикрепленный файл  CIKL.PAS ( 217 байт ) Кол-во скачиваний: 223

Автор: мисс_граффити 12.11.2006 20:05

почему? что ты ему задал написать - то и пишет smile.gif)
исправь на

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, ты тегами принципиально не пользуешься ? mad.gif Еще _один_ пост, в котором код не будет помещен в теги и ты будешь помещен в премодерацию на неделю. Настоятельно советую пользоваться тегами и исправить все свои посты. Либо объяснить вескую причину по который ты не можешь использовать теги.

Автор: 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.



огромное спасибо всем кто помогал, ох уж долго со мной возились.