IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Найти количество нечетных чисел
inomarka
сообщение 11.02.2007 18:23
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский

Репутация: -  0  +


Дан массив 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 шт. чисел, а выводится намного больше. почему? я вроде все правильно сделала.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 18)
volvo
сообщение 11.02.2007 18:33
Сообщение #2


Гость






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


Добавлено через 1 мин.
Цитата
мне должно выводиться 25 шт. чисел, а выводится намного больше. почему?
Потому, что ты выводишь и при генерации чисел, и после нее, получается - массив выводится 2 раза...
 К началу страницы 
+ Ответить 
TarasBer
сообщение 11.02.2007 19:21
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(volvo @ 11.02.2007 18:33) *

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


Почему не
if not Odd(A) = 0 then 
?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 11.02.2007 19:30
Сообщение #4


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Потому что odd есть в Паскале, а вот насчет остальных языков я под сомнением...

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

прочитать при ознакомлении с кодом проще и быстрее...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.02.2007 19:47
Сообщение #5


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
Почему не
if not Odd(A) = 0
then
?

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

blum.gif

Сообщение отредактировано: мисс_граффити - 11.02.2007 19:48


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
inomarka
сообщение 11.02.2007 19:56
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский

Репутация: -  0  +


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


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.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.02.2007 20:03
Сообщение #7


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


inc(x) 

или
x:=x+1 

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

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

Сообщение отредактировано: мисс_граффити - 11.02.2007 20:04


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
inomarka
сообщение 12.02.2007 17:46
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский

Репутация: -  0  +


Цитата(мисс_граффити @ 11.02.2007 20:03) *

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

А поподробней? Плизз.. Я туплю.. Что я спутала?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.02.2007 18:07
Сообщение #9


Гость






Цитата(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
сообщение 12.02.2007 18:56
Сообщение #10


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата

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

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.02.2007 19:41
Сообщение #11


Гость






Цитата
if (odd(a) = 0)
вообще НЕ работает... По крайней мере не должен... Odd - это Boolean, а не Integer...

Цитата
И в любом случае строчка (mod 2) невыносимо режет глаз...
Не забыл добавить слово МНЕ? Ибо для меня, например, это совершенно нормальная форма записи...
 К началу страницы 
+ Ответить 
Zzzz...
сообщение 12.02.2007 20:09
Сообщение #12


///
**

Группа: Пользователи
Сообщений: 78
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


У меня вот так получилось

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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
inomarka
сообщение 12.02.2007 20:43
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский

Репутация: -  0  +


Спасибо всем огромное, good.gif а особенно volvo, потому как именно он объяснил все "с чувством, с толком, с расстановкой" и понятным для меня языком)))
А насчет mod... Вот я учусь информатике 1ый год и не знаю пока ничего лучше и удобнее)) потому как не проходила)) И для меня в новинку было узнать, что mod не работает с отрицательнми. Конечно, потом вдумалась, и дошло..
А вообще, как я поняла, чем больше знаешь какую-то тему(относится ко всем "отраслям")), тем сложнее хочешь решить простые задачи wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 12.02.2007 22:11
Сообщение #14


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(TarasBer @ 12.02.2007 18:56) *

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

что я неправильно делаю?Прикрепленное изображение


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.02.2007 23:26
Сообщение #15


Гость






Юля,
var i: integer;
begin
i := -15;
writeln(i mod 2);
end.

что выдаст? А если будешь сравнивать с 1-цей, а не с нулем?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 12.02.2007 23:48
Сообщение #16


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

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

Если бы было "посчитать количество чисел, которые при делении на 7 дают остаток 4" - другое дело. Тогда - по модулю...
Хотя не уверена, правильно ли это с т.з. математики.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 12.02.2007 23:59
Сообщение #17


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(мисс_граффити @ 12.02.2007 23:48) *

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


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

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

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 13.02.2007 0:12
Сообщение #18


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

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

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

Сообщение отредактировано: мисс_граффити - 13.02.2007 0:13


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 13.02.2007 0:16
Сообщение #19


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(мисс_граффити @ 13.02.2007 0:12) *

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

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

Дык это ж и было точное определение - само число минус ближайшее снизу кратное.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 17:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"