Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти количество нечетных чисел
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
inomarka
Дан массив 25 случайных чисел от -40 до 40. Вывести а) количество нечетных б) количество положительных

Если честно, на то, чтобы напечатать массив, найти сумму, ср.арифметическое и т.п. , у мя мозгов еще кое-как хватает. А вот с количеством... Мы задач не решали похожих, и примера нет( Можете помочь найти кол-во?


 
Program mas100;
var
a: array [1..25] of real;
i: integer;
Ch:char;
Begin
Randomize;
i:=1;
While i<=25 do
begin
A[i]:=random(81);
A[i]:=A[i]-40;
write (A[i]:3:0, ' ');
i:=i+1;
end;
For i:=1 to 25 do
write (a[i]:3:0, ' ')
....

.

Еще проблема: мне должно выводиться 25 шт. чисел, а выводится намного больше. почему? я вроде все правильно сделала.
volvo
Во-первых, не обязательно делать 2 строки там, где можно обойтись одной:
      A[i]:=random(81) - 40;
а во-вторых, какая же четность/нечетность? У тебя числа вещественные... Надо делать массив целых и для каждого проверять
if A[i] mod 2 = 0 then { значит, четное - увеличить счетчик }


Добавлено через 1 мин.
Цитата
мне должно выводиться 25 шт. чисел, а выводится намного больше. почему?
Потому, что ты выводишь и при генерации чисел, и после нее, получается - массив выводится 2 раза...
TarasBer
Цитата(volvo @ 11.02.2007 18:33) *

if A[i] mod 2 = 0 then { значит, четное - увеличить счетчик }


Почему не
if not Odd(A) = 0 then 
?
Altair
Потому что odd есть в Паскале, а вот насчет остальных языков я под сомнением...

А mod есть почти везде...
В любом случае, даже если mod имеет другой написание, то саму конструкцию
if A[i] mod 2 = 0 then

прочитать при ознакомлении с кодом проще и быстрее...
мисс_граффити
Цитата
Почему не
if not Odd(A) = 0
then
?

хотя бы потому, что компилятор (TP) такое не пропускает: type mistmatch
function Odd(X: Longint): Boolean

blum.gif
inomarka
Только я все равно не знаю, как вычислить это самое количество. Вы не могли бы сказать, что будет вместо […] ?
И еще: где можно найти в Интернете учебник по паскалю (нужно как можно больше программ, а теории поменьше).
Заранее благодарю)))


Program mas100;
var
a: array [1..25] of integer;
i, x: integer;
Begin
Randomize;
i:=1;
While i<=25 do
begin
A[i]:=random(81)-40;
write (A[i], ' ');
i:=i+1;
end;
For i:=1 to 25 do
begin
x:=0;
if A[i] mod 2 = 1 then [...]
writeln (‘chislo nechetnyh = ', x);
end;
For i:=1 to 25 do
begin
if A[i]>0 then [...]
writeln (‘chislo polozhitelnyh = ', x)
end;
End.


мисс_граффити
inc(x) 

или
x:=x+1 

smile.gif
как больше нравится

во втором случае ты забыла обнулить х
и напутала с тем, что внутри цикла, а что снаружи... в обоих случаях
inomarka
Цитата(мисс_граффити @ 11.02.2007 20:03) *

во втором случае ты забыла обнулить х
и напутала с тем, что внутри цикла, а что снаружи... в обоих случаях

А поподробней? Плизз.. Я туплю.. Что я спутала?
volvo
Цитата(TarasBer @ 11.02.2007 18:21)
Почему не
if not Odd(A) = 0 then 
?
Потому, что 1) вызов функции, причем 2) сразу непонятно ее назначение... Видишь, и в приведенной мной цитате присутствует ошибка, а при использовании MOD ошибку допустить сложнее...

Цитата(inomarka @ 12.02.2007 16:46)
А поподробней? Плизз.. Я туплю.. Что я спутала?
Смотри на комментарии:
program mas100;
var
a: array [1..25] of integer;
i, odds, positives: integer;
begin
Randomize;
i:=1;
While i<=25 do begin
A[i] := random(81)-40;
write (A[i], ' ');
i:=i+1;
end;

odds := 0; { <--- Это - число нечетных чисел... Обнулять ПЕРЕД циклом }
For i:=1 to 25 do begin
if Abs(A[i]) mod 2 = 1 then odds := odds + 1; { <--- Брать по модулю, mod не работает с отриц. числами}
end;
writeln ('chislo nechetnyh = ', odds); { <--- А распечатывать - после цикла }

positives := 0; { <--- Положительные }
For i:=1 to 25 do begin
if A[i] > 0 then positives := positives + 1;
end;
writeln ('chislo polozhitelnyh = ', positives); { <--- Аналогично ... }

End.
TarasBer
Цитата

-Почему не if not (odd(A) = 0)
-Потому, что 1) вызов функции

Я думал, что это макрос... Даже если это и функция, то всё равно if ((A and 1) = 0) в моём паскале (TP7.1) почему-то вычисляется дольше, чем if (odd(a) = 0). И в любом случае строчка (mod 2) невыносимо режет глаз... И с отрицательными числами неправильно работает...
volvo
Цитата
if (odd(a) = 0)
вообще НЕ работает... По крайней мере не должен... Odd - это Boolean, а не Integer...

Цитата
И в любом случае строчка (mod 2) невыносимо режет глаз...
Не забыл добавить слово МНЕ? Ибо для меня, например, это совершенно нормальная форма записи...
Zzzz...
У меня вот так получилось

uses crt;
var
a:array[1..25] of longint;
b,c,i,kn,kp:integer;
begin
randomize;
clrscr;
b:=-40;
c:=40;
for i:=1 to 25 do
begin
a[i]:=b+random(c-b+1);
write(a[i],' ');
if (a[i] mod 2 <>0) and (a[i]<>0) then
begin
kn:=kn+1;
end;
if a[i] >0 then
begin
kp:=kp+1;
end;
end;
writeln('/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/');
writeln(kp,' ',kn);

end.

inomarka
Спасибо всем огромное, good.gif а особенно volvo, потому как именно он объяснил все "с чувством, с толком, с расстановкой" и понятным для меня языком)))
А насчет mod... Вот я учусь информатике 1ый год и не знаю пока ничего лучше и удобнее)) потому как не проходила)) И для меня в новинку было узнать, что mod не работает с отрицательнми. Конечно, потом вдумалась, и дошло..
А вообще, как я поняла, чем больше знаешь какую-то тему(относится ко всем "отраслям")), тем сложнее хочешь решить простые задачи wink.gif
мисс_граффити
Цитата(TarasBer @ 12.02.2007 18:56) *

И с отрицательными числами неправильно работает...

что я неправильно делаю?Нажмите для просмотра прикрепленного файла
volvo
Юля,
var i: integer;
begin
i := -15;
writeln(i mod 2);
end.

что выдаст? А если будешь сравнивать с 1-цей, а не с нулем?
мисс_граффити
-1.
а что должен? 1?
ведь остаток - это разница с ближайшим делящимся без остатка меньшим числом, если я не ошибаюсь...
(13 mod 6 = 13-12=1;
-15 mod 2 = -16-(-15)=-1)
Цитата
А если будешь сравнивать с 1-цей, а не с нулем?

А зачем?
Я говорю про то, что в приведенном в сообщении #2 виде оно работает и с отрицательными.

Если бы было "посчитать количество чисел, которые при делении на 7 дают остаток 4" - другое дело. Тогда - по модулю...
Хотя не уверена, правильно ли это с т.з. математики.
TarasBer
Цитата(мисс_граффити @ 12.02.2007 23:48) *

-1.
а что должен? 1?
ведь остаток - это разница с ближайшим делящимся без остатка меньшим числом, если я не ошибаюсь...


Остаток от деления на эн всегда нестрого больше нуля и строго меньше эн.
Цитата

(13 mod 6 = 13-12=1;
-15 mod 2 = -16-(-15)=-1)

Почему вы переставили уменьшаемое и вычитаемое?
мисс_граффити
Цитата
Почему вы переставили уменьшаемое и вычитаемое?

не знаю.
действительно, разница с меньшим всегда положительная...

надо все-таки найти точное определение остатка для отрицательных чисел.
TarasBer
Цитата(мисс_граффити @ 13.02.2007 0:12) *

не знаю.
действительно, разница с меньшим всегда положительная...

надо все-таки найти точное определение остатка для отрицательных чисел.

Дык это ж и было точное определение - само число минус ближайшее снизу кратное.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.